@sequence0/sdk 0.1.0 → 1.0.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/README.md +63 -5
- package/dist/chains/bitcoin.d.ts +15 -3
- package/dist/chains/bitcoin.d.ts.map +1 -1
- package/dist/chains/bitcoin.js +23 -3
- package/dist/chains/bitcoin.js.map +1 -1
- package/dist/chains/ethereum.d.ts +3 -0
- package/dist/chains/ethereum.d.ts.map +1 -1
- package/dist/chains/ethereum.js +156 -20
- package/dist/chains/ethereum.js.map +1 -1
- package/dist/core/client.d.ts +132 -2
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +501 -32
- package/dist/core/client.js.map +1 -1
- package/dist/core/types.d.ts +55 -3
- package/dist/core/types.d.ts.map +1 -1
- package/dist/index.d.ts +15 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -3
- package/dist/index.js.map +1 -1
- package/dist/utils/discovery.d.ts +95 -0
- package/dist/utils/discovery.d.ts.map +1 -0
- package/dist/utils/discovery.js +212 -0
- package/dist/utils/discovery.js.map +1 -0
- package/dist/utils/errors.d.ts +26 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +32 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/fee.d.ts +107 -0
- package/dist/utils/fee.d.ts.map +1 -0
- package/dist/utils/fee.js +220 -0
- package/dist/utils/fee.js.map +1 -0
- package/dist/utils/http.d.ts +98 -2
- package/dist/utils/http.d.ts.map +1 -1
- package/dist/utils/http.js +238 -6
- package/dist/utils/http.js.map +1 -1
- package/dist/utils/logger.d.ts +43 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +129 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +43 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +99 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/validation.d.ts +74 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +380 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wallet/wallet.d.ts +13 -1
- package/dist/wallet/wallet.d.ts.map +1 -1
- package/dist/wallet/wallet.js +86 -21
- package/dist/wallet/wallet.js.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Response Schema Validation & Input Validation
|
|
3
|
+
*
|
|
4
|
+
* Lightweight runtime checks for agent responses and user inputs.
|
|
5
|
+
* No external dependencies — uses simple type guards and regex.
|
|
6
|
+
*/
|
|
7
|
+
import type { Chain, DkgResponse, SignResponse, SignResultResponse, HealthResponse, StatusResponse, WalletsResponse } from '../core/types';
|
|
8
|
+
/**
|
|
9
|
+
* Validate a DKG initiation response from an agent.
|
|
10
|
+
* Ensures wallet_id, status, participants, and threshold are present and valid.
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateDkgResponse(data: unknown, endpoint: string): DkgResponse;
|
|
13
|
+
/**
|
|
14
|
+
* Validate a DKG completion event (from WebSocket).
|
|
15
|
+
* Ensures wallet_id exists and public_key/address are valid.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateDkgCompletion(data: unknown, endpoint: string): {
|
|
18
|
+
wallet_id: string;
|
|
19
|
+
public_key: string;
|
|
20
|
+
address?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Validate a sign request response from an agent.
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateSignResponse(data: unknown, endpoint: string): SignResponse;
|
|
26
|
+
/**
|
|
27
|
+
* Validate a sign result (polling) response.
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateSignResultResponse(data: unknown, endpoint: string): SignResultResponse;
|
|
30
|
+
/**
|
|
31
|
+
* Validate a health response.
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateHealthResponse(data: unknown, endpoint: string): HealthResponse;
|
|
34
|
+
/**
|
|
35
|
+
* Validate a status response.
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateStatusResponse(data: unknown, endpoint: string): StatusResponse;
|
|
38
|
+
/**
|
|
39
|
+
* Validate a wallets list response.
|
|
40
|
+
*/
|
|
41
|
+
export declare function validateWalletsResponse(data: unknown, endpoint: string): WalletsResponse;
|
|
42
|
+
/**
|
|
43
|
+
* Validate a wallet ID string.
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateWalletId(walletId: unknown): string;
|
|
46
|
+
/**
|
|
47
|
+
* Validate a chain name against the supported chains list.
|
|
48
|
+
*/
|
|
49
|
+
export declare function validateChain(chain: unknown): Chain;
|
|
50
|
+
/**
|
|
51
|
+
* Validate an address format based on the target chain.
|
|
52
|
+
*/
|
|
53
|
+
export declare function validateAddress(address: unknown, chain: Chain): string;
|
|
54
|
+
/**
|
|
55
|
+
* Validate a positive numeric amount (for transactions).
|
|
56
|
+
*/
|
|
57
|
+
export declare function validateAmount(amount: unknown, paramName?: string): number;
|
|
58
|
+
/**
|
|
59
|
+
* Validate a string amount (wei, lamports, etc.) used in EVM transactions.
|
|
60
|
+
* Must represent a valid positive integer or bigint.
|
|
61
|
+
*/
|
|
62
|
+
export declare function validateStringAmount(value: unknown, paramName?: string): string | bigint;
|
|
63
|
+
/**
|
|
64
|
+
* Validate a hex-encoded message for signing.
|
|
65
|
+
*/
|
|
66
|
+
export declare function validateHexMessage(message: unknown, paramName?: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* Validate threshold parameters.
|
|
69
|
+
*/
|
|
70
|
+
export declare function validateThreshold(threshold: unknown): {
|
|
71
|
+
t: number;
|
|
72
|
+
n: number;
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACR,KAAK,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,eAAe,EAClB,MAAM,eAAe,CAAC;AAgCvB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CA2ChF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CA2CA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAmClF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAiE9F;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAmBtF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CA2BtF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAsCxF;AA8CD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAuB1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAgBnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAyCtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,SAAW,GAAG,MAAM,CA8B5E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,SAAU,GAAG,MAAM,GAAG,MAAM,CAwCzF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,SAAY,GAAG,MAAM,CAgBlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAiC9E"}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Response Schema Validation & Input Validation
|
|
4
|
+
*
|
|
5
|
+
* Lightweight runtime checks for agent responses and user inputs.
|
|
6
|
+
* No external dependencies — uses simple type guards and regex.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.validateDkgResponse = validateDkgResponse;
|
|
10
|
+
exports.validateDkgCompletion = validateDkgCompletion;
|
|
11
|
+
exports.validateSignResponse = validateSignResponse;
|
|
12
|
+
exports.validateSignResultResponse = validateSignResultResponse;
|
|
13
|
+
exports.validateHealthResponse = validateHealthResponse;
|
|
14
|
+
exports.validateStatusResponse = validateStatusResponse;
|
|
15
|
+
exports.validateWalletsResponse = validateWalletsResponse;
|
|
16
|
+
exports.validateWalletId = validateWalletId;
|
|
17
|
+
exports.validateChain = validateChain;
|
|
18
|
+
exports.validateAddress = validateAddress;
|
|
19
|
+
exports.validateAmount = validateAmount;
|
|
20
|
+
exports.validateStringAmount = validateStringAmount;
|
|
21
|
+
exports.validateHexMessage = validateHexMessage;
|
|
22
|
+
exports.validateThreshold = validateThreshold;
|
|
23
|
+
const errors_1 = require("./errors");
|
|
24
|
+
// ────────────────────────────────────────────────
|
|
25
|
+
// Response Validation
|
|
26
|
+
// ────────────────────────────────────────────────
|
|
27
|
+
/** Hex string pattern: 0x followed by hex chars, or just hex chars */
|
|
28
|
+
const HEX_PATTERN = /^(0x)?[0-9a-fA-F]+$/;
|
|
29
|
+
/** Ethereum address: 0x followed by exactly 40 hex chars */
|
|
30
|
+
const ETH_ADDRESS_PATTERN = /^0x[0-9a-fA-F]{40}$/;
|
|
31
|
+
function isNonEmptyString(value) {
|
|
32
|
+
return typeof value === 'string' && value.length > 0;
|
|
33
|
+
}
|
|
34
|
+
function isHexString(value) {
|
|
35
|
+
return typeof value === 'string' && HEX_PATTERN.test(value);
|
|
36
|
+
}
|
|
37
|
+
function isEthAddress(value) {
|
|
38
|
+
return typeof value === 'string' && ETH_ADDRESS_PATTERN.test(value);
|
|
39
|
+
}
|
|
40
|
+
function isNumber(value) {
|
|
41
|
+
return typeof value === 'number' && !isNaN(value);
|
|
42
|
+
}
|
|
43
|
+
function isObject(value) {
|
|
44
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validate a DKG initiation response from an agent.
|
|
48
|
+
* Ensures wallet_id, status, participants, and threshold are present and valid.
|
|
49
|
+
*/
|
|
50
|
+
function validateDkgResponse(data, endpoint) {
|
|
51
|
+
if (!isObject(data)) {
|
|
52
|
+
throw new errors_1.InvalidResponseError('DKG response is not a valid object', endpoint);
|
|
53
|
+
}
|
|
54
|
+
const d = data;
|
|
55
|
+
if (!isNonEmptyString(d.wallet_id)) {
|
|
56
|
+
throw new errors_1.InvalidResponseError('DKG response missing or empty wallet_id', endpoint, 'wallet_id');
|
|
57
|
+
}
|
|
58
|
+
if (!isNonEmptyString(d.status)) {
|
|
59
|
+
throw new errors_1.InvalidResponseError('DKG response missing or empty status', endpoint, 'status');
|
|
60
|
+
}
|
|
61
|
+
if (!Array.isArray(d.participants)) {
|
|
62
|
+
throw new errors_1.InvalidResponseError('DKG response missing or invalid participants array', endpoint, 'participants');
|
|
63
|
+
}
|
|
64
|
+
if (!isNumber(d.threshold) || d.threshold < 1) {
|
|
65
|
+
throw new errors_1.InvalidResponseError('DKG response missing or invalid threshold (must be a positive number)', endpoint, 'threshold');
|
|
66
|
+
}
|
|
67
|
+
return d;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Validate a DKG completion event (from WebSocket).
|
|
71
|
+
* Ensures wallet_id exists and public_key/address are valid.
|
|
72
|
+
*/
|
|
73
|
+
function validateDkgCompletion(data, endpoint) {
|
|
74
|
+
if (!isObject(data)) {
|
|
75
|
+
throw new errors_1.InvalidResponseError('DKG completion event is not a valid object', endpoint);
|
|
76
|
+
}
|
|
77
|
+
const d = data;
|
|
78
|
+
if (!isNonEmptyString(d.wallet_id)) {
|
|
79
|
+
throw new errors_1.InvalidResponseError('DKG completion event missing wallet_id', endpoint, 'wallet_id');
|
|
80
|
+
}
|
|
81
|
+
if (d.public_key !== undefined && typeof d.public_key === 'string' && d.public_key.length > 0) {
|
|
82
|
+
if (!isHexString(d.public_key)) {
|
|
83
|
+
throw new errors_1.InvalidResponseError('DKG completion event has invalid public_key (must be hex string)', endpoint, 'public_key');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (d.address !== undefined && typeof d.address === 'string' && d.address.length > 0) {
|
|
87
|
+
if (!isEthAddress(d.address)) {
|
|
88
|
+
throw new errors_1.InvalidResponseError('DKG completion event has invalid address (must be 0x + 40 hex chars)', endpoint, 'address');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
wallet_id: d.wallet_id,
|
|
93
|
+
public_key: d.public_key || '',
|
|
94
|
+
address: d.address,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Validate a sign request response from an agent.
|
|
99
|
+
*/
|
|
100
|
+
function validateSignResponse(data, endpoint) {
|
|
101
|
+
if (!isObject(data)) {
|
|
102
|
+
throw new errors_1.InvalidResponseError('Sign response is not a valid object', endpoint);
|
|
103
|
+
}
|
|
104
|
+
const d = data;
|
|
105
|
+
if (!isNonEmptyString(d.request_id)) {
|
|
106
|
+
throw new errors_1.InvalidResponseError('Sign response missing or empty request_id', endpoint, 'request_id');
|
|
107
|
+
}
|
|
108
|
+
if (!isNonEmptyString(d.wallet_id)) {
|
|
109
|
+
throw new errors_1.InvalidResponseError('Sign response missing or empty wallet_id', endpoint, 'wallet_id');
|
|
110
|
+
}
|
|
111
|
+
if (!isNonEmptyString(d.status)) {
|
|
112
|
+
throw new errors_1.InvalidResponseError('Sign response missing or empty status', endpoint, 'status');
|
|
113
|
+
}
|
|
114
|
+
return d;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Validate a sign result (polling) response.
|
|
118
|
+
*/
|
|
119
|
+
function validateSignResultResponse(data, endpoint) {
|
|
120
|
+
if (!isObject(data)) {
|
|
121
|
+
throw new errors_1.InvalidResponseError('Sign result response is not a valid object', endpoint);
|
|
122
|
+
}
|
|
123
|
+
const d = data;
|
|
124
|
+
if (!isNonEmptyString(d.request_id)) {
|
|
125
|
+
throw new errors_1.InvalidResponseError('Sign result response missing request_id', endpoint, 'request_id');
|
|
126
|
+
}
|
|
127
|
+
if (!isNonEmptyString(d.wallet_id)) {
|
|
128
|
+
throw new errors_1.InvalidResponseError('Sign result response missing wallet_id', endpoint, 'wallet_id');
|
|
129
|
+
}
|
|
130
|
+
if (d.status !== 'pending' && d.status !== 'complete') {
|
|
131
|
+
throw new errors_1.InvalidResponseError(`Sign result response has invalid status: ${d.status} (expected 'pending' or 'complete')`, endpoint, 'status');
|
|
132
|
+
}
|
|
133
|
+
// When complete, signature must be a valid hex string
|
|
134
|
+
if (d.status === 'complete') {
|
|
135
|
+
if (!isNonEmptyString(d.signature)) {
|
|
136
|
+
throw new errors_1.InvalidResponseError('Sign result is complete but missing signature', endpoint, 'signature');
|
|
137
|
+
}
|
|
138
|
+
if (!isHexString(d.signature)) {
|
|
139
|
+
throw new errors_1.InvalidResponseError('Sign result has invalid signature (must be hex string)', endpoint, 'signature');
|
|
140
|
+
}
|
|
141
|
+
// ECDSA signature = 65 bytes = 130 hex chars (+ optional 0x prefix)
|
|
142
|
+
// Schnorr signature = 64 bytes = 128 hex chars
|
|
143
|
+
const sigHex = d.signature.startsWith('0x')
|
|
144
|
+
? d.signature.slice(2)
|
|
145
|
+
: d.signature;
|
|
146
|
+
if (sigHex.length < 128) {
|
|
147
|
+
throw new errors_1.InvalidResponseError(`Sign result signature too short: ${sigHex.length} hex chars (expected >= 128)`, endpoint, 'signature');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return d;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Validate a health response.
|
|
154
|
+
*/
|
|
155
|
+
function validateHealthResponse(data, endpoint) {
|
|
156
|
+
if (!isObject(data)) {
|
|
157
|
+
throw new errors_1.InvalidResponseError('Health response is not a valid object', endpoint);
|
|
158
|
+
}
|
|
159
|
+
const d = data;
|
|
160
|
+
if (!isNonEmptyString(d.status)) {
|
|
161
|
+
throw new errors_1.InvalidResponseError('Health response missing status', endpoint, 'status');
|
|
162
|
+
}
|
|
163
|
+
return d;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Validate a status response.
|
|
167
|
+
*/
|
|
168
|
+
function validateStatusResponse(data, endpoint) {
|
|
169
|
+
if (!isObject(data)) {
|
|
170
|
+
throw new errors_1.InvalidResponseError('Status response is not a valid object', endpoint);
|
|
171
|
+
}
|
|
172
|
+
const d = data;
|
|
173
|
+
if (!isNonEmptyString(d.peer_id)) {
|
|
174
|
+
throw new errors_1.InvalidResponseError('Status response missing peer_id', endpoint, 'peer_id');
|
|
175
|
+
}
|
|
176
|
+
if (!Array.isArray(d.connected_peer_ids)) {
|
|
177
|
+
throw new errors_1.InvalidResponseError('Status response missing connected_peer_ids array', endpoint, 'connected_peer_ids');
|
|
178
|
+
}
|
|
179
|
+
return d;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Validate a wallets list response.
|
|
183
|
+
*/
|
|
184
|
+
function validateWalletsResponse(data, endpoint) {
|
|
185
|
+
if (!isObject(data)) {
|
|
186
|
+
throw new errors_1.InvalidResponseError('Wallets response is not a valid object', endpoint);
|
|
187
|
+
}
|
|
188
|
+
const d = data;
|
|
189
|
+
if (!Array.isArray(d.wallets)) {
|
|
190
|
+
throw new errors_1.InvalidResponseError('Wallets response missing wallets array', endpoint, 'wallets');
|
|
191
|
+
}
|
|
192
|
+
// Validate each wallet entry
|
|
193
|
+
for (let i = 0; i < d.wallets.length; i++) {
|
|
194
|
+
const w = d.wallets[i];
|
|
195
|
+
if (!isObject(w)) {
|
|
196
|
+
throw new errors_1.InvalidResponseError(`Wallets response entry ${i} is not a valid object`, endpoint, `wallets[${i}]`);
|
|
197
|
+
}
|
|
198
|
+
if (!isNonEmptyString(w.wallet_id)) {
|
|
199
|
+
throw new errors_1.InvalidResponseError(`Wallets response entry ${i} missing wallet_id`, endpoint, `wallets[${i}].wallet_id`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return d;
|
|
203
|
+
}
|
|
204
|
+
// ────────────────────────────────────────────────
|
|
205
|
+
// Input Validation
|
|
206
|
+
// ────────────────────────────────────────────────
|
|
207
|
+
/** All supported chains (must stay in sync with Chain type) */
|
|
208
|
+
const SUPPORTED_CHAINS = [
|
|
209
|
+
// EVM L1s
|
|
210
|
+
'ethereum', 'polygon', 'bsc', 'avalanche', 'fantom', 'gnosis',
|
|
211
|
+
'celo', 'cronos', 'moonbeam', 'moonriver', 'harmony', 'kava',
|
|
212
|
+
'canto', 'aurora', 'klaytn', 'okc', 'fuse', 'evmos', 'core',
|
|
213
|
+
'flare', 'iotex', 'rootstock', 'telos', 'thundercore',
|
|
214
|
+
// EVM L2s
|
|
215
|
+
'arbitrum', 'optimism', 'base', 'zksync', 'scroll', 'linea',
|
|
216
|
+
'mantle', 'blast', 'mode', 'manta', 'polygon-zkevm', 'metis',
|
|
217
|
+
'zora', 'sei', 'boba', 'taiko', 'opbnb', 'fraxtal', 'worldchain',
|
|
218
|
+
'lisk', 'redstone', 'cyber', 'mint', 'bob', 'xai', 'morph',
|
|
219
|
+
'astar-zkevm',
|
|
220
|
+
// Non-EVM
|
|
221
|
+
'bitcoin', 'solana', 'cosmos', 'near', 'sui', 'aptos',
|
|
222
|
+
'polkadot', 'cardano', 'tron', 'dogecoin', 'litecoin',
|
|
223
|
+
'stellar', 'ton', 'algorand', 'tezos', 'ripple',
|
|
224
|
+
];
|
|
225
|
+
/** EVM-compatible chains (use 0x addresses) */
|
|
226
|
+
const EVM_CHAINS = [
|
|
227
|
+
// Layer 1s
|
|
228
|
+
'ethereum', 'polygon', 'bsc', 'avalanche', 'fantom', 'gnosis',
|
|
229
|
+
'celo', 'cronos', 'moonbeam', 'moonriver', 'harmony', 'kava',
|
|
230
|
+
'canto', 'aurora', 'klaytn', 'okc', 'fuse', 'evmos', 'core',
|
|
231
|
+
'flare', 'iotex', 'rootstock', 'telos', 'thundercore',
|
|
232
|
+
// Layer 2s
|
|
233
|
+
'arbitrum', 'optimism', 'base', 'zksync', 'scroll', 'linea',
|
|
234
|
+
'mantle', 'blast', 'mode', 'manta', 'polygon-zkevm', 'metis',
|
|
235
|
+
'zora', 'sei', 'boba', 'taiko', 'opbnb', 'fraxtal', 'worldchain',
|
|
236
|
+
'lisk', 'redstone', 'cyber', 'mint', 'bob', 'xai', 'morph',
|
|
237
|
+
'astar-zkevm', 'tron',
|
|
238
|
+
];
|
|
239
|
+
/** Wallet ID: alphanumeric, hyphens, underscores, max 64 chars */
|
|
240
|
+
const WALLET_ID_PATTERN = /^[a-zA-Z0-9_-]{1,64}$/;
|
|
241
|
+
/** Base58 pattern (Solana, Bitcoin) */
|
|
242
|
+
const BASE58_PATTERN = /^[1-9A-HJ-NP-Za-km-z]+$/;
|
|
243
|
+
/**
|
|
244
|
+
* Validate a wallet ID string.
|
|
245
|
+
*/
|
|
246
|
+
function validateWalletId(walletId) {
|
|
247
|
+
if (typeof walletId !== 'string' || walletId.length === 0) {
|
|
248
|
+
throw new errors_1.ValidationError('walletId must be a non-empty string', 'walletId');
|
|
249
|
+
}
|
|
250
|
+
if (walletId.length > 64) {
|
|
251
|
+
throw new errors_1.ValidationError(`walletId must be at most 64 characters (got ${walletId.length})`, 'walletId');
|
|
252
|
+
}
|
|
253
|
+
if (!WALLET_ID_PATTERN.test(walletId)) {
|
|
254
|
+
throw new errors_1.ValidationError('walletId must contain only alphanumeric characters, hyphens, and underscores', 'walletId');
|
|
255
|
+
}
|
|
256
|
+
return walletId;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Validate a chain name against the supported chains list.
|
|
260
|
+
*/
|
|
261
|
+
function validateChain(chain) {
|
|
262
|
+
if (typeof chain !== 'string' || chain.length === 0) {
|
|
263
|
+
throw new errors_1.ValidationError('chain must be a non-empty string', 'chain');
|
|
264
|
+
}
|
|
265
|
+
if (!SUPPORTED_CHAINS.includes(chain)) {
|
|
266
|
+
throw new errors_1.ValidationError(`Unsupported chain: '${chain}'. Supported chains: ${SUPPORTED_CHAINS.join(', ')}`, 'chain');
|
|
267
|
+
}
|
|
268
|
+
return chain;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Validate an address format based on the target chain.
|
|
272
|
+
*/
|
|
273
|
+
function validateAddress(address, chain) {
|
|
274
|
+
if (typeof address !== 'string' || address.length === 0) {
|
|
275
|
+
throw new errors_1.ValidationError('address must be a non-empty string', 'address');
|
|
276
|
+
}
|
|
277
|
+
if (EVM_CHAINS.includes(chain)) {
|
|
278
|
+
if (!ETH_ADDRESS_PATTERN.test(address)) {
|
|
279
|
+
throw new errors_1.ValidationError(`Invalid ${chain} address: must match 0x followed by 40 hex characters`, 'address');
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
else if (chain === 'solana') {
|
|
283
|
+
if (!BASE58_PATTERN.test(address) || address.length < 32 || address.length > 44) {
|
|
284
|
+
throw new errors_1.ValidationError('Invalid Solana address: must be 32-44 base58 characters', 'address');
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else if (chain === 'bitcoin') {
|
|
288
|
+
// Bitcoin addresses: legacy (1...), SegWit (3..., bc1...)
|
|
289
|
+
const btcPattern = /^(1|3|bc1)[a-zA-HJ-NP-Z0-9]{25,62}$/;
|
|
290
|
+
if (!btcPattern.test(address)) {
|
|
291
|
+
throw new errors_1.ValidationError('Invalid Bitcoin address format', 'address');
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// For other chains (cosmos, near, etc.) we do basic length check
|
|
295
|
+
else if (address.length < 10) {
|
|
296
|
+
throw new errors_1.ValidationError(`Address too short for ${chain}`, 'address');
|
|
297
|
+
}
|
|
298
|
+
return address;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Validate a positive numeric amount (for transactions).
|
|
302
|
+
*/
|
|
303
|
+
function validateAmount(amount, paramName = 'amount') {
|
|
304
|
+
if (typeof amount !== 'number') {
|
|
305
|
+
throw new errors_1.ValidationError(`${paramName} must be a number`, paramName);
|
|
306
|
+
}
|
|
307
|
+
if (isNaN(amount)) {
|
|
308
|
+
throw new errors_1.ValidationError(`${paramName} must not be NaN`, paramName);
|
|
309
|
+
}
|
|
310
|
+
if (!isFinite(amount)) {
|
|
311
|
+
throw new errors_1.ValidationError(`${paramName} must be finite (not Infinity)`, paramName);
|
|
312
|
+
}
|
|
313
|
+
if (amount <= 0) {
|
|
314
|
+
throw new errors_1.ValidationError(`${paramName} must be positive (got ${amount})`, paramName);
|
|
315
|
+
}
|
|
316
|
+
return amount;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Validate a string amount (wei, lamports, etc.) used in EVM transactions.
|
|
320
|
+
* Must represent a valid positive integer or bigint.
|
|
321
|
+
*/
|
|
322
|
+
function validateStringAmount(value, paramName = 'value') {
|
|
323
|
+
if (typeof value === 'bigint') {
|
|
324
|
+
if (value <= 0n) {
|
|
325
|
+
throw new errors_1.ValidationError(`${paramName} must be positive`, paramName);
|
|
326
|
+
}
|
|
327
|
+
return value;
|
|
328
|
+
}
|
|
329
|
+
if (typeof value === 'string') {
|
|
330
|
+
if (value.length === 0) {
|
|
331
|
+
throw new errors_1.ValidationError(`${paramName} must be a non-empty string`, paramName);
|
|
332
|
+
}
|
|
333
|
+
try {
|
|
334
|
+
const n = BigInt(value);
|
|
335
|
+
if (n <= 0n) {
|
|
336
|
+
throw new errors_1.ValidationError(`${paramName} must be positive`, paramName);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
catch (e) {
|
|
340
|
+
if (e instanceof errors_1.ValidationError)
|
|
341
|
+
throw e;
|
|
342
|
+
throw new errors_1.ValidationError(`${paramName} must be a valid numeric string (got '${value}')`, paramName);
|
|
343
|
+
}
|
|
344
|
+
return value;
|
|
345
|
+
}
|
|
346
|
+
throw new errors_1.ValidationError(`${paramName} must be a string or bigint`, paramName);
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Validate a hex-encoded message for signing.
|
|
350
|
+
*/
|
|
351
|
+
function validateHexMessage(message, paramName = 'message') {
|
|
352
|
+
if (typeof message !== 'string' || message.length === 0) {
|
|
353
|
+
throw new errors_1.ValidationError(`${paramName} must be a non-empty string`, paramName);
|
|
354
|
+
}
|
|
355
|
+
if (!isHexString(message)) {
|
|
356
|
+
throw new errors_1.ValidationError(`${paramName} must be a hex-encoded string`, paramName);
|
|
357
|
+
}
|
|
358
|
+
return message;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Validate threshold parameters.
|
|
362
|
+
*/
|
|
363
|
+
function validateThreshold(threshold) {
|
|
364
|
+
if (!isObject(threshold)) {
|
|
365
|
+
throw new errors_1.ValidationError('threshold must be an object with t and n fields', 'threshold');
|
|
366
|
+
}
|
|
367
|
+
const t = threshold.t;
|
|
368
|
+
const n = threshold.n;
|
|
369
|
+
if (!isNumber(t) || t < 1 || !Number.isInteger(t)) {
|
|
370
|
+
throw new errors_1.ValidationError('threshold.t must be a positive integer', 'threshold.t');
|
|
371
|
+
}
|
|
372
|
+
if (!isNumber(n) || n < 1 || !Number.isInteger(n)) {
|
|
373
|
+
throw new errors_1.ValidationError('threshold.n must be a positive integer', 'threshold.n');
|
|
374
|
+
}
|
|
375
|
+
if (t > n) {
|
|
376
|
+
throw new errors_1.ValidationError(`threshold.t (${t}) must not exceed threshold.n (${n})`, 'threshold');
|
|
377
|
+
}
|
|
378
|
+
return { t, n };
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|
package/dist/wallet/wallet.d.ts
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* const balance = await wallet.getBalance();
|
|
23
23
|
* ```
|
|
24
24
|
*/
|
|
25
|
-
import { Chain, Threshold, SignedTransaction, EvmTransaction, BtcTransaction, SolTransaction } from '../core/types';
|
|
25
|
+
import { Chain, Threshold, SignedTransaction, EvmTransaction, BtcTransaction, SolTransaction, OwnerSigner } from '../core/types';
|
|
26
26
|
export interface WalletConfig {
|
|
27
27
|
walletId: string;
|
|
28
28
|
chain: Chain;
|
|
@@ -32,6 +32,8 @@ export interface WalletConfig {
|
|
|
32
32
|
agentUrl: string;
|
|
33
33
|
rpcUrl: string;
|
|
34
34
|
curve: string;
|
|
35
|
+
/** Optional signer for wallet ownership proofs on sign requests */
|
|
36
|
+
ownerSigner?: OwnerSigner;
|
|
35
37
|
}
|
|
36
38
|
export declare class Wallet {
|
|
37
39
|
/** The wallet's unique ID in the Sequence0 network */
|
|
@@ -48,6 +50,7 @@ export declare class Wallet {
|
|
|
48
50
|
private http;
|
|
49
51
|
private adapter;
|
|
50
52
|
private agentUrl;
|
|
53
|
+
private ownerSigner;
|
|
51
54
|
constructor(config: WalletConfig);
|
|
52
55
|
/**
|
|
53
56
|
* Sign a transaction using the FROST threshold network
|
|
@@ -138,7 +141,16 @@ export declare class Wallet {
|
|
|
138
141
|
* Submit a message for FROST signing and wait for the result
|
|
139
142
|
*/
|
|
140
143
|
private requestAndWaitSignature;
|
|
144
|
+
/**
|
|
145
|
+
* Build an ownership proof for a sign request.
|
|
146
|
+
*
|
|
147
|
+
* The proof is: sign( keccak256( wallet_id_bytes + message_hex_bytes + timestamp_be_bytes ) )
|
|
148
|
+
*
|
|
149
|
+
* Returns null when no ownerSigner is configured (backwards compatible).
|
|
150
|
+
*/
|
|
151
|
+
private signOwnershipProof;
|
|
141
152
|
private createAdapter;
|
|
153
|
+
private static readonly EVM_CHAINS;
|
|
142
154
|
private isEvmChain;
|
|
143
155
|
}
|
|
144
156
|
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/wallet/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACH,KAAK,EACL,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/wallet/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACH,KAAK,EACL,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EAId,WAAW,EACd,MAAM,eAAe,CAAC;AAavB,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B;AAED,qBAAa,MAAM;IACf,sDAAsD;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uCAAuC;IACvC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAqB;gBAE5B,MAAM,EAAE,YAAY;IAkBhC;;;;;;;;;;;;;;;OAeG;IACG,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,cAAc,GAAG,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwBrG;;;;;;;;;;;;;;;;;;;OAmBG;IACG,eAAe,CAAC,WAAW,EAAE,cAAc,GAAG,cAAc,GAAG,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAcrG;;;;OAIG;IACG,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAU7D;;;;;;;;OAQG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBnD;;;;;;;;;;;OAWG;IACG,aAAa,CAAC,SAAS,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAC;QAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBnB;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC;;OAEG;IACH,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAe/B;;OAEG;YACW,uBAAuB;IAyDrC;;;;;;OAMG;YACW,kBAAkB;IA+BhC,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAYhC;IAEF,OAAO,CAAC,UAAU;CAGrB"}
|