@zerodev/wallet-core 0.0.3 → 0.0.4

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.
Files changed (124) hide show
  1. package/dist/_cjs/actions/auth/getAuthenticators.js.map +1 -1
  2. package/dist/_cjs/actions/auth/index.js +3 -1
  3. package/dist/_cjs/actions/auth/index.js.map +1 -1
  4. package/dist/_cjs/actions/auth/logout.js +23 -0
  5. package/dist/_cjs/actions/auth/logout.js.map +1 -0
  6. package/dist/_cjs/actions/index.js +2 -1
  7. package/dist/_cjs/actions/index.js.map +1 -1
  8. package/dist/_cjs/actions/wallet/signingUtils.js +23 -3
  9. package/dist/_cjs/actions/wallet/signingUtils.js.map +1 -1
  10. package/dist/_cjs/adapters/viem.js +26 -9
  11. package/dist/_cjs/adapters/viem.js.map +1 -1
  12. package/dist/_cjs/client/decorators/client.js +1 -0
  13. package/dist/_cjs/client/decorators/client.js.map +1 -1
  14. package/dist/_cjs/client/transports/rest.js.map +1 -1
  15. package/dist/_cjs/core/createZeroDevWalletCore.js +297 -168
  16. package/dist/_cjs/core/createZeroDevWalletCore.js.map +1 -1
  17. package/dist/_cjs/index.js +2 -1
  18. package/dist/_cjs/index.js.map +1 -1
  19. package/dist/_cjs/index.native.js +2 -1
  20. package/dist/_cjs/index.native.js.map +1 -1
  21. package/dist/_cjs/native/stampers/secureStore.js +94 -17
  22. package/dist/_cjs/native/stampers/secureStore.js.map +1 -1
  23. package/dist/_cjs/stampers/indexedDbStamper.js +34 -0
  24. package/dist/_cjs/stampers/indexedDbStamper.js.map +1 -1
  25. package/dist/_cjs/storage/manager.js +144 -17
  26. package/dist/_cjs/storage/manager.js.map +1 -1
  27. package/dist/_cjs/utils/buildClientSignature.js +4 -1
  28. package/dist/_cjs/utils/buildClientSignature.js.map +1 -1
  29. package/dist/_cjs/utils/derToRawSignature.js +12 -0
  30. package/dist/_cjs/utils/derToRawSignature.js.map +1 -1
  31. package/dist/_cjs/utils/exportPrivateKey.js +1 -1
  32. package/dist/_cjs/utils/exportPrivateKey.js.map +1 -1
  33. package/dist/_cjs/utils/utils.js +27 -6
  34. package/dist/_cjs/utils/utils.js.map +1 -1
  35. package/dist/_esm/actions/auth/getAuthenticators.js +3 -2
  36. package/dist/_esm/actions/auth/getAuthenticators.js.map +1 -1
  37. package/dist/_esm/actions/auth/index.js +1 -0
  38. package/dist/_esm/actions/auth/index.js.map +1 -1
  39. package/dist/_esm/actions/auth/logout.js +21 -0
  40. package/dist/_esm/actions/auth/logout.js.map +1 -0
  41. package/dist/_esm/actions/index.js +1 -1
  42. package/dist/_esm/actions/index.js.map +1 -1
  43. package/dist/_esm/actions/wallet/signingUtils.js +24 -4
  44. package/dist/_esm/actions/wallet/signingUtils.js.map +1 -1
  45. package/dist/_esm/adapters/viem.js +27 -10
  46. package/dist/_esm/adapters/viem.js.map +1 -1
  47. package/dist/_esm/client/decorators/client.js +2 -1
  48. package/dist/_esm/client/decorators/client.js.map +1 -1
  49. package/dist/_esm/client/transports/rest.js.map +1 -1
  50. package/dist/_esm/core/createZeroDevWalletCore.js +320 -186
  51. package/dist/_esm/core/createZeroDevWalletCore.js.map +1 -1
  52. package/dist/_esm/index.js +1 -1
  53. package/dist/_esm/index.js.map +1 -1
  54. package/dist/_esm/index.native.js +1 -1
  55. package/dist/_esm/index.native.js.map +1 -1
  56. package/dist/_esm/native/stampers/secureStore.js +111 -18
  57. package/dist/_esm/native/stampers/secureStore.js.map +1 -1
  58. package/dist/_esm/stampers/indexedDbStamper.js +36 -0
  59. package/dist/_esm/stampers/indexedDbStamper.js.map +1 -1
  60. package/dist/_esm/storage/manager.js +150 -22
  61. package/dist/_esm/storage/manager.js.map +1 -1
  62. package/dist/_esm/utils/buildClientSignature.js +4 -1
  63. package/dist/_esm/utils/buildClientSignature.js.map +1 -1
  64. package/dist/_esm/utils/derToRawSignature.js +12 -0
  65. package/dist/_esm/utils/derToRawSignature.js.map +1 -1
  66. package/dist/_esm/utils/exportPrivateKey.js +1 -1
  67. package/dist/_esm/utils/exportPrivateKey.js.map +1 -1
  68. package/dist/_esm/utils/utils.js +27 -6
  69. package/dist/_esm/utils/utils.js.map +1 -1
  70. package/dist/_types/actions/auth/getAuthenticators.d.ts +19 -2
  71. package/dist/_types/actions/auth/getAuthenticators.d.ts.map +1 -1
  72. package/dist/_types/actions/auth/index.d.ts +2 -1
  73. package/dist/_types/actions/auth/index.d.ts.map +1 -1
  74. package/dist/_types/actions/auth/logout.d.ts +11 -0
  75. package/dist/_types/actions/auth/logout.d.ts.map +1 -0
  76. package/dist/_types/actions/index.d.ts +1 -1
  77. package/dist/_types/actions/index.d.ts.map +1 -1
  78. package/dist/_types/actions/wallet/signingUtils.d.ts.map +1 -1
  79. package/dist/_types/adapters/viem.d.ts.map +1 -1
  80. package/dist/_types/client/decorators/client.d.ts +3 -1
  81. package/dist/_types/client/decorators/client.d.ts.map +1 -1
  82. package/dist/_types/client/transports/rest.d.ts +3 -3
  83. package/dist/_types/client/transports/rest.d.ts.map +1 -1
  84. package/dist/_types/core/createZeroDevWalletCore.d.ts +8 -1
  85. package/dist/_types/core/createZeroDevWalletCore.d.ts.map +1 -1
  86. package/dist/_types/index.d.ts +2 -2
  87. package/dist/_types/index.d.ts.map +1 -1
  88. package/dist/_types/index.native.d.ts +2 -2
  89. package/dist/_types/index.native.d.ts.map +1 -1
  90. package/dist/_types/native/stampers/secureStore.d.ts.map +1 -1
  91. package/dist/_types/stampers/indexedDbStamper.d.ts.map +1 -1
  92. package/dist/_types/stampers/types.d.ts +6 -0
  93. package/dist/_types/stampers/types.d.ts.map +1 -1
  94. package/dist/_types/storage/manager.d.ts +3 -0
  95. package/dist/_types/storage/manager.d.ts.map +1 -1
  96. package/dist/_types/types/session.d.ts +2 -0
  97. package/dist/_types/types/session.d.ts.map +1 -1
  98. package/dist/_types/utils/buildClientSignature.d.ts +1 -1
  99. package/dist/_types/utils/buildClientSignature.d.ts.map +1 -1
  100. package/dist/_types/utils/derToRawSignature.d.ts.map +1 -1
  101. package/dist/_types/utils/utils.d.ts +1 -1
  102. package/dist/_types/utils/utils.d.ts.map +1 -1
  103. package/dist/tsconfig.build.tsbuildinfo +1 -1
  104. package/package.json +1 -1
  105. package/src/actions/auth/getAuthenticators.ts +20 -2
  106. package/src/actions/auth/index.ts +6 -0
  107. package/src/actions/auth/logout.ts +35 -0
  108. package/src/actions/index.ts +4 -0
  109. package/src/actions/wallet/signingUtils.ts +43 -4
  110. package/src/adapters/viem.ts +40 -12
  111. package/src/client/decorators/client.ts +7 -0
  112. package/src/client/transports/rest.ts +4 -4
  113. package/src/core/createZeroDevWalletCore.ts +393 -205
  114. package/src/index.native.ts +4 -0
  115. package/src/index.ts +4 -0
  116. package/src/native/stampers/secureStore.ts +119 -24
  117. package/src/stampers/indexedDbStamper.ts +47 -0
  118. package/src/stampers/types.ts +6 -0
  119. package/src/storage/manager.ts +205 -25
  120. package/src/types/session.ts +2 -0
  121. package/src/utils/buildClientSignature.ts +4 -2
  122. package/src/utils/derToRawSignature.ts +16 -2
  123. package/src/utils/exportPrivateKey.ts +1 -1
  124. 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)
@@ -110,7 +110,7 @@ export async function exportPrivateKey(
110
110
  )
111
111
  }
112
112
 
113
- return { exportBundle, address: address!, organizationId }
113
+ return { exportBundle, address, organizationId }
114
114
  }
115
115
 
116
116
  export type { KeyFormat }
@@ -1,5 +1,5 @@
1
1
  import type { PartialBy } from 'viem'
2
- import type { ZeroDevWalletSession } from '../types/session.js'
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 [, payload] = token.split('.')
17
- if (!payload) {
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 = payload.replace(/-/g, '+').replace(/_/g, '/')
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 (!exp || !publicKey || !sessionType || !userId || !organizationId) {
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: publicKey,
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 prefix = (y[31]! & 1) === 0 ? 0x02 : 0x03
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