@noir-wallet/sdk 0.1.0 → 0.1.1
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/chains/zcash/index.js +4 -4
- package/dist/chains/zcash/index.mjs +1 -1
- package/dist/chunk-WP3773QN.mjs +183 -0
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +13 -13
- package/dist/index.mjs +8 -8
- package/package.json +7 -7
|
@@ -43,8 +43,8 @@ module.exports = __toCommonJS(zcash_exports);
|
|
|
43
43
|
// src/chains/zcash/provider.ts
|
|
44
44
|
function getZcashProvider() {
|
|
45
45
|
if (typeof window === "undefined") return null;
|
|
46
|
-
const
|
|
47
|
-
return
|
|
46
|
+
const noirWallet = window.noirwallet;
|
|
47
|
+
return noirWallet?.zcash || null;
|
|
48
48
|
}
|
|
49
49
|
async function detectProvider(timeout = 3e3) {
|
|
50
50
|
return new Promise((resolve, reject) => {
|
|
@@ -63,10 +63,10 @@ async function detectProvider(timeout = 3e3) {
|
|
|
63
63
|
if (provider2) {
|
|
64
64
|
resolve(provider2);
|
|
65
65
|
} else {
|
|
66
|
-
reject(new Error("
|
|
66
|
+
reject(new Error("Noir Wallet is not installed"));
|
|
67
67
|
}
|
|
68
68
|
};
|
|
69
|
-
window.addEventListener("
|
|
69
|
+
window.addEventListener("noirwallet#initialized", handleProvider, { once: true });
|
|
70
70
|
setTimeout(() => {
|
|
71
71
|
handleProvider();
|
|
72
72
|
}, timeout);
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
+
|
|
5
|
+
// src/chains/zcash/provider.ts
|
|
6
|
+
function getZcashProvider() {
|
|
7
|
+
if (typeof window === "undefined") return null;
|
|
8
|
+
const noirWallet = window.noirwallet;
|
|
9
|
+
return noirWallet?.zcash || null;
|
|
10
|
+
}
|
|
11
|
+
async function detectProvider(timeout = 3e3) {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
if (typeof window === "undefined") {
|
|
14
|
+
return reject(new Error("window is undefined"));
|
|
15
|
+
}
|
|
16
|
+
const provider = getZcashProvider();
|
|
17
|
+
if (provider) {
|
|
18
|
+
return resolve(provider);
|
|
19
|
+
}
|
|
20
|
+
let handled = false;
|
|
21
|
+
const handleProvider = () => {
|
|
22
|
+
if (handled) return;
|
|
23
|
+
handled = true;
|
|
24
|
+
const provider2 = getZcashProvider();
|
|
25
|
+
if (provider2) {
|
|
26
|
+
resolve(provider2);
|
|
27
|
+
} else {
|
|
28
|
+
reject(new Error("Noir Wallet is not installed"));
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
window.addEventListener("noirwallet#initialized", handleProvider, { once: true });
|
|
32
|
+
setTimeout(() => {
|
|
33
|
+
handleProvider();
|
|
34
|
+
}, timeout);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function getProvider() {
|
|
38
|
+
return getZcashProvider();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// src/chains/zcash/api.ts
|
|
42
|
+
var ZcashAPI = class {
|
|
43
|
+
constructor(provider) {
|
|
44
|
+
__publicField(this, "provider");
|
|
45
|
+
this.provider = provider;
|
|
46
|
+
}
|
|
47
|
+
async connect() {
|
|
48
|
+
return this.provider.request({ method: "zcash_requestAccounts" });
|
|
49
|
+
}
|
|
50
|
+
async getAccounts() {
|
|
51
|
+
return this.provider.request({ method: "zcash_getAccounts" });
|
|
52
|
+
}
|
|
53
|
+
async getBalance() {
|
|
54
|
+
return this.provider.request({ method: "zcash_getBalance" });
|
|
55
|
+
}
|
|
56
|
+
async getPublicKey() {
|
|
57
|
+
return this.provider.request({ method: "zcash_getPublicKey" });
|
|
58
|
+
}
|
|
59
|
+
async sendTransaction(params) {
|
|
60
|
+
return this.provider.request({
|
|
61
|
+
method: "zcash_sendTransaction",
|
|
62
|
+
params: [params]
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async signMessage(message) {
|
|
66
|
+
return this.provider.request({
|
|
67
|
+
method: "zcash_signMessage",
|
|
68
|
+
params: [message]
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
async switchNetwork(network) {
|
|
72
|
+
return this.provider.request({
|
|
73
|
+
method: "zcash_switchNetwork",
|
|
74
|
+
params: [{ network }]
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async disconnect() {
|
|
78
|
+
await this.provider.request({ method: "zcash_disconnect" });
|
|
79
|
+
}
|
|
80
|
+
on(event, handler) {
|
|
81
|
+
this.provider.on(event, handler);
|
|
82
|
+
}
|
|
83
|
+
removeListener(event, handler) {
|
|
84
|
+
this.provider.removeListener?.(event, handler);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// src/chains/zcash/utils.ts
|
|
89
|
+
import bs58 from "bs58";
|
|
90
|
+
import * as hashjs from "hash.js";
|
|
91
|
+
var MAINNET_P2PKH_PREFIX = new Uint8Array([28, 184]);
|
|
92
|
+
var TESTNET_P2PKH_PREFIX = new Uint8Array([29, 37]);
|
|
93
|
+
function sha2562(data) {
|
|
94
|
+
return new Uint8Array(hashjs.sha256().update(Array.from(data)).digest());
|
|
95
|
+
}
|
|
96
|
+
function ripemd1602(data) {
|
|
97
|
+
return new Uint8Array(hashjs.ripemd160().update(Array.from(data)).digest());
|
|
98
|
+
}
|
|
99
|
+
function hash160(data) {
|
|
100
|
+
return ripemd1602(sha2562(data));
|
|
101
|
+
}
|
|
102
|
+
function hexToUint8Array(hex) {
|
|
103
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
104
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
105
|
+
bytes[i / 2] = parseInt(hex.substr(i, 2), 16);
|
|
106
|
+
}
|
|
107
|
+
return bytes;
|
|
108
|
+
}
|
|
109
|
+
function concatUint8Arrays(...arrays) {
|
|
110
|
+
const totalLength = arrays.reduce((acc, arr) => acc + arr.length, 0);
|
|
111
|
+
const result = new Uint8Array(totalLength);
|
|
112
|
+
let offset = 0;
|
|
113
|
+
for (const arr of arrays) {
|
|
114
|
+
result.set(arr, offset);
|
|
115
|
+
offset += arr.length;
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
function compressPublicKey(pubkey) {
|
|
120
|
+
if (pubkey.length === 33) {
|
|
121
|
+
return pubkey;
|
|
122
|
+
}
|
|
123
|
+
if (pubkey.length !== 65) {
|
|
124
|
+
throw new Error("Invalid public key length for compression");
|
|
125
|
+
}
|
|
126
|
+
if (pubkey[0] !== 4) {
|
|
127
|
+
throw new Error("Invalid uncompressed public key format");
|
|
128
|
+
}
|
|
129
|
+
const x = pubkey.slice(1, 33);
|
|
130
|
+
const y = pubkey.slice(33, 65);
|
|
131
|
+
const yIsOdd = (y[y.length - 1] & 1) === 1;
|
|
132
|
+
const prefix = yIsOdd ? 3 : 2;
|
|
133
|
+
const compressed = new Uint8Array(33);
|
|
134
|
+
compressed[0] = prefix;
|
|
135
|
+
compressed.set(x, 1);
|
|
136
|
+
return compressed;
|
|
137
|
+
}
|
|
138
|
+
function publicKeyToAddress(pubkeyHex, network = "mainnet") {
|
|
139
|
+
if (!pubkeyHex || typeof pubkeyHex !== "string") {
|
|
140
|
+
throw new Error("Invalid public key: must be a non-empty hex string");
|
|
141
|
+
}
|
|
142
|
+
const cleanHex = pubkeyHex.toLowerCase().replace(/^0x/, "");
|
|
143
|
+
if (!/^[0-9a-f]+$/.test(cleanHex)) {
|
|
144
|
+
throw new Error("Invalid public key: must contain only hexadecimal characters");
|
|
145
|
+
}
|
|
146
|
+
const pubkeyBytes = hexToUint8Array(cleanHex);
|
|
147
|
+
if (pubkeyBytes.length !== 33 && pubkeyBytes.length !== 65) {
|
|
148
|
+
throw new Error(
|
|
149
|
+
`Invalid public key length: expected 33 (compressed) or 65 (uncompressed) bytes, got ${pubkeyBytes.length}`
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
if (pubkeyBytes.length === 33) {
|
|
153
|
+
const prefix = pubkeyBytes[0];
|
|
154
|
+
if (prefix !== 2 && prefix !== 3) {
|
|
155
|
+
throw new Error(
|
|
156
|
+
`Invalid compressed public key prefix: expected 0x02 or 0x03, got 0x${prefix.toString(16).padStart(2, "0")}`
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
} else if (pubkeyBytes.length === 65) {
|
|
160
|
+
const prefix = pubkeyBytes[0];
|
|
161
|
+
if (prefix !== 4) {
|
|
162
|
+
throw new Error(
|
|
163
|
+
`Invalid uncompressed public key prefix: expected 0x04, got 0x${prefix.toString(16).padStart(2, "0")}`
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
const compressedPubkey = compressPublicKey(pubkeyBytes);
|
|
168
|
+
const pubkeyHash = hash160(compressedPubkey);
|
|
169
|
+
const versionPrefix = network === "mainnet" ? MAINNET_P2PKH_PREFIX : TESTNET_P2PKH_PREFIX;
|
|
170
|
+
const payload = concatUint8Arrays(versionPrefix, pubkeyHash);
|
|
171
|
+
const checksum = sha2562(sha2562(payload)).slice(0, 4);
|
|
172
|
+
const addressBytes = concatUint8Arrays(payload, checksum);
|
|
173
|
+
const address = bs58.encode(addressBytes);
|
|
174
|
+
return address;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export {
|
|
178
|
+
ZcashAPI,
|
|
179
|
+
getZcashProvider,
|
|
180
|
+
detectProvider,
|
|
181
|
+
getProvider,
|
|
182
|
+
publicKeyToAddress
|
|
183
|
+
};
|
package/dist/index.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ZcashAPI } from './chains/zcash/index.mjs';
|
|
2
2
|
export { Balance, Network, RequestArguments, SendTransactionParams, SignMessageResult, TransactionReceipt, ZcashAddress, ZcashProvider, detectProvider, getProvider, getZcashProvider, publicKeyToAddress } from './chains/zcash/index.mjs';
|
|
3
3
|
|
|
4
|
-
interface
|
|
5
|
-
|
|
4
|
+
interface NoirWalletProvider {
|
|
5
|
+
isNoirWallet: boolean;
|
|
6
6
|
zcash: ZcashAPI;
|
|
7
7
|
}
|
|
8
8
|
interface ProviderConnectInfo {
|
|
@@ -17,7 +17,7 @@ interface ProviderRpcError extends Error {
|
|
|
17
17
|
data?: unknown;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
declare function
|
|
21
|
-
declare function
|
|
20
|
+
declare function getNoirWallet(): NoirWalletProvider | null;
|
|
21
|
+
declare function isNoirWalletInstalled(): boolean;
|
|
22
22
|
|
|
23
|
-
export { type
|
|
23
|
+
export { type NoirWalletProvider, type ProviderConnectInfo, type ProviderMessage, type ProviderRpcError, ZcashAPI, getNoirWallet, isNoirWalletInstalled };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ZcashAPI } from './chains/zcash/index.js';
|
|
2
2
|
export { Balance, Network, RequestArguments, SendTransactionParams, SignMessageResult, TransactionReceipt, ZcashAddress, ZcashProvider, detectProvider, getProvider, getZcashProvider, publicKeyToAddress } from './chains/zcash/index.js';
|
|
3
3
|
|
|
4
|
-
interface
|
|
5
|
-
|
|
4
|
+
interface NoirWalletProvider {
|
|
5
|
+
isNoirWallet: boolean;
|
|
6
6
|
zcash: ZcashAPI;
|
|
7
7
|
}
|
|
8
8
|
interface ProviderConnectInfo {
|
|
@@ -17,7 +17,7 @@ interface ProviderRpcError extends Error {
|
|
|
17
17
|
data?: unknown;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
declare function
|
|
21
|
-
declare function
|
|
20
|
+
declare function getNoirWallet(): NoirWalletProvider | null;
|
|
21
|
+
declare function isNoirWalletInstalled(): boolean;
|
|
22
22
|
|
|
23
|
-
export { type
|
|
23
|
+
export { type NoirWalletProvider, type ProviderConnectInfo, type ProviderMessage, type ProviderRpcError, ZcashAPI, getNoirWallet, isNoirWalletInstalled };
|
package/dist/index.js
CHANGED
|
@@ -34,10 +34,10 @@ var index_exports = {};
|
|
|
34
34
|
__export(index_exports, {
|
|
35
35
|
ZcashAPI: () => ZcashAPI,
|
|
36
36
|
detectProvider: () => detectProvider,
|
|
37
|
+
getNoirWallet: () => getNoirWallet,
|
|
37
38
|
getProvider: () => getProvider,
|
|
38
|
-
getRheaWallet: () => getRheaWallet,
|
|
39
39
|
getZcashProvider: () => getZcashProvider,
|
|
40
|
-
|
|
40
|
+
isNoirWalletInstalled: () => isNoirWalletInstalled,
|
|
41
41
|
publicKeyToAddress: () => publicKeyToAddress
|
|
42
42
|
});
|
|
43
43
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -90,24 +90,24 @@ var ZcashAPI = class {
|
|
|
90
90
|
};
|
|
91
91
|
|
|
92
92
|
// src/provider.ts
|
|
93
|
-
function
|
|
93
|
+
function getNoirWallet() {
|
|
94
94
|
if (typeof window === "undefined") return null;
|
|
95
|
-
const rawWallet = window.
|
|
95
|
+
const rawWallet = window.noirwallet;
|
|
96
96
|
if (!rawWallet) return null;
|
|
97
97
|
return {
|
|
98
|
-
|
|
98
|
+
isNoirWallet: rawWallet.isNoirWallet,
|
|
99
99
|
zcash: new ZcashAPI(rawWallet.zcash)
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
-
function
|
|
103
|
-
return
|
|
102
|
+
function isNoirWalletInstalled() {
|
|
103
|
+
return getNoirWallet() !== null;
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
// src/chains/zcash/provider.ts
|
|
107
107
|
function getZcashProvider() {
|
|
108
108
|
if (typeof window === "undefined") return null;
|
|
109
|
-
const
|
|
110
|
-
return
|
|
109
|
+
const noirWallet = window.noirwallet;
|
|
110
|
+
return noirWallet?.zcash || null;
|
|
111
111
|
}
|
|
112
112
|
async function detectProvider(timeout = 3e3) {
|
|
113
113
|
return new Promise((resolve, reject) => {
|
|
@@ -126,10 +126,10 @@ async function detectProvider(timeout = 3e3) {
|
|
|
126
126
|
if (provider2) {
|
|
127
127
|
resolve(provider2);
|
|
128
128
|
} else {
|
|
129
|
-
reject(new Error("
|
|
129
|
+
reject(new Error("Noir Wallet is not installed"));
|
|
130
130
|
}
|
|
131
131
|
};
|
|
132
|
-
window.addEventListener("
|
|
132
|
+
window.addEventListener("noirwallet#initialized", handleProvider, { once: true });
|
|
133
133
|
setTimeout(() => {
|
|
134
134
|
handleProvider();
|
|
135
135
|
}, timeout);
|
|
@@ -231,9 +231,9 @@ function publicKeyToAddress(pubkeyHex, network = "mainnet") {
|
|
|
231
231
|
0 && (module.exports = {
|
|
232
232
|
ZcashAPI,
|
|
233
233
|
detectProvider,
|
|
234
|
+
getNoirWallet,
|
|
234
235
|
getProvider,
|
|
235
|
-
getRheaWallet,
|
|
236
236
|
getZcashProvider,
|
|
237
|
-
|
|
237
|
+
isNoirWalletInstalled,
|
|
238
238
|
publicKeyToAddress
|
|
239
239
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -4,27 +4,27 @@ import {
|
|
|
4
4
|
getProvider,
|
|
5
5
|
getZcashProvider,
|
|
6
6
|
publicKeyToAddress
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-WP3773QN.mjs";
|
|
8
8
|
|
|
9
9
|
// src/provider.ts
|
|
10
|
-
function
|
|
10
|
+
function getNoirWallet() {
|
|
11
11
|
if (typeof window === "undefined") return null;
|
|
12
|
-
const rawWallet = window.
|
|
12
|
+
const rawWallet = window.noirwallet;
|
|
13
13
|
if (!rawWallet) return null;
|
|
14
14
|
return {
|
|
15
|
-
|
|
15
|
+
isNoirWallet: rawWallet.isNoirWallet,
|
|
16
16
|
zcash: new ZcashAPI(rawWallet.zcash)
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
|
-
function
|
|
20
|
-
return
|
|
19
|
+
function isNoirWalletInstalled() {
|
|
20
|
+
return getNoirWallet() !== null;
|
|
21
21
|
}
|
|
22
22
|
export {
|
|
23
23
|
ZcashAPI,
|
|
24
24
|
detectProvider,
|
|
25
|
+
getNoirWallet,
|
|
25
26
|
getProvider,
|
|
26
|
-
getRheaWallet,
|
|
27
27
|
getZcashProvider,
|
|
28
|
-
|
|
28
|
+
isNoirWalletInstalled,
|
|
29
29
|
publicKeyToAddress
|
|
30
30
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noir-wallet/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "TypeScript SDK for Noir Wallet dApp integration",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -20,11 +20,6 @@
|
|
|
20
20
|
"files": [
|
|
21
21
|
"dist"
|
|
22
22
|
],
|
|
23
|
-
"scripts": {
|
|
24
|
-
"build": "tsup src/index.ts src/chains/zcash/index.ts --format cjs,esm --dts --out-dir dist",
|
|
25
|
-
"dev": "tsup src/index.ts src/chains/zcash/index.ts --format cjs,esm --dts --out-dir dist --watch",
|
|
26
|
-
"type-check": "tsc --noEmit"
|
|
27
|
-
},
|
|
28
23
|
"devDependencies": {
|
|
29
24
|
"tsup": "^8.0.0",
|
|
30
25
|
"typescript": "^5.9.3"
|
|
@@ -46,5 +41,10 @@
|
|
|
46
41
|
"dependencies": {
|
|
47
42
|
"bs58": "^6.0.0",
|
|
48
43
|
"hash.js": "^1.1.7"
|
|
44
|
+
},
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsup src/index.ts src/chains/zcash/index.ts --format cjs,esm --dts --out-dir dist",
|
|
47
|
+
"dev": "tsup src/index.ts src/chains/zcash/index.ts --format cjs,esm --dts --out-dir dist --watch",
|
|
48
|
+
"type-check": "tsc --noEmit"
|
|
49
49
|
}
|
|
50
|
-
}
|
|
50
|
+
}
|