@mentaproject/signer-react-native 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/signer.d.ts +27 -5
- package/dist/signer.d.ts.map +1 -1
- package/dist/signer.js +31 -3
- package/dist/signer.js.map +1 -1
- package/package.json +1 -1
- package/src/signer.ts +39 -5
package/dist/signer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Address, type Hex, type TypedData, type TypedDataDefinition } from "viem";
|
|
2
|
-
import type {
|
|
2
|
+
import type { PasskeyCredential, P256PublicKey, ReactNativePasskeySignerConfig, SignableMessage, SignatureEncodingFormat } from "./types/index.js";
|
|
3
3
|
/**
|
|
4
4
|
* Error thrown when passkey operations fail.
|
|
5
5
|
*/
|
|
@@ -8,10 +8,10 @@ export declare class PasskeySignerError extends Error {
|
|
|
8
8
|
constructor(message: string, cause?: unknown | undefined);
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* ReactNativePasskeySigner
|
|
11
|
+
* ReactNativePasskeySigner is compatible with Viem LocalAccount and SmartAccountSigner interfaces.
|
|
12
12
|
*
|
|
13
13
|
* This signer uses the device's biometric authentication (Face ID, Touch ID, fingerprint)
|
|
14
|
-
* to sign messages and
|
|
14
|
+
* to sign messages and typed data for ERC-4337 smart accounts via WebAuthn/Passkeys.
|
|
15
15
|
*
|
|
16
16
|
* The public key is a P-256 (secp256r1) key stored in the device's secure enclave.
|
|
17
17
|
*
|
|
@@ -29,8 +29,21 @@ export declare class PasskeySignerError extends Error {
|
|
|
29
29
|
* });
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
|
-
export declare class ReactNativePasskeySigner
|
|
33
|
-
|
|
32
|
+
export declare class ReactNativePasskeySigner {
|
|
33
|
+
/**
|
|
34
|
+
* Type identifier for Viem LocalAccount compatibility.
|
|
35
|
+
*/
|
|
36
|
+
readonly type: "local";
|
|
37
|
+
/**
|
|
38
|
+
* Source identifier for debugging and compatibility.
|
|
39
|
+
*/
|
|
40
|
+
readonly source: "react-native-passkey";
|
|
41
|
+
/**
|
|
42
|
+
* Deterministic address derived from the public key.
|
|
43
|
+
* Required for Viem LocalAccount compatibility.
|
|
44
|
+
* Note: This is not a real EOA address, but a pseudo-address derived from the P-256 public key.
|
|
45
|
+
*/
|
|
46
|
+
readonly address: Address;
|
|
34
47
|
/**
|
|
35
48
|
* The credential ID in Base64URL format.
|
|
36
49
|
*/
|
|
@@ -105,6 +118,15 @@ export declare class ReactNativePasskeySigner implements SmartAccountSigner<"pas
|
|
|
105
118
|
* @throws PasskeySignerError if signing fails
|
|
106
119
|
*/
|
|
107
120
|
signTypedData<const TTypedData extends TypedData | Record<string, unknown>, TPrimaryType extends keyof TTypedData | "EIP712Domain" = keyof TTypedData>(typedData: TypedDataDefinition<TTypedData, TPrimaryType>): Promise<Hex>;
|
|
121
|
+
/**
|
|
122
|
+
* Signs a transaction.
|
|
123
|
+
*
|
|
124
|
+
* This method is required for Viem LocalAccount compatibility but is not supported
|
|
125
|
+
* for smart account signers. Smart accounts sign UserOperations, not transactions directly.
|
|
126
|
+
*
|
|
127
|
+
* @throws PasskeySignerError always - smart account signers cannot sign transactions
|
|
128
|
+
*/
|
|
129
|
+
signTransaction(): Promise<Hex>;
|
|
108
130
|
/**
|
|
109
131
|
* Returns the address derived from the public key.
|
|
110
132
|
*
|
package/dist/signer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,SAAS,EACd,KAAK,mBAAmB,EAGzB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,SAAS,EACd,KAAK,mBAAmB,EAGzB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,8BAA8B,EAC9B,eAAe,EACf,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAe1B;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,KAAK,CAAC,EAAE,OAAO;gBAD/B,OAAO,EAAE,MAAM,EACC,KAAK,CAAC,EAAE,OAAO,YAAA;CAKlC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,wBAAwB;IACnC;;OAEG;IACH,SAAgB,IAAI,EAAG,OAAO,CAAU;IAExC;;OAEG;IACH,SAAgB,MAAM,EAAG,sBAAsB,CAAU;IAEzD;;;;OAIG;IACH,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;OAEG;IACH,SAAgB,YAAY,EAAE,MAAM,CAAC;IAErC;;OAEG;IACH,SAAgB,eAAe,EAAE,GAAG,CAAC;IAErC;;OAEG;IACH,SAAgB,oBAAoB,EAAE,aAAa,CAAC;IAEpD;;OAEG;IACH,SAAgB,SAAS,EAAE,GAAG,CAAC;IAE/B;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IAExD;;;;;;OAMG;IACH,OAAO;IAsBP;;;;;;;;;;;;;OAaG;WACiB,QAAQ,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAAC,wBAAwB,CAAC;IA2FpC;;;;;;;;OAQG;WACW,cAAc,CAC1B,UAAU,EAAE,iBAAiB,EAC7B,MAAM,EAAE,8BAA8B,GACrC,wBAAwB;IAQ3B;;;;;;;;;OASG;IACU,WAAW,CAAC,EACvB,OAAO,GACR,EAAE;QACD,OAAO,EAAE,eAAe,CAAC;KAC1B,GAAG,OAAO,CAAC,GAAG,CAAC;IAmChB;;;;;;OAMG;IACU,aAAa,CACxB,KAAK,CAAC,UAAU,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,YAAY,SAAS,MAAM,UAAU,GAAG,cAAc,GAAG,MAAM,UAAU,EACzE,SAAS,EAAE,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAWzE;;;;;;;OAOG;IACU,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC;IAM5C;;;;;;;;OAQG;IACU,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ3C;;OAEG;IACI,aAAa,IAAI,GAAG;IAI3B;;OAEG;IACI,aAAa,IAAI,GAAG;IAI3B;;OAEG;IACI,aAAa,IAAI,iBAAiB;IASzC;;;;;OAKG;IACI,mBAAmB,CACxB,MAAM,EAAE,uBAAuB,GAC9B,wBAAwB;IAO3B;;;;;OAKG;YACW,eAAe;IAwC7B;;OAEG;IACH,OAAO,CAAC,UAAU;CAQnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,iBAAiB,CAkB5B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,iBAAiB,GAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,iBAAiB,CAoBnB"}
|
package/dist/signer.js
CHANGED
|
@@ -15,10 +15,10 @@ export class PasskeySignerError extends Error {
|
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* ReactNativePasskeySigner
|
|
18
|
+
* ReactNativePasskeySigner is compatible with Viem LocalAccount and SmartAccountSigner interfaces.
|
|
19
19
|
*
|
|
20
20
|
* This signer uses the device's biometric authentication (Face ID, Touch ID, fingerprint)
|
|
21
|
-
* to sign messages and
|
|
21
|
+
* to sign messages and typed data for ERC-4337 smart accounts via WebAuthn/Passkeys.
|
|
22
22
|
*
|
|
23
23
|
* The public key is a P-256 (secp256r1) key stored in the device's secure enclave.
|
|
24
24
|
*
|
|
@@ -37,7 +37,20 @@ export class PasskeySignerError extends Error {
|
|
|
37
37
|
* ```
|
|
38
38
|
*/
|
|
39
39
|
export class ReactNativePasskeySigner {
|
|
40
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Type identifier for Viem LocalAccount compatibility.
|
|
42
|
+
*/
|
|
43
|
+
type = "local";
|
|
44
|
+
/**
|
|
45
|
+
* Source identifier for debugging and compatibility.
|
|
46
|
+
*/
|
|
47
|
+
source = "react-native-passkey";
|
|
48
|
+
/**
|
|
49
|
+
* Deterministic address derived from the public key.
|
|
50
|
+
* Required for Viem LocalAccount compatibility.
|
|
51
|
+
* Note: This is not a real EOA address, but a pseudo-address derived from the P-256 public key.
|
|
52
|
+
*/
|
|
53
|
+
address;
|
|
41
54
|
/**
|
|
42
55
|
* The credential ID in Base64URL format.
|
|
43
56
|
*/
|
|
@@ -70,6 +83,10 @@ export class ReactNativePasskeySigner {
|
|
|
70
83
|
this.credentialIdHex = credential.credentialIdHex;
|
|
71
84
|
this.publicKeyCoordinates = credential.publicKey;
|
|
72
85
|
this.publicKey = credential.publicKeyHex;
|
|
86
|
+
// Derive a deterministic address from the public key
|
|
87
|
+
// This is required for Viem LocalAccount compatibility
|
|
88
|
+
const hash = keccak256(credential.publicKeyHex);
|
|
89
|
+
this.address = `0x${hash.slice(-40)}`;
|
|
73
90
|
this.config = {
|
|
74
91
|
...config,
|
|
75
92
|
timeout: config.timeout ?? 60000,
|
|
@@ -233,6 +250,17 @@ export class ReactNativePasskeySigner {
|
|
|
233
250
|
const challenge = bytesToBase64Url(messageBytes);
|
|
234
251
|
return this.signWithPasskey(challenge);
|
|
235
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Signs a transaction.
|
|
255
|
+
*
|
|
256
|
+
* This method is required for Viem LocalAccount compatibility but is not supported
|
|
257
|
+
* for smart account signers. Smart accounts sign UserOperations, not transactions directly.
|
|
258
|
+
*
|
|
259
|
+
* @throws PasskeySignerError always - smart account signers cannot sign transactions
|
|
260
|
+
*/
|
|
261
|
+
async signTransaction() {
|
|
262
|
+
throw new PasskeySignerError("Smart Account Signer cannot sign transactions directly. Use signMessage to sign UserOperation hashes instead.");
|
|
263
|
+
}
|
|
236
264
|
/**
|
|
237
265
|
* Returns the address derived from the public key.
|
|
238
266
|
*
|
package/dist/signer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAKL,aAAa,EACb,SAAS,GACV,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/signer.ts
CHANGED
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
} from "viem";
|
|
10
10
|
|
|
11
11
|
import type {
|
|
12
|
-
SmartAccountSigner,
|
|
13
12
|
PasskeyCredential,
|
|
14
13
|
P256PublicKey,
|
|
15
14
|
ReactNativePasskeySignerConfig,
|
|
@@ -44,10 +43,10 @@ export class PasskeySignerError extends Error {
|
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
/**
|
|
47
|
-
* ReactNativePasskeySigner
|
|
46
|
+
* ReactNativePasskeySigner is compatible with Viem LocalAccount and SmartAccountSigner interfaces.
|
|
48
47
|
*
|
|
49
48
|
* This signer uses the device's biometric authentication (Face ID, Touch ID, fingerprint)
|
|
50
|
-
* to sign messages and
|
|
49
|
+
* to sign messages and typed data for ERC-4337 smart accounts via WebAuthn/Passkeys.
|
|
51
50
|
*
|
|
52
51
|
* The public key is a P-256 (secp256r1) key stored in the device's secure enclave.
|
|
53
52
|
*
|
|
@@ -65,8 +64,23 @@ export class PasskeySignerError extends Error {
|
|
|
65
64
|
* });
|
|
66
65
|
* ```
|
|
67
66
|
*/
|
|
68
|
-
export class ReactNativePasskeySigner
|
|
69
|
-
|
|
67
|
+
export class ReactNativePasskeySigner {
|
|
68
|
+
/**
|
|
69
|
+
* Type identifier for Viem LocalAccount compatibility.
|
|
70
|
+
*/
|
|
71
|
+
public readonly type = "local" as const;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Source identifier for debugging and compatibility.
|
|
75
|
+
*/
|
|
76
|
+
public readonly source = "react-native-passkey" as const;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Deterministic address derived from the public key.
|
|
80
|
+
* Required for Viem LocalAccount compatibility.
|
|
81
|
+
* Note: This is not a real EOA address, but a pseudo-address derived from the P-256 public key.
|
|
82
|
+
*/
|
|
83
|
+
public readonly address: Address;
|
|
70
84
|
|
|
71
85
|
/**
|
|
72
86
|
* The credential ID in Base64URL format.
|
|
@@ -108,6 +122,12 @@ export class ReactNativePasskeySigner implements SmartAccountSigner<"passkey"> {
|
|
|
108
122
|
this.credentialIdHex = credential.credentialIdHex;
|
|
109
123
|
this.publicKeyCoordinates = credential.publicKey;
|
|
110
124
|
this.publicKey = credential.publicKeyHex;
|
|
125
|
+
|
|
126
|
+
// Derive a deterministic address from the public key
|
|
127
|
+
// This is required for Viem LocalAccount compatibility
|
|
128
|
+
const hash = keccak256(credential.publicKeyHex);
|
|
129
|
+
this.address = `0x${hash.slice(-40)}` as Address;
|
|
130
|
+
|
|
111
131
|
this.config = {
|
|
112
132
|
...config,
|
|
113
133
|
timeout: config.timeout ?? 60000,
|
|
@@ -314,6 +334,20 @@ export class ReactNativePasskeySigner implements SmartAccountSigner<"passkey"> {
|
|
|
314
334
|
return this.signWithPasskey(challenge);
|
|
315
335
|
}
|
|
316
336
|
|
|
337
|
+
/**
|
|
338
|
+
* Signs a transaction.
|
|
339
|
+
*
|
|
340
|
+
* This method is required for Viem LocalAccount compatibility but is not supported
|
|
341
|
+
* for smart account signers. Smart accounts sign UserOperations, not transactions directly.
|
|
342
|
+
*
|
|
343
|
+
* @throws PasskeySignerError always - smart account signers cannot sign transactions
|
|
344
|
+
*/
|
|
345
|
+
public async signTransaction(): Promise<Hex> {
|
|
346
|
+
throw new PasskeySignerError(
|
|
347
|
+
"Smart Account Signer cannot sign transactions directly. Use signMessage to sign UserOperation hashes instead.",
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
|
|
317
351
|
/**
|
|
318
352
|
* Returns the address derived from the public key.
|
|
319
353
|
*
|