@frequency-chain/ethereum-utils 1.17.0-rc5 → 1.17.0-rc7

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