@spacesops/wdk-react-native-core 1.0.0-beta.40

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 (275) hide show
  1. package/README.md +551 -0
  2. package/dist/__mocks__/react.d.ts +40 -0
  3. package/dist/__mocks__/react.js +33 -0
  4. package/dist/__mocks__/react.js.map +1 -0
  5. package/dist/__mocks__/secureStorage.d.ts +26 -0
  6. package/dist/__mocks__/secureStorage.js +80 -0
  7. package/dist/__mocks__/secureStorage.js.map +1 -0
  8. package/dist/__tests__/hooks/useBalance.test.d.ts +6 -0
  9. package/dist/__tests__/hooks/useBalance.test.js +217 -0
  10. package/dist/__tests__/hooks/useBalance.test.js.map +1 -0
  11. package/dist/__tests__/hooks/useWallet.test.d.ts +6 -0
  12. package/dist/__tests__/hooks/useWallet.test.js +105 -0
  13. package/dist/__tests__/hooks/useWallet.test.js.map +1 -0
  14. package/dist/__tests__/hooks/useWalletManager.test.d.ts +6 -0
  15. package/dist/__tests__/hooks/useWalletManager.test.js +193 -0
  16. package/dist/__tests__/hooks/useWalletManager.test.js.map +1 -0
  17. package/dist/__tests__/hooks/useWdkApp.test.d.ts +6 -0
  18. package/dist/__tests__/hooks/useWdkApp.test.js +55 -0
  19. package/dist/__tests__/hooks/useWdkApp.test.js.map +1 -0
  20. package/dist/__tests__/hooks/useWorklet.test.d.ts +6 -0
  21. package/dist/__tests__/hooks/useWorklet.test.js +168 -0
  22. package/dist/__tests__/hooks/useWorklet.test.js.map +1 -0
  23. package/dist/__tests__/provider/WdkAppProvider.test.d.ts +6 -0
  24. package/dist/__tests__/provider/WdkAppProvider.test.js +57 -0
  25. package/dist/__tests__/provider/WdkAppProvider.test.js.map +1 -0
  26. package/dist/__tests__/services/accountService.test.d.ts +6 -0
  27. package/dist/__tests__/services/accountService.test.js +216 -0
  28. package/dist/__tests__/services/accountService.test.js.map +1 -0
  29. package/dist/__tests__/services/addressService.test.d.ts +6 -0
  30. package/dist/__tests__/services/addressService.test.js +246 -0
  31. package/dist/__tests__/services/addressService.test.js.map +1 -0
  32. package/dist/__tests__/services/balanceService.test.d.ts +6 -0
  33. package/dist/__tests__/services/balanceService.test.js +333 -0
  34. package/dist/__tests__/services/balanceService.test.js.map +1 -0
  35. package/dist/__tests__/services/walletSetupService.test.d.ts +6 -0
  36. package/dist/__tests__/services/walletSetupService.test.js +304 -0
  37. package/dist/__tests__/services/walletSetupService.test.js.map +1 -0
  38. package/dist/__tests__/services/walletSwitchingService.test.d.ts +6 -0
  39. package/dist/__tests__/services/walletSwitchingService.test.js +209 -0
  40. package/dist/__tests__/services/walletSwitchingService.test.js.map +1 -0
  41. package/dist/__tests__/services/workletLifecycleService.test.d.ts +6 -0
  42. package/dist/__tests__/services/workletLifecycleService.test.js +451 -0
  43. package/dist/__tests__/services/workletLifecycleService.test.js.map +1 -0
  44. package/dist/__tests__/setup.d.ts +7 -0
  45. package/dist/__tests__/setup.js +49 -0
  46. package/dist/__tests__/setup.js.map +1 -0
  47. package/dist/__tests__/storage/mmkvStorage.test.d.ts +6 -0
  48. package/dist/__tests__/storage/mmkvStorage.test.js +213 -0
  49. package/dist/__tests__/storage/mmkvStorage.test.js.map +1 -0
  50. package/dist/__tests__/store/walletStore.test.d.ts +4 -0
  51. package/dist/__tests__/store/walletStore.test.js +86 -0
  52. package/dist/__tests__/store/walletStore.test.js.map +1 -0
  53. package/dist/__tests__/store/workletStore.test.d.ts +4 -0
  54. package/dist/__tests__/store/workletStore.test.js +255 -0
  55. package/dist/__tests__/store/workletStore.test.js.map +1 -0
  56. package/dist/__tests__/types/hrpc.test.d.ts +4 -0
  57. package/dist/__tests__/types/hrpc.test.js +99 -0
  58. package/dist/__tests__/types/hrpc.test.js.map +1 -0
  59. package/dist/__tests__/utils/balanceUtils.test.d.ts +4 -0
  60. package/dist/__tests__/utils/balanceUtils.test.js +133 -0
  61. package/dist/__tests__/utils/balanceUtils.test.js.map +1 -0
  62. package/dist/__tests__/utils/errorHandling.test.d.ts +6 -0
  63. package/dist/__tests__/utils/errorHandling.test.js +119 -0
  64. package/dist/__tests__/utils/errorHandling.test.js.map +1 -0
  65. package/dist/__tests__/utils/errorUtils.test.d.ts +4 -0
  66. package/dist/__tests__/utils/errorUtils.test.js +133 -0
  67. package/dist/__tests__/utils/errorUtils.test.js.map +1 -0
  68. package/dist/__tests__/utils/initializationState.test.d.ts +6 -0
  69. package/dist/__tests__/utils/initializationState.test.js +243 -0
  70. package/dist/__tests__/utils/initializationState.test.js.map +1 -0
  71. package/dist/__tests__/utils/jsonUtils.test.d.ts +4 -0
  72. package/dist/__tests__/utils/jsonUtils.test.js +118 -0
  73. package/dist/__tests__/utils/jsonUtils.test.js.map +1 -0
  74. package/dist/__tests__/utils/mmkvKeyManager.test.d.ts +6 -0
  75. package/dist/__tests__/utils/mmkvKeyManager.test.js +158 -0
  76. package/dist/__tests__/utils/mmkvKeyManager.test.js.map +1 -0
  77. package/dist/__tests__/utils/mnemonicUtils.test.d.ts +4 -0
  78. package/dist/__tests__/utils/mnemonicUtils.test.js +40 -0
  79. package/dist/__tests__/utils/mnemonicUtils.test.js.map +1 -0
  80. package/dist/__tests__/utils/raceConditions.test.d.ts +6 -0
  81. package/dist/__tests__/utils/raceConditions.test.js +239 -0
  82. package/dist/__tests__/utils/raceConditions.test.js.map +1 -0
  83. package/dist/__tests__/utils/result.test.d.ts +4 -0
  84. package/dist/__tests__/utils/result.test.js +66 -0
  85. package/dist/__tests__/utils/result.test.js.map +1 -0
  86. package/dist/__tests__/utils/schemas.test.d.ts +4 -0
  87. package/dist/__tests__/utils/schemas.test.js +66 -0
  88. package/dist/__tests__/utils/schemas.test.js.map +1 -0
  89. package/dist/__tests__/utils/storeHelpers.test.d.ts +4 -0
  90. package/dist/__tests__/utils/storeHelpers.test.js +227 -0
  91. package/dist/__tests__/utils/storeHelpers.test.js.map +1 -0
  92. package/dist/__tests__/utils/typeGuards.test.d.ts +4 -0
  93. package/dist/__tests__/utils/typeGuards.test.js +175 -0
  94. package/dist/__tests__/utils/typeGuards.test.js.map +1 -0
  95. package/dist/__tests__/utils/validation.test.d.ts +4 -0
  96. package/dist/__tests__/utils/validation.test.js +126 -0
  97. package/dist/__tests__/utils/validation.test.js.map +1 -0
  98. package/dist/__tests__/utils/walletUtils.test.d.ts +4 -0
  99. package/dist/__tests__/utils/walletUtils.test.js +156 -0
  100. package/dist/__tests__/utils/walletUtils.test.js.map +1 -0
  101. package/dist/hooks/useBalance.d.ts +170 -0
  102. package/dist/hooks/useBalance.js +442 -0
  103. package/dist/hooks/useBalance.js.map +1 -0
  104. package/dist/hooks/useWallet.d.ts +43 -0
  105. package/dist/hooks/useWallet.js +193 -0
  106. package/dist/hooks/useWallet.js.map +1 -0
  107. package/dist/hooks/useWalletManager.d.ts +100 -0
  108. package/dist/hooks/useWalletManager.js +526 -0
  109. package/dist/hooks/useWalletManager.js.map +1 -0
  110. package/dist/hooks/useWdkApp.d.ts +66 -0
  111. package/dist/hooks/useWdkApp.js +74 -0
  112. package/dist/hooks/useWdkApp.js.map +1 -0
  113. package/dist/hooks/useWorklet.d.ts +66 -0
  114. package/dist/hooks/useWorklet.js +42 -0
  115. package/dist/hooks/useWorklet.js.map +1 -0
  116. package/dist/index.d.ts +33 -0
  117. package/dist/index.js +36 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/provider/WdkAppProvider.d.ts +112 -0
  120. package/dist/provider/WdkAppProvider.js +558 -0
  121. package/dist/provider/WdkAppProvider.js.map +1 -0
  122. package/dist/services/accountService.d.ts +52 -0
  123. package/dist/services/accountService.js +119 -0
  124. package/dist/services/accountService.js.map +1 -0
  125. package/dist/services/addressService.d.ts +22 -0
  126. package/dist/services/addressService.js +110 -0
  127. package/dist/services/addressService.js.map +1 -0
  128. package/dist/services/balanceService.d.ts +114 -0
  129. package/dist/services/balanceService.js +208 -0
  130. package/dist/services/balanceService.js.map +1 -0
  131. package/dist/services/walletSetupService.d.ts +217 -0
  132. package/dist/services/walletSetupService.js +535 -0
  133. package/dist/services/walletSetupService.js.map +1 -0
  134. package/dist/services/walletSwitchingService.d.ts +48 -0
  135. package/dist/services/walletSwitchingService.js +143 -0
  136. package/dist/services/walletSwitchingService.js.map +1 -0
  137. package/dist/services/workletLifecycleService.d.ts +117 -0
  138. package/dist/services/workletLifecycleService.js +433 -0
  139. package/dist/services/workletLifecycleService.js.map +1 -0
  140. package/dist/storage/mmkvStorage.d.ts +44 -0
  141. package/dist/storage/mmkvStorage.js +348 -0
  142. package/dist/storage/mmkvStorage.js.map +1 -0
  143. package/dist/store/walletStore.d.ts +130 -0
  144. package/dist/store/walletStore.js +204 -0
  145. package/dist/store/walletStore.js.map +1 -0
  146. package/dist/store/workletStore.d.ts +121 -0
  147. package/dist/store/workletStore.js +256 -0
  148. package/dist/store/workletStore.js.map +1 -0
  149. package/dist/types/hrpc.d.ts +60 -0
  150. package/dist/types/hrpc.js +26 -0
  151. package/dist/types/hrpc.js.map +1 -0
  152. package/dist/types.d.ts +168 -0
  153. package/dist/types.js +7 -0
  154. package/dist/types.js.map +1 -0
  155. package/dist/utils/balanceUtils.d.ts +30 -0
  156. package/dist/utils/balanceUtils.js +86 -0
  157. package/dist/utils/balanceUtils.js.map +1 -0
  158. package/dist/utils/constants.d.ts +66 -0
  159. package/dist/utils/constants.js +73 -0
  160. package/dist/utils/constants.js.map +1 -0
  161. package/dist/utils/errorHandling.d.ts +47 -0
  162. package/dist/utils/errorHandling.js +54 -0
  163. package/dist/utils/errorHandling.js.map +1 -0
  164. package/dist/utils/errorUtils.d.ts +89 -0
  165. package/dist/utils/errorUtils.js +264 -0
  166. package/dist/utils/errorUtils.js.map +1 -0
  167. package/dist/utils/initializationState.d.ts +129 -0
  168. package/dist/utils/initializationState.js +220 -0
  169. package/dist/utils/initializationState.js.map +1 -0
  170. package/dist/utils/jsonUtils.d.ts +21 -0
  171. package/dist/utils/jsonUtils.js +67 -0
  172. package/dist/utils/jsonUtils.js.map +1 -0
  173. package/dist/utils/logger.d.ts +27 -0
  174. package/dist/utils/logger.js +50 -0
  175. package/dist/utils/logger.js.map +1 -0
  176. package/dist/utils/mmkvKeyManager.d.ts +57 -0
  177. package/dist/utils/mmkvKeyManager.js +214 -0
  178. package/dist/utils/mmkvKeyManager.js.map +1 -0
  179. package/dist/utils/mnemonicUtils.d.ts +17 -0
  180. package/dist/utils/mnemonicUtils.js +28 -0
  181. package/dist/utils/mnemonicUtils.js.map +1 -0
  182. package/dist/utils/operationMutex.d.ts +69 -0
  183. package/dist/utils/operationMutex.js +150 -0
  184. package/dist/utils/operationMutex.js.map +1 -0
  185. package/dist/utils/result.d.ts +34 -0
  186. package/dist/utils/result.js +43 -0
  187. package/dist/utils/result.js.map +1 -0
  188. package/dist/utils/schemas.d.ts +365 -0
  189. package/dist/utils/schemas.js +152 -0
  190. package/dist/utils/schemas.js.map +1 -0
  191. package/dist/utils/storeHelpers.d.ts +112 -0
  192. package/dist/utils/storeHelpers.js +198 -0
  193. package/dist/utils/storeHelpers.js.map +1 -0
  194. package/dist/utils/typeGuards.d.ts +70 -0
  195. package/dist/utils/typeGuards.js +95 -0
  196. package/dist/utils/typeGuards.js.map +1 -0
  197. package/dist/utils/validation.d.ts +53 -0
  198. package/dist/utils/validation.js +152 -0
  199. package/dist/utils/validation.js.map +1 -0
  200. package/dist/utils/walletStateHelpers.d.ts +62 -0
  201. package/dist/utils/walletStateHelpers.js +81 -0
  202. package/dist/utils/walletStateHelpers.js.map +1 -0
  203. package/dist/utils/walletUtils.d.ts +38 -0
  204. package/dist/utils/walletUtils.js +87 -0
  205. package/dist/utils/walletUtils.js.map +1 -0
  206. package/package.json +79 -0
  207. package/src/__mocks__/react.ts +34 -0
  208. package/src/__mocks__/secureStorage.ts +87 -0
  209. package/src/__tests__/hooks/useBalance.test.ts +286 -0
  210. package/src/__tests__/hooks/useWallet.test.ts +122 -0
  211. package/src/__tests__/hooks/useWalletManager.test.ts +271 -0
  212. package/src/__tests__/hooks/useWdkApp.test.tsx +59 -0
  213. package/src/__tests__/hooks/useWorklet.test.ts +195 -0
  214. package/src/__tests__/provider/WdkAppProvider.test.tsx +67 -0
  215. package/src/__tests__/services/accountService.test.ts +337 -0
  216. package/src/__tests__/services/addressService.test.ts +312 -0
  217. package/src/__tests__/services/balanceService.test.ts +411 -0
  218. package/src/__tests__/services/walletSetupService.test.ts +463 -0
  219. package/src/__tests__/services/walletSwitchingService.test.ts +258 -0
  220. package/src/__tests__/services/workletLifecycleService.test.ts +514 -0
  221. package/src/__tests__/setup.ts +54 -0
  222. package/src/__tests__/storage/mmkvStorage.test.ts +325 -0
  223. package/src/__tests__/store/walletStore.test.ts +101 -0
  224. package/src/__tests__/store/workletStore.test.ts +329 -0
  225. package/src/__tests__/types/hrpc.test.ts +125 -0
  226. package/src/__tests__/utils/balanceUtils.test.ts +151 -0
  227. package/src/__tests__/utils/errorHandling.test.ts +147 -0
  228. package/src/__tests__/utils/errorUtils.test.ts +170 -0
  229. package/src/__tests__/utils/initializationState.test.ts +337 -0
  230. package/src/__tests__/utils/jsonUtils.test.ts +131 -0
  231. package/src/__tests__/utils/mmkvKeyManager.test.ts +205 -0
  232. package/src/__tests__/utils/mnemonicUtils.test.ts +48 -0
  233. package/src/__tests__/utils/raceConditions.test.ts +292 -0
  234. package/src/__tests__/utils/result.test.ts +73 -0
  235. package/src/__tests__/utils/schemas.test.ts +82 -0
  236. package/src/__tests__/utils/storeHelpers.test.ts +323 -0
  237. package/src/__tests__/utils/typeGuards.test.ts +209 -0
  238. package/src/__tests__/utils/validation.test.ts +152 -0
  239. package/src/__tests__/utils/walletUtils.test.ts +195 -0
  240. package/src/hooks/useBalance.ts +597 -0
  241. package/src/hooks/useWallet.ts +288 -0
  242. package/src/hooks/useWalletManager.ts +654 -0
  243. package/src/hooks/useWdkApp.ts +78 -0
  244. package/src/hooks/useWorklet.ts +109 -0
  245. package/src/index.ts +112 -0
  246. package/src/provider/WdkAppProvider.tsx +764 -0
  247. package/src/services/accountService.ts +134 -0
  248. package/src/services/addressService.ts +125 -0
  249. package/src/services/balanceService.ts +291 -0
  250. package/src/services/walletSetupService.ts +695 -0
  251. package/src/services/walletSwitchingService.ts +157 -0
  252. package/src/services/workletLifecycleService.ts +561 -0
  253. package/src/storage/mmkvStorage.ts +417 -0
  254. package/src/store/walletStore.ts +301 -0
  255. package/src/store/workletStore.ts +340 -0
  256. package/src/types/hrpc.ts +78 -0
  257. package/src/types.ts +188 -0
  258. package/src/utils/balanceUtils.ts +96 -0
  259. package/src/utils/constants.ts +84 -0
  260. package/src/utils/errorHandling.md +163 -0
  261. package/src/utils/errorHandling.ts +61 -0
  262. package/src/utils/errorUtils.ts +300 -0
  263. package/src/utils/initializationState.ts +242 -0
  264. package/src/utils/jsonUtils.ts +75 -0
  265. package/src/utils/logger.ts +54 -0
  266. package/src/utils/mmkvKeyManager.ts +256 -0
  267. package/src/utils/mnemonicUtils.ts +35 -0
  268. package/src/utils/operationMutex.ts +181 -0
  269. package/src/utils/result.ts +57 -0
  270. package/src/utils/schemas.ts +190 -0
  271. package/src/utils/storeHelpers.ts +236 -0
  272. package/src/utils/typeGuards.ts +129 -0
  273. package/src/utils/validation.ts +174 -0
  274. package/src/utils/walletStateHelpers.ts +104 -0
  275. package/src/utils/walletUtils.ts +107 -0
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Error utility functions for consistent error handling
3
+ *
4
+ * ## Usage Guidelines
5
+ *
6
+ * **For Services**: Use `handleServiceError()` from `errorHandling.ts` - this provides
7
+ * consistent normalization and logging for service-layer errors. Errors are NOT sanitized
8
+ * (sanitizeLevel: false) because services log internally and need full error details.
9
+ *
10
+ * **For Hooks/UI**: Use `normalizeError()` directly with appropriate sanitization level.
11
+ * Hooks should sanitize errors before exposing them to UI components to prevent information leakage.
12
+ *
13
+ * @example Service usage (use handleServiceError instead):
14
+ * ```typescript
15
+ * import { handleServiceError } from './errorHandling'
16
+ * try {
17
+ * await someOperation()
18
+ * } catch (error) {
19
+ * handleServiceError(error, 'MyService', 'operationName', { context })
20
+ * }
21
+ * ```
22
+ *
23
+ * @example Hook/UI usage:
24
+ * ```typescript
25
+ * import { normalizeError } from './errorUtils'
26
+ * try {
27
+ * await someOperation()
28
+ * } catch (error) {
29
+ * const normalized = normalizeError(error, true, { component: 'MyHook', operation: 'fetchData' })
30
+ * setError(normalized.message)
31
+ * }
32
+ * ```
33
+ */
34
+ /**
35
+ * Sanitization levels for error messages
36
+ */
37
+ export var SanitizationLevel;
38
+ (function (SanitizationLevel) {
39
+ SanitizationLevel["NONE"] = "none";
40
+ SanitizationLevel["DEVELOPMENT"] = "dev";
41
+ SanitizationLevel["PRODUCTION"] = "prod";
42
+ })(SanitizationLevel || (SanitizationLevel = {}));
43
+ /**
44
+ * Context-aware sensitive patterns
45
+ * More specific patterns to avoid false positives while catching real sensitive data
46
+ */
47
+ const SENSITIVE_PATTERNS = [
48
+ // Cryptographic keys and secrets (more specific)
49
+ /\b(encryption[_-]?key|encryptionKey|encrypted[_-]?seed|encryptedSeed|secret[_-]?key|private[_-]?key)\s*[:=]\s*([a-f0-9]{32,}|[A-Za-z0-9+/]{40,})/gi,
50
+ // Mnemonic phrases (12 or 24 words) - allow alphanumeric words
51
+ /\b(mnemonic|seed[_-]?phrase|recovery[_-]?phrase)\s*[:=]\s*([a-zA-Z0-9]+\s+){11,23}[a-zA-Z0-9]+/gi,
52
+ // Base64 encoded keys (long base64 strings)
53
+ /[A-Za-z0-9+/]{40,}={0,2}/g,
54
+ // Hex strings that look like keys (32+ chars, even length)
55
+ /\b0x?[a-f0-9]{32,}\b/gi,
56
+ // File paths with sensitive names
57
+ /file:\/\/[^\s]*(key|secret|password|credential|seed|mnemonic|private)[^\s]*/gi,
58
+ // Paths containing sensitive directories
59
+ /\/(?:private|secret|keys|credentials|seeds|mnemonics)\/[^\s]+/gi,
60
+ // API tokens and keys in various formats
61
+ /\b(api[_-]?key|access[_-]?token|bearer[_-]?token|auth[_-]?token)\s*[:=]\s*[^\s]{20,}/gi,
62
+ // Passwords (but not "password" as a word)
63
+ /\bpassword\s*[:=]\s*[^\s]{8,}/gi,
64
+ ];
65
+ /**
66
+ * Whitelist of safe patterns that should NOT be sanitized
67
+ * These are common non-sensitive terms that might match sensitive patterns
68
+ */
69
+ const SAFE_PATTERNS = [
70
+ /\b(public[_-]?key|publicKey)\b/gi, // Public keys are safe
71
+ /\b(error|Error|ERROR)\b/g, // Error messages themselves
72
+ /\b(function|Function|const|let|var)\b/g, // Code keywords
73
+ /\b(undefined|null|true|false)\b/g, // JavaScript literals
74
+ ];
75
+ /**
76
+ * Check if a string matches a safe pattern (should not be sanitized)
77
+ */
78
+ function isSafePattern(text) {
79
+ return SAFE_PATTERNS.some(pattern => pattern.test(text));
80
+ }
81
+ /**
82
+ * Mask sensitive string patterns (hex/base64) for development mode
83
+ */
84
+ function maskSensitiveStrings(message) {
85
+ return message
86
+ .replace(/\b0x?[a-f0-9]{32,}\b/gi, (match) => {
87
+ if (match.length <= 20)
88
+ return match;
89
+ return `${match.substring(0, 8)}...${match.substring(match.length - 4)}`;
90
+ })
91
+ .replace(/\b[A-Za-z0-9+/]{40,}={0,2}\b/g, (match) => {
92
+ return `${match.substring(0, 8)}...${match.substring(match.length - 4)}`;
93
+ });
94
+ }
95
+ /**
96
+ * Remove file paths from error messages
97
+ */
98
+ function removeFilePaths(message) {
99
+ return message
100
+ .replace(/file:\/\/[^\s]+/gi, '[file path]')
101
+ .replace(/\/[^\s]+\/[^\s]+/g, '[path]');
102
+ }
103
+ /**
104
+ * Get replacement text for a sensitive pattern match
105
+ */
106
+ function getSensitiveReplacement(match) {
107
+ const lowerMatch = match.toLowerCase();
108
+ if (lowerMatch.includes('encryption') || lowerMatch.includes('encrypted')) {
109
+ return '[encryption data]';
110
+ }
111
+ if (lowerMatch.includes('mnemonic') || lowerMatch.includes('seed phrase')) {
112
+ return '[mnemonic phrase]';
113
+ }
114
+ if (lowerMatch.includes('key') && !lowerMatch.includes('public')) {
115
+ return '[key]';
116
+ }
117
+ if (lowerMatch.includes('token')) {
118
+ return '[token]';
119
+ }
120
+ if (lowerMatch.includes('password')) {
121
+ return '[password]';
122
+ }
123
+ if (lowerMatch.includes('secret')) {
124
+ return '[secret]';
125
+ }
126
+ if (/[a-f0-9]{32,}/i.test(match) || /[A-Za-z0-9+/]{40,}/.test(match)) {
127
+ return '[sensitive data]';
128
+ }
129
+ return '[sensitive]';
130
+ }
131
+ /**
132
+ * Apply sensitive pattern sanitization
133
+ */
134
+ function applySensitivePatternSanitization(message) {
135
+ let sanitized = message;
136
+ for (const pattern of SENSITIVE_PATTERNS) {
137
+ sanitized = sanitized.replace(pattern, (match) => {
138
+ if (isSafePattern(match)) {
139
+ return match;
140
+ }
141
+ return getSensitiveReplacement(match);
142
+ });
143
+ }
144
+ return sanitized;
145
+ }
146
+ /**
147
+ * Sanitize error message to prevent information leakage
148
+ * Removes or masks sensitive information while preserving useful debugging info
149
+ *
150
+ * @param message - Error message to sanitize
151
+ * @param isDevelopment - Whether we're in development mode (less sanitization)
152
+ * @param context - Optional context about where the error occurred (for better sanitization)
153
+ * @returns Sanitized error message
154
+ */
155
+ export function sanitizeErrorMessage(message, isDevelopment = false, context) {
156
+ if (isDevelopment) {
157
+ return maskSensitiveStrings(message);
158
+ }
159
+ // In production, be more aggressive with sanitization
160
+ let sanitized = removeFilePaths(message);
161
+ sanitized = applySensitivePatternSanitization(sanitized);
162
+ // Additional cleanup: remove any remaining long hex/base64 strings
163
+ sanitized = sanitized.replace(/\b0x?[a-f0-9]{32,}\b/gi, '[hex string]');
164
+ sanitized = sanitized.replace(/\b[A-Za-z0-9+/]{40,}={0,2}\b/g, '[base64 string]');
165
+ return sanitized;
166
+ }
167
+ /**
168
+ * Normalize error to Error instance
169
+ * Converts any error-like value to a proper Error object
170
+ * Always sanitizes the error message (with different levels) to prevent information leakage
171
+ *
172
+ * @param error - Error to normalize
173
+ * @param sanitizeLevel - Sanitization level or boolean (default: PRODUCTION in production, DEVELOPMENT in dev)
174
+ * @param context - Optional context about where the error occurred
175
+ * @returns Normalized Error instance
176
+ */
177
+ export function normalizeError(error, sanitizeLevel = process.env.NODE_ENV === 'production'
178
+ ? SanitizationLevel.PRODUCTION
179
+ : SanitizationLevel.DEVELOPMENT, context) {
180
+ let errorMessage;
181
+ if (error instanceof Error) {
182
+ errorMessage = error.message;
183
+ }
184
+ else if (typeof error === 'string') {
185
+ errorMessage = error;
186
+ }
187
+ else if (error && typeof error === 'object' && 'message' in error) {
188
+ errorMessage = String(error.message);
189
+ }
190
+ else {
191
+ errorMessage = String(error);
192
+ }
193
+ // Always sanitize, but with different levels
194
+ const level = typeof sanitizeLevel === 'boolean'
195
+ ? (sanitizeLevel ? SanitizationLevel.PRODUCTION : SanitizationLevel.NONE)
196
+ : sanitizeLevel;
197
+ if (level !== SanitizationLevel.NONE) {
198
+ errorMessage = sanitizeErrorMessage(errorMessage, level === SanitizationLevel.DEVELOPMENT, context);
199
+ }
200
+ const normalizedError = new Error(errorMessage);
201
+ // Preserve error name and stack if available
202
+ if (error instanceof Error) {
203
+ normalizedError.name = error.name;
204
+ // Sanitize stack trace based on level
205
+ if (error.stack) {
206
+ if (level !== SanitizationLevel.NONE) {
207
+ // Mask file paths and sensitive data in stack traces
208
+ normalizedError.stack = sanitizeErrorMessage(error.stack, level === SanitizationLevel.DEVELOPMENT, context);
209
+ }
210
+ else {
211
+ normalizedError.stack = error.stack;
212
+ }
213
+ }
214
+ }
215
+ return normalizedError;
216
+ }
217
+ /**
218
+ * Get error message from any error-like value
219
+ */
220
+ export function getErrorMessage(error) {
221
+ return normalizeError(error).message;
222
+ }
223
+ /**
224
+ * Check if error is a specific type
225
+ */
226
+ export function isErrorType(error, typeName) {
227
+ return error instanceof Error && error.name === typeName;
228
+ }
229
+ /**
230
+ * Create a standardized error with context
231
+ */
232
+ export function createContextualError(message, context) {
233
+ const error = new Error(message);
234
+ if (context) {
235
+ Object.assign(error, { context });
236
+ }
237
+ return error;
238
+ }
239
+ /**
240
+ * Check if an error is an authentication error
241
+ * Used to prevent automatic retries when authentication fails
242
+ *
243
+ * @param error - Error to check
244
+ * @returns true if the error is an authentication error
245
+ */
246
+ export function isAuthenticationError(error) {
247
+ // Check if it's an AuthenticationError instance from secure storage
248
+ if (error && typeof error === 'object' && 'constructor' in error) {
249
+ const errorName = error.constructor.name;
250
+ if (errorName === 'AuthenticationError') {
251
+ return true;
252
+ }
253
+ }
254
+ // Check if it's an Error instance with authentication-related properties
255
+ if (error instanceof Error) {
256
+ const msg = error.message.toLowerCase();
257
+ return (error.name === 'AuthenticationError' ||
258
+ msg.includes('authentication') ||
259
+ msg.includes('biometric') ||
260
+ msg.includes('authentication required but failed'));
261
+ }
262
+ return false;
263
+ }
264
+ //# sourceMappingURL=errorUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorUtils.js","sourceRoot":"","sources":["../../src/utils/errorUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Worklet Initialization State Machine
3
+ *
4
+ * Represents the state of the worklet runtime initialization (global, happens once).
5
+ * This is separate from wallet loading, which happens per-identifier.
6
+ */
7
+ /**
8
+ * Worklet initialization status enum
9
+ *
10
+ * Represents the current state of the worklet runtime initialization.
11
+ * The worklet is initialized once (global), but wallets are loaded per-identifier.
12
+ *
13
+ * Flow:
14
+ * 1. IDLE -> STARTING_WORKLET (worklet initialization begins)
15
+ * 2. STARTING_WORKLET -> WORKLET_READY (worklet runtime ready, can now load wallets)
16
+ *
17
+ * After WORKLET_READY, you can load different wallets (per identifier).
18
+ * Wallet loading state is separate - see walletState in WdkAppContextValue.
19
+ */
20
+ export declare enum InitializationStatus {
21
+ /** Initial state - worklet not started */
22
+ IDLE = "idle",
23
+ /** Worklet runtime is starting (happens once, global) */
24
+ STARTING_WORKLET = "starting_worklet",
25
+ /** Worklet is ready - can now load wallets (per identifier) */
26
+ WORKLET_READY = "worklet_ready",
27
+ /** Error state - worklet initialization failed */
28
+ ERROR = "error"
29
+ }
30
+ /**
31
+ * App-level status enum
32
+ *
33
+ * Represents the combined state of worklet initialization and wallet loading.
34
+ * This is a convenience enum for app-level "is ready?" checks.
35
+ *
36
+ * For granular control, use workletState and walletState separately.
37
+ */
38
+ export declare enum AppStatus {
39
+ /** Worklet not started */
40
+ IDLE = "idle",
41
+ /** Worklet is starting */
42
+ STARTING_WORKLET = "starting_worklet",
43
+ /** Worklet ready, no wallet loaded */
44
+ WORKLET_READY = "worklet_ready",
45
+ /** Loading a wallet (checking existence, decrypting, initializing) */
46
+ LOADING_WALLET = "loading_wallet",
47
+ /** Fully ready - worklet started, wallet loaded, addresses available */
48
+ READY = "ready",
49
+ /** Error state - worklet or wallet error */
50
+ ERROR = "error"
51
+ }
52
+ /**
53
+ * Helper to check if status represents an error state
54
+ */
55
+ export declare function isErrorStatus(status: InitializationStatus): boolean;
56
+ /**
57
+ * Helper to check if worklet initialization is complete and ready
58
+ */
59
+ export declare function isReadyStatus(status: InitializationStatus): boolean;
60
+ /**
61
+ * Helper to check if worklet initialization is in progress
62
+ */
63
+ export declare function isInProgressStatus(status: InitializationStatus): boolean;
64
+ /**
65
+ * Helper to check if app status represents an in-progress state
66
+ */
67
+ export declare function isAppInProgressStatus(status: AppStatus): boolean;
68
+ /**
69
+ * Helper to check if app is ready (worklet + wallet both ready)
70
+ */
71
+ export declare function isAppReadyStatus(status: AppStatus): boolean;
72
+ /**
73
+ * Helper to check if worklet has started (worklet runtime is ready)
74
+ * Once worklet is ready, you can load wallets (per identifier)
75
+ */
76
+ export declare function hasWorkletStarted(status: InitializationStatus): boolean;
77
+ /**
78
+ * Helper to check if wallet operations can be performed
79
+ * Returns true when worklet is ready (wallets can be loaded per identifier)
80
+ */
81
+ export declare function canLoadWallet(status: InitializationStatus): boolean;
82
+ /**
83
+ * Helper to check if app status indicates worklet has started
84
+ */
85
+ export declare function hasWorkletStartedApp(status: AppStatus): boolean;
86
+ /**
87
+ * Helper to check if wallet operations can be performed based on app status
88
+ */
89
+ export declare function canLoadWalletApp(status: AppStatus): boolean;
90
+ /**
91
+ * Get human-readable worklet initialization status message
92
+ */
93
+ export declare function getStatusMessage(status: InitializationStatus): string;
94
+ /**
95
+ * Get human-readable app status message
96
+ */
97
+ export declare function getAppStatusMessage(status: AppStatus): string;
98
+ /**
99
+ * Gets worklet initialization status from worklet state
100
+ *
101
+ * @param workletState - Worklet state (global, from workletStore)
102
+ * @returns Worklet initialization status
103
+ */
104
+ export declare function getWorkletStatus(workletState: {
105
+ isWorkletStarted: boolean;
106
+ isLoading: boolean;
107
+ error: string | null;
108
+ }): InitializationStatus;
109
+ /**
110
+ * Derives combined app status from worklet and wallet states
111
+ *
112
+ * This is a convenience function that combines the global worklet state with the
113
+ * per-identifier wallet state to produce a unified app-level status.
114
+ *
115
+ * NOTE: This is for convenience only. For granular control, use workletState and
116
+ * walletState separately. The combined status hides some information (e.g., can't
117
+ * distinguish worklet errors from wallet errors).
118
+ *
119
+ * @param workletState - Worklet state (global, from workletStore)
120
+ * @param walletState - Wallet state (per-identifier, from wallet state machine)
121
+ * @returns Combined app status (convenience helper)
122
+ */
123
+ export declare function getCombinedStatus(workletState: {
124
+ isWorkletStarted: boolean;
125
+ isLoading: boolean;
126
+ error: string | null;
127
+ }, walletState: {
128
+ type: 'not_loaded' | 'checking' | 'loading' | 'ready' | 'error';
129
+ }): AppStatus;
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Worklet Initialization State Machine
3
+ *
4
+ * Represents the state of the worklet runtime initialization (global, happens once).
5
+ * This is separate from wallet loading, which happens per-identifier.
6
+ */
7
+ /**
8
+ * Worklet initialization status enum
9
+ *
10
+ * Represents the current state of the worklet runtime initialization.
11
+ * The worklet is initialized once (global), but wallets are loaded per-identifier.
12
+ *
13
+ * Flow:
14
+ * 1. IDLE -> STARTING_WORKLET (worklet initialization begins)
15
+ * 2. STARTING_WORKLET -> WORKLET_READY (worklet runtime ready, can now load wallets)
16
+ *
17
+ * After WORKLET_READY, you can load different wallets (per identifier).
18
+ * Wallet loading state is separate - see walletState in WdkAppContextValue.
19
+ */
20
+ export var InitializationStatus;
21
+ (function (InitializationStatus) {
22
+ /** Initial state - worklet not started */
23
+ InitializationStatus["IDLE"] = "idle";
24
+ /** Worklet runtime is starting (happens once, global) */
25
+ InitializationStatus["STARTING_WORKLET"] = "starting_worklet";
26
+ /** Worklet is ready - can now load wallets (per identifier) */
27
+ InitializationStatus["WORKLET_READY"] = "worklet_ready";
28
+ /** Error state - worklet initialization failed */
29
+ InitializationStatus["ERROR"] = "error";
30
+ })(InitializationStatus || (InitializationStatus = {}));
31
+ /**
32
+ * App-level status enum
33
+ *
34
+ * Represents the combined state of worklet initialization and wallet loading.
35
+ * This is a convenience enum for app-level "is ready?" checks.
36
+ *
37
+ * For granular control, use workletState and walletState separately.
38
+ */
39
+ export var AppStatus;
40
+ (function (AppStatus) {
41
+ /** Worklet not started */
42
+ AppStatus["IDLE"] = "idle";
43
+ /** Worklet is starting */
44
+ AppStatus["STARTING_WORKLET"] = "starting_worklet";
45
+ /** Worklet ready, no wallet loaded */
46
+ AppStatus["WORKLET_READY"] = "worklet_ready";
47
+ /** Loading a wallet (checking existence, decrypting, initializing) */
48
+ AppStatus["LOADING_WALLET"] = "loading_wallet";
49
+ /** Fully ready - worklet started, wallet loaded, addresses available */
50
+ AppStatus["READY"] = "ready";
51
+ /** Error state - worklet or wallet error */
52
+ AppStatus["ERROR"] = "error";
53
+ })(AppStatus || (AppStatus = {}));
54
+ /**
55
+ * Helper to check if status represents an error state
56
+ */
57
+ export function isErrorStatus(status) {
58
+ return status === InitializationStatus.ERROR;
59
+ }
60
+ /**
61
+ * Helper to check if worklet initialization is complete and ready
62
+ */
63
+ export function isReadyStatus(status) {
64
+ return status === InitializationStatus.WORKLET_READY;
65
+ }
66
+ /**
67
+ * Helper to check if worklet initialization is in progress
68
+ */
69
+ export function isInProgressStatus(status) {
70
+ return status === InitializationStatus.STARTING_WORKLET;
71
+ }
72
+ /**
73
+ * Helper to check if app status represents an in-progress state
74
+ */
75
+ export function isAppInProgressStatus(status) {
76
+ return [
77
+ AppStatus.STARTING_WORKLET,
78
+ AppStatus.LOADING_WALLET,
79
+ ].includes(status);
80
+ }
81
+ /**
82
+ * Helper to check if app is ready (worklet + wallet both ready)
83
+ */
84
+ export function isAppReadyStatus(status) {
85
+ return status === AppStatus.READY;
86
+ }
87
+ /**
88
+ * Helper to check if worklet has started (worklet runtime is ready)
89
+ * Once worklet is ready, you can load wallets (per identifier)
90
+ */
91
+ export function hasWorkletStarted(status) {
92
+ return [
93
+ InitializationStatus.WORKLET_READY,
94
+ InitializationStatus.ERROR,
95
+ ].includes(status);
96
+ }
97
+ /**
98
+ * Helper to check if wallet operations can be performed
99
+ * Returns true when worklet is ready (wallets can be loaded per identifier)
100
+ */
101
+ export function canLoadWallet(status) {
102
+ return status === InitializationStatus.WORKLET_READY;
103
+ }
104
+ /**
105
+ * Helper to check if app status indicates worklet has started
106
+ */
107
+ export function hasWorkletStartedApp(status) {
108
+ return [
109
+ AppStatus.WORKLET_READY,
110
+ AppStatus.LOADING_WALLET,
111
+ AppStatus.READY,
112
+ AppStatus.ERROR,
113
+ ].includes(status);
114
+ }
115
+ /**
116
+ * Helper to check if wallet operations can be performed based on app status
117
+ */
118
+ export function canLoadWalletApp(status) {
119
+ return [
120
+ AppStatus.WORKLET_READY,
121
+ AppStatus.LOADING_WALLET,
122
+ AppStatus.READY,
123
+ ].includes(status);
124
+ }
125
+ /**
126
+ * Get human-readable worklet initialization status message
127
+ */
128
+ export function getStatusMessage(status) {
129
+ switch (status) {
130
+ case InitializationStatus.IDLE:
131
+ return 'Not started';
132
+ case InitializationStatus.STARTING_WORKLET:
133
+ return 'Starting worklet...';
134
+ case InitializationStatus.WORKLET_READY:
135
+ return 'Worklet ready - can load wallets';
136
+ case InitializationStatus.ERROR:
137
+ return 'Worklet error';
138
+ default:
139
+ return 'Unknown';
140
+ }
141
+ }
142
+ /**
143
+ * Get human-readable app status message
144
+ */
145
+ export function getAppStatusMessage(status) {
146
+ switch (status) {
147
+ case AppStatus.IDLE:
148
+ return 'Not started';
149
+ case AppStatus.STARTING_WORKLET:
150
+ return 'Starting worklet...';
151
+ case AppStatus.WORKLET_READY:
152
+ return 'Worklet ready - can load wallets';
153
+ case AppStatus.LOADING_WALLET:
154
+ return 'Loading wallet...';
155
+ case AppStatus.READY:
156
+ return 'Ready';
157
+ case AppStatus.ERROR:
158
+ return 'Error';
159
+ default:
160
+ return 'Unknown';
161
+ }
162
+ }
163
+ /**
164
+ * Gets worklet initialization status from worklet state
165
+ *
166
+ * @param workletState - Worklet state (global, from workletStore)
167
+ * @returns Worklet initialization status
168
+ */
169
+ export function getWorkletStatus(workletState) {
170
+ if (workletState.error) {
171
+ return InitializationStatus.ERROR;
172
+ }
173
+ if (!workletState.isWorkletStarted) {
174
+ return workletState.isLoading
175
+ ? InitializationStatus.STARTING_WORKLET
176
+ : InitializationStatus.IDLE;
177
+ }
178
+ return InitializationStatus.WORKLET_READY;
179
+ }
180
+ /**
181
+ * Derives combined app status from worklet and wallet states
182
+ *
183
+ * This is a convenience function that combines the global worklet state with the
184
+ * per-identifier wallet state to produce a unified app-level status.
185
+ *
186
+ * NOTE: This is for convenience only. For granular control, use workletState and
187
+ * walletState separately. The combined status hides some information (e.g., can't
188
+ * distinguish worklet errors from wallet errors).
189
+ *
190
+ * @param workletState - Worklet state (global, from workletStore)
191
+ * @param walletState - Wallet state (per-identifier, from wallet state machine)
192
+ * @returns Combined app status (convenience helper)
193
+ */
194
+ export function getCombinedStatus(workletState, walletState) {
195
+ // Worklet errors take precedence
196
+ if (workletState.error) {
197
+ return AppStatus.ERROR;
198
+ }
199
+ // Worklet not ready
200
+ if (!workletState.isWorkletStarted) {
201
+ return workletState.isLoading
202
+ ? AppStatus.STARTING_WORKLET
203
+ : AppStatus.IDLE;
204
+ }
205
+ // Worklet ready, check wallet state
206
+ switch (walletState.type) {
207
+ case 'not_loaded':
208
+ return AppStatus.WORKLET_READY;
209
+ case 'checking':
210
+ case 'loading':
211
+ return AppStatus.LOADING_WALLET;
212
+ case 'ready':
213
+ return AppStatus.READY;
214
+ case 'error':
215
+ return AppStatus.ERROR;
216
+ default:
217
+ return AppStatus.IDLE;
218
+ }
219
+ }
220
+ //# sourceMappingURL=initializationState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initializationState.js","sourceRoot":"","sources":["../../src/utils/initializationState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * JSON Utilities
3
+ *
4
+ * Provides safe JSON stringification and validation utilities
5
+ * to prevent security issues and ensure data integrity.
6
+ */
7
+ /**
8
+ * Validate that a value has a safe JSON structure
9
+ * Prevents prototype pollution and circular references
10
+ */
11
+ export declare function validateJSONStructure(value: unknown): boolean;
12
+ /**
13
+ * Safe JSON stringify with validation
14
+ * Validates structure before stringifying to prevent security issues
15
+ *
16
+ * @param value - Value to stringify
17
+ * @param space - Optional spacing for pretty printing
18
+ * @returns JSON string
19
+ * @throws Error if value cannot be safely stringified
20
+ */
21
+ export declare function safeStringify(value: unknown, space?: number): string;