@welshman/signer 0.0.1 → 0.0.3
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/build/src/index.cjs +22 -0
- package/build/src/index.cjs.map +1 -0
- package/build/src/index.d.ts +4 -4
- package/build/src/index.mjs +4 -4
- package/build/src/nip59.cjs +76 -0
- package/build/src/nip59.cjs.map +1 -0
- package/build/src/nip59.d.ts +26 -0
- package/build/src/nip59.mjs +66 -0
- package/build/src/nip59.mjs.map +1 -0
- package/build/src/signers/nip01.cjs +24 -0
- package/build/src/signers/nip01.cjs.map +1 -0
- package/build/src/signers/{secret.d.ts → nip01.d.ts} +6 -5
- package/build/src/signers/{secret.mjs → nip01.mjs} +6 -5
- package/build/src/signers/nip01.mjs.map +1 -0
- package/build/src/signers/nip07.cjs +50 -0
- package/build/src/signers/nip07.cjs.map +1 -0
- package/build/src/signers/{extension.d.ts → nip07.d.ts} +6 -6
- package/build/src/signers/nip07.mjs +45 -0
- package/build/src/signers/nip07.mjs.map +1 -0
- package/build/src/signers/nip46.cjs +157 -0
- package/build/src/signers/nip46.cjs.map +1 -0
- package/build/src/signers/nip46.d.ts +48 -0
- package/build/src/signers/nip46.mjs +152 -0
- package/build/src/signers/nip46.mjs.map +1 -0
- package/build/src/util.cjs +42 -0
- package/build/src/util.cjs.map +1 -0
- package/build/src/util.d.ts +20 -8
- package/build/src/util.mjs +4 -3
- package/build/src/util.mjs.map +1 -1
- package/package.json +5 -4
- package/build/src/signers/connect.d.ts +0 -47
- package/build/src/signers/connect.mjs +0 -152
- package/build/src/signers/connect.mjs.map +0 -1
- package/build/src/signers/extension.mjs +0 -48
- package/build/src/signers/extension.mjs.map +0 -1
- package/build/src/signers/secret.mjs.map +0 -1
- package/build/src/wrapper.d.ts +0 -21
- package/build/src/wrapper.mjs +0 -56
- package/build/src/wrapper.mjs.map +0 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Emitter } from "@welshman/lib";
|
|
2
|
+
import { StampedEvent } from "@welshman/util";
|
|
3
|
+
import { Subscription } from "@welshman/net";
|
|
4
|
+
import { ISigner } from '../util';
|
|
5
|
+
export type Algorithm = "nip04" | "nip44";
|
|
6
|
+
export type Nip46Handler = {
|
|
7
|
+
relays: string[];
|
|
8
|
+
pubkey?: string;
|
|
9
|
+
domain?: string;
|
|
10
|
+
};
|
|
11
|
+
export type Nip46Response = {
|
|
12
|
+
id: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
result?: string;
|
|
15
|
+
};
|
|
16
|
+
export declare class Nip46Broker extends Emitter {
|
|
17
|
+
#private;
|
|
18
|
+
readonly pubkey: string;
|
|
19
|
+
readonly secret: string;
|
|
20
|
+
readonly handler: Nip46Handler;
|
|
21
|
+
readonly algorithm: Algorithm;
|
|
22
|
+
static get(pubkey: string, secret: string, handler: Nip46Handler, algorithm?: Algorithm): Nip46Broker;
|
|
23
|
+
constructor(pubkey: string, secret: string, handler: Nip46Handler, algorithm: Algorithm);
|
|
24
|
+
subscribe: () => Subscription;
|
|
25
|
+
request: (method: string, params: string[], admin?: boolean) => Promise<string>;
|
|
26
|
+
createAccount: (username: string, perms?: string) => Promise<string>;
|
|
27
|
+
connect: (token?: string, perms?: string) => Promise<boolean>;
|
|
28
|
+
signEvent: (event: StampedEvent) => Promise<any>;
|
|
29
|
+
nip04Encrypt: (pk: string, message: string) => Promise<string>;
|
|
30
|
+
nip04Decrypt: (pk: string, message: string) => Promise<string>;
|
|
31
|
+
nip44Encrypt: (pk: string, message: string) => Promise<string>;
|
|
32
|
+
nip44Decrypt: (pk: string, message: string) => Promise<string>;
|
|
33
|
+
teardown: () => void;
|
|
34
|
+
}
|
|
35
|
+
export declare class Nip46Signer implements ISigner {
|
|
36
|
+
private broker;
|
|
37
|
+
constructor(broker: Nip46Broker);
|
|
38
|
+
getPubkey: () => Promise<string>;
|
|
39
|
+
sign: (template: StampedEvent) => Promise<any>;
|
|
40
|
+
nip04: {
|
|
41
|
+
encrypt: (pk: string, message: string) => Promise<string>;
|
|
42
|
+
decrypt: (pk: string, message: string) => Promise<string>;
|
|
43
|
+
};
|
|
44
|
+
nip44: {
|
|
45
|
+
encrypt: (pk: string, message: string) => Promise<string>;
|
|
46
|
+
decrypt: (pk: string, message: string) => Promise<string>;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
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");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
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
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _Nip46Broker_sub, _Nip46Broker_signer, _Nip46Broker_ready, _Nip46Broker_closed, _Nip46Broker_connectResult;
|
|
13
|
+
import { finalizeEvent, getPublicKey } from "nostr-tools";
|
|
14
|
+
import { hexToBytes } from '@noble/hashes/utils';
|
|
15
|
+
import { Emitter, tryCatch, randomId, sleep, equals, now } from "@welshman/lib";
|
|
16
|
+
import { createEvent, NOSTR_CONNECT } from "@welshman/util";
|
|
17
|
+
import { subscribe, publish } from "@welshman/net";
|
|
18
|
+
import { nip04, nip44, decrypt, hash, own } from "../util.mjs";
|
|
19
|
+
import { Nip01Signer } from "./nip01.mjs";
|
|
20
|
+
let singleton;
|
|
21
|
+
export class Nip46Broker extends Emitter {
|
|
22
|
+
static get(pubkey, secret, handler, algorithm = "nip04") {
|
|
23
|
+
if ((singleton === null || singleton === void 0 ? void 0 : singleton.pubkey) !== pubkey ||
|
|
24
|
+
(singleton === null || singleton === void 0 ? void 0 : singleton.secret) !== secret ||
|
|
25
|
+
!equals(singleton === null || singleton === void 0 ? void 0 : singleton.handler, handler) ||
|
|
26
|
+
(singleton === null || singleton === void 0 ? void 0 : singleton.algorithm) !== algorithm) {
|
|
27
|
+
singleton === null || singleton === void 0 ? void 0 : singleton.teardown();
|
|
28
|
+
singleton = new Nip46Broker(pubkey, secret, handler, algorithm);
|
|
29
|
+
}
|
|
30
|
+
return singleton;
|
|
31
|
+
}
|
|
32
|
+
constructor(pubkey, secret, handler, algorithm) {
|
|
33
|
+
super();
|
|
34
|
+
this.pubkey = pubkey;
|
|
35
|
+
this.secret = secret;
|
|
36
|
+
this.handler = handler;
|
|
37
|
+
this.algorithm = algorithm;
|
|
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
|
+
this.subscribe = () => {
|
|
44
|
+
const sub = subscribe({
|
|
45
|
+
relays: this.handler.relays,
|
|
46
|
+
filters: [
|
|
47
|
+
{
|
|
48
|
+
since: now() - 30,
|
|
49
|
+
kinds: [NOSTR_CONNECT],
|
|
50
|
+
"#p": [getPublicKey(hexToBytes(this.secret))],
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
});
|
|
54
|
+
sub.emitter.on("event", async (url, e) => {
|
|
55
|
+
const json = await decrypt(__classPrivateFieldGet(this, _Nip46Broker_signer, "f"), e.pubkey, e.content);
|
|
56
|
+
const res = await tryCatch(() => JSON.parse(json));
|
|
57
|
+
if (!res.id) {
|
|
58
|
+
console.error(`Invalid nostr-connect response: ${json}`);
|
|
59
|
+
}
|
|
60
|
+
if (res.result === "auth_url") {
|
|
61
|
+
this.emit(`auth-${res.id}`, res);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
this.emit(`res-${res.id}`, res);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
sub.emitter.on("complete", () => {
|
|
68
|
+
if (!__classPrivateFieldGet(this, _Nip46Broker_closed, "f")) {
|
|
69
|
+
__classPrivateFieldSet(this, _Nip46Broker_sub, this.subscribe(), "f");
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return sub;
|
|
73
|
+
};
|
|
74
|
+
this.request = async (method, params, admin = false) => {
|
|
75
|
+
// nsecbunker has a race condition
|
|
76
|
+
await __classPrivateFieldGet(this, _Nip46Broker_ready, "f");
|
|
77
|
+
const id = randomId();
|
|
78
|
+
const pubkey = admin ? this.handler.pubkey : this.pubkey;
|
|
79
|
+
const payload = JSON.stringify({ id, method, params });
|
|
80
|
+
const crypt = this.algorithm === "nip04" ? nip04 : nip44;
|
|
81
|
+
const content = await crypt.encrypt(pubkey, this.secret, payload);
|
|
82
|
+
const template = createEvent(NOSTR_CONNECT, { content, tags: [["p", pubkey]] });
|
|
83
|
+
const event = finalizeEvent(template, this.secret);
|
|
84
|
+
publish({ event, relays: this.handler.relays });
|
|
85
|
+
this.once(`auth-${id}`, res => {
|
|
86
|
+
window.open(res.error, "Coracle", "width=600,height=800,popup=yes");
|
|
87
|
+
});
|
|
88
|
+
return new Promise((resolve, reject) => {
|
|
89
|
+
this.once(`res-${id}`, ({ result, error }) => {
|
|
90
|
+
if (error) {
|
|
91
|
+
reject(error);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
resolve(result);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
this.createAccount = (username, perms = "") => {
|
|
100
|
+
if (!this.handler.domain) {
|
|
101
|
+
throw new Error("Unable to create an account without a handler domain");
|
|
102
|
+
}
|
|
103
|
+
return this.request("create_account", [username, this.handler.domain, "", perms], true);
|
|
104
|
+
};
|
|
105
|
+
this.connect = async (token = "", perms = "") => {
|
|
106
|
+
if (!__classPrivateFieldGet(this, _Nip46Broker_connectResult, "f")) {
|
|
107
|
+
const params = [this.pubkey, token, perms];
|
|
108
|
+
__classPrivateFieldSet(this, _Nip46Broker_connectResult, await this.request("connect", params), "f");
|
|
109
|
+
}
|
|
110
|
+
return __classPrivateFieldGet(this, _Nip46Broker_connectResult, "f") === "ack";
|
|
111
|
+
};
|
|
112
|
+
this.signEvent = async (event) => {
|
|
113
|
+
return JSON.parse(await this.request("sign_event", [JSON.stringify(event)]));
|
|
114
|
+
};
|
|
115
|
+
this.nip04Encrypt = (pk, message) => {
|
|
116
|
+
return this.request("nip04_encrypt", [pk, message]);
|
|
117
|
+
};
|
|
118
|
+
this.nip04Decrypt = (pk, message) => {
|
|
119
|
+
return this.request("nip04_decrypt", [pk, message]);
|
|
120
|
+
};
|
|
121
|
+
this.nip44Encrypt = (pk, message) => {
|
|
122
|
+
return this.request("nip44_encrypt", [pk, message]);
|
|
123
|
+
};
|
|
124
|
+
this.nip44Decrypt = (pk, message) => {
|
|
125
|
+
return this.request("nip44_decrypt", [pk, message]);
|
|
126
|
+
};
|
|
127
|
+
this.teardown = () => {
|
|
128
|
+
var _a;
|
|
129
|
+
__classPrivateFieldSet(this, _Nip46Broker_closed, true, "f");
|
|
130
|
+
(_a = __classPrivateFieldGet(this, _Nip46Broker_sub, "f")) === null || _a === void 0 ? void 0 : _a.close();
|
|
131
|
+
};
|
|
132
|
+
__classPrivateFieldSet(this, _Nip46Broker_signer, new Nip01Signer(secret), "f");
|
|
133
|
+
__classPrivateFieldSet(this, _Nip46Broker_sub, this.subscribe(), "f");
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
_Nip46Broker_sub = new WeakMap(), _Nip46Broker_signer = new WeakMap(), _Nip46Broker_ready = new WeakMap(), _Nip46Broker_closed = new WeakMap(), _Nip46Broker_connectResult = new WeakMap();
|
|
137
|
+
export class Nip46Signer {
|
|
138
|
+
constructor(broker) {
|
|
139
|
+
this.broker = broker;
|
|
140
|
+
this.getPubkey = async () => this.broker.pubkey;
|
|
141
|
+
this.sign = (template) => this.broker.signEvent(hash(own(template, this.broker.pubkey)));
|
|
142
|
+
this.nip04 = {
|
|
143
|
+
encrypt: this.broker.nip04Encrypt,
|
|
144
|
+
decrypt: this.broker.nip04Decrypt,
|
|
145
|
+
};
|
|
146
|
+
this.nip44 = {
|
|
147
|
+
encrypt: this.broker.nip44Encrypt,
|
|
148
|
+
decrypt: this.broker.nip44Decrypt,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# 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,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decrypt = exports.nip44 = exports.nip04 = exports.sign = exports.hash = exports.own = exports.stamp = 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 stamp = (event, created_at = (0, lib_1.now)()) => ({ ...event, created_at });
|
|
17
|
+
exports.stamp = stamp;
|
|
18
|
+
const own = (event, pubkey) => ({ ...event, pubkey });
|
|
19
|
+
exports.own = own;
|
|
20
|
+
const hash = (event) => ({ ...event, id: (0, exports.getHash)(event) });
|
|
21
|
+
exports.hash = hash;
|
|
22
|
+
const sign = (event, secret) => ({ ...event, sig: (0, exports.getSig)(event, secret) });
|
|
23
|
+
exports.sign = sign;
|
|
24
|
+
exports.nip04 = {
|
|
25
|
+
detect: (m) => m.includes("?iv="),
|
|
26
|
+
encrypt: (pubkey, secret, m) => nostr_tools_1.nip04.encrypt(secret, pubkey, m),
|
|
27
|
+
decrypt: (pubkey, secret, m) => nostr_tools_1.nip04.decrypt(secret, pubkey, m),
|
|
28
|
+
};
|
|
29
|
+
exports.nip44 = {
|
|
30
|
+
getSharedSecret: (0, lib_1.cached)({
|
|
31
|
+
maxSize: 10000,
|
|
32
|
+
getKey: ([secret, pubkey]) => [secret, pubkey].join(":"),
|
|
33
|
+
getValue: ([secret, pubkey]) => nostr_tools_1.nip44.v2.utils.getConversationKey((0, utils_1.hexToBytes)(secret), pubkey),
|
|
34
|
+
}),
|
|
35
|
+
encrypt: (pubkey, secret, m) => nostr_tools_1.nip44.v2.encrypt(m, exports.nip44.getSharedSecret(secret, pubkey)),
|
|
36
|
+
decrypt: (pubkey, secret, m) => nostr_tools_1.nip44.v2.decrypt(m, exports.nip44.getSharedSecret(secret, pubkey)),
|
|
37
|
+
};
|
|
38
|
+
const decrypt = async (signer, pubkey, message) => exports.nip04.detect(message)
|
|
39
|
+
? signer.nip04.decrypt(pubkey, message)
|
|
40
|
+
: signer.nip44.decrypt(pubkey, message);
|
|
41
|
+
exports.decrypt = decrypt;
|
|
42
|
+
//# sourceMappingURL=util.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.cjs","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
|
package/build/src/util.d.ts
CHANGED
|
@@ -1,21 +1,34 @@
|
|
|
1
|
-
import { SignedEvent, HashedEvent, EventTemplate, OwnedEvent } from '@welshman/util';
|
|
2
|
-
export declare const
|
|
1
|
+
import { SignedEvent, HashedEvent, EventTemplate, StampedEvent, OwnedEvent } from '@welshman/util';
|
|
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;
|
|
6
|
-
export declare const
|
|
6
|
+
export declare const stamp: (event: EventTemplate, created_at?: number) => {
|
|
7
|
+
created_at: number;
|
|
8
|
+
tags: string[][];
|
|
9
|
+
content: string;
|
|
10
|
+
kind: number;
|
|
11
|
+
};
|
|
12
|
+
export declare const own: (event: StampedEvent, pubkey: string) => {
|
|
7
13
|
pubkey: string;
|
|
14
|
+
tags: string[][];
|
|
15
|
+
content: string;
|
|
8
16
|
kind: number;
|
|
17
|
+
created_at: number;
|
|
18
|
+
};
|
|
19
|
+
export declare const hash: (event: OwnedEvent) => {
|
|
20
|
+
id: string;
|
|
9
21
|
tags: string[][];
|
|
10
22
|
content: string;
|
|
23
|
+
kind: number;
|
|
11
24
|
created_at: number;
|
|
25
|
+
pubkey: string;
|
|
12
26
|
};
|
|
13
|
-
export declare const hash: (event: OwnedEvent) => HashedEvent;
|
|
14
27
|
export declare const sign: (event: HashedEvent, secret: string) => {
|
|
15
28
|
sig: string;
|
|
16
|
-
kind: number;
|
|
17
29
|
tags: string[][];
|
|
18
30
|
content: string;
|
|
31
|
+
kind: number;
|
|
19
32
|
created_at: number;
|
|
20
33
|
pubkey: string;
|
|
21
34
|
id: string;
|
|
@@ -35,7 +48,7 @@ export declare const nip44: {
|
|
|
35
48
|
encrypt: (pubkey: string, secret: string, m: string) => string;
|
|
36
49
|
decrypt: (pubkey: string, secret: string, m: string) => string;
|
|
37
50
|
};
|
|
38
|
-
export type Sign = (event:
|
|
51
|
+
export type Sign = (event: StampedEvent) => Promise<SignedEvent>;
|
|
39
52
|
export type Encrypt = (pubkey: string, message: string) => Promise<string>;
|
|
40
53
|
export type Decrypt = (pubkey: string, message: string) => Promise<string>;
|
|
41
54
|
export type EncryptionImplementation = {
|
|
@@ -43,10 +56,9 @@ export type EncryptionImplementation = {
|
|
|
43
56
|
decrypt: Decrypt;
|
|
44
57
|
};
|
|
45
58
|
export interface ISigner {
|
|
46
|
-
isEnabled: () => boolean;
|
|
47
|
-
getPubkey: () => Promise<string>;
|
|
48
59
|
sign: Sign;
|
|
49
60
|
nip04: EncryptionImplementation;
|
|
50
61
|
nip44: EncryptionImplementation;
|
|
62
|
+
getPubkey: () => Promise<string>;
|
|
51
63
|
}
|
|
52
64
|
export declare const decrypt: (signer: ISigner, pubkey: string, message: string) => Promise<string>;
|
package/build/src/util.mjs
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
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
|
-
import { cached } from '@welshman/lib';
|
|
5
|
-
export const
|
|
4
|
+
import { cached, now } from '@welshman/lib';
|
|
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));
|
|
9
|
-
export const
|
|
9
|
+
export const stamp = (event, created_at = now()) => ({ ...event, created_at });
|
|
10
|
+
export const own = (event, pubkey) => ({ ...event, pubkey });
|
|
10
11
|
export const hash = (event) => ({ ...event, id: getHash(event) });
|
|
11
12
|
export const sign = (event, secret) => ({ ...event, sig: getSig(event, secret) });
|
|
12
13
|
export const nip04 = {
|
package/build/src/util.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.mjs","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"OAAO,EAAC,OAAO,EAAC,MAAM,yBAAyB;OACxC,EAAC,UAAU,EAAE,UAAU,EAAC,MAAM,qBAAqB;OACnD,EAAC,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa;OAChG,EAAC,MAAM,EAAC,MAAM,eAAe;
|
|
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.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"author": "hodlbod",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "A nostr signer implemenation supporting several login methods.",
|
|
@@ -31,8 +31,9 @@
|
|
|
31
31
|
"typescript": "~5.1.6"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@welshman/lib": "
|
|
35
|
-
"@welshman/net": "
|
|
36
|
-
"@welshman/util": "
|
|
34
|
+
"@welshman/lib": "0.0.15",
|
|
35
|
+
"@welshman/net": "0.0.19",
|
|
36
|
+
"@welshman/util": "0.0.27",
|
|
37
|
+
"nostr-tools": "^2.7.2"
|
|
37
38
|
}
|
|
38
39
|
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { Emitter } from "@welshman/lib";
|
|
2
|
-
import { EventTemplate } from "@welshman/util";
|
|
3
|
-
import { Subscription } from "@welshman/net";
|
|
4
|
-
import { ISigner } from '../util';
|
|
5
|
-
export type NostrConnectHandler = {
|
|
6
|
-
pubkey: string;
|
|
7
|
-
relays: string[];
|
|
8
|
-
domain?: string;
|
|
9
|
-
};
|
|
10
|
-
export type ConnectResponse = {
|
|
11
|
-
id: string;
|
|
12
|
-
error?: string;
|
|
13
|
-
result?: string;
|
|
14
|
-
};
|
|
15
|
-
export declare class NostrConnectBroker extends Emitter {
|
|
16
|
-
#private;
|
|
17
|
-
readonly pubkey: string;
|
|
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);
|
|
22
|
-
subscribe(): Subscription;
|
|
23
|
-
request(method: string, params: string[], admin?: boolean): Promise<string>;
|
|
24
|
-
createAccount(username: string): Promise<string>;
|
|
25
|
-
connect(token?: string): Promise<boolean>;
|
|
26
|
-
signEvent(event: EventTemplate): Promise<any>;
|
|
27
|
-
nip04Encrypt(pk: string, message: string): Promise<string>;
|
|
28
|
-
nip04Decrypt(pk: string, message: string): Promise<string>;
|
|
29
|
-
nip44Encrypt(pk: string, message: string): Promise<string>;
|
|
30
|
-
nip44Decrypt(pk: string, message: string): Promise<string>;
|
|
31
|
-
teardown(): void;
|
|
32
|
-
}
|
|
33
|
-
export declare class ConnectSigner implements ISigner {
|
|
34
|
-
private broker;
|
|
35
|
-
constructor(broker: NostrConnectBroker);
|
|
36
|
-
isEnabled: () => boolean;
|
|
37
|
-
getPubkey: () => Promise<string>;
|
|
38
|
-
sign: (event: EventTemplate) => Promise<any>;
|
|
39
|
-
nip04: {
|
|
40
|
-
encrypt: (pk: string, message: string) => Promise<string>;
|
|
41
|
-
decrypt: (pk: string, message: string) => Promise<string>;
|
|
42
|
-
};
|
|
43
|
-
nip44: {
|
|
44
|
-
encrypt: (pk: string, message: string) => Promise<string>;
|
|
45
|
-
decrypt: (pk: string, message: string) => Promise<string>;
|
|
46
|
-
};
|
|
47
|
-
}
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
-
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");
|
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
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
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _NostrConnectBroker_sub, _NostrConnectBroker_signer, _NostrConnectBroker_ready, _NostrConnectBroker_closed, _NostrConnectBroker_connectResult;
|
|
13
|
-
import { nip04, finalizeEvent, getPublicKey } from "nostr-tools";
|
|
14
|
-
import { hexToBytes } from '@noble/hashes/utils';
|
|
15
|
-
import { Emitter, tryCatch, randomId, sleep, equals, now } from "@welshman/lib";
|
|
16
|
-
import { createEvent, NOSTR_CONNECT } from "@welshman/util";
|
|
17
|
-
import { subscribe, publish } from "@welshman/net";
|
|
18
|
-
import { decrypt } from "../util.mjs";
|
|
19
|
-
import { SecretSigner } from "./secret.mjs";
|
|
20
|
-
let singleton;
|
|
21
|
-
// FIXME set the full list of requested perms
|
|
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 {
|
|
24
|
-
static get(pubkey, secret, handler) {
|
|
25
|
-
if ((singleton === null || singleton === void 0 ? void 0 : singleton.pubkey) !== pubkey ||
|
|
26
|
-
(singleton === null || singleton === void 0 ? void 0 : singleton.secret) !== secret ||
|
|
27
|
-
!equals(singleton === null || singleton === void 0 ? void 0 : singleton.handler, handler)) {
|
|
28
|
-
singleton === null || singleton === void 0 ? void 0 : singleton.teardown();
|
|
29
|
-
singleton = new NostrConnectBroker(pubkey, secret, handler);
|
|
30
|
-
}
|
|
31
|
-
return singleton;
|
|
32
|
-
}
|
|
33
|
-
constructor(pubkey, secret, handler) {
|
|
34
|
-
super();
|
|
35
|
-
this.pubkey = pubkey;
|
|
36
|
-
this.secret = secret;
|
|
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");
|
|
45
|
-
}
|
|
46
|
-
subscribe() {
|
|
47
|
-
const sub = subscribe({
|
|
48
|
-
relays: this.handler.relays,
|
|
49
|
-
filters: [
|
|
50
|
-
{
|
|
51
|
-
since: now() - 30,
|
|
52
|
-
kinds: [NOSTR_CONNECT],
|
|
53
|
-
"#p": [getPublicKey(hexToBytes(this.secret))],
|
|
54
|
-
},
|
|
55
|
-
],
|
|
56
|
-
});
|
|
57
|
-
sub.emitter.on("event", async (url, e) => {
|
|
58
|
-
const json = await decrypt(__classPrivateFieldGet(this, _NostrConnectBroker_signer, "f"), e.pubkey, e.content);
|
|
59
|
-
const res = await tryCatch(() => JSON.parse(json));
|
|
60
|
-
if (!res.id) {
|
|
61
|
-
console.error(`Invalid nostr-connect response: ${json}`);
|
|
62
|
-
}
|
|
63
|
-
if (res.result === "auth_url") {
|
|
64
|
-
this.emit(`auth-${res.id}`, res);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
this.emit(`res-${res.id}`, res);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
sub.emitter.on("complete", () => {
|
|
71
|
-
if (!__classPrivateFieldGet(this, _NostrConnectBroker_closed, "f")) {
|
|
72
|
-
__classPrivateFieldSet(this, _NostrConnectBroker_sub, this.subscribe(), "f");
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
return sub;
|
|
76
|
-
}
|
|
77
|
-
async request(method, params, admin = false) {
|
|
78
|
-
// nsecbunker has a race condition
|
|
79
|
-
await __classPrivateFieldGet(this, _NostrConnectBroker_ready, "f");
|
|
80
|
-
const id = randomId();
|
|
81
|
-
const pubkey = admin ? this.handler.pubkey : this.pubkey;
|
|
82
|
-
const payload = JSON.stringify({ id, method, params });
|
|
83
|
-
const content = await nip04.encrypt(this.secret, pubkey, payload);
|
|
84
|
-
const template = createEvent(NOSTR_CONNECT, { content, tags: [["p", pubkey]] });
|
|
85
|
-
const event = finalizeEvent(template, this.secret);
|
|
86
|
-
publish({ event, relays: this.handler.relays });
|
|
87
|
-
this.once(`auth-${id}`, res => {
|
|
88
|
-
window.open(res.result, "Coracle", "width=600,height=800,popup=yes");
|
|
89
|
-
});
|
|
90
|
-
return new Promise((resolve, reject) => {
|
|
91
|
-
this.once(`res-${id}`, ({ result, error }) => {
|
|
92
|
-
if (error) {
|
|
93
|
-
reject(error);
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
resolve(result);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
createAccount(username) {
|
|
102
|
-
if (!this.handler.domain) {
|
|
103
|
-
throw new Error("Unable to create an account without a handler domain");
|
|
104
|
-
}
|
|
105
|
-
return this.request("create_account", [username, this.handler.domain, "", Perms], true);
|
|
106
|
-
}
|
|
107
|
-
async connect(token = "") {
|
|
108
|
-
if (!__classPrivateFieldGet(this, _NostrConnectBroker_connectResult, "f")) {
|
|
109
|
-
const params = [this.pubkey, token, Perms];
|
|
110
|
-
__classPrivateFieldSet(this, _NostrConnectBroker_connectResult, await this.request("connect", params), "f");
|
|
111
|
-
}
|
|
112
|
-
return __classPrivateFieldGet(this, _NostrConnectBroker_connectResult, "f") === "ack";
|
|
113
|
-
}
|
|
114
|
-
async signEvent(event) {
|
|
115
|
-
return JSON.parse(await this.request("sign_event", [JSON.stringify(event)]));
|
|
116
|
-
}
|
|
117
|
-
nip04Encrypt(pk, message) {
|
|
118
|
-
return this.request("nip04_encrypt", [pk, message]);
|
|
119
|
-
}
|
|
120
|
-
nip04Decrypt(pk, message) {
|
|
121
|
-
return this.request("nip04_decrypt", [pk, message]);
|
|
122
|
-
}
|
|
123
|
-
nip44Encrypt(pk, message) {
|
|
124
|
-
return this.request("nip44_encrypt", [pk, message]);
|
|
125
|
-
}
|
|
126
|
-
nip44Decrypt(pk, message) {
|
|
127
|
-
return this.request("nip44_decrypt", [pk, message]);
|
|
128
|
-
}
|
|
129
|
-
teardown() {
|
|
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();
|
|
133
|
-
}
|
|
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 {
|
|
137
|
-
constructor(broker) {
|
|
138
|
-
this.broker = broker;
|
|
139
|
-
this.isEnabled = () => true;
|
|
140
|
-
this.getPubkey = async () => this.broker.pubkey;
|
|
141
|
-
this.sign = (event) => this.broker.signEvent(event);
|
|
142
|
-
this.nip04 = {
|
|
143
|
-
encrypt: this.broker.nip04Encrypt,
|
|
144
|
-
decrypt: this.broker.nip04Decrypt,
|
|
145
|
-
};
|
|
146
|
-
this.nip44 = {
|
|
147
|
-
encrypt: this.broker.nip44Encrypt,
|
|
148
|
-
decrypt: this.broker.nip44Decrypt,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
//# sourceMappingURL=connect.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connect.mjs","sourceRoot":"","sources":["../../../src/signers/connect.ts"],"names":[],"mappings":";;;;;;;;;;;;OAAO,EAAC,KAAK,EAAE,aAAa,EAAE,YAAY,EAAC,MAAM,aAAa;OACvD,EAAC,UAAU,EAAC,MAAM,qBAAqB;OACvC,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAC,MAAM,eAAe;OACtE,EAAC,WAAW,EAA+B,aAAa,EAAC,MAAM,gBAAgB;OAC/E,EAAC,SAAS,EAAE,OAAO,EAAe,MAAM,eAAe;OACvD,EAAU,OAAO,EAAC;OAClB,EAAC,YAAY,EAAC;AAcrB,IAAI,SAA6B,CAAA;AAEjC,6CAA6C;AAC7C,MAAM,KAAK,GACT,8FAA8F,CAAA;AAEhG,MAAM,OAAO,kBAAmB,SAAQ,OAAO;IAO7C,MAAM,CAAC,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,OAA4B;QACrE,IACE,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,MAAK,MAAM;YAC5B,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,MAAK,MAAM;YAC5B,CAAC,MAAM,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,EAAE,OAAO,CAAC,EACpC;YACA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,EAAE,CAAA;YACrB,SAAS,GAAG,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;SAC5D;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,YACW,MAAc,EACd,MAAc,EACd,OAA4B;QAErC,KAAK,EAAE,CAAA;QAJE,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;QACd,YAAO,GAAP,OAAO,CAAqB;QAtBvC,0CAAkB;QAClB,6CAAgB;QAChB,oCAAS,KAAK,CAAC,GAAG,CAAC,EAAA;QACnB,qCAAU,KAAK,EAAA;QACf,oDAAmB;QAsBjB,uBAAA,IAAI,8BAAW,IAAI,YAAY,CAAC,MAAM,CAAC,MAAA,CAAA;QACvC,uBAAA,IAAI,2BAAQ,IAAI,CAAC,SAAS,EAAE,MAAA,CAAA;IAC9B,CAAC;IAED,SAAS;QACP,MAAM,GAAG,GAAG,SAAS,CAAC;YACpB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;oBACjB,KAAK,EAAE,CAAC,aAAa,CAAC;oBACtB,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;iBAC9C;aACF;SACF,CAAC,CAAA;QAEF,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,CAAe,EAAE,EAAE;YAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,uBAAA,IAAI,kCAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;YAC7D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;YAElD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;gBACX,OAAO,CAAC,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAA;aACzD;YAED,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE;gBAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;aACjC;iBAAM;gBACL,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;aAChC;QACH,CAAC,CAAC,CAAA;QAEF,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;YAC9B,IAAI,CAAC,uBAAA,IAAI,kCAAQ,EAAE;gBACjB,uBAAA,IAAI,2BAAQ,IAAI,CAAC,SAAS,EAAE,MAAA,CAAA;aAC7B;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,MAAgB,EAAE,KAAK,GAAG,KAAK;QAC3D,kCAAkC;QAClC,MAAM,uBAAA,IAAI,iCAAO,CAAA;QAEjB,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAA;QACrB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAC,CAAC,CAAA;QACpD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACjE,MAAM,QAAQ,GAAG,WAAW,CAAC,aAAa,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAC,CAAC,CAAA;QAC7E,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAa,CAAC,CAAA;QAEzD,OAAO,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAC,CAAC,CAAA;QAE7C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,gCAAgC,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;QAEF,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,EAAC,MAAM,EAAE,KAAK,EAAkB,EAAE,EAAE;gBAC1D,IAAI,KAAK,EAAE;oBACT,MAAM,CAAC,KAAe,CAAC,CAAA;iBACxB;qBAAM;oBACL,OAAO,CAAC,MAAgB,CAAC,CAAA;iBAC1B;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;SACxE;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAA;IACzF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE;QACtB,IAAI,CAAC,uBAAA,IAAI,yCAAe,EAAE;YACxB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;YAE1C,uBAAA,IAAI,qCAAkB,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,MAAA,CAAA;SAC5D;QAED,OAAO,uBAAA,IAAI,yCAAe,KAAK,KAAK,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAoB;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAA;IACxF,CAAC;IAED,YAAY,CAAC,EAAU,EAAE,OAAe;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,YAAY,CAAC,EAAU,EAAE,OAAe;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,YAAY,CAAC,EAAU,EAAE,OAAe;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,YAAY,CAAC,EAAU,EAAE,OAAe;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;IACrD,CAAC;IAED,QAAQ;;QACN,uBAAA,IAAI,8BAAW,IAAI,MAAA,CAAA;QACnB,MAAA,uBAAA,IAAI,+BAAK,0CAAE,KAAK,EAAE,CAAA;IACpB,CAAC;CACF;;AAED,MAAM,OAAO,aAAa;IACxB,YAAoB,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;QAE9C,cAAS,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;QAEtB,cAAS,GAAG,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;QAE1C,SAAI,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAE7D,UAAK,GAAG;YACN,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;YACjC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;SAClC,CAAA;QAED,UAAK,GAAG;YACN,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;YACjC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;SAClC,CAAA;IAhBgD,CAAC;CAiBnD"}
|
|
@@ -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"}
|