@zerodev/wallet-core 0.0.3 → 0.0.5
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/_cjs/actions/auth/getAuthenticators.js.map +1 -1
- package/dist/_cjs/actions/auth/index.js +3 -1
- package/dist/_cjs/actions/auth/index.js.map +1 -1
- package/dist/_cjs/actions/auth/logout.js +23 -0
- package/dist/_cjs/actions/auth/logout.js.map +1 -0
- package/dist/_cjs/actions/index.js +2 -1
- package/dist/_cjs/actions/index.js.map +1 -1
- package/dist/_cjs/actions/wallet/getUserWallet.js +1 -1
- package/dist/_cjs/actions/wallet/getUserWallet.js.map +1 -1
- package/dist/_cjs/actions/wallet/signingUtils.js +23 -3
- package/dist/_cjs/actions/wallet/signingUtils.js.map +1 -1
- package/dist/_cjs/adapters/viem.js +26 -9
- package/dist/_cjs/adapters/viem.js.map +1 -1
- package/dist/_cjs/client/decorators/client.js +1 -0
- package/dist/_cjs/client/decorators/client.js.map +1 -1
- package/dist/_cjs/client/transports/rest.js.map +1 -1
- package/dist/_cjs/core/createZeroDevWalletCore.js +297 -168
- package/dist/_cjs/core/createZeroDevWalletCore.js.map +1 -1
- package/dist/_cjs/index.js +2 -1
- package/dist/_cjs/index.js.map +1 -1
- package/dist/_cjs/index.native.js +2 -1
- package/dist/_cjs/index.native.js.map +1 -1
- package/dist/_cjs/native/stampers/secureStore.js +94 -17
- package/dist/_cjs/native/stampers/secureStore.js.map +1 -1
- package/dist/_cjs/stampers/indexedDbStamper.js +34 -0
- package/dist/_cjs/stampers/indexedDbStamper.js.map +1 -1
- package/dist/_cjs/storage/manager.js +144 -17
- package/dist/_cjs/storage/manager.js.map +1 -1
- package/dist/_cjs/utils/buildClientSignature.js +4 -1
- package/dist/_cjs/utils/buildClientSignature.js.map +1 -1
- package/dist/_cjs/utils/derToRawSignature.js +12 -0
- package/dist/_cjs/utils/derToRawSignature.js.map +1 -1
- package/dist/_cjs/utils/exportPrivateKey.js +1 -1
- package/dist/_cjs/utils/exportPrivateKey.js.map +1 -1
- package/dist/_cjs/utils/utils.js +27 -6
- package/dist/_cjs/utils/utils.js.map +1 -1
- package/dist/_esm/actions/auth/getAuthenticators.js +3 -2
- package/dist/_esm/actions/auth/getAuthenticators.js.map +1 -1
- package/dist/_esm/actions/auth/index.js +1 -0
- package/dist/_esm/actions/auth/index.js.map +1 -1
- package/dist/_esm/actions/auth/logout.js +21 -0
- package/dist/_esm/actions/auth/logout.js.map +1 -0
- package/dist/_esm/actions/index.js +1 -1
- package/dist/_esm/actions/index.js.map +1 -1
- package/dist/_esm/actions/wallet/getUserWallet.js +3 -1
- package/dist/_esm/actions/wallet/getUserWallet.js.map +1 -1
- package/dist/_esm/actions/wallet/signingUtils.js +24 -4
- package/dist/_esm/actions/wallet/signingUtils.js.map +1 -1
- package/dist/_esm/adapters/viem.js +27 -10
- package/dist/_esm/adapters/viem.js.map +1 -1
- package/dist/_esm/client/decorators/client.js +2 -1
- package/dist/_esm/client/decorators/client.js.map +1 -1
- package/dist/_esm/client/transports/rest.js.map +1 -1
- package/dist/_esm/core/createZeroDevWalletCore.js +320 -186
- package/dist/_esm/core/createZeroDevWalletCore.js.map +1 -1
- package/dist/_esm/index.js +1 -1
- package/dist/_esm/index.js.map +1 -1
- package/dist/_esm/index.native.js +1 -1
- package/dist/_esm/index.native.js.map +1 -1
- package/dist/_esm/native/stampers/secureStore.js +111 -18
- package/dist/_esm/native/stampers/secureStore.js.map +1 -1
- package/dist/_esm/stampers/indexedDbStamper.js +36 -0
- package/dist/_esm/stampers/indexedDbStamper.js.map +1 -1
- package/dist/_esm/storage/manager.js +150 -22
- package/dist/_esm/storage/manager.js.map +1 -1
- package/dist/_esm/utils/buildClientSignature.js +4 -1
- package/dist/_esm/utils/buildClientSignature.js.map +1 -1
- package/dist/_esm/utils/derToRawSignature.js +12 -0
- package/dist/_esm/utils/derToRawSignature.js.map +1 -1
- package/dist/_esm/utils/exportPrivateKey.js +1 -1
- package/dist/_esm/utils/exportPrivateKey.js.map +1 -1
- package/dist/_esm/utils/utils.js +27 -6
- package/dist/_esm/utils/utils.js.map +1 -1
- package/dist/_types/actions/auth/getAuthenticators.d.ts +19 -2
- package/dist/_types/actions/auth/getAuthenticators.d.ts.map +1 -1
- package/dist/_types/actions/auth/index.d.ts +2 -1
- package/dist/_types/actions/auth/index.d.ts.map +1 -1
- package/dist/_types/actions/auth/logout.d.ts +11 -0
- package/dist/_types/actions/auth/logout.d.ts.map +1 -0
- package/dist/_types/actions/index.d.ts +1 -1
- package/dist/_types/actions/index.d.ts.map +1 -1
- package/dist/_types/actions/wallet/getUserWallet.d.ts.map +1 -1
- package/dist/_types/actions/wallet/signingUtils.d.ts.map +1 -1
- package/dist/_types/adapters/viem.d.ts.map +1 -1
- package/dist/_types/client/decorators/client.d.ts +3 -1
- package/dist/_types/client/decorators/client.d.ts.map +1 -1
- package/dist/_types/client/transports/rest.d.ts +3 -3
- package/dist/_types/client/transports/rest.d.ts.map +1 -1
- package/dist/_types/core/createZeroDevWalletCore.d.ts +8 -1
- package/dist/_types/core/createZeroDevWalletCore.d.ts.map +1 -1
- package/dist/_types/index.d.ts +2 -2
- package/dist/_types/index.d.ts.map +1 -1
- package/dist/_types/index.native.d.ts +2 -2
- package/dist/_types/index.native.d.ts.map +1 -1
- package/dist/_types/native/stampers/secureStore.d.ts.map +1 -1
- package/dist/_types/stampers/indexedDbStamper.d.ts.map +1 -1
- package/dist/_types/stampers/types.d.ts +6 -0
- package/dist/_types/stampers/types.d.ts.map +1 -1
- package/dist/_types/storage/manager.d.ts +3 -0
- package/dist/_types/storage/manager.d.ts.map +1 -1
- package/dist/_types/types/session.d.ts +2 -0
- package/dist/_types/types/session.d.ts.map +1 -1
- package/dist/_types/utils/buildClientSignature.d.ts +1 -1
- package/dist/_types/utils/buildClientSignature.d.ts.map +1 -1
- package/dist/_types/utils/derToRawSignature.d.ts.map +1 -1
- package/dist/_types/utils/utils.d.ts +1 -1
- package/dist/_types/utils/utils.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/actions/auth/getAuthenticators.ts +20 -2
- package/src/actions/auth/index.ts +6 -0
- package/src/actions/auth/logout.ts +35 -0
- package/src/actions/index.ts +4 -0
- package/src/actions/wallet/getUserWallet.ts +3 -1
- package/src/actions/wallet/signingUtils.ts +43 -4
- package/src/adapters/viem.ts +40 -12
- package/src/client/decorators/client.ts +7 -0
- package/src/client/transports/rest.ts +4 -4
- package/src/core/createZeroDevWalletCore.ts +393 -205
- package/src/index.native.ts +4 -0
- package/src/index.ts +4 -0
- package/src/native/stampers/secureStore.ts +119 -24
- package/src/stampers/indexedDbStamper.ts +47 -0
- package/src/stampers/types.ts +6 -0
- package/src/storage/manager.ts +205 -25
- package/src/types/session.ts +2 -0
- package/src/utils/buildClientSignature.ts +4 -2
- package/src/utils/derToRawSignature.ts +16 -2
- package/src/utils/exportPrivateKey.ts +1 -1
- package/src/utils/utils.ts +30 -9
|
@@ -23,9 +23,16 @@ export function derToRawSignature(derHex: string): string {
|
|
|
23
23
|
}
|
|
24
24
|
offset++ // Skip INTEGER tag
|
|
25
25
|
|
|
26
|
-
const rLength = der[offset]
|
|
26
|
+
const rLength = der[offset]
|
|
27
|
+
if (rLength === undefined) {
|
|
28
|
+
throw new Error('Invalid DER signature: missing r length')
|
|
29
|
+
}
|
|
27
30
|
offset++ // Skip length byte
|
|
28
31
|
|
|
32
|
+
if (offset + rLength > der.length) {
|
|
33
|
+
throw new Error('Invalid DER signature: truncated r value')
|
|
34
|
+
}
|
|
35
|
+
|
|
29
36
|
const rBytes = der.slice(offset, offset + rLength)
|
|
30
37
|
offset += rLength
|
|
31
38
|
|
|
@@ -35,9 +42,16 @@ export function derToRawSignature(derHex: string): string {
|
|
|
35
42
|
}
|
|
36
43
|
offset++ // Skip INTEGER tag
|
|
37
44
|
|
|
38
|
-
const sLength = der[offset]
|
|
45
|
+
const sLength = der[offset]
|
|
46
|
+
if (sLength === undefined) {
|
|
47
|
+
throw new Error('Invalid DER signature: missing s length')
|
|
48
|
+
}
|
|
39
49
|
offset++ // Skip length byte
|
|
40
50
|
|
|
51
|
+
if (offset + sLength > der.length) {
|
|
52
|
+
throw new Error('Invalid DER signature: truncated s value')
|
|
53
|
+
}
|
|
54
|
+
|
|
41
55
|
const sBytes = der.slice(offset, offset + sLength)
|
|
42
56
|
|
|
43
57
|
// Remove leading zero bytes if present (DER uses signed integers)
|
package/src/utils/utils.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PartialBy } from 'viem'
|
|
2
|
-
import type
|
|
2
|
+
import { SessionType, type ZeroDevWalletSession } from '../types/session.js'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Parses a session from a JWT.
|
|
@@ -13,31 +13,50 @@ export function parseSession(
|
|
|
13
13
|
if (typeof token !== 'string') {
|
|
14
14
|
return token
|
|
15
15
|
}
|
|
16
|
-
const
|
|
17
|
-
if (!
|
|
16
|
+
const parts = token.split('.')
|
|
17
|
+
if (parts.length !== 3 || !parts[1]) {
|
|
18
18
|
throw new Error('Invalid JWT: Missing payload')
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
const base64 =
|
|
22
|
-
const decoded = JSON.parse(atob(base64))
|
|
21
|
+
const base64 = parts[1].replace(/-/g, '+').replace(/_/g, '/')
|
|
22
|
+
const decoded: unknown = JSON.parse(atob(base64))
|
|
23
|
+
if (!decoded || typeof decoded !== 'object') {
|
|
24
|
+
throw new Error('JWT payload missing required fields')
|
|
25
|
+
}
|
|
23
26
|
const {
|
|
24
27
|
exp,
|
|
25
28
|
public_key: publicKey,
|
|
26
29
|
session_type: sessionType,
|
|
27
30
|
user_id: userId,
|
|
28
31
|
organization_id: organizationId,
|
|
29
|
-
} = decoded
|
|
32
|
+
} = decoded as Record<string, unknown>
|
|
30
33
|
|
|
31
|
-
if (
|
|
34
|
+
if (
|
|
35
|
+
typeof exp !== 'number' ||
|
|
36
|
+
!Number.isFinite(exp) ||
|
|
37
|
+
exp <= 0 ||
|
|
38
|
+
typeof publicKey !== 'string' ||
|
|
39
|
+
!publicKey ||
|
|
40
|
+
(sessionType !== SessionType.READ_ONLY &&
|
|
41
|
+
sessionType !== SessionType.READ_WRITE) ||
|
|
42
|
+
typeof userId !== 'string' ||
|
|
43
|
+
!userId ||
|
|
44
|
+
typeof organizationId !== 'string' ||
|
|
45
|
+
!organizationId
|
|
46
|
+
) {
|
|
32
47
|
throw new Error('JWT payload missing required fields')
|
|
33
48
|
}
|
|
49
|
+
if (normalizeTimestamp(exp) <= Date.now()) {
|
|
50
|
+
throw new Error('JWT session is already expired')
|
|
51
|
+
}
|
|
34
52
|
|
|
35
53
|
return {
|
|
36
54
|
sessionType,
|
|
37
55
|
userId,
|
|
38
56
|
organizationId,
|
|
39
57
|
expiry: exp,
|
|
40
|
-
token
|
|
58
|
+
token,
|
|
59
|
+
publicKey,
|
|
41
60
|
}
|
|
42
61
|
}
|
|
43
62
|
|
|
@@ -93,7 +112,9 @@ export function pointEncode(raw: Uint8Array): Uint8Array {
|
|
|
93
112
|
throw new Error('Invalid x or y length')
|
|
94
113
|
}
|
|
95
114
|
|
|
96
|
-
const
|
|
115
|
+
const lastY = y.at(-1)
|
|
116
|
+
if (lastY === undefined) throw new Error('Invalid y coordinate')
|
|
117
|
+
const prefix = (lastY & 1) === 0 ? 0x02 : 0x03
|
|
97
118
|
|
|
98
119
|
const compressed = new Uint8Array(33)
|
|
99
120
|
compressed[0] = prefix
|