@frequency-chain/ethereum-utils 1.17.0-rc5 → 1.17.0-rc6
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/address.d.ts +1 -1
- package/browser/frequency-ethereum-utils.esm.min.js +1297 -862
- package/browser/frequency-ethereum-utils.umd.min.js +1275 -848
- package/cjs/index.js +8 -8
- package/cjs/signature.definitions.js +44 -1
- package/cjs/signature.js +186 -64
- package/esm/index.js +8 -8
- package/esm/signature.definitions.js +43 -0
- package/esm/signature.js +132 -15
- package/index.d.ts +31 -14
- package/package.json +7 -4
- package/payloads.d.ts +20 -1
- package/signature.d.ts +45 -5
- package/signature.definitions.d.ts +65 -1
- package/utils.d.ts +1 -1
package/cjs/index.js
CHANGED
|
@@ -36,12 +36,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
36
36
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const address = __importStar(require("./address"));
|
|
40
|
-
const payloads = __importStar(require("./payloads"));
|
|
41
|
-
const signature = __importStar(require("./signature"));
|
|
42
|
-
const signatureDefinitions = __importStar(require("./signature.definitions"));
|
|
43
|
-
__exportStar(require("./payloads"), exports);
|
|
44
|
-
__exportStar(require("./signature"), exports);
|
|
45
|
-
__exportStar(require("./signature.definitions"), exports);
|
|
46
|
-
__exportStar(require("./address"), exports);
|
|
39
|
+
const address = __importStar(require("./address.js"));
|
|
40
|
+
const payloads = __importStar(require("./payloads.js"));
|
|
41
|
+
const signature = __importStar(require("./signature.js"));
|
|
42
|
+
const signatureDefinitions = __importStar(require("./signature.definitions.js"));
|
|
43
|
+
__exportStar(require("./payloads.js"), exports);
|
|
44
|
+
__exportStar(require("./signature.js"), exports);
|
|
45
|
+
__exportStar(require("./signature.definitions.js"), exports);
|
|
46
|
+
__exportStar(require("./address.js"), exports);
|
|
47
47
|
exports.default = { ...payloads, ...address, ...signatureDefinitions, ...signature };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PASSKEY_PUBLIC_KEY_DEFINITION = exports.CLAIM_HANDLE_PAYLOAD_DEFINITION = exports.ADD_KEY_DATA_DEFINITION = exports.ADD_PROVIDER_DEFINITION = exports.EIP712_DOMAIN_DEFAULT = exports.EIP712_DOMAIN_DEFINITION = void 0;
|
|
3
|
+
exports.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION = exports.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PASSKEY_PUBLIC_KEY_DEFINITION = exports.CLAIM_HANDLE_PAYLOAD_DEFINITION = exports.AUTHORIZED_KEY_DATA_DEFINITION = exports.ADD_KEY_DATA_DEFINITION = exports.ADD_PROVIDER_DEFINITION = exports.EIP712_DOMAIN_DEFAULT = exports.EIP712_DOMAIN_DEFINITION = void 0;
|
|
4
4
|
exports.EIP712_DOMAIN_DEFINITION = {
|
|
5
5
|
EIP712Domain: [
|
|
6
6
|
{
|
|
@@ -60,6 +60,22 @@ exports.ADD_KEY_DATA_DEFINITION = {
|
|
|
60
60
|
},
|
|
61
61
|
],
|
|
62
62
|
};
|
|
63
|
+
exports.AUTHORIZED_KEY_DATA_DEFINITION = {
|
|
64
|
+
AuthorizedKeyData: [
|
|
65
|
+
{
|
|
66
|
+
name: 'msaId',
|
|
67
|
+
type: 'uint64',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'expiration',
|
|
71
|
+
type: 'uint32',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'authorizedPublicKey',
|
|
75
|
+
type: 'address',
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
};
|
|
63
79
|
exports.CLAIM_HANDLE_PAYLOAD_DEFINITION = {
|
|
64
80
|
ClaimHandlePayload: [
|
|
65
81
|
{
|
|
@@ -149,3 +165,30 @@ exports.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2 = {
|
|
|
149
165
|
{ name: 'index', type: 'uint16' },
|
|
150
166
|
],
|
|
151
167
|
};
|
|
168
|
+
exports.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION = {
|
|
169
|
+
SiwfSignedRequestPayload: [
|
|
170
|
+
{
|
|
171
|
+
name: 'callback',
|
|
172
|
+
type: 'string',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: 'permissions',
|
|
176
|
+
type: 'uint16[]',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: 'userIdentifierAdminUrl',
|
|
180
|
+
type: 'string',
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
};
|
|
184
|
+
const PAYLOAD_DEFINITIONS = [
|
|
185
|
+
exports.ADD_PROVIDER_DEFINITION,
|
|
186
|
+
exports.ADD_KEY_DATA_DEFINITION,
|
|
187
|
+
exports.AUTHORIZED_KEY_DATA_DEFINITION,
|
|
188
|
+
exports.CLAIM_HANDLE_PAYLOAD_DEFINITION,
|
|
189
|
+
exports.PASSKEY_PUBLIC_KEY_DEFINITION,
|
|
190
|
+
exports.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
191
|
+
exports.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
192
|
+
exports.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
193
|
+
exports.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION,
|
|
194
|
+
];
|
package/cjs/signature.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
3
|
+
exports.sign = sign;
|
|
4
|
+
exports.verifySignature = verifySignature;
|
|
5
5
|
exports.createAddKeyData = createAddKeyData;
|
|
6
|
+
exports.createAuthorizedKeyData = createAuthorizedKeyData;
|
|
6
7
|
exports.createAddProvider = createAddProvider;
|
|
7
8
|
exports.createClaimHandlePayload = createClaimHandlePayload;
|
|
8
9
|
exports.createPasskeyPublicKey = createPasskeyPublicKey;
|
|
@@ -11,48 +12,72 @@ exports.createItemizedDeleteAction = createItemizedDeleteAction;
|
|
|
11
12
|
exports.createItemizedSignaturePayloadV2 = createItemizedSignaturePayloadV2;
|
|
12
13
|
exports.createPaginatedDeleteSignaturePayloadV2 = createPaginatedDeleteSignaturePayloadV2;
|
|
13
14
|
exports.createPaginatedUpsertSignaturePayloadV2 = createPaginatedUpsertSignaturePayloadV2;
|
|
15
|
+
exports.createSiwfSignedRequestPayload = createSiwfSignedRequestPayload;
|
|
16
|
+
exports.createSiwfLoginRequestPayload = createSiwfLoginRequestPayload;
|
|
14
17
|
exports.getEip712BrowserRequestAddKeyData = getEip712BrowserRequestAddKeyData;
|
|
18
|
+
exports.getEip712BrowserRequestAuthorizedKeyData = getEip712BrowserRequestAuthorizedKeyData;
|
|
15
19
|
exports.getEip712BrowserRequestAddProvider = getEip712BrowserRequestAddProvider;
|
|
16
20
|
exports.getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2 = getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2;
|
|
17
21
|
exports.getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2 = getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2;
|
|
18
22
|
exports.getEip712BrowserRequestItemizedSignaturePayloadV2 = getEip712BrowserRequestItemizedSignaturePayloadV2;
|
|
19
23
|
exports.getEip712BrowserRequestClaimHandlePayload = getEip712BrowserRequestClaimHandlePayload;
|
|
20
24
|
exports.getEip712BrowserRequestPasskeyPublicKey = getEip712BrowserRequestPasskeyPublicKey;
|
|
25
|
+
exports.getEip712BrowserRequestSiwfSignedRequestPayload = getEip712BrowserRequestSiwfSignedRequestPayload;
|
|
21
26
|
exports.getEthereumRegularSigner = getEthereumRegularSigner;
|
|
22
27
|
exports.getEthereumMessageSigner = getEthereumMessageSigner;
|
|
23
|
-
const
|
|
24
|
-
const
|
|
28
|
+
const utils_js_1 = require("./utils.js");
|
|
29
|
+
const address_js_1 = require("./address.js");
|
|
25
30
|
const ethers_1 = require("ethers");
|
|
26
31
|
const util_1 = require("@polkadot/util");
|
|
27
|
-
const
|
|
32
|
+
const signature_definitions_js_1 = require("./signature.definitions.js");
|
|
28
33
|
/**
|
|
29
|
-
* Signing EIP-712 compatible signature
|
|
34
|
+
* Signing EIP-712 or ERC-191 compatible signature based on payload
|
|
30
35
|
* @param secretKey
|
|
31
36
|
* @param payload
|
|
32
37
|
* @param chain
|
|
33
38
|
*/
|
|
34
|
-
async function
|
|
35
|
-
const
|
|
39
|
+
async function sign(secretKey, payload, chain = 'Mainnet-Frequency') {
|
|
40
|
+
const signatureType = getSignatureType(payload.type);
|
|
36
41
|
const normalizedPayload = normalizePayload(payload);
|
|
37
42
|
const wallet = new ethers_1.ethers.Wallet(secretKey);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
let signature;
|
|
44
|
+
switch (signatureType) {
|
|
45
|
+
case 'EIP-712':
|
|
46
|
+
// TODO: use correct chainID for different networks
|
|
47
|
+
// TODO: use correct contract address for different payloads
|
|
48
|
+
signature = await wallet.signTypedData(signature_definitions_js_1.EIP712_DOMAIN_DEFAULT, getTypesFor(payload.type), normalizedPayload);
|
|
49
|
+
break;
|
|
50
|
+
case 'EIP-191':
|
|
51
|
+
signature = await wallet.signMessage(payload.message);
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
throw new Error(`Unsupported signature type : ${signatureType}`);
|
|
55
|
+
}
|
|
41
56
|
return { Ecdsa: signature };
|
|
42
57
|
}
|
|
43
58
|
/**
|
|
44
|
-
* Verify EIP-712 signatures
|
|
59
|
+
* Verify EIP-712 and ERC-191 signatures based on payload
|
|
45
60
|
* @param ethereumAddress
|
|
46
61
|
* @param signature
|
|
47
62
|
* @param payload
|
|
48
63
|
* @param chain
|
|
49
64
|
*/
|
|
50
|
-
function
|
|
51
|
-
const
|
|
65
|
+
function verifySignature(ethereumAddress, signature, payload, chain = 'Mainnet-Frequency') {
|
|
66
|
+
const signatureType = getSignatureType(payload.type);
|
|
52
67
|
const normalizedPayload = normalizePayload(payload);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
68
|
+
let recoveredAddress;
|
|
69
|
+
switch (signatureType) {
|
|
70
|
+
case 'EIP-712':
|
|
71
|
+
// TODO: use correct chainID for different networks
|
|
72
|
+
// TODO: use correct contract address for different payloads
|
|
73
|
+
recoveredAddress = ethers_1.ethers.verifyTypedData(signature_definitions_js_1.EIP712_DOMAIN_DEFAULT, getTypesFor(payload.type), normalizedPayload, signature);
|
|
74
|
+
break;
|
|
75
|
+
case 'EIP-191':
|
|
76
|
+
recoveredAddress = ethers_1.ethers.verifyMessage(payload.message, signature);
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
throw new Error(`Unsupported signature type : ${signatureType}`);
|
|
80
|
+
}
|
|
56
81
|
return recoveredAddress.toLowerCase() === ethereumAddress.toLowerCase();
|
|
57
82
|
}
|
|
58
83
|
function normalizePayload(payload) {
|
|
@@ -64,14 +89,27 @@ function normalizePayload(payload) {
|
|
|
64
89
|
case 'PasskeyPublicKey':
|
|
65
90
|
case 'ClaimHandlePayload':
|
|
66
91
|
case 'AddProvider':
|
|
92
|
+
case 'SiwfLoginRequestPayload':
|
|
67
93
|
break;
|
|
68
94
|
case 'AddKeyData':
|
|
69
95
|
// convert to 20 bytes ethereum address for signature
|
|
70
96
|
if (clonedPayload.newPublicKey.length !== 42) {
|
|
71
|
-
clonedPayload.newPublicKey = (0,
|
|
97
|
+
clonedPayload.newPublicKey = (0, address_js_1.reverseUnifiedAddressToEthereumAddress)(payload.newPublicKey);
|
|
72
98
|
}
|
|
73
99
|
clonedPayload.newPublicKey = clonedPayload.newPublicKey.toLowerCase();
|
|
74
100
|
break;
|
|
101
|
+
case 'AuthorizedKeyData':
|
|
102
|
+
// convert to 20 bytes ethereum address for signature
|
|
103
|
+
if (clonedPayload.authorizedPublicKey.length !== 42) {
|
|
104
|
+
clonedPayload.authorizedPublicKey = (0, address_js_1.reverseUnifiedAddressToEthereumAddress)(payload.authorizedPublicKey);
|
|
105
|
+
}
|
|
106
|
+
clonedPayload.authorizedPublicKey = clonedPayload.authorizedPublicKey.toLowerCase();
|
|
107
|
+
break;
|
|
108
|
+
case 'SiwfSignedRequestPayload':
|
|
109
|
+
if (clonedPayload.userIdentifierAdminUrl == null) {
|
|
110
|
+
clonedPayload.userIdentifierAdminUrl = '';
|
|
111
|
+
}
|
|
112
|
+
break;
|
|
75
113
|
default:
|
|
76
114
|
throw new Error(`Unsupported payload type: ${JSON.stringify(payload)}`);
|
|
77
115
|
}
|
|
@@ -81,13 +119,16 @@ function normalizePayload(payload) {
|
|
|
81
119
|
}
|
|
82
120
|
function getTypesFor(payloadType) {
|
|
83
121
|
const PAYLOAD_TYPE_DEFINITIONS = {
|
|
84
|
-
PaginatedUpsertSignaturePayloadV2:
|
|
85
|
-
PaginatedDeleteSignaturePayloadV2:
|
|
86
|
-
ItemizedSignaturePayloadV2:
|
|
87
|
-
PasskeyPublicKey:
|
|
88
|
-
ClaimHandlePayload:
|
|
89
|
-
AddKeyData:
|
|
90
|
-
|
|
122
|
+
PaginatedUpsertSignaturePayloadV2: signature_definitions_js_1.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
123
|
+
PaginatedDeleteSignaturePayloadV2: signature_definitions_js_1.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
124
|
+
ItemizedSignaturePayloadV2: signature_definitions_js_1.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
125
|
+
PasskeyPublicKey: signature_definitions_js_1.PASSKEY_PUBLIC_KEY_DEFINITION,
|
|
126
|
+
ClaimHandlePayload: signature_definitions_js_1.CLAIM_HANDLE_PAYLOAD_DEFINITION,
|
|
127
|
+
AddKeyData: signature_definitions_js_1.ADD_KEY_DATA_DEFINITION,
|
|
128
|
+
AuthorizedKeyData: signature_definitions_js_1.AUTHORIZED_KEY_DATA_DEFINITION,
|
|
129
|
+
AddProvider: signature_definitions_js_1.ADD_PROVIDER_DEFINITION,
|
|
130
|
+
// offchain signatures
|
|
131
|
+
SiwfSignedRequestPayload: signature_definitions_js_1.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION,
|
|
91
132
|
};
|
|
92
133
|
const definition = PAYLOAD_TYPE_DEFINITIONS[payloadType];
|
|
93
134
|
if (!definition) {
|
|
@@ -95,6 +136,12 @@ function getTypesFor(payloadType) {
|
|
|
95
136
|
}
|
|
96
137
|
return definition;
|
|
97
138
|
}
|
|
139
|
+
function getSignatureType(payloadType) {
|
|
140
|
+
if (payloadType === 'SiwfLoginRequestPayload') {
|
|
141
|
+
return 'EIP-191';
|
|
142
|
+
}
|
|
143
|
+
return 'EIP-712';
|
|
144
|
+
}
|
|
98
145
|
/**
|
|
99
146
|
* Build an AddKeyData payload for signature.
|
|
100
147
|
*
|
|
@@ -105,9 +152,9 @@ function getTypesFor(payloadType) {
|
|
|
105
152
|
function createAddKeyData(msaId, newPublicKey, expirationBlock) {
|
|
106
153
|
const parsedMsaId = typeof msaId === 'string' ? msaId : `${msaId}`;
|
|
107
154
|
const parsedNewPublicKey = typeof newPublicKey === 'object' ? (0, util_1.u8aToHex)(newPublicKey) : newPublicKey;
|
|
108
|
-
(0,
|
|
109
|
-
(0,
|
|
110
|
-
(0,
|
|
155
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint64String)(parsedMsaId), 'msaId should be a valid uint64');
|
|
156
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expirationBlock), 'expiration should be a valid uint32');
|
|
157
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedNewPublicKey), 'newPublicKey should be valid hex');
|
|
111
158
|
return {
|
|
112
159
|
type: 'AddKeyData',
|
|
113
160
|
msaId: parsedMsaId,
|
|
@@ -115,6 +162,26 @@ function createAddKeyData(msaId, newPublicKey, expirationBlock) {
|
|
|
115
162
|
newPublicKey: parsedNewPublicKey,
|
|
116
163
|
};
|
|
117
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Build an AuthorizedKeyData payload for signature.
|
|
167
|
+
*
|
|
168
|
+
* @param msaId MSA ID (uint64) to add the key
|
|
169
|
+
* @param authorizedPublicKey 32 bytes public key to authorize in hex or Uint8Array
|
|
170
|
+
* @param expirationBlock Block number after which this payload is invalid
|
|
171
|
+
*/
|
|
172
|
+
function createAuthorizedKeyData(msaId, newPublicKey, expirationBlock) {
|
|
173
|
+
const parsedMsaId = typeof msaId === 'string' ? msaId : `${msaId}`;
|
|
174
|
+
const parsedNewPublicKey = typeof newPublicKey === 'object' ? (0, util_1.u8aToHex)(newPublicKey) : newPublicKey;
|
|
175
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint64String)(parsedMsaId), 'msaId should be a valid uint64');
|
|
176
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expirationBlock), 'expiration should be a valid uint32');
|
|
177
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedNewPublicKey), 'newPublicKey should be valid hex');
|
|
178
|
+
return {
|
|
179
|
+
type: 'AuthorizedKeyData',
|
|
180
|
+
msaId: parsedMsaId,
|
|
181
|
+
expiration: expirationBlock,
|
|
182
|
+
authorizedPublicKey: parsedNewPublicKey,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
118
185
|
/**
|
|
119
186
|
* Build an AddProvider payload for signature.
|
|
120
187
|
*
|
|
@@ -123,10 +190,10 @@ function createAddKeyData(msaId, newPublicKey, expirationBlock) {
|
|
|
123
190
|
* @param expirationBlock Block number after which this payload is invalid
|
|
124
191
|
*/
|
|
125
192
|
function createAddProvider(authorizedMsaId, schemaIds, expirationBlock) {
|
|
126
|
-
(0,
|
|
127
|
-
(0,
|
|
193
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint64String)(authorizedMsaId), 'authorizedMsaId should be a valid uint64');
|
|
194
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expirationBlock), 'expiration should be a valid uint32');
|
|
128
195
|
schemaIds.forEach((schemaId) => {
|
|
129
|
-
(0,
|
|
196
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'schemaId should be a valid uint16');
|
|
130
197
|
});
|
|
131
198
|
return {
|
|
132
199
|
type: 'AddProvider',
|
|
@@ -142,8 +209,8 @@ function createAddProvider(authorizedMsaId, schemaIds, expirationBlock) {
|
|
|
142
209
|
* @param expirationBlock Block number after which this payload is invalid
|
|
143
210
|
*/
|
|
144
211
|
function createClaimHandlePayload(handle, expirationBlock) {
|
|
145
|
-
(0,
|
|
146
|
-
(0,
|
|
212
|
+
(0, utils_js_1.assert)(handle.length > 0, 'handle should be a valid string');
|
|
213
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expirationBlock), 'expiration should be a valid uint32');
|
|
147
214
|
return {
|
|
148
215
|
type: 'ClaimHandlePayload',
|
|
149
216
|
handle,
|
|
@@ -157,7 +224,7 @@ function createClaimHandlePayload(handle, expirationBlock) {
|
|
|
157
224
|
*/
|
|
158
225
|
function createPasskeyPublicKey(publicKey) {
|
|
159
226
|
const parsedNewPublicKey = typeof publicKey === 'object' ? (0, util_1.u8aToHex)(publicKey) : publicKey;
|
|
160
|
-
(0,
|
|
227
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedNewPublicKey), 'publicKey should be valid hex');
|
|
161
228
|
return {
|
|
162
229
|
type: 'PasskeyPublicKey',
|
|
163
230
|
publicKey: parsedNewPublicKey,
|
|
@@ -165,11 +232,11 @@ function createPasskeyPublicKey(publicKey) {
|
|
|
165
232
|
}
|
|
166
233
|
function createItemizedAddAction(data) {
|
|
167
234
|
const parsedData = typeof data === 'object' ? (0, util_1.u8aToHex)(data) : data;
|
|
168
|
-
(0,
|
|
235
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedData), 'itemized data should be valid hex');
|
|
169
236
|
return { actionType: 'Add', data, index: 0 };
|
|
170
237
|
}
|
|
171
238
|
function createItemizedDeleteAction(index) {
|
|
172
|
-
(0,
|
|
239
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(index), 'itemized index should be a valid uint16');
|
|
173
240
|
return { actionType: 'Delete', data: '0x', index };
|
|
174
241
|
}
|
|
175
242
|
/**
|
|
@@ -181,10 +248,10 @@ function createItemizedDeleteAction(index) {
|
|
|
181
248
|
* @param actions Array of Add/Delete itemized actions
|
|
182
249
|
*/
|
|
183
250
|
function createItemizedSignaturePayloadV2(schemaId, targetHash, expiration, actions) {
|
|
184
|
-
(0,
|
|
185
|
-
(0,
|
|
186
|
-
(0,
|
|
187
|
-
(0,
|
|
251
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'schemaId should be a valid uint16');
|
|
252
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(targetHash), 'targetHash should be a valid uint32');
|
|
253
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expiration), 'expiration should be a valid uint32');
|
|
254
|
+
(0, utils_js_1.assert)(actions.length > 0, 'At least one action is required for ItemizedSignaturePayloadV2');
|
|
188
255
|
return {
|
|
189
256
|
type: 'ItemizedSignaturePayloadV2',
|
|
190
257
|
schemaId,
|
|
@@ -202,10 +269,10 @@ function createItemizedSignaturePayloadV2(schemaId, targetHash, expiration, acti
|
|
|
202
269
|
* @param expiration uint32 expiration block
|
|
203
270
|
*/
|
|
204
271
|
function createPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, expiration) {
|
|
205
|
-
(0,
|
|
206
|
-
(0,
|
|
207
|
-
(0,
|
|
208
|
-
(0,
|
|
272
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'schemaId should be a valid uint16');
|
|
273
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(pageId), 'pageId should be a valid uint16');
|
|
274
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(targetHash), 'targetHash should be a valid uint32');
|
|
275
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expiration), 'expiration should be a valid uint32');
|
|
209
276
|
return {
|
|
210
277
|
type: 'PaginatedDeleteSignaturePayloadV2',
|
|
211
278
|
schemaId,
|
|
@@ -225,11 +292,11 @@ function createPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, e
|
|
|
225
292
|
*/
|
|
226
293
|
function createPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, expiration, payload) {
|
|
227
294
|
const parsedPayload = typeof payload === 'object' ? (0, util_1.u8aToHex)(payload) : payload;
|
|
228
|
-
(0,
|
|
229
|
-
(0,
|
|
230
|
-
(0,
|
|
231
|
-
(0,
|
|
232
|
-
(0,
|
|
295
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'schemaId should be a valid uint16');
|
|
296
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(pageId), 'pageId should be a valid uint16');
|
|
297
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(targetHash), 'targetHash should be a valid uint32');
|
|
298
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expiration), 'expiration should be a valid uint32');
|
|
299
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedPayload), 'payload should be valid hex');
|
|
233
300
|
return {
|
|
234
301
|
type: 'PaginatedUpsertSignaturePayloadV2',
|
|
235
302
|
schemaId,
|
|
@@ -239,6 +306,35 @@ function createPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, e
|
|
|
239
306
|
payload: parsedPayload,
|
|
240
307
|
};
|
|
241
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Build an SiwfSignedRequestPayload payload for signature.
|
|
311
|
+
*
|
|
312
|
+
* @param callback Callback URL for login
|
|
313
|
+
* @param permissions One or more schema IDs (uint16) the provider may use
|
|
314
|
+
* @param userIdentifierAdminUrl Only used for custom integration situations.
|
|
315
|
+
*/
|
|
316
|
+
function createSiwfSignedRequestPayload(callback, permissions, userIdentifierAdminUrl) {
|
|
317
|
+
permissions.forEach((schemaId) => {
|
|
318
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'permission should be a valid uint16');
|
|
319
|
+
});
|
|
320
|
+
return {
|
|
321
|
+
type: 'SiwfSignedRequestPayload',
|
|
322
|
+
callback: callback,
|
|
323
|
+
permissions,
|
|
324
|
+
userIdentifierAdminUrl,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Build an SiwfLoginRequestPayload payload for signature.
|
|
329
|
+
*
|
|
330
|
+
* @param message login message
|
|
331
|
+
*/
|
|
332
|
+
function createSiwfLoginRequestPayload(message) {
|
|
333
|
+
return {
|
|
334
|
+
type: 'SiwfLoginRequestPayload',
|
|
335
|
+
message,
|
|
336
|
+
};
|
|
337
|
+
}
|
|
242
338
|
/**
|
|
243
339
|
* Returns the EIP-712 browser request for a AddKeyData for signing.
|
|
244
340
|
*
|
|
@@ -247,10 +343,23 @@ function createPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, e
|
|
|
247
343
|
* @param expirationBlock Block number after which this payload is invalid
|
|
248
344
|
* @param domain
|
|
249
345
|
*/
|
|
250
|
-
function getEip712BrowserRequestAddKeyData(msaId, newPublicKey, expirationBlock, domain =
|
|
346
|
+
function getEip712BrowserRequestAddKeyData(msaId, newPublicKey, expirationBlock, domain = signature_definitions_js_1.EIP712_DOMAIN_DEFAULT) {
|
|
251
347
|
const message = createAddKeyData(msaId, newPublicKey, expirationBlock);
|
|
252
348
|
const normalized = normalizePayload(message);
|
|
253
|
-
return createEip712Payload(
|
|
349
|
+
return createEip712Payload(signature_definitions_js_1.ADD_KEY_DATA_DEFINITION, message.type, domain, normalized);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Returns the EIP-712 browser request for a AuthorizedKeyData for signing.
|
|
353
|
+
*
|
|
354
|
+
* @param msaId MSA ID (uint64) to add the key
|
|
355
|
+
* @param authorizedPublicKey 32 bytes public key to add in hex or Uint8Array
|
|
356
|
+
* @param expirationBlock Block number after which this payload is invalid
|
|
357
|
+
* @param domain
|
|
358
|
+
*/
|
|
359
|
+
function getEip712BrowserRequestAuthorizedKeyData(msaId, authorizedPublicKey, expirationBlock, domain = signature_definitions_js_1.EIP712_DOMAIN_DEFAULT) {
|
|
360
|
+
const message = createAuthorizedKeyData(msaId, authorizedPublicKey, expirationBlock);
|
|
361
|
+
const normalized = normalizePayload(message);
|
|
362
|
+
return createEip712Payload(signature_definitions_js_1.AUTHORIZED_KEY_DATA_DEFINITION, message.type, domain, normalized);
|
|
254
363
|
}
|
|
255
364
|
/**
|
|
256
365
|
* Returns the EIP-712 browser request for a AddProvider for signing.
|
|
@@ -260,10 +369,10 @@ function getEip712BrowserRequestAddKeyData(msaId, newPublicKey, expirationBlock,
|
|
|
260
369
|
* @param expirationBlock Block number after which this payload is invalid
|
|
261
370
|
* @param domain
|
|
262
371
|
*/
|
|
263
|
-
function getEip712BrowserRequestAddProvider(authorizedMsaId, schemaIds, expirationBlock, domain =
|
|
372
|
+
function getEip712BrowserRequestAddProvider(authorizedMsaId, schemaIds, expirationBlock, domain = signature_definitions_js_1.EIP712_DOMAIN_DEFAULT) {
|
|
264
373
|
const message = createAddProvider(authorizedMsaId, schemaIds, expirationBlock);
|
|
265
374
|
const normalized = normalizePayload(message);
|
|
266
|
-
return createEip712Payload(
|
|
375
|
+
return createEip712Payload(signature_definitions_js_1.ADD_PROVIDER_DEFINITION, message.type, domain, normalized);
|
|
267
376
|
}
|
|
268
377
|
/**
|
|
269
378
|
* Returns the EIP-712 browser request for a PaginatedUpsertSignaturePayloadV2 for signing.
|
|
@@ -275,10 +384,10 @@ function getEip712BrowserRequestAddProvider(authorizedMsaId, schemaIds, expirati
|
|
|
275
384
|
* @param payload HexString or Uint8Array data to upsert
|
|
276
385
|
* @param domain
|
|
277
386
|
*/
|
|
278
|
-
function getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, expiration, payload, domain =
|
|
387
|
+
function getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, expiration, payload, domain = signature_definitions_js_1.EIP712_DOMAIN_DEFAULT) {
|
|
279
388
|
const message = createPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, expiration, payload);
|
|
280
389
|
const normalized = normalizePayload(message);
|
|
281
|
-
return createEip712Payload(
|
|
390
|
+
return createEip712Payload(signature_definitions_js_1.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2, message.type, domain, normalized);
|
|
282
391
|
}
|
|
283
392
|
/**
|
|
284
393
|
* Returns the EIP-712 browser request for a PaginatedDeleteSignaturePayloadV2 for signing.
|
|
@@ -289,10 +398,10 @@ function getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2(schemaId, page
|
|
|
289
398
|
* @param expiration uint32 expiration block
|
|
290
399
|
* @param domain
|
|
291
400
|
*/
|
|
292
|
-
function getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, expiration, domain =
|
|
401
|
+
function getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, expiration, domain = signature_definitions_js_1.EIP712_DOMAIN_DEFAULT) {
|
|
293
402
|
const message = createPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, expiration);
|
|
294
403
|
const normalized = normalizePayload(message);
|
|
295
|
-
return createEip712Payload(
|
|
404
|
+
return createEip712Payload(signature_definitions_js_1.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2, message.type, domain, normalized);
|
|
296
405
|
}
|
|
297
406
|
/**
|
|
298
407
|
* Returns the EIP-712 browser request for a ItemizedSignaturePayloadV2 for signing.
|
|
@@ -303,10 +412,10 @@ function getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2(schemaId, page
|
|
|
303
412
|
* @param actions Array of Add/Delete itemized actions
|
|
304
413
|
* @param domain
|
|
305
414
|
*/
|
|
306
|
-
function getEip712BrowserRequestItemizedSignaturePayloadV2(schemaId, targetHash, expiration, actions, domain =
|
|
415
|
+
function getEip712BrowserRequestItemizedSignaturePayloadV2(schemaId, targetHash, expiration, actions, domain = signature_definitions_js_1.EIP712_DOMAIN_DEFAULT) {
|
|
307
416
|
const message = createItemizedSignaturePayloadV2(schemaId, targetHash, expiration, actions);
|
|
308
417
|
const normalized = normalizePayload(message);
|
|
309
|
-
return createEip712Payload(
|
|
418
|
+
return createEip712Payload(signature_definitions_js_1.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2, message.type, domain, normalized);
|
|
310
419
|
}
|
|
311
420
|
/**
|
|
312
421
|
* Returns the EIP-712 browser request for a ClaimHandlePayload for signing.
|
|
@@ -315,10 +424,10 @@ function getEip712BrowserRequestItemizedSignaturePayloadV2(schemaId, targetHash,
|
|
|
315
424
|
* @param expirationBlock Block number after which this payload is invalid
|
|
316
425
|
* @param domain
|
|
317
426
|
*/
|
|
318
|
-
function getEip712BrowserRequestClaimHandlePayload(handle, expirationBlock, domain =
|
|
427
|
+
function getEip712BrowserRequestClaimHandlePayload(handle, expirationBlock, domain = signature_definitions_js_1.EIP712_DOMAIN_DEFAULT) {
|
|
319
428
|
const message = createClaimHandlePayload(handle, expirationBlock);
|
|
320
429
|
const normalized = normalizePayload(message);
|
|
321
|
-
return createEip712Payload(
|
|
430
|
+
return createEip712Payload(signature_definitions_js_1.CLAIM_HANDLE_PAYLOAD_DEFINITION, message.type, domain, normalized);
|
|
322
431
|
}
|
|
323
432
|
/**
|
|
324
433
|
* Returns the EIP-712 browser request for a PasskeyPublicKey for signing.
|
|
@@ -326,15 +435,28 @@ function getEip712BrowserRequestClaimHandlePayload(handle, expirationBlock, doma
|
|
|
326
435
|
* @param publicKey The passkey’s public key (hex string or raw bytes)
|
|
327
436
|
* @param domain
|
|
328
437
|
*/
|
|
329
|
-
function getEip712BrowserRequestPasskeyPublicKey(publicKey, domain =
|
|
438
|
+
function getEip712BrowserRequestPasskeyPublicKey(publicKey, domain = signature_definitions_js_1.EIP712_DOMAIN_DEFAULT) {
|
|
330
439
|
const message = createPasskeyPublicKey(publicKey);
|
|
331
440
|
const normalized = normalizePayload(message);
|
|
332
|
-
return createEip712Payload(
|
|
441
|
+
return createEip712Payload(signature_definitions_js_1.PASSKEY_PUBLIC_KEY_DEFINITION, message.type, domain, normalized);
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Returns the EIP-712 browser request for a SiwfSignedRequestPayload for signing.
|
|
445
|
+
*
|
|
446
|
+
* @param callback Callback URL for login
|
|
447
|
+
* @param permissions One or more schema IDs (uint16) the provider may use
|
|
448
|
+
* @param userIdentifierAdminUrl Only used for custom integration situations.
|
|
449
|
+
* @param domain
|
|
450
|
+
*/
|
|
451
|
+
function getEip712BrowserRequestSiwfSignedRequestPayload(callback, permissions, userIdentifierAdminUrl, domain = signature_definitions_js_1.EIP712_DOMAIN_DEFAULT) {
|
|
452
|
+
const message = createSiwfSignedRequestPayload(callback, permissions, userIdentifierAdminUrl);
|
|
453
|
+
const normalized = normalizePayload(message);
|
|
454
|
+
return createEip712Payload(signature_definitions_js_1.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION, message.type, domain, normalized);
|
|
333
455
|
}
|
|
334
456
|
function createEip712Payload(typeDefinition, primaryType, domain, message) {
|
|
335
457
|
return {
|
|
336
458
|
types: {
|
|
337
|
-
...
|
|
459
|
+
...signature_definitions_js_1.EIP712_DOMAIN_DEFINITION,
|
|
338
460
|
...typeDefinition,
|
|
339
461
|
},
|
|
340
462
|
primaryType,
|
package/esm/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import * as address from './address';
|
|
2
|
-
import * as payloads from './payloads';
|
|
3
|
-
import * as signature from './signature';
|
|
4
|
-
import * as signatureDefinitions from './signature.definitions';
|
|
5
|
-
export * from './payloads';
|
|
6
|
-
export * from './signature';
|
|
7
|
-
export * from './signature.definitions';
|
|
8
|
-
export * from './address';
|
|
1
|
+
import * as address from './address.js';
|
|
2
|
+
import * as payloads from './payloads.js';
|
|
3
|
+
import * as signature from './signature.js';
|
|
4
|
+
import * as signatureDefinitions from './signature.definitions.js';
|
|
5
|
+
export * from './payloads.js';
|
|
6
|
+
export * from './signature.js';
|
|
7
|
+
export * from './signature.definitions.js';
|
|
8
|
+
export * from './address.js';
|
|
9
9
|
export default { ...payloads, ...address, ...signatureDefinitions, ...signature };
|
|
@@ -57,6 +57,22 @@ export const ADD_KEY_DATA_DEFINITION = {
|
|
|
57
57
|
},
|
|
58
58
|
],
|
|
59
59
|
};
|
|
60
|
+
export const AUTHORIZED_KEY_DATA_DEFINITION = {
|
|
61
|
+
AuthorizedKeyData: [
|
|
62
|
+
{
|
|
63
|
+
name: 'msaId',
|
|
64
|
+
type: 'uint64',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'expiration',
|
|
68
|
+
type: 'uint32',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'authorizedPublicKey',
|
|
72
|
+
type: 'address',
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
};
|
|
60
76
|
export const CLAIM_HANDLE_PAYLOAD_DEFINITION = {
|
|
61
77
|
ClaimHandlePayload: [
|
|
62
78
|
{
|
|
@@ -146,3 +162,30 @@ export const ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2 = {
|
|
|
146
162
|
{ name: 'index', type: 'uint16' },
|
|
147
163
|
],
|
|
148
164
|
};
|
|
165
|
+
export const SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION = {
|
|
166
|
+
SiwfSignedRequestPayload: [
|
|
167
|
+
{
|
|
168
|
+
name: 'callback',
|
|
169
|
+
type: 'string',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'permissions',
|
|
173
|
+
type: 'uint16[]',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'userIdentifierAdminUrl',
|
|
177
|
+
type: 'string',
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
};
|
|
181
|
+
const PAYLOAD_DEFINITIONS = [
|
|
182
|
+
ADD_PROVIDER_DEFINITION,
|
|
183
|
+
ADD_KEY_DATA_DEFINITION,
|
|
184
|
+
AUTHORIZED_KEY_DATA_DEFINITION,
|
|
185
|
+
CLAIM_HANDLE_PAYLOAD_DEFINITION,
|
|
186
|
+
PASSKEY_PUBLIC_KEY_DEFINITION,
|
|
187
|
+
PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
188
|
+
PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
189
|
+
ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
190
|
+
SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION,
|
|
191
|
+
];
|