@ckb-ccc/core 0.0.5-alpha.8 → 0.0.7-alpha.0
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/dist/address/address.advanced.d.ts.map +1 -1
- package/dist/address/address.advanced.js +2 -5
- package/dist/address/index.d.ts +1 -1
- package/dist/address/index.d.ts.map +1 -1
- package/dist/address/index.js +2 -5
- package/dist/ckb/script.d.ts +43 -1
- package/dist/ckb/script.d.ts.map +1 -1
- package/dist/ckb/script.js +51 -0
- package/dist/ckb/transaction.d.ts +215 -27
- package/dist/ckb/transaction.d.ts.map +1 -1
- package/dist/ckb/transaction.js +472 -32
- package/dist/client/advanced.d.ts +2 -0
- package/dist/client/advanced.d.ts.map +1 -1
- package/dist/client/advanced.js +2 -0
- package/dist/client/client.advanced.d.ts +10 -0
- package/dist/client/client.advanced.d.ts.map +1 -0
- package/dist/client/client.advanced.js +80 -0
- package/dist/client/client.d.ts +50 -13
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +145 -15
- package/dist/client/clientPublicMainnet.advanced.d.ts +4 -2
- package/dist/client/clientPublicMainnet.advanced.d.ts.map +1 -1
- package/dist/client/clientPublicMainnet.advanced.js +103 -0
- package/dist/client/clientPublicMainnet.d.ts +4 -2
- package/dist/client/clientPublicMainnet.d.ts.map +1 -1
- package/dist/client/clientPublicMainnet.js +9 -1
- package/dist/client/clientPublicTestnet.advanced.d.ts +4 -2
- package/dist/client/clientPublicTestnet.advanced.d.ts.map +1 -1
- package/dist/client/clientPublicTestnet.advanced.js +155 -0
- package/dist/client/clientPublicTestnet.d.ts +4 -2
- package/dist/client/clientPublicTestnet.d.ts.map +1 -1
- package/dist/client/clientPublicTestnet.js +6 -1
- package/dist/client/clientTypes.advanced.d.ts +23 -0
- package/dist/client/clientTypes.advanced.d.ts.map +1 -0
- package/dist/client/clientTypes.advanced.js +4 -0
- package/dist/client/clientTypes.d.ts +22 -36
- package/dist/client/clientTypes.d.ts.map +1 -1
- package/dist/client/clientTypes.js +15 -12
- package/dist/client/jsonRpc/index.d.ts +3 -3
- package/dist/client/jsonRpc/index.d.ts.map +1 -1
- package/dist/client/jsonRpc/index.js +3 -3
- package/dist/client/jsonRpc/transformers.d.ts +5 -7
- package/dist/client/jsonRpc/transformers.d.ts.map +1 -1
- package/dist/client/jsonRpc/transformers.js +8 -6
- package/dist/hasher/index.d.ts +1 -1
- package/dist/hasher/index.d.ts.map +1 -1
- package/dist/hasher/index.js +4 -2
- package/dist/num/index.d.ts +12 -0
- package/dist/num/index.d.ts.map +1 -1
- package/dist/num/index.js +21 -0
- package/dist/signer/btc/signerBtc.d.ts.map +1 -1
- package/dist/signer/btc/signerBtc.js +6 -3
- package/dist/signer/btc/signerBtcPublicKeyReadonly.d.ts +0 -6
- package/dist/signer/btc/signerBtcPublicKeyReadonly.d.ts.map +1 -1
- package/dist/signer/btc/signerBtcPublicKeyReadonly.js +0 -8
- package/dist/signer/btc/verify.d.ts.map +1 -1
- package/dist/signer/btc/verify.js +5 -2
- package/dist/signer/ckb/signerCkbScriptReadonly.d.ts +0 -6
- package/dist/signer/ckb/signerCkbScriptReadonly.d.ts.map +1 -1
- package/dist/signer/ckb/signerCkbScriptReadonly.js +0 -8
- package/dist/signer/dummy/alwaysError.d.ts +0 -1
- package/dist/signer/dummy/alwaysError.d.ts.map +1 -1
- package/dist/signer/dummy/alwaysError.js +0 -3
- package/dist/signer/dummy/openLink.d.ts +0 -1
- package/dist/signer/dummy/openLink.d.ts.map +1 -1
- package/dist/signer/dummy/openLink.js +0 -3
- package/dist/signer/evm/signerEvm.d.ts.map +1 -1
- package/dist/signer/evm/signerEvm.js +7 -5
- package/dist/signer/evm/signerEvmAddressReadonly.d.ts +0 -6
- package/dist/signer/evm/signerEvmAddressReadonly.d.ts.map +1 -1
- package/dist/signer/evm/signerEvmAddressReadonly.js +0 -8
- package/dist/signer/index.d.ts +1 -0
- package/dist/signer/index.d.ts.map +1 -1
- package/dist/signer/index.js +1 -0
- package/dist/signer/nostr/index.d.ts +2 -0
- package/dist/signer/nostr/index.d.ts.map +1 -0
- package/dist/signer/nostr/index.js +1 -0
- package/dist/signer/nostr/signerNostr.d.ts +66 -0
- package/dist/signer/nostr/signerNostr.d.ts.map +1 -0
- package/dist/signer/nostr/signerNostr.js +85 -0
- package/dist/signer/nostr/verify.d.ts +5 -0
- package/dist/signer/nostr/verify.d.ts.map +1 -0
- package/dist/signer/nostr/verify.js +48 -0
- package/dist/signer/signer/index.d.ts +7 -12
- package/dist/signer/signer/index.d.ts.map +1 -1
- package/dist/signer/signer/index.js +11 -4
- package/dist/utils/index.d.ts +59 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +17 -0
- package/dist.commonjs/address/address.advanced.d.ts +29 -24
- package/dist.commonjs/address/address.advanced.d.ts.map +1 -1
- package/dist.commonjs/address/address.advanced.js +115 -92
- package/dist.commonjs/address/advanced.d.ts +1 -1
- package/dist.commonjs/address/advanced.js +30 -14
- package/dist.commonjs/address/index.d.ts +51 -44
- package/dist.commonjs/address/index.d.ts.map +1 -1
- package/dist.commonjs/address/index.js +84 -68
- package/dist.commonjs/advanced.d.ts +1 -1
- package/dist.commonjs/advanced.js +47 -22
- package/dist.commonjs/advancedBarrel.d.ts +1 -1
- package/dist.commonjs/advancedBarrel.js +30 -14
- package/dist.commonjs/barrel.d.ts +1 -1
- package/dist.commonjs/barrel.js +30 -14
- package/dist.commonjs/bytes/advanced.d.ts +11 -2
- package/dist.commonjs/bytes/index.d.ts +9 -3
- package/dist.commonjs/bytes/index.js +28 -26
- package/dist.commonjs/ckb/advanced.d.ts +1 -1
- package/dist.commonjs/ckb/advanced.js +47 -22
- package/dist.commonjs/ckb/index.d.ts +1 -1
- package/dist.commonjs/ckb/index.js +30 -14
- package/dist.commonjs/ckb/molecule.advanced/generated.d.ts +420 -260
- package/dist.commonjs/ckb/molecule.advanced/generated.js +1536 -1332
- package/dist.commonjs/ckb/molecule.advanced/index.d.ts +3 -3
- package/dist.commonjs/ckb/molecule.advanced/index.js +34 -18
- package/dist.commonjs/ckb/script.advanced.d.ts +1 -1
- package/dist.commonjs/ckb/script.advanced.js +12 -9
- package/dist.commonjs/ckb/script.d.ts +123 -77
- package/dist.commonjs/ckb/script.d.ts.map +1 -1
- package/dist.commonjs/ckb/script.js +221 -126
- package/dist.commonjs/ckb/transaction.advanced.d.ts +1 -1
- package/dist.commonjs/ckb/transaction.advanced.js +4 -4
- package/dist.commonjs/ckb/transaction.d.ts +796 -533
- package/dist.commonjs/ckb/transaction.d.ts.map +1 -1
- package/dist.commonjs/ckb/transaction.js +1372 -702
- package/dist.commonjs/client/advanced.d.ts +3 -1
- package/dist.commonjs/client/advanced.d.ts.map +1 -1
- package/dist.commonjs/client/advanced.js +32 -14
- package/dist.commonjs/client/client.advanced.d.ts +27 -0
- package/dist.commonjs/client/client.advanced.d.ts.map +1 -0
- package/dist.commonjs/client/client.advanced.js +116 -0
- package/dist.commonjs/client/client.d.ts +118 -21
- package/dist.commonjs/client/client.d.ts.map +1 -1
- package/dist.commonjs/client/client.js +219 -55
- package/dist.commonjs/client/clientPublicMainnet.advanced.d.ts +9 -3
- package/dist.commonjs/client/clientPublicMainnet.advanced.d.ts.map +1 -1
- package/dist.commonjs/client/clientPublicMainnet.advanced.js +144 -24
- package/dist.commonjs/client/clientPublicMainnet.d.ts +9 -5
- package/dist.commonjs/client/clientPublicMainnet.d.ts.map +1 -1
- package/dist.commonjs/client/clientPublicMainnet.js +18 -8
- package/dist.commonjs/client/clientPublicTestnet.advanced.d.ts +8 -3
- package/dist.commonjs/client/clientPublicTestnet.advanced.d.ts.map +1 -1
- package/dist.commonjs/client/clientPublicTestnet.advanced.js +204 -24
- package/dist.commonjs/client/clientPublicTestnet.d.ts +9 -5
- package/dist.commonjs/client/clientPublicTestnet.d.ts.map +1 -1
- package/dist.commonjs/client/clientPublicTestnet.js +14 -9
- package/dist.commonjs/client/clientTypes.advanced.d.ts +23 -0
- package/dist.commonjs/client/clientTypes.advanced.d.ts.map +1 -0
- package/dist.commonjs/client/clientTypes.advanced.js +8 -0
- package/dist.commonjs/client/clientTypes.d.ts +57 -46
- package/dist.commonjs/client/clientTypes.d.ts.map +1 -1
- package/dist.commonjs/client/clientTypes.js +60 -22
- package/dist.commonjs/client/index.d.ts +1 -1
- package/dist.commonjs/client/index.js +30 -14
- package/dist.commonjs/client/jsonRpc/advanced.d.ts +1 -1
- package/dist.commonjs/client/jsonRpc/advanced.js +30 -14
- package/dist.commonjs/client/jsonRpc/index.d.ts +94 -75
- package/dist.commonjs/client/jsonRpc/index.d.ts.map +1 -1
- package/dist.commonjs/client/jsonRpc/index.js +135 -108
- package/dist.commonjs/client/jsonRpc/transformers.d.ts +76 -38
- package/dist.commonjs/client/jsonRpc/transformers.d.ts.map +1 -1
- package/dist.commonjs/client/jsonRpc/transformers.js +174 -150
- package/dist.commonjs/client/jsonRpc/types.d.ts +38 -38
- package/dist.commonjs/fixedPoint/index.d.ts +9 -3
- package/dist.commonjs/fixedPoint/index.js +26 -20
- package/dist.commonjs/fixedPoint/index.test.d.ts +1 -1
- package/dist.commonjs/fixedPoint/index.test.js +42 -36
- package/dist.commonjs/hasher/advanced.d.ts +1 -1
- package/dist.commonjs/hasher/index.d.ts +37 -37
- package/dist.commonjs/hasher/index.d.ts.map +1 -1
- package/dist.commonjs/hasher/index.js +55 -46
- package/dist.commonjs/hex/index.d.ts +1 -1
- package/dist.commonjs/hex/index.js +1 -1
- package/dist.commonjs/index.d.ts +1 -1
- package/dist.commonjs/index.js +47 -22
- package/dist.commonjs/num/index.d.ts +13 -1
- package/dist.commonjs/num/index.d.ts.map +1 -1
- package/dist.commonjs/num/index.js +53 -19
- package/dist.commonjs/signer/btc/index.d.ts +1 -1
- package/dist.commonjs/signer/btc/index.js +30 -14
- package/dist.commonjs/signer/btc/signerBtc.d.ts +47 -47
- package/dist.commonjs/signer/btc/signerBtc.d.ts.map +1 -1
- package/dist.commonjs/signer/btc/signerBtc.js +89 -63
- package/dist.commonjs/signer/btc/signerBtcPublicKeyReadonly.d.ts +45 -51
- package/dist.commonjs/signer/btc/signerBtcPublicKeyReadonly.d.ts.map +1 -1
- package/dist.commonjs/signer/btc/signerBtcPublicKeyReadonly.js +52 -60
- package/dist.commonjs/signer/btc/verify.d.ts +6 -2
- package/dist.commonjs/signer/btc/verify.d.ts.map +1 -1
- package/dist.commonjs/signer/btc/verify.js +13 -3
- package/dist.commonjs/signer/ckb/index.d.ts +1 -1
- package/dist.commonjs/signer/ckb/index.js +30 -14
- package/dist.commonjs/signer/ckb/signerCkbScriptReadonly.d.ts +45 -51
- package/dist.commonjs/signer/ckb/signerCkbScriptReadonly.d.ts.map +1 -1
- package/dist.commonjs/signer/ckb/signerCkbScriptReadonly.js +56 -64
- package/dist.commonjs/signer/ckb/verifyJoyId.d.ts +6 -2
- package/dist.commonjs/signer/ckb/verifyJoyId.js +11 -8
- package/dist.commonjs/signer/dummy/alwaysError.d.ts +4 -5
- package/dist.commonjs/signer/dummy/alwaysError.d.ts.map +1 -1
- package/dist.commonjs/signer/dummy/alwaysError.js +7 -10
- package/dist.commonjs/signer/dummy/dummy.d.ts +7 -7
- package/dist.commonjs/signer/dummy/dummy.js +16 -16
- package/dist.commonjs/signer/dummy/index.d.ts +1 -1
- package/dist.commonjs/signer/dummy/index.js +30 -14
- package/dist.commonjs/signer/dummy/openLink.d.ts +4 -5
- package/dist.commonjs/signer/dummy/openLink.d.ts.map +1 -1
- package/dist.commonjs/signer/dummy/openLink.js +7 -10
- package/dist.commonjs/signer/evm/index.d.ts +1 -1
- package/dist.commonjs/signer/evm/index.js +30 -14
- package/dist.commonjs/signer/evm/signerEvm.d.ts +42 -38
- package/dist.commonjs/signer/evm/signerEvm.d.ts.map +1 -1
- package/dist.commonjs/signer/evm/signerEvm.js +106 -69
- package/dist.commonjs/signer/evm/signerEvmAddressReadonly.d.ts +37 -43
- package/dist.commonjs/signer/evm/signerEvmAddressReadonly.d.ts.map +1 -1
- package/dist.commonjs/signer/evm/signerEvmAddressReadonly.js +42 -50
- package/dist.commonjs/signer/evm/verify.d.ts +6 -2
- package/dist.commonjs/signer/evm/verify.js +7 -2
- package/dist.commonjs/signer/index.d.ts +2 -1
- package/dist.commonjs/signer/index.d.ts.map +1 -1
- package/dist.commonjs/signer/index.js +31 -14
- package/dist.commonjs/signer/nostr/index.d.ts +2 -0
- package/dist.commonjs/signer/nostr/index.d.ts.map +1 -0
- package/dist.commonjs/signer/nostr/index.js +33 -0
- package/dist.commonjs/signer/nostr/signerNostr.d.ts +66 -0
- package/dist.commonjs/signer/nostr/signerNostr.d.ts.map +1 -0
- package/dist.commonjs/signer/nostr/signerNostr.js +118 -0
- package/dist.commonjs/signer/nostr/verify.d.ts +11 -0
- package/dist.commonjs/signer/nostr/verify.d.ts.map +1 -0
- package/dist.commonjs/signer/nostr/verify.js +64 -0
- package/dist.commonjs/signer/signer/index.d.ts +156 -155
- package/dist.commonjs/signer/signer/index.d.ts.map +1 -1
- package/dist.commonjs/signer/signer/index.js +209 -175
- package/dist.commonjs/utils/index.d.ts +95 -6
- package/dist.commonjs/utils/index.d.ts.map +1 -1
- package/dist.commonjs/utils/index.js +30 -6
- package/package.json +4 -3
- package/src/address/address.advanced.ts +2 -5
- package/src/address/index.ts +2 -5
- package/src/ckb/script.ts +62 -2
- package/src/ckb/transaction.ts +678 -58
- package/src/client/advanced.ts +2 -0
- package/src/client/client.advanced.ts +134 -0
- package/src/client/client.ts +236 -25
- package/src/client/clientPublicMainnet.advanced.ts +117 -2
- package/src/client/clientPublicMainnet.ts +14 -3
- package/src/client/clientPublicTestnet.advanced.ts +176 -2
- package/src/client/clientPublicTestnet.ts +9 -3
- package/src/client/clientTypes.advanced.ts +26 -0
- package/src/client/clientTypes.ts +41 -43
- package/src/client/jsonRpc/index.ts +4 -4
- package/src/client/jsonRpc/transformers.ts +13 -11
- package/src/hasher/index.ts +4 -2
- package/src/num/index.ts +22 -0
- package/src/signer/btc/signerBtc.ts +6 -8
- package/src/signer/btc/signerBtcPublicKeyReadonly.ts +0 -9
- package/src/signer/btc/verify.ts +6 -3
- package/src/signer/ckb/signerCkbScriptReadonly.ts +0 -9
- package/src/signer/dummy/alwaysError.ts +0 -4
- package/src/signer/dummy/openLink.ts +0 -4
- package/src/signer/evm/signerEvm.ts +11 -11
- package/src/signer/evm/signerEvmAddressReadonly.ts +0 -9
- package/src/signer/index.ts +1 -0
- package/src/signer/nostr/index.ts +1 -0
- package/src/signer/nostr/signerNostr.ts +135 -0
- package/src/signer/nostr/verify.ts +63 -0
- package/src/signer/signer/index.ts +15 -11
- package/src/utils/index.ts +108 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SignerNostr = void 0;
|
|
4
|
+
const bech32_1 = require("bech32");
|
|
5
|
+
const address_1 = require("../../address");
|
|
6
|
+
const bytes_1 = require("../../bytes");
|
|
7
|
+
const ckb_1 = require("../../ckb");
|
|
8
|
+
const client_1 = require("../../client");
|
|
9
|
+
const hasher_1 = require("../../hasher");
|
|
10
|
+
const hex_1 = require("../../hex");
|
|
11
|
+
const signer_1 = require("../signer");
|
|
12
|
+
const verify_1 = require("./verify");
|
|
13
|
+
class SignerNostr extends signer_1.Signer {
|
|
14
|
+
get type() {
|
|
15
|
+
return signer_1.SignerType.Nostr;
|
|
16
|
+
}
|
|
17
|
+
get signType() {
|
|
18
|
+
return signer_1.SignerSignType.NostrEvent;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Sign a message.
|
|
22
|
+
*
|
|
23
|
+
* @returns A promise that resolves to the signature.
|
|
24
|
+
*/
|
|
25
|
+
async signMessageRaw(message) {
|
|
26
|
+
return (0, hex_1.hexFrom)(
|
|
27
|
+
(
|
|
28
|
+
await this.signNostrEvent(
|
|
29
|
+
(0, verify_1.buildNostrEventFromMessage)(message),
|
|
30
|
+
)
|
|
31
|
+
).sig,
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Gets the internal address, which is the EVM account in this case.
|
|
36
|
+
*
|
|
37
|
+
* @returns A promise that resolves to a string representing the internal address.
|
|
38
|
+
*/
|
|
39
|
+
async getInternalAddress() {
|
|
40
|
+
return bech32_1.bech32.encode(
|
|
41
|
+
"npub",
|
|
42
|
+
bech32_1.bech32.toWords(
|
|
43
|
+
(0, bytes_1.bytesFrom)(await this.getNostrPublicKey()),
|
|
44
|
+
),
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Gets an array of Address objects representing the known script addresses for the signer.
|
|
49
|
+
*
|
|
50
|
+
* @returns A promise that resolves to an array of Address objects.
|
|
51
|
+
*/
|
|
52
|
+
async getAddressObjs() {
|
|
53
|
+
const publicKey = await this.getNostrPublicKey();
|
|
54
|
+
return [
|
|
55
|
+
await address_1.Address.fromKnownScript(
|
|
56
|
+
this.client,
|
|
57
|
+
client_1.KnownScript.NostrLock,
|
|
58
|
+
(0, hex_1.hexFrom)(
|
|
59
|
+
(0, bytes_1.bytesConcat)(
|
|
60
|
+
[0x00],
|
|
61
|
+
(0, hasher_1.ckbHash)(publicKey).slice(0, 42),
|
|
62
|
+
),
|
|
63
|
+
),
|
|
64
|
+
),
|
|
65
|
+
];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* prepare a transaction before signing.
|
|
69
|
+
*
|
|
70
|
+
* @param txLike - The transaction to prepare, represented as a TransactionLike object.
|
|
71
|
+
* @returns A promise that resolves to the prepared Transaction object.
|
|
72
|
+
*/
|
|
73
|
+
async prepareTransaction(txLike) {
|
|
74
|
+
const tx = ckb_1.Transaction.from(txLike);
|
|
75
|
+
const { script } = await this.getRecommendedAddressObj();
|
|
76
|
+
await tx.addCellDepsOfKnownScripts(
|
|
77
|
+
this.client,
|
|
78
|
+
client_1.KnownScript.NostrLock,
|
|
79
|
+
);
|
|
80
|
+
await tx.prepareSighashAllWitness(script, 572, this.client);
|
|
81
|
+
return tx;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Signs a transaction without modifying it.
|
|
85
|
+
*
|
|
86
|
+
* @param txLike - The transaction to sign, represented as a TransactionLike object.
|
|
87
|
+
* @returns A promise that resolves to a signed Transaction object.
|
|
88
|
+
*/
|
|
89
|
+
async signOnlyTransaction(txLike) {
|
|
90
|
+
let tx = ckb_1.Transaction.from(txLike);
|
|
91
|
+
const { script } = await this.getRecommendedAddressObj();
|
|
92
|
+
const info = await tx.getSignHashInfo(script, this.client);
|
|
93
|
+
if (!info) {
|
|
94
|
+
return tx;
|
|
95
|
+
}
|
|
96
|
+
const signedEvent = (0, bytes_1.bytesFrom)(
|
|
97
|
+
JSON.stringify(
|
|
98
|
+
await this.signNostrEvent({
|
|
99
|
+
pubkey: (await this.getNostrPublicKey()).slice(2),
|
|
100
|
+
tags: [[SignerNostr.CKB_SIG_HASH_ALL_TAG, info.message.slice(2)]],
|
|
101
|
+
created_at: Math.floor(Date.now() / 1000),
|
|
102
|
+
kind: SignerNostr.CKB_UNLOCK_EVENT_KIND,
|
|
103
|
+
content: SignerNostr.CKB_UNLOCK_EVENT_CONTENT,
|
|
104
|
+
}),
|
|
105
|
+
),
|
|
106
|
+
"utf8",
|
|
107
|
+
);
|
|
108
|
+
const witness = ckb_1.WitnessArgs.fromBytes(tx.witnesses[info.position]);
|
|
109
|
+
witness.lock = (0, hex_1.hexFrom)(signedEvent);
|
|
110
|
+
tx.setWitnessArgsAt(info.position, witness);
|
|
111
|
+
return tx;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.SignerNostr = SignerNostr;
|
|
115
|
+
SignerNostr.CKB_SIG_HASH_ALL_TAG = "ckb_sighash_all";
|
|
116
|
+
SignerNostr.CKB_UNLOCK_EVENT_KIND = 23334;
|
|
117
|
+
SignerNostr.CKB_UNLOCK_EVENT_CONTENT =
|
|
118
|
+
"Signing a CKB transaction\n\nIMPORTANT: Please verify the integrity and authenticity of connected Nostr client before signing this message\n";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BytesLike } from "../../bytes";
|
|
2
|
+
import { NostrEvent } from "./signerNostr";
|
|
3
|
+
export declare function buildNostrEventFromMessage(
|
|
4
|
+
message: string | BytesLike,
|
|
5
|
+
): NostrEvent;
|
|
6
|
+
export declare function verifyMessageNostrEvent(
|
|
7
|
+
message: string | BytesLike,
|
|
8
|
+
signature: string,
|
|
9
|
+
address: string,
|
|
10
|
+
): boolean;
|
|
11
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/signer/nostr/verify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAa,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,UAAU,CA2BZ;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAoBT"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyMessageNostrEvent = exports.buildNostrEventFromMessage = void 0;
|
|
4
|
+
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
5
|
+
const sha256_1 = require("@noble/hashes/sha256");
|
|
6
|
+
const bech32_1 = require("bech32");
|
|
7
|
+
const bytes_1 = require("../../bytes");
|
|
8
|
+
const hex_1 = require("../../hex");
|
|
9
|
+
function buildNostrEventFromMessage(message) {
|
|
10
|
+
if (typeof message === "string") {
|
|
11
|
+
try {
|
|
12
|
+
const event = JSON.parse(message);
|
|
13
|
+
if (
|
|
14
|
+
typeof event === "object" &&
|
|
15
|
+
typeof event.created_at === "number" &&
|
|
16
|
+
typeof event.kind === "number" &&
|
|
17
|
+
typeof event.content === "string" &&
|
|
18
|
+
Array.isArray(event.args) &&
|
|
19
|
+
event.args.every(
|
|
20
|
+
(tag) =>
|
|
21
|
+
Array.isArray(tag) && tag.every((v) => typeof v === "string"),
|
|
22
|
+
)
|
|
23
|
+
) {
|
|
24
|
+
return event;
|
|
25
|
+
}
|
|
26
|
+
} catch (_) {}
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
kind: 23335,
|
|
30
|
+
created_at: 0,
|
|
31
|
+
content:
|
|
32
|
+
typeof message === "string" ? message : (0, hex_1.hexFrom)(message),
|
|
33
|
+
tags: [],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
exports.buildNostrEventFromMessage = buildNostrEventFromMessage;
|
|
37
|
+
function verifyMessageNostrEvent(message, signature, address) {
|
|
38
|
+
const { words } = bech32_1.bech32.decode(address);
|
|
39
|
+
const publicKey = (0, hex_1.hexFrom)(bech32_1.bech32.fromWords(words)).slice(
|
|
40
|
+
2,
|
|
41
|
+
);
|
|
42
|
+
const event = buildNostrEventFromMessage(message);
|
|
43
|
+
const serialized = JSON.stringify([
|
|
44
|
+
0,
|
|
45
|
+
publicKey,
|
|
46
|
+
event.created_at,
|
|
47
|
+
event.kind,
|
|
48
|
+
event.tags,
|
|
49
|
+
event.content,
|
|
50
|
+
]);
|
|
51
|
+
const eventHash = (0, hex_1.hexFrom)(
|
|
52
|
+
(0, sha256_1.sha256)((0, bytes_1.bytesFrom)(serialized, "utf8")),
|
|
53
|
+
);
|
|
54
|
+
try {
|
|
55
|
+
return secp256k1_1.schnorr.verify(
|
|
56
|
+
signature.slice(2),
|
|
57
|
+
eventHash.slice(2),
|
|
58
|
+
publicKey,
|
|
59
|
+
);
|
|
60
|
+
} catch (_) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.verifyMessageNostrEvent = verifyMessageNostrEvent;
|
|
@@ -5,182 +5,183 @@ import { Client } from "../../client";
|
|
|
5
5
|
import { Hex } from "../../hex";
|
|
6
6
|
import { Num } from "../../num";
|
|
7
7
|
export declare enum SignerSignType {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
Unknown = "Unknown",
|
|
9
|
+
BtcEcdsa = "BtcEcdsa",
|
|
10
|
+
EvmPersonal = "EvmPersonal",
|
|
11
|
+
JoyId = "JoyId",
|
|
12
|
+
NostrEvent = "NostrEvent",
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
15
|
* An enumeration of signer display types in wallet.
|
|
15
16
|
*/
|
|
16
17
|
export declare enum SignerType {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
EVM = "EVM",
|
|
19
|
+
BTC = "BTC",
|
|
20
|
+
CKB = "CKB",
|
|
21
|
+
Nostr = "Nostr",
|
|
20
22
|
}
|
|
21
23
|
export declare class Signature {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
signature: string;
|
|
25
|
+
identity: string;
|
|
26
|
+
signType: SignerSignType;
|
|
27
|
+
constructor(signature: string, identity: string, signType: SignerSignType);
|
|
26
28
|
}
|
|
27
29
|
/**
|
|
28
30
|
* An abstract class representing a generic signer.
|
|
29
31
|
* This class provides methods to connect, get addresses, and sign transactions.
|
|
30
32
|
*/
|
|
31
33
|
export declare abstract class Signer {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
signOnlyTransaction(_: TransactionLike): Promise<Transaction>;
|
|
34
|
+
protected client_: Client;
|
|
35
|
+
constructor(client_: Client);
|
|
36
|
+
abstract get type(): SignerType;
|
|
37
|
+
abstract get signType(): SignerSignType;
|
|
38
|
+
get client(): Client;
|
|
39
|
+
static verifyMessage(
|
|
40
|
+
message: string | BytesLike,
|
|
41
|
+
signature: Signature,
|
|
42
|
+
): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Replace the current client.
|
|
45
|
+
* returns false if the new client is invalid for this signer.
|
|
46
|
+
*/
|
|
47
|
+
replaceClient(client: Client): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Connects to the signer.
|
|
50
|
+
*
|
|
51
|
+
* @returns A promise that resolves when the connection is complete.
|
|
52
|
+
*/
|
|
53
|
+
abstract connect(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Check if the signer is connected.
|
|
56
|
+
*
|
|
57
|
+
* @returns A promise that resolves the connection status.
|
|
58
|
+
*/
|
|
59
|
+
abstract isConnected(): Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Gets the internal address associated with the signer.
|
|
62
|
+
*
|
|
63
|
+
* @returns A promise that resolves to a string representing the internal address.
|
|
64
|
+
*/
|
|
65
|
+
abstract getInternalAddress(): Promise<string>;
|
|
66
|
+
/**
|
|
67
|
+
* Gets the identity for verifying signature, usually it's address
|
|
68
|
+
*
|
|
69
|
+
* @returns A promise that resolves to a string representing the identity
|
|
70
|
+
*/
|
|
71
|
+
getIdentity(): Promise<string>;
|
|
72
|
+
/**
|
|
73
|
+
* Gets an array of Address objects associated with the signer.
|
|
74
|
+
*
|
|
75
|
+
* @returns A promise that resolves to an array of Address objects.
|
|
76
|
+
*/
|
|
77
|
+
abstract getAddressObjs(): Promise<Address[]>;
|
|
78
|
+
/**
|
|
79
|
+
* Gets the recommended Address object for the signer.
|
|
80
|
+
*
|
|
81
|
+
* @param _preference - Optional preference parameter.
|
|
82
|
+
* @returns A promise that resolves to the recommended Address object.
|
|
83
|
+
*/
|
|
84
|
+
getRecommendedAddressObj(_preference?: unknown): Promise<Address>;
|
|
85
|
+
/**
|
|
86
|
+
* Gets the recommended address for the signer as a string.
|
|
87
|
+
*
|
|
88
|
+
* @param preference - Optional preference parameter.
|
|
89
|
+
* @returns A promise that resolves to the recommended address as a string.
|
|
90
|
+
*/
|
|
91
|
+
getRecommendedAddress(preference?: unknown): Promise<string>;
|
|
92
|
+
/**
|
|
93
|
+
* Gets an array of addresses associated with the signer as strings.
|
|
94
|
+
*
|
|
95
|
+
* @returns A promise that resolves to an array of addresses as strings.
|
|
96
|
+
*/
|
|
97
|
+
getAddresses(): Promise<string[]>;
|
|
98
|
+
/**
|
|
99
|
+
* Gets balance of all addresses
|
|
100
|
+
*
|
|
101
|
+
* @returns A promise that resolves to the balance
|
|
102
|
+
*/
|
|
103
|
+
getBalance(): Promise<Num>;
|
|
104
|
+
/**
|
|
105
|
+
* Signs a message.
|
|
106
|
+
*
|
|
107
|
+
* @param _ - The message to sign, as a string or BytesLike object.
|
|
108
|
+
* @returns A promise that resolves to the signature info.
|
|
109
|
+
* @throws Will throw an error if not implemented.
|
|
110
|
+
*/
|
|
111
|
+
signMessage(message: string | BytesLike): Promise<Signature>;
|
|
112
|
+
/**
|
|
113
|
+
* Signs a message and returns signature only. This method is not implemented and should be overridden by subclasses.
|
|
114
|
+
*
|
|
115
|
+
* @param _ - The message to sign, as a string or BytesLike object.
|
|
116
|
+
* @returns A promise that resolves to the signature as a string.
|
|
117
|
+
* @throws Will throw an error if not implemented.
|
|
118
|
+
*/
|
|
119
|
+
signMessageRaw(_: string | BytesLike): Promise<string>;
|
|
120
|
+
/**
|
|
121
|
+
* Verify a signature.
|
|
122
|
+
*
|
|
123
|
+
* @param _ - The original message.
|
|
124
|
+
* @param _ - The signature to verify.
|
|
125
|
+
* @returns A promise that resolves to the verification result.
|
|
126
|
+
* @throws Will throw an error if not implemented.
|
|
127
|
+
*/
|
|
128
|
+
verifyMessage(
|
|
129
|
+
message: string | BytesLike,
|
|
130
|
+
signature: string | Signature,
|
|
131
|
+
): Promise<boolean>;
|
|
132
|
+
/**
|
|
133
|
+
* Verify a string signature. This method is not implemented and should be overridden by subclasses.
|
|
134
|
+
*
|
|
135
|
+
* @param _0 - The original message.
|
|
136
|
+
* @param _1 - The signature to verify.
|
|
137
|
+
* @returns A promise that resolves to the verification result.
|
|
138
|
+
* @throws Will throw an error if not implemented.
|
|
139
|
+
*/
|
|
140
|
+
verifyMessageRaw(_0: string | BytesLike, _1: string): Promise<boolean>;
|
|
141
|
+
/**
|
|
142
|
+
* Sends a transaction after signing it.
|
|
143
|
+
*
|
|
144
|
+
* @param tx - The transaction to send, represented as a TransactionLike object.
|
|
145
|
+
* @returns A promise that resolves to the transaction hash as a Hex string.
|
|
146
|
+
*/
|
|
147
|
+
sendTransaction(tx: TransactionLike): Promise<Hex>;
|
|
148
|
+
/**
|
|
149
|
+
* Signs a transaction.
|
|
150
|
+
*
|
|
151
|
+
* @param tx - The transaction to sign, represented as a TransactionLike object.
|
|
152
|
+
* @returns A promise that resolves to the signed Transaction object.
|
|
153
|
+
*/
|
|
154
|
+
signTransaction(tx: TransactionLike): Promise<Transaction>;
|
|
155
|
+
/**
|
|
156
|
+
* prepare a transaction before signing. This method is not implemented and should be overridden by subclasses.
|
|
157
|
+
*
|
|
158
|
+
* @param _ - The transaction to prepare, represented as a TransactionLike object.
|
|
159
|
+
* @returns A promise that resolves to the prepared Transaction object.
|
|
160
|
+
* @throws Will throw an error if not implemented.
|
|
161
|
+
*/
|
|
162
|
+
prepareTransaction(_: TransactionLike): Promise<Transaction>;
|
|
163
|
+
/**
|
|
164
|
+
* Signs a transaction without preparing information for it. This method is not implemented and should be overridden by subclasses.
|
|
165
|
+
*
|
|
166
|
+
* @param _ - The transaction to sign, represented as a TransactionLike object.
|
|
167
|
+
* @returns A promise that resolves to the signed Transaction object.
|
|
168
|
+
* @throws Will throw an error if not implemented.
|
|
169
|
+
*/
|
|
170
|
+
signOnlyTransaction(_: TransactionLike): Promise<Transaction>;
|
|
170
171
|
}
|
|
171
172
|
/**
|
|
172
173
|
* A class representing information about a signer, including its type and the signer instance.
|
|
173
174
|
*/
|
|
174
175
|
export declare class SignerInfo {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
176
|
+
name: string;
|
|
177
|
+
signer: Signer;
|
|
178
|
+
constructor(name: string, signer: Signer);
|
|
178
179
|
}
|
|
179
180
|
/**
|
|
180
181
|
* Represents a wallet with a name, icon, and an array of signer information.
|
|
181
182
|
*/
|
|
182
183
|
export type Wallet = {
|
|
183
|
-
|
|
184
|
-
|
|
184
|
+
name: string;
|
|
185
|
+
icon: string;
|
|
185
186
|
};
|
|
186
|
-
//# sourceMappingURL=index.d.ts.map
|
|
187
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/signer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/signer/signer/index.ts"],"names":[],"mappings":"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"}
|