@otim/utils 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.
Files changed (467) hide show
  1. package/dist/api/index.d.mts +1858 -7
  2. package/dist/api/index.d.mts.map +1 -0
  3. package/dist/api/index.d.ts +1857 -6
  4. package/dist/api/index.d.ts.map +1 -1
  5. package/dist/api/index.js +1514 -1994
  6. package/dist/api/index.js.map +1 -7
  7. package/dist/api/index.mjs +1394 -1962
  8. package/dist/api/index.mjs.map +1 -7
  9. package/dist/api-urls-B-GTEiT3.d.mts +49 -0
  10. package/dist/api-urls-B-GTEiT3.d.mts.map +1 -0
  11. package/dist/api-urls-Cd20DG4i.js +171 -0
  12. package/dist/api-urls-Cd20DG4i.js.map +1 -0
  13. package/dist/api-urls-DJcIKBCy.mjs +135 -0
  14. package/dist/api-urls-DJcIKBCy.mjs.map +1 -0
  15. package/dist/api-urls-SKeIQMoZ.d.ts +49 -0
  16. package/dist/api-urls-SKeIQMoZ.d.ts.map +1 -0
  17. package/dist/chains/index.d.mts +13568 -16
  18. package/dist/chains/index.d.mts.map +1 -0
  19. package/dist/chains/index.d.ts +13567 -15
  20. package/dist/chains/index.d.ts.map +1 -1
  21. package/dist/chains/index.js +3615 -424
  22. package/dist/chains/index.js.map +1 -7
  23. package/dist/chains/index.mjs +3561 -440
  24. package/dist/chains/index.mjs.map +1 -7
  25. package/dist/chunk-kSYXY2_d.js +34 -0
  26. package/dist/client-factory-7xUSPC9I.mjs +42 -0
  27. package/dist/client-factory-7xUSPC9I.mjs.map +1 -0
  28. package/dist/client-factory-C3A4RPdj.d.ts +22 -0
  29. package/dist/client-factory-C3A4RPdj.d.ts.map +1 -0
  30. package/dist/client-factory-CTI_Nt35.js +49 -0
  31. package/dist/client-factory-CTI_Nt35.js.map +1 -0
  32. package/dist/client-factory-DOL0ZTWy.d.mts +22 -0
  33. package/dist/client-factory-DOL0ZTWy.d.mts.map +1 -0
  34. package/dist/constants.d.mts +14 -24
  35. package/dist/constants.d.mts.map +1 -0
  36. package/dist/constants.d.ts +13 -23
  37. package/dist/constants.d.ts.map +1 -1
  38. package/dist/constants.js +31 -46
  39. package/dist/constants.js.map +1 -7
  40. package/dist/constants.mjs +22 -26
  41. package/dist/constants.mjs.map +1 -7
  42. package/dist/date-CFzrYcjE.js +536 -0
  43. package/dist/date-CFzrYcjE.js.map +1 -0
  44. package/dist/date-gBac-Om9.mjs +313 -0
  45. package/dist/date-gBac-Om9.mjs.map +1 -0
  46. package/dist/defineProperty-DbMdhrDE.js +49 -0
  47. package/dist/defineProperty-DzhmunJg.mjs +43 -0
  48. package/dist/formatters/index.d.mts +1 -2
  49. package/dist/formatters/index.d.ts +1 -2
  50. package/dist/formatters/index.js +0 -19
  51. package/dist/formatters/index.mjs +1 -1
  52. package/dist/helpers/index.d.mts +562 -19
  53. package/dist/helpers/index.d.mts.map +1 -0
  54. package/dist/helpers/index.d.ts +561 -18
  55. package/dist/helpers/index.d.ts.map +1 -1
  56. package/dist/helpers/index.js +106 -1344
  57. package/dist/helpers/index.mjs +3 -1315
  58. package/dist/helpers-BNiSxjGq.mjs +895 -0
  59. package/dist/helpers-BNiSxjGq.mjs.map +1 -0
  60. package/dist/helpers-DoC7Xl12.js +1291 -0
  61. package/dist/helpers-DoC7Xl12.js.map +1 -0
  62. package/dist/index-Bv0kUz4w.d.ts +540 -0
  63. package/dist/index-Bv0kUz4w.d.ts.map +1 -0
  64. package/dist/index-DartTKk2.d.mts +540 -0
  65. package/dist/index-DartTKk2.d.mts.map +1 -0
  66. package/dist/index.d.mts +1 -1
  67. package/dist/index.d.ts +1 -1
  68. package/dist/index.js +0 -2
  69. package/dist/index.mjs +1 -1
  70. package/dist/instructions/index.d.mts +687 -6
  71. package/dist/instructions/index.d.mts.map +1 -0
  72. package/dist/instructions/index.d.ts +686 -5
  73. package/dist/instructions/index.d.ts.map +1 -1
  74. package/dist/instructions/index.js +1912 -1091
  75. package/dist/instructions/index.js.map +1 -7
  76. package/dist/instructions/index.mjs +1887 -1058
  77. package/dist/instructions/index.mjs.map +1 -7
  78. package/dist/payments/index.d.mts +322 -16
  79. package/dist/payments/index.d.mts.map +1 -0
  80. package/dist/payments/index.d.ts +321 -15
  81. package/dist/payments/index.d.ts.map +1 -1
  82. package/dist/payments/index.js +616 -1258
  83. package/dist/payments/index.js.map +1 -7
  84. package/dist/payments/index.mjs +594 -1236
  85. package/dist/payments/index.mjs.map +1 -7
  86. package/dist/schemas/index.d.mts +2 -10
  87. package/dist/schemas/index.d.ts +2 -10
  88. package/dist/schemas/index.js +350 -393
  89. package/dist/schemas/index.js.map +1 -7
  90. package/dist/schemas/index.mjs +283 -371
  91. package/dist/schemas/index.mjs.map +1 -7
  92. package/dist/server/index.d.mts +354 -3
  93. package/dist/server/index.d.mts.map +1 -0
  94. package/dist/server/index.d.ts +353 -2
  95. package/dist/server/index.d.ts.map +1 -1
  96. package/dist/server/index.js +248 -435
  97. package/dist/server/index.js.map +1 -7
  98. package/dist/server/index.mjs +199 -404
  99. package/dist/server/index.mjs.map +1 -7
  100. package/dist/server/react.d.mts +16 -0
  101. package/dist/server/react.d.mts.map +1 -0
  102. package/dist/server/react.d.ts +16 -0
  103. package/dist/server/react.d.ts.map +1 -0
  104. package/dist/server/react.js +30 -0
  105. package/dist/server/react.js.map +1 -0
  106. package/dist/server/react.mjs +28 -0
  107. package/dist/server/react.mjs.map +1 -0
  108. package/dist/wallet/wagmi/index.d.mts +23 -2
  109. package/dist/wallet/wagmi/index.d.mts.map +1 -0
  110. package/dist/wallet/wagmi/index.d.ts +22 -1
  111. package/dist/wallet/wagmi/index.d.ts.map +1 -1
  112. package/dist/wallet/wagmi/index.js +86 -417
  113. package/dist/wallet/wagmi/index.js.map +1 -7
  114. package/dist/wallet/wagmi/index.mjs +82 -418
  115. package/dist/wallet/wagmi/index.mjs.map +1 -7
  116. package/package.json +39 -28
  117. package/dist/api/api.d.mts +0 -18
  118. package/dist/api/api.d.ts +0 -18
  119. package/dist/api/api.d.ts.map +0 -1
  120. package/dist/api/core/error.d.mts +0 -74
  121. package/dist/api/core/error.d.ts +0 -74
  122. package/dist/api/core/error.d.ts.map +0 -1
  123. package/dist/api/core/index.d.mts +0 -4
  124. package/dist/api/core/index.d.ts +0 -4
  125. package/dist/api/core/index.d.ts.map +0 -1
  126. package/dist/api/core/instance.d.mts +0 -13
  127. package/dist/api/core/instance.d.ts +0 -13
  128. package/dist/api/core/instance.d.ts.map +0 -1
  129. package/dist/api/core/service.d.mts +0 -51
  130. package/dist/api/core/service.d.ts +0 -51
  131. package/dist/api/core/service.d.ts.map +0 -1
  132. package/dist/api/schemas/account.d.mts +0 -44
  133. package/dist/api/schemas/account.d.ts +0 -44
  134. package/dist/api/schemas/account.d.ts.map +0 -1
  135. package/dist/api/schemas/activity.d.mts +0 -277
  136. package/dist/api/schemas/activity.d.ts +0 -277
  137. package/dist/api/schemas/activity.d.ts.map +0 -1
  138. package/dist/api/schemas/auth.d.mts +0 -127
  139. package/dist/api/schemas/auth.d.ts +0 -127
  140. package/dist/api/schemas/auth.d.ts.map +0 -1
  141. package/dist/api/schemas/chain.d.mts +0 -15
  142. package/dist/api/schemas/chain.d.ts +0 -15
  143. package/dist/api/schemas/chain.d.ts.map +0 -1
  144. package/dist/api/schemas/config.d.mts +0 -33
  145. package/dist/api/schemas/config.d.ts +0 -33
  146. package/dist/api/schemas/config.d.ts.map +0 -1
  147. package/dist/api/schemas/contacts.d.mts +0 -27
  148. package/dist/api/schemas/contacts.d.ts +0 -27
  149. package/dist/api/schemas/contacts.d.ts.map +0 -1
  150. package/dist/api/schemas/index.d.mts +0 -12
  151. package/dist/api/schemas/index.d.ts +0 -12
  152. package/dist/api/schemas/index.d.ts.map +0 -1
  153. package/dist/api/schemas/instruction.d.mts +0 -446
  154. package/dist/api/schemas/instruction.d.ts +0 -446
  155. package/dist/api/schemas/instruction.d.ts.map +0 -1
  156. package/dist/api/schemas/integration.d.mts +0 -166
  157. package/dist/api/schemas/integration.d.ts +0 -166
  158. package/dist/api/schemas/integration.d.ts.map +0 -1
  159. package/dist/api/schemas/operating-account.d.mts +0 -11
  160. package/dist/api/schemas/operating-account.d.ts +0 -11
  161. package/dist/api/schemas/operating-account.d.ts.map +0 -1
  162. package/dist/api/schemas/payments.d.mts +0 -234
  163. package/dist/api/schemas/payments.d.ts +0 -234
  164. package/dist/api/schemas/payments.d.ts.map +0 -1
  165. package/dist/api/schemas/transaction.d.mts +0 -37
  166. package/dist/api/schemas/transaction.d.ts +0 -37
  167. package/dist/api/schemas/transaction.d.ts.map +0 -1
  168. package/dist/api/services/account.d.mts +0 -8
  169. package/dist/api/services/account.d.ts +0 -8
  170. package/dist/api/services/account.d.ts.map +0 -1
  171. package/dist/api/services/activity.d.mts +0 -7
  172. package/dist/api/services/activity.d.ts +0 -7
  173. package/dist/api/services/activity.d.ts.map +0 -1
  174. package/dist/api/services/auth.d.mts +0 -12
  175. package/dist/api/services/auth.d.ts +0 -12
  176. package/dist/api/services/auth.d.ts.map +0 -1
  177. package/dist/api/services/base.d.mts +0 -10
  178. package/dist/api/services/base.d.ts +0 -10
  179. package/dist/api/services/base.d.ts.map +0 -1
  180. package/dist/api/services/config.d.mts +0 -10
  181. package/dist/api/services/config.d.ts +0 -10
  182. package/dist/api/services/config.d.ts.map +0 -1
  183. package/dist/api/services/contacts.d.mts +0 -8
  184. package/dist/api/services/contacts.d.ts +0 -8
  185. package/dist/api/services/contacts.d.ts.map +0 -1
  186. package/dist/api/services/developer.d.mts +0 -6
  187. package/dist/api/services/developer.d.ts +0 -6
  188. package/dist/api/services/developer.d.ts.map +0 -1
  189. package/dist/api/services/index.d.mts +0 -13
  190. package/dist/api/services/index.d.ts +0 -13
  191. package/dist/api/services/index.d.ts.map +0 -1
  192. package/dist/api/services/instruction.d.mts +0 -12
  193. package/dist/api/services/instruction.d.ts +0 -12
  194. package/dist/api/services/instruction.d.ts.map +0 -1
  195. package/dist/api/services/integration.d.mts +0 -8
  196. package/dist/api/services/integration.d.ts +0 -8
  197. package/dist/api/services/integration.d.ts.map +0 -1
  198. package/dist/api/services/operating-account.d.mts +0 -8
  199. package/dist/api/services/operating-account.d.ts +0 -8
  200. package/dist/api/services/operating-account.d.ts.map +0 -1
  201. package/dist/api/services/payments.d.mts +0 -14
  202. package/dist/api/services/payments.d.ts +0 -14
  203. package/dist/api/services/payments.d.ts.map +0 -1
  204. package/dist/api/services/transaction.d.mts +0 -8
  205. package/dist/api/services/transaction.d.ts +0 -8
  206. package/dist/api/services/transaction.d.ts.map +0 -1
  207. package/dist/api/services/uniswap-token-list-service.d.mts +0 -66
  208. package/dist/api/services/uniswap-token-list-service.d.ts +0 -66
  209. package/dist/api/services/uniswap-token-list-service.d.ts.map +0 -1
  210. package/dist/api/utils/index.d.mts +0 -2
  211. package/dist/api/utils/index.d.ts +0 -2
  212. package/dist/api/utils/index.d.ts.map +0 -1
  213. package/dist/api/utils/pagination.d.mts +0 -32
  214. package/dist/api/utils/pagination.d.ts +0 -32
  215. package/dist/api/utils/pagination.d.ts.map +0 -1
  216. package/dist/chains/config/all-chains.d.mts +0 -4243
  217. package/dist/chains/config/all-chains.d.ts +0 -4243
  218. package/dist/chains/config/all-chains.d.ts.map +0 -1
  219. package/dist/chains/config/custom-chains.d.mts +0 -49
  220. package/dist/chains/config/custom-chains.d.ts +0 -49
  221. package/dist/chains/config/custom-chains.d.ts.map +0 -1
  222. package/dist/chains/config/mainnet-chains.d.mts +0 -1063
  223. package/dist/chains/config/mainnet-chains.d.ts +0 -1063
  224. package/dist/chains/config/mainnet-chains.d.ts.map +0 -1
  225. package/dist/chains/config/supported-chains.d.mts +0 -2172
  226. package/dist/chains/config/supported-chains.d.ts +0 -2172
  227. package/dist/chains/config/supported-chains.d.ts.map +0 -1
  228. package/dist/chains/config/testnet-chains.d.mts +0 -1110
  229. package/dist/chains/config/testnet-chains.d.ts +0 -1110
  230. package/dist/chains/config/testnet-chains.d.ts.map +0 -1
  231. package/dist/chains/lambda/chain-mapping.d.mts +0 -55
  232. package/dist/chains/lambda/chain-mapping.d.ts +0 -55
  233. package/dist/chains/lambda/chain-mapping.d.ts.map +0 -1
  234. package/dist/chains/lambda/index.d.mts +0 -2
  235. package/dist/chains/lambda/index.d.ts +0 -2
  236. package/dist/chains/lambda/index.d.ts.map +0 -1
  237. package/dist/chains/tokens/chain-tokens.d.mts +0 -6
  238. package/dist/chains/tokens/chain-tokens.d.ts +0 -6
  239. package/dist/chains/tokens/chain-tokens.d.ts.map +0 -1
  240. package/dist/chains/tokens/token-addresses.d.mts +0 -8
  241. package/dist/chains/tokens/token-addresses.d.ts +0 -8
  242. package/dist/chains/tokens/token-addresses.d.ts.map +0 -1
  243. package/dist/chains/tokens/token-metadata.d.mts +0 -5
  244. package/dist/chains/tokens/token-metadata.d.ts +0 -5
  245. package/dist/chains/tokens/token-metadata.d.ts.map +0 -1
  246. package/dist/chains/types.d.mts +0 -23
  247. package/dist/chains/types.d.ts +0 -23
  248. package/dist/chains/types.d.ts.map +0 -1
  249. package/dist/chains/utils/filter-tokens.d.mts +0 -3
  250. package/dist/chains/utils/filter-tokens.d.ts +0 -3
  251. package/dist/chains/utils/filter-tokens.d.ts.map +0 -1
  252. package/dist/chains/utils/stablecoin.d.mts +0 -7
  253. package/dist/chains/utils/stablecoin.d.ts +0 -7
  254. package/dist/chains/utils/stablecoin.d.ts.map +0 -1
  255. package/dist/chains/utils/token-maps.d.mts +0 -10
  256. package/dist/chains/utils/token-maps.d.ts +0 -10
  257. package/dist/chains/utils/token-maps.d.ts.map +0 -1
  258. package/dist/env.d.mts +0 -17
  259. package/dist/env.d.ts +0 -17
  260. package/dist/env.d.ts.map +0 -1
  261. package/dist/formatters/index.d.ts.map +0 -1
  262. package/dist/formatters/index.js.map +0 -7
  263. package/dist/formatters/index.mjs.map +0 -7
  264. package/dist/helpers/address.d.mts +0 -7
  265. package/dist/helpers/address.d.ts +0 -7
  266. package/dist/helpers/address.d.ts.map +0 -1
  267. package/dist/helpers/blockchain.d.mts +0 -41
  268. package/dist/helpers/blockchain.d.ts +0 -41
  269. package/dist/helpers/blockchain.d.ts.map +0 -1
  270. package/dist/helpers/date.d.mts +0 -70
  271. package/dist/helpers/date.d.ts +0 -70
  272. package/dist/helpers/date.d.ts.map +0 -1
  273. package/dist/helpers/datetime.d.mts +0 -57
  274. package/dist/helpers/datetime.d.ts +0 -57
  275. package/dist/helpers/datetime.d.ts.map +0 -1
  276. package/dist/helpers/domain.d.mts +0 -2
  277. package/dist/helpers/domain.d.ts +0 -2
  278. package/dist/helpers/domain.d.ts.map +0 -1
  279. package/dist/helpers/index.js.map +0 -7
  280. package/dist/helpers/index.mjs.map +0 -7
  281. package/dist/helpers/intl.d.mts +0 -20
  282. package/dist/helpers/intl.d.ts +0 -20
  283. package/dist/helpers/intl.d.ts.map +0 -1
  284. package/dist/helpers/logger.d.mts +0 -26
  285. package/dist/helpers/logger.d.ts +0 -26
  286. package/dist/helpers/logger.d.ts.map +0 -1
  287. package/dist/helpers/mask-options.d.mts +0 -10
  288. package/dist/helpers/mask-options.d.ts +0 -10
  289. package/dist/helpers/mask-options.d.ts.map +0 -1
  290. package/dist/helpers/num-formatter.d.mts +0 -3
  291. package/dist/helpers/num-formatter.d.ts +0 -3
  292. package/dist/helpers/num-formatter.d.ts.map +0 -1
  293. package/dist/helpers/polling.d.mts +0 -39
  294. package/dist/helpers/polling.d.ts +0 -39
  295. package/dist/helpers/polling.d.ts.map +0 -1
  296. package/dist/helpers/random.d.mts +0 -10
  297. package/dist/helpers/random.d.ts +0 -10
  298. package/dist/helpers/random.d.ts.map +0 -1
  299. package/dist/helpers/sdk-loader.d.mts +0 -25
  300. package/dist/helpers/sdk-loader.d.ts +0 -25
  301. package/dist/helpers/sdk-loader.d.ts.map +0 -1
  302. package/dist/helpers/signatures.d.mts +0 -17
  303. package/dist/helpers/signatures.d.ts +0 -17
  304. package/dist/helpers/signatures.d.ts.map +0 -1
  305. package/dist/helpers/string.d.mts +0 -17
  306. package/dist/helpers/string.d.ts +0 -17
  307. package/dist/helpers/string.d.ts.map +0 -1
  308. package/dist/helpers/types.d.mts +0 -39
  309. package/dist/helpers/types.d.ts +0 -39
  310. package/dist/helpers/types.d.ts.map +0 -1
  311. package/dist/helpers/url.d.mts +0 -11
  312. package/dist/helpers/url.d.ts +0 -11
  313. package/dist/helpers/url.d.ts.map +0 -1
  314. package/dist/helpers/window.d.mts +0 -37
  315. package/dist/helpers/window.d.ts +0 -37
  316. package/dist/helpers/window.d.ts.map +0 -1
  317. package/dist/helpers/zod.d.mts +0 -51
  318. package/dist/helpers/zod.d.ts +0 -51
  319. package/dist/helpers/zod.d.ts.map +0 -1
  320. package/dist/index.d.ts.map +0 -1
  321. package/dist/index.js.map +0 -7
  322. package/dist/index.mjs.map +0 -7
  323. package/dist/instructions/actions/index.d.mts +0 -5
  324. package/dist/instructions/actions/index.d.ts +0 -5
  325. package/dist/instructions/actions/index.d.ts.map +0 -1
  326. package/dist/instructions/actions/refuel/index.d.mts +0 -15
  327. package/dist/instructions/actions/refuel/index.d.ts +0 -15
  328. package/dist/instructions/actions/refuel/index.d.ts.map +0 -1
  329. package/dist/instructions/actions/swap/index.d.mts +0 -19
  330. package/dist/instructions/actions/swap/index.d.ts +0 -19
  331. package/dist/instructions/actions/swap/index.d.ts.map +0 -1
  332. package/dist/instructions/actions/sweep/index.d.mts +0 -16
  333. package/dist/instructions/actions/sweep/index.d.ts +0 -16
  334. package/dist/instructions/actions/sweep/index.d.ts.map +0 -1
  335. package/dist/instructions/actions/transfer/index.d.mts +0 -13
  336. package/dist/instructions/actions/transfer/index.d.ts +0 -13
  337. package/dist/instructions/actions/transfer/index.d.ts.map +0 -1
  338. package/dist/instructions/activate.d.mts +0 -84
  339. package/dist/instructions/activate.d.ts +0 -84
  340. package/dist/instructions/activate.d.ts.map +0 -1
  341. package/dist/instructions/build.d.mts +0 -146
  342. package/dist/instructions/build.d.ts +0 -146
  343. package/dist/instructions/build.d.ts.map +0 -1
  344. package/dist/instructions/constants.d.mts +0 -9
  345. package/dist/instructions/constants.d.ts +0 -9
  346. package/dist/instructions/constants.d.ts.map +0 -1
  347. package/dist/instructions/contracts/artifacts/abi/build-instruction-action-arguments-abi.d.mts +0 -609
  348. package/dist/instructions/contracts/artifacts/abi/build-instruction-action-arguments-abi.d.ts +0 -609
  349. package/dist/instructions/contracts/artifacts/abi/build-instruction-action-arguments-abi.d.ts.map +0 -1
  350. package/dist/instructions/types.d.mts +0 -289
  351. package/dist/instructions/types.d.ts +0 -289
  352. package/dist/instructions/types.d.ts.map +0 -1
  353. package/dist/payments/action-names.d.mts +0 -16
  354. package/dist/payments/action-names.d.ts +0 -16
  355. package/dist/payments/action-names.d.ts.map +0 -1
  356. package/dist/payments/actions/index.d.mts +0 -5
  357. package/dist/payments/actions/index.d.ts +0 -5
  358. package/dist/payments/actions/index.d.ts.map +0 -1
  359. package/dist/payments/actions/sweep-cctp.d.mts +0 -15
  360. package/dist/payments/actions/sweep-cctp.d.ts +0 -15
  361. package/dist/payments/actions/sweep-cctp.d.ts.map +0 -1
  362. package/dist/payments/actions/sweep-erc20.d.mts +0 -12
  363. package/dist/payments/actions/sweep-erc20.d.ts +0 -12
  364. package/dist/payments/actions/sweep-erc20.d.ts.map +0 -1
  365. package/dist/payments/actions/sweep-uniswap-v3.d.mts +0 -17
  366. package/dist/payments/actions/sweep-uniswap-v3.d.ts +0 -17
  367. package/dist/payments/actions/sweep-uniswap-v3.d.ts.map +0 -1
  368. package/dist/payments/actions/sweep.d.mts +0 -12
  369. package/dist/payments/actions/sweep.d.ts +0 -12
  370. package/dist/payments/actions/sweep.d.ts.map +0 -1
  371. package/dist/payments/build.d.mts +0 -28
  372. package/dist/payments/build.d.ts +0 -28
  373. package/dist/payments/build.d.ts.map +0 -1
  374. package/dist/payments/chain-token-config-builder.d.mts +0 -10
  375. package/dist/payments/chain-token-config-builder.d.ts +0 -10
  376. package/dist/payments/chain-token-config-builder.d.ts.map +0 -1
  377. package/dist/payments/comprehensive-payment-request.d.mts +0 -26
  378. package/dist/payments/comprehensive-payment-request.d.ts +0 -26
  379. package/dist/payments/comprehensive-payment-request.d.ts.map +0 -1
  380. package/dist/payments/config/cctp.d.mts +0 -14
  381. package/dist/payments/config/cctp.d.ts +0 -14
  382. package/dist/payments/config/cctp.d.ts.map +0 -1
  383. package/dist/payments/config/index.d.mts +0 -3
  384. package/dist/payments/config/index.d.ts +0 -3
  385. package/dist/payments/config/index.d.ts.map +0 -1
  386. package/dist/payments/config/tokens.d.mts +0 -14
  387. package/dist/payments/config/tokens.d.ts +0 -14
  388. package/dist/payments/config/tokens.d.ts.map +0 -1
  389. package/dist/payments/instruction-registry.d.mts +0 -19
  390. package/dist/payments/instruction-registry.d.ts +0 -19
  391. package/dist/payments/instruction-registry.d.ts.map +0 -1
  392. package/dist/payments/payment-metadata-builder.d.mts +0 -56
  393. package/dist/payments/payment-metadata-builder.d.ts +0 -56
  394. package/dist/payments/payment-metadata-builder.d.ts.map +0 -1
  395. package/dist/payments/payment-metadata.d.mts +0 -15
  396. package/dist/payments/payment-metadata.d.ts +0 -15
  397. package/dist/payments/payment-metadata.d.ts.map +0 -1
  398. package/dist/payments/payment-request-token-resolver.d.mts +0 -25
  399. package/dist/payments/payment-request-token-resolver.d.ts +0 -25
  400. package/dist/payments/payment-request-token-resolver.d.ts.map +0 -1
  401. package/dist/payments/types.d.mts +0 -40
  402. package/dist/payments/types.d.ts +0 -40
  403. package/dist/payments/types.d.ts.map +0 -1
  404. package/dist/payments/validation.d.mts +0 -19
  405. package/dist/payments/validation.d.ts +0 -19
  406. package/dist/payments/validation.d.ts.map +0 -1
  407. package/dist/schemas/account.d.mts +0 -9
  408. package/dist/schemas/account.d.ts +0 -9
  409. package/dist/schemas/account.d.ts.map +0 -1
  410. package/dist/schemas/brand.d.mts +0 -7
  411. package/dist/schemas/brand.d.ts +0 -7
  412. package/dist/schemas/brand.d.ts.map +0 -1
  413. package/dist/schemas/contact.d.mts +0 -18
  414. package/dist/schemas/contact.d.ts +0 -18
  415. package/dist/schemas/contact.d.ts.map +0 -1
  416. package/dist/schemas/index.d.ts.map +0 -1
  417. package/dist/schemas/instruction.d.mts +0 -248
  418. package/dist/schemas/instruction.d.ts +0 -248
  419. package/dist/schemas/instruction.d.ts.map +0 -1
  420. package/dist/schemas/misc.d.mts +0 -36
  421. package/dist/schemas/misc.d.ts +0 -36
  422. package/dist/schemas/misc.d.ts.map +0 -1
  423. package/dist/schemas/payment.d.mts +0 -64
  424. package/dist/schemas/payment.d.ts +0 -64
  425. package/dist/schemas/payment.d.ts.map +0 -1
  426. package/dist/schemas/token.d.mts +0 -17
  427. package/dist/schemas/token.d.ts +0 -17
  428. package/dist/schemas/token.d.ts.map +0 -1
  429. package/dist/schemas/transaction.d.mts +0 -65
  430. package/dist/schemas/transaction.d.ts +0 -65
  431. package/dist/schemas/transaction.d.ts.map +0 -1
  432. package/dist/schemas/user.d.mts +0 -24
  433. package/dist/schemas/user.d.ts +0 -24
  434. package/dist/schemas/user.d.ts.map +0 -1
  435. package/dist/server/client.d.mts +0 -3
  436. package/dist/server/client.d.ts +0 -3
  437. package/dist/server/client.d.ts.map +0 -1
  438. package/dist/server/routes/account.d.mts +0 -4
  439. package/dist/server/routes/account.d.ts +0 -4
  440. package/dist/server/routes/account.d.ts.map +0 -1
  441. package/dist/server/routes/auth.d.mts +0 -28
  442. package/dist/server/routes/auth.d.ts +0 -28
  443. package/dist/server/routes/auth.d.ts.map +0 -1
  444. package/dist/server/routes/bridge.d.mts +0 -254
  445. package/dist/server/routes/bridge.d.ts +0 -254
  446. package/dist/server/routes/bridge.d.ts.map +0 -1
  447. package/dist/server/routes/config.d.mts +0 -3
  448. package/dist/server/routes/config.d.ts +0 -3
  449. package/dist/server/routes/config.d.ts.map +0 -1
  450. package/dist/server/routes/index.d.mts +0 -8
  451. package/dist/server/routes/index.d.ts +0 -8
  452. package/dist/server/routes/index.d.ts.map +0 -1
  453. package/dist/server/routes/instruction.d.mts +0 -4
  454. package/dist/server/routes/instruction.d.ts +0 -4
  455. package/dist/server/routes/instruction.d.ts.map +0 -1
  456. package/dist/server/routes/integration.d.mts +0 -4
  457. package/dist/server/routes/integration.d.ts +0 -4
  458. package/dist/server/routes/integration.d.ts.map +0 -1
  459. package/dist/server/routes/payments.d.mts +0 -5
  460. package/dist/server/routes/payments.d.ts +0 -5
  461. package/dist/server/routes/payments.d.ts.map +0 -1
  462. package/dist/server/routes/verify.d.mts +0 -3
  463. package/dist/server/routes/verify.d.ts +0 -3
  464. package/dist/server/routes/verify.d.ts.map +0 -1
  465. package/dist/wallet/wagmi/config.d.mts +0 -18
  466. package/dist/wallet/wagmi/config.d.ts +0 -18
  467. package/dist/wallet/wagmi/config.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers-BNiSxjGq.mjs","names":["z","z","z"],"sources":["../src/helpers/address.ts","../src/helpers/activity.ts","../src/helpers/blockchain.ts","../src/helpers/datetime.ts","../src/helpers/domain.ts","../src/helpers/external-account.ts","../src/helpers/intl.ts","../src/helpers/mask-options.ts","../src/helpers/num-formatter.ts","../src/helpers/window.ts","../src/helpers/polling.ts","../src/helpers/random.ts","../src/helpers/sdk-loader.ts","../src/helpers/signatures.ts","../src/helpers/string.ts","../src/helpers/url.ts","../src/helpers/zod.ts"],"sourcesContent":["import type { Nullable } from \"@otim/utils/helpers\";\n\n/**\n * Check if two addresses are equal (case-insensitive)\n * Works with Ethereum addresses and other blockchain addresses\n */\nexport const areAddressesEqual = (\n address1?: Nullable<string>,\n address2?: Nullable<string>,\n): boolean => {\n if (!address1 || !address2) return false;\n return address1.toLowerCase() === address2.toLowerCase();\n};\n","import type {\n ActivityCCTPBurnData,\n ActivityData,\n ActivityERC4626DepositData,\n ActivityERC4626WithdrawData,\n ActivitySwapData,\n ActivityTransferData,\n} from \"@otim/utils/api\";\n\n/* Common activity details extracted from any activity type */\nexport interface BaseActivityDetails {\n from: string;\n to: string;\n amount: string;\n token: string;\n}\n\n/* Type guard to check if an activity is a transfer */\nexport function isTransferActivity(\n activity: ActivityData,\n): activity is { transfer: ActivityTransferData } {\n return \"transfer\" in activity;\n}\n\n/* Type guard to check if an activity is a swap */\nexport function isSwapActivity(\n activity: ActivityData,\n): activity is { swap: ActivitySwapData } {\n return \"swap\" in activity;\n}\n\n/* Type guard to check if an activity is a CCTP burn */\nexport function isCctpBurnActivity(\n activity: ActivityData,\n): activity is { cctpBurn: ActivityCCTPBurnData } {\n return \"cctpBurn\" in activity;\n}\n\n/* Type guard to check if an activity is an ERC4626 deposit */\nexport function isErc4626DepositActivity(\n activity: ActivityData,\n): activity is { erc4626Deposit: ActivityERC4626DepositData } {\n return \"erc4626Deposit\" in activity;\n}\n\n/* Type guard to check if an activity is an ERC4626 withdraw */\nexport function isErc4626WithdrawActivity(\n activity: ActivityData,\n): activity is { erc4626Withdraw: ActivityERC4626WithdrawData } {\n return \"erc4626Withdraw\" in activity;\n}\n\n/* Extracts common details from any activity data */\nexport function extractBaseActivityDetails(\n activity: ActivityData,\n): BaseActivityDetails {\n if (isTransferActivity(activity)) {\n return {\n from: activity.transfer.from,\n to: activity.transfer.to,\n amount: activity.transfer.value,\n token: activity.transfer.token,\n };\n }\n\n if (isSwapActivity(activity)) {\n return {\n from: activity.swap.from,\n to: activity.swap.to,\n amount: activity.swap.fromAmount,\n token: activity.swap.fromToken,\n };\n }\n\n if (isCctpBurnActivity(activity)) {\n return {\n from: activity.cctpBurn.from,\n to: activity.cctpBurn.mintRecipient,\n amount: activity.cctpBurn.value,\n token: activity.cctpBurn.token,\n };\n }\n\n if (isErc4626DepositActivity(activity)) {\n return {\n from: activity.erc4626Deposit.from,\n to: activity.erc4626Deposit.vault,\n amount: activity.erc4626Deposit.value,\n token: activity.erc4626Deposit.token,\n };\n }\n\n if (isErc4626WithdrawActivity(activity)) {\n return {\n from: activity.erc4626Withdraw.from,\n to: activity.erc4626Withdraw.to,\n amount: activity.erc4626Withdraw.value,\n token: activity.erc4626Withdraw.token,\n };\n }\n\n return { from: \"0x0\", to: \"0x0\", amount: \"0\", token: \"0x0\" };\n}\n\n/**\n * Converts a Unix timestamp (seconds) to an ISO date string.\n *\n * @param timestamp - Unix timestamp in seconds\n * @returns ISO date string\n */\nexport function timestampToISOString(timestamp: number): string {\n return new Date(timestamp * 1000).toISOString();\n}\n","import type { EIP2098Signature, HexString, VRS } from \"@otim/utils/schemas\";\nimport type { Chain } from \"viem\";\n\nimport { isAddressEqual } from \"viem\";\n\nexport const truncateAddress = (address: string): string => {\n if (!address) return \"\";\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n};\n\n/**\n * Ethereum address regex pattern\n * Matches addresses like 0x1234...abcd (40 hex characters after 0x prefix)\n */\nexport const ETHEREUM_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;\n\n/**\n * Validates if a string is a valid Ethereum address format\n * @param address - The address string to validate\n * @returns true if the address matches the Ethereum address format\n */\nexport const isValidEthereumAddress = (address: string): boolean => {\n return ETHEREUM_ADDRESS_REGEX.test(address);\n};\n\n/**\n * Parses a signature string into its v, r, s components.\n * @param signature - The signature string to parse (must be 0x-prefixed, 132 chars total)\n * @returns VRS object containing v, r, and s values\n */\nexport const parseSignatureToVRS = (signature: string): VRS => {\n if (typeof signature !== \"string\") {\n throw new Error(\"Signature must be a string\");\n }\n\n if (!signature.startsWith(\"0x\")) {\n throw new Error('Signature must start with \"0x\"');\n }\n\n if (signature.length !== 132) {\n throw new Error(\n 'Signature must be 65 bytes (130 hex chars) plus \"0x\" = 132 total length',\n );\n }\n\n const r = signature.slice(2, 66);\n const s = signature.slice(66, 130);\n const vHex = signature.slice(130, 132);\n const v = parseInt(vHex, 16);\n return { v, r: `0x${r}`, s: `0x${s}` };\n};\n\n/* Checks if a v value is valid according to EIP-155. */\nexport const isValidV = (v: number): boolean => {\n return v === 0 || v === 1 || v === 27 || v === 28 || v >= 35;\n};\n\n/* Normalizes v value for EIP-155 compliance. */\nexport const normalizeV = (v: number) => {\n if (!isValidV(v)) return 0;\n\n const cmp = v <= 1 ? 1 : 0;\n const result = v % 2 === cmp;\n\n return Number(result) % 2;\n};\n\n/**\n * Creates an EIP-2098 compact signature from VRS components.\n * @param vrs - The VRS signature components\n * @returns EIP2098Signature object with yParity, r, and s\n */\nexport const createEIP2098Signature = (vrs: VRS): EIP2098Signature => {\n const v = vrs.v;\n const r = vrs.r;\n const s = vrs.s;\n\n return { yParity: normalizeV(v), r, s };\n};\n\nexport const getChainRpcUrl = (\n chainId: number,\n chains: readonly [Chain, ...Chain[]],\n) => {\n const chain = chains.find((chain) => chain.id === chainId);\n return chain?.rpcUrls.default;\n};\n\nexport const DEFAULT_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\nexport const isNullAddress = (address: HexString) => {\n return isAddressEqual(address, DEFAULT_ADDRESS);\n};\n\n/**\n * Parses a hex amount string with decimals into a number.\n *\n * @param hexAmount - The hex string (e.g. \"0x...\")\n * @param decimals - Token decimals\n * @returns The parsed number\n */\nexport function parseHexAmount(hexAmount: string, decimals: number): number {\n try {\n const value = BigInt(hexAmount);\n return Number(value) / 10 ** decimals;\n } catch (error) {\n console.warn(`Failed to parse hex amount: ${hexAmount}`, error);\n return 0;\n }\n}\n","import type { Optional } from \"./types\";\n\nimport { z } from \"zod\";\n\nimport { timeUnitSchema } from \"@otim/utils/schemas\";\n\n/* schema for TimeUnitInputValue */\nexport const timeUnitInputValueSchema = z.object({\n unit: timeUnitSchema,\n value: z.number().finite(),\n seconds: z.number().finite(),\n});\nexport type TimeUnitInputValue = z.infer<typeof timeUnitInputValueSchema>;\n\n/* type guard to check if a value is a valid TimeUnitInputValue object. */\nconst isTimeUnitInputValue = (value: unknown): value is TimeUnitInputValue => {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n const obj = value as Record<string, unknown>;\n return (\n \"unit\" in obj &&\n \"value\" in obj &&\n \"seconds\" in obj &&\n typeof obj.unit === \"string\" &&\n typeof obj.value === \"number\" &&\n typeof obj.seconds === \"number\"\n );\n};\n\n/**\n * safely parses a JSON string to TimeUnitInputValue.\n * returns undefined if parsing fails or result is invalid.\n */\nconst parseJsonToTimeUnitValue = (\n jsonString: string,\n): Optional<TimeUnitInputValue> => {\n try {\n const parsed = JSON.parse(jsonString);\n return isTimeUnitInputValue(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n};\n\n/**\n * converts various value formats to TimeUnitInputValue.\n * handles both direct objects and JSON strings from form system.\n *\n * @param value – value from form field (can be object, string, or other)\n * @returns parsed TimeUnitInputValue or undefined if invalid\n */\nexport const parseTimeUnitValue = (\n value: unknown,\n): Optional<TimeUnitInputValue> => {\n // handle null/undefined\n if (!value) return undefined;\n\n // handle direct object (from initial values or state)\n if (isTimeUnitInputValue(value)) {\n return value;\n }\n\n // handle JSON string (from form serialization)\n if (typeof value === \"string\") {\n return parseJsonToTimeUnitValue(value);\n }\n\n return undefined;\n};\n\n/**\n * serializes TimeUnitInputValue to JSON string for form compatibility.\n *\n * @param value – TimeUnitInputValue to serialize\n * @returns JSON string representation\n */\nexport const serializeTimeUnitValue = (value: TimeUnitInputValue): string => {\n return JSON.stringify(value);\n};\n\n/**\n * validates if a value can be converted to a valid TimeUnitInputValue.\n *\n * @param value – value to validate\n * @returns true if value is valid, false otherwise\n */\nexport const isValidTimeUnitValue = (value: unknown): boolean => {\n return parseTimeUnitValue(value) !== undefined;\n};\n\n/**\n * gets the total seconds from a TimeUnitInputValue or its serialized form.\n *\n * @param value – TimeUnitInputValue or JSON string\n * @returns number of seconds or 0 if invalid\n */\nexport const getSecondsFromTimeUnitValue = (value: unknown): number => {\n const parsed = parseTimeUnitValue(value);\n return parsed?.seconds ?? 0;\n};\n\nexport const coerceSecondsFromTimeUnitValue = (value: unknown): number => {\n if (!value) return 0;\n if (typeof value === \"object\") {\n const obj = value as Record<string, unknown>;\n const seconds = obj?.seconds;\n if (typeof seconds === \"number\" && Number.isFinite(seconds)) return seconds;\n }\n if (typeof value === \"string\") {\n try {\n const parsed = JSON.parse(value) as { seconds?: unknown };\n const seconds = parsed?.seconds;\n if (typeof seconds === \"number\" && Number.isFinite(seconds))\n return seconds;\n } catch {}\n }\n return 0;\n};\n","/*\n * Extracts the base domain for WebAuthn RPID (Relying Party Identifier)\n * validation.\n *\n * WebAuthn requires the RPID to be a registrable domain suffix of the current\n * origin. This function normalizes hostnames to their base domains while\n * handling special cases.\n *\n * Examples:\n * - Production subdomains collapse to base domain:\n * getBaseDomain(\"app.otim.com\") -> \"otim.com\"\n * getBaseDomain(\"pay.otim.com\") -> \"otim.com\"\n *\n * - Multi-part TLDs return the registrable domain:\n * getBaseDomain(\"app.example.co.uk\") -> \"example.co.uk\"\n *\n * - Deployment platforms preserve full domain (cannot control .well-known\n * webauthn):\n * getBaseDomain(\"my-app.vercel.app\") -> \"my-app.vercel.app\"\n *\n * - Localhost preserves subdomains for local development:\n * getBaseDomain(\"app.localhost:3000\") -> \"app.localhost:3000\"\n */\nexport function getBaseDomain(hostname: string): string {\n /**\n * Localhost: Preserve full hostname since WebAuthn allows subdomain RPIDs in\n * development (app.localhost:3000, etc.)\n */\n if (hostname.includes(\"localhost\")) {\n return hostname;\n }\n\n const parts = hostname.split(\".\");\n\n if (parts.length < 2) {\n return hostname;\n }\n\n if (parts.length === 2) {\n return hostname;\n }\n\n const lastTwoParts = parts.slice(-2).join(\".\");\n\n // Multi-part TLDs (e.g., co.uk, com.au) - return 3-part registrable domain\n const traditionalMultiPartTlds = [\n \"co.uk\",\n \"com.au\",\n \"co.jp\",\n \"co.kr\",\n \"co.za\",\n \"co.in\",\n \"com.br\",\n \"com.mx\",\n \"com.ar\",\n \"com.cn\",\n \"com.tw\",\n \"org.uk\",\n \"net.uk\",\n \"ac.uk\",\n \"gov.uk\",\n ];\n\n if (traditionalMultiPartTlds.includes(lastTwoParts)) {\n return parts.slice(-3).join(\".\");\n }\n\n /**\n * Deployment platforms: Full domain required since we can't host .well-known\n * webauthn at the parent domain level (vercel.app, netlify.app, etc.)\n */\n const deploymentTlds = [\n \"vercel.app\",\n \"netlify.app\",\n \"github.io\",\n \"gitlab.io\",\n ];\n\n if (deploymentTlds.includes(lastTwoParts)) {\n return hostname;\n }\n\n // Default: Standard 2-part TLD (domain.tld)\n return parts.slice(-2).join(\".\");\n}\n","/**\n * External account display formatting helpers\n */\n\n/**\n * Formats external account information for display\n *\n * @param externalAccount - External account object with optional properties\n * @returns Formatted display name for the external account\n */\nexport function formatExternalAccountName(externalAccount: {\n accountName?: string;\n bankName?: string;\n last_4?: string;\n}): string {\n const { accountName, bankName, last_4 } = externalAccount;\n\n if (accountName) {\n // Format: \"bankName · accountName (...last_4)\"\n const parts: string[] = [];\n if (bankName) parts.push(bankName);\n parts.push(accountName);\n let name = parts.join(\" · \");\n if (last_4) name += ` (...${last_4})`;\n return name;\n }\n\n // Format: \"bankName (...last_4)\"\n if (bankName) {\n let name = bankName;\n if (last_4) name += ` (...${last_4})`;\n return name;\n }\n\n if (last_4) {\n return `Bank Account (...${last_4})`;\n }\n\n return \"Bank Account\";\n}\n","import { z } from \"zod\";\n\nconst locales = [\"en\", \"es\"] as const;\n\n/**\n * Floors a number to a specific number of decimal places.\n * This ensures values are always rounded down, never up.\n *\n * @param value - The number to floor\n * @param decimals - Number of decimal places to keep\n * @returns The floored number\n */\nexport const floorToDecimals = (value: number, decimals: number): number => {\n const multiplier = Math.pow(10, decimals);\n return Math.floor(value * multiplier) / multiplier;\n};\n\nexport const i18n = {\n defaultLocale: \"en\",\n locales: [...locales],\n};\n\nexport const localeSchema = z.enum(locales);\n\nexport type Locale = z.infer<typeof localeSchema>;\n\nexport const formattedNumber = (num: number) => {\n if (!Number.isFinite(num)) {\n return \"0.00\";\n }\n\n return new Intl.NumberFormat(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(num);\n};\n\n/**\n * Formats a token or asset amount with appropriate decimal places\n * based on the magnitude of the value.\n * Values are floored (rounded down) to avoid showing inflated amounts.\n *\n * @param amount - The amount to format\n * @param decimals - Optional maximum decimal places\n */\nexport const formatAmount = (amount: number, decimals?: number): string => {\n if (amount === 0) return \"0\";\n\n /* For very small amounts, use exponential notation */\n if (amount < 0.000001) return amount.toExponential(2);\n\n /* For amounts less than 1, show up to 6 decimal places (or specified) */\n if (amount < 1) {\n const decimalPlaces = decimals ?? 6;\n return floorToDecimals(amount, decimalPlaces).toString();\n }\n\n /* For amounts >= 1 and < 1000, show 2-4 decimal places */\n if (amount < 1000) {\n const decimalPlaces = decimals ?? 2;\n return floorToDecimals(amount, decimalPlaces).toString();\n }\n\n /* For large amounts, show 2 decimal places with locale formatting */\n const decimalPlaces = decimals ?? 2;\n const floored = floorToDecimals(amount, decimalPlaces);\n return floored.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: decimalPlaces,\n });\n};\n\n/**\n * Formats a number as USD currency with proper locale formatting.\n * Values are floored (rounded down) to avoid showing inflated amounts.\n *\n * @param amount – The amount to format\n * @param options – Optional Intl.NumberFormatOptions to customize formatting\n * @returns – Formatted currency string (e.g., \"$1,234.56\")\n */\nexport const formatCurrency = (\n amount: number | string,\n options?: Intl.NumberFormatOptions,\n): string => {\n const numAmount = typeof amount === \"string\" ? parseFloat(amount) : amount;\n\n if (isNaN(numAmount)) {\n return \"$0.00\";\n }\n\n // Floor to 2 decimals before formatting to avoid rounding up\n const floored = floorToDecimals(numAmount, 2);\n\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n ...options,\n }).format(floored);\n};\n\n/**\n * Formats a number as USD currency with smart decimal places based on magnitude.\n * Shows more precision for small values to avoid displaying \"$0.00\" for meaningful amounts.\n * Values are floored (rounded down) to avoid showing inflated amounts.\n *\n * @param amount – The amount to format\n * @returns – Formatted currency string with adaptive decimals\n *\n * @example\n * formatSmartCurrency(0) // \"$0\"\n * formatSmartCurrency(0.0000001) // \"<$0.000001\"\n * formatSmartCurrency(0.003456) // \"$0.003456\"\n * formatSmartCurrency(0.5678) // \"$0.5678\"\n * formatSmartCurrency(1234.56) // \"$1,234.56\"\n */\nexport const formatSmartCurrency = (amount: number | string): string => {\n const num = typeof amount === \"string\" ? parseFloat(amount) : amount;\n\n if (isNaN(num) || num === 0) return \"$0\";\n if (num < 0.000001) return \"<$0.000001\";\n if (num < 0.01) return `$${floorToDecimals(num, 6)}`;\n if (num < 1) return `$${floorToDecimals(num, 4)}`;\n\n // Standard currency formatting for larger values (floored to 2 decimals)\n const floored = floorToDecimals(num, 2);\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(floored);\n};\n\n/**\n * Alias for formatCurrency specifically for USD\n */\nexport const formatUsd = formatCurrency;\n\n/**\n * Formats a USD amount without the currency symbol.\n * Values are floored (rounded down) to avoid showing inflated amounts.\n *\n * @param amount – The amount to format\n * @param options – Optional Intl.NumberFormatOptions to customize formatting\n * @returns – Formatted amount string (e.g., \"1,234.56\")\n */\nexport const formatUsdAmount = (\n amount: number | string,\n options?: Intl.NumberFormatOptions,\n): string => {\n const numAmount = typeof amount === \"string\" ? parseFloat(amount) : amount;\n\n if (isNaN(numAmount)) {\n return \"0.00\";\n }\n\n // Floor to 2 decimals before formatting to avoid rounding up\n const floored = floorToDecimals(numAmount, 2);\n\n return floored.toLocaleString(\"en-US\", {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n ...options,\n });\n};\n","import type { MaskitoOptions } from \"@maskito/core\";\n\nimport {\n maskitoDateOptionsGenerator,\n maskitoTimeOptionsGenerator,\n} from \"@maskito/kit\";\n\nimport { formatCurrency } from \"./intl\";\n\nconst SHORT_FORM_POSTAL_MASK = [/\\d/, /\\d/, /\\d/, /\\d/, /\\d/];\nconst LONG_FORM_POSTAL_MASK = [\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n \"-\",\n /\\d/,\n /\\d/,\n /\\d/,\n /\\d/,\n];\n\nexport const postalCodeMaskOptions: MaskitoOptions = {\n mask: (state) => {\n return state.value.length > 5\n ? LONG_FORM_POSTAL_MASK\n : SHORT_FORM_POSTAL_MASK;\n },\n};\n\nexport const dateMaskOptions = maskitoDateOptionsGenerator({\n mode: \"mm/dd/yyyy\",\n separator: \"/\",\n});\n\nexport const timeOptions = maskitoTimeOptionsGenerator({\n mode: \"HH:MM:SS AA\",\n});\n\nexport const timeOptionsWithoutMeridiem = maskitoTimeOptionsGenerator({\n mode: \"HH:MM:SS\",\n});\n\nexport const timeMaskOptionsHHMM = maskitoTimeOptionsGenerator({\n mode: \"HH:MM\",\n});\n\nexport const formatUUID = (value: string): string => {\n if (!value) {\n return \"\";\n }\n\n const cleanValue = value.replace(/[^0-9a-f-]/gi, \"\");\n const hexOnly = cleanValue.replace(/-/g, \"\");\n\n const limitedHex = hexOnly.slice(0, 32);\n\n if (limitedHex.length === 32) {\n return [\n limitedHex.slice(0, 8),\n limitedHex.slice(8, 12),\n limitedHex.slice(12, 16),\n limitedHex.slice(16, 20),\n limitedHex.slice(20, 32),\n ].join(\"-\");\n }\n\n let formatted = \"\";\n let index = 0;\n\n if (index < limitedHex.length) {\n const group1 = limitedHex.slice(\n index,\n Math.min(index + 8, limitedHex.length),\n );\n formatted += group1;\n index += 8;\n\n if (index <= limitedHex.length && group1.length === 8) {\n formatted += \"-\";\n }\n }\n\n if (index < limitedHex.length) {\n const group2 = limitedHex.slice(\n index,\n Math.min(index + 4, limitedHex.length),\n );\n formatted += group2;\n index += 4;\n\n if (index <= limitedHex.length && group2.length === 4) {\n formatted += \"-\";\n }\n }\n\n if (index < limitedHex.length) {\n const group3 = limitedHex.slice(\n index,\n Math.min(index + 4, limitedHex.length),\n );\n formatted += group3;\n index += 4;\n\n if (index <= limitedHex.length && group3.length === 4) {\n formatted += \"-\";\n }\n }\n\n if (index < limitedHex.length) {\n const group4 = limitedHex.slice(\n index,\n Math.min(index + 4, limitedHex.length),\n );\n formatted += group4;\n index += 4;\n\n if (index <= limitedHex.length && group4.length === 4) {\n formatted += \"-\";\n }\n }\n\n if (index < limitedHex.length) {\n formatted += limitedHex.slice(\n index,\n Math.min(index + 12, limitedHex.length),\n );\n }\n\n return formatted;\n};\n\nexport const uuidMaskOptions: MaskitoOptions = {\n mask: /^[0-9a-f-]*$/i,\n};\n\nexport const usdCurrencyMaskOptions: MaskitoOptions = {\n mask: /^[0-9., $]*$/,\n postprocessors: [\n (state) => {\n const selectionEnd = state.selection?.[1] ?? state.value.length;\n\n const numeric = state.value.replace(/[^0-9]/g, \"\");\n if (numeric.length === 0) {\n return { ...state, value: \"\", selection: [0, 0] };\n }\n\n // Clamp to max 9 digits to avoid huge jumps ($999,999,999.99)\n const clamped = numeric.slice(0, 11); // allow up to billions incl. cents\n const amount = Number(clamped) / 100;\n const formatted = formatCurrency(amount);\n\n // Try to keep the caret near where user typed; default to end\n const nextCaret = Math.min(\n formatted.length,\n selectionEnd + (formatted.length - state.value.length),\n );\n\n return { ...state, value: formatted, selection: [nextCaret, nextCaret] };\n },\n ],\n};\n","export const numFormatter = (num: number, round?: number) => {\n if (num >= 1000 && num < 1000000) {\n return `${(num / 1000).toFixed(typeof round === \"number\" ? round : num % 1000 === 0 ? 0 : 1)}K`;\n }\n\n if (num >= 1000000 && num < 1.0e9) {\n return `${(num / 1000000).toFixed(typeof round === \"number\" ? round : num % 1000000 === 0 ? 0 : 2)}M`;\n }\n\n if (num > 1.0e9) {\n return `${(num / 1.0e9).toFixed(typeof round === \"number\" ? round : num % 1.0e9 === 0 ? 0 : 2)}B`;\n }\n\n return Number(\n Number(num).toFixed(\n typeof round === \"number\" ? round : (num * 100) % 100 === 0 ? 0 : 2,\n ),\n );\n};\n\nexport const formatNumberAsUSStandard = (num: number) => {\n return num.toLocaleString(\"en-US\", {\n maximumSignificantDigits: 3,\n });\n};\n","import type { Nullable } from \"./types\";\n\nimport { logger } from \"./logger\";\n\nexport const isClient = (): boolean =>\n typeof globalThis !== \"undefined\" && \"window\" in globalThis;\n\n/* Configuration for emergent window */\nexport interface EmergentWindowConfig {\n width?: number;\n height?: number;\n name?: string;\n}\n\n/* Default emergent window configuration */\nconst DEFAULT_EMERGENT_WINDOW_CONFIG: Required<EmergentWindowConfig> = {\n width: 480,\n height: 720,\n name: \"emergent_window\",\n};\n\n/**\n * Opens an emergent window centered on the screen.\n * Used for authentication flows and external integrations.\n *\n * @param url - The URL to open in the emergent window\n * @param config - Optional configuration for the window\n * @returns The opened window or null if it failed\n */\nexport function openCenteredEmergentWindow(\n url: string,\n config: EmergentWindowConfig = {},\n): Nullable<Window> {\n if (!isClient()) {\n return null;\n }\n\n const { width, height, name } = {\n ...DEFAULT_EMERGENT_WINDOW_CONFIG,\n ...config,\n };\n\n const screenLeft = window.screenLeft ?? window.screenX ?? 0;\n const screenTop = window.screenTop ?? window.screenY ?? 0;\n const viewportWidth =\n window.innerWidth || document.documentElement.clientWidth || screen.width;\n const viewportHeight =\n window.innerHeight ||\n document.documentElement.clientHeight ||\n screen.height;\n\n const left = Math.max(0, screenLeft + (viewportWidth - width) / 2);\n const top = Math.max(0, screenTop + (viewportHeight - height) / 2);\n\n const features = [\n \"noopener\",\n \"noreferrer\",\n `width=${width}`,\n `height=${height}`,\n `left=${left}`,\n `top=${top}`,\n \"menubar=no\",\n \"toolbar=no\",\n \"location=no\",\n \"status=no\",\n \"scrollbars=yes\",\n ].join(\",\");\n\n const emergentWindow = window.open(url, name, features);\n\n try {\n emergentWindow?.focus();\n } catch (error) {\n // Ignore focus errors in cross-origin scenarios\n logger.logError(error, {\n context: openCenteredEmergentWindow.name,\n });\n }\n\n return emergentWindow ?? null;\n}\n\n/**\n * Closes an emergent window safely\n *\n * @param emergentWindow - The emergent window to close\n */\nexport function closeEmergentWindow(emergentWindow: Nullable<Window>): void {\n if (!emergentWindow) return;\n\n try {\n emergentWindow.close();\n } catch (error) {\n logger.logError(error, {\n context: closeEmergentWindow.name,\n });\n }\n}\n\n/* Returns focus to the main window */\nexport function focusMainWindow(): void {\n if (!isClient()) return;\n\n try {\n window.focus();\n } catch (error) {\n // Ignore focus errors in cross-origin scenarios\n logger.logError(error, {\n context: focusMainWindow.name,\n });\n }\n}\n\n/**\n * Performs a client-side redirect to the specified path\n *\n * @param path - The path to redirect to\n * @param fallbackPath - Optional fallback path if the main path is empty\n */\nexport function performRedirect(\n path: string,\n fallbackPath: string = \"/\",\n): void {\n if (!isClient()) return;\n\n const redirectPath = path || fallbackPath;\n window.location.href = redirectPath;\n}\n","import type { Nullable } from \"./types\";\n\nimport { logger } from \"./logger\";\nimport { closeEmergentWindow, focusMainWindow } from \"./window\";\n\n/* Configuration for polling behavior */\nexport interface PollingConfig {\n intervalMs?: number;\n onComplete?: () => void;\n}\n\n/* Default polling configuration */\nconst DEFAULT_POLLING_CONFIG: Required<PollingConfig> = {\n intervalMs: 1000,\n onComplete: () => {},\n};\n\n/**\n * Manages polling for emergent window completion status.\n * Generic utility that can be used for any async polling scenario.\n * Follows Single Responsibility Principle - only handles polling logic.\n */\nexport class PollingManager {\n private emergentWindow: Nullable<Window> = null;\n private pollIntervalId: Nullable<number> = null;\n private config: Required<PollingConfig>;\n\n constructor(config: PollingConfig = {}) {\n this.config = { ...DEFAULT_POLLING_CONFIG, ...config };\n }\n\n /**\n * Starts polling for the given check function\n *\n * @param emergentWindow - The emergent window to monitor (optional)\n * @param checkFn - Function that returns true when polling should stop\n */\n start(\n emergentWindow: Nullable<Window>,\n checkFn: () => Promise<boolean>,\n ): void {\n this.emergentWindow = emergentWindow;\n this.stop();\n\n this.pollIntervalId = window.setInterval(() => {\n void (async () => {\n try {\n const isComplete = await checkFn();\n if (isComplete) {\n this.finalize();\n this.config.onComplete();\n }\n } catch (error) {\n logger.logError(error, {\n context: this.start.name,\n });\n }\n })();\n }, this.config.intervalMs);\n }\n\n /* Stops polling and cleans up resources */\n stop(): void {\n if (this.pollIntervalId !== null) {\n clearInterval(this.pollIntervalId);\n this.pollIntervalId = null;\n }\n }\n\n /**\n * Finalizes polling by closing emergent window, stopping interval, and returning focus\n */\n finalize(): void {\n closeEmergentWindow(this.emergentWindow);\n this.emergentWindow = null;\n this.stop();\n focusMainWindow();\n }\n\n /* Cleans up resources */\n dispose(): void {\n this.finalize();\n }\n}\n","interface Range {\n min: number;\n max: number;\n}\n\ninterface GenerateRandom extends Range {\n value: string;\n}\n\nexport const randomNumber = (opts: GenerateRandom): number => {\n const { value, min, max } = opts;\n\n let hash = 0;\n for (let i = 0; i < value.length; i++) {\n hash = (hash << 5) - hash + value.charCodeAt(i);\n hash |= 0;\n }\n\n const normalizedHash = Math.abs(hash);\n return Math.floor(normalizedHash % (max - min + 1)) + min;\n};\n","/**\n * Configuration for loading external SDK scripts\n */\nexport interface SdkLoaderConfig {\n src: string;\n name: string;\n timeout?: number;\n}\n\n/**\n * Default timeout for SDK loading (10 seconds)\n */\nconst DEFAULT_SDK_TIMEOUT = 10000;\n\n/**\n * Generic SDK loader utility for loading third-party scripts\n * Follows Single Responsibility Principle - only handles script loading\n *\n * @param config - SDK loader configuration\n * @returns Promise that resolves when SDK is loaded\n * @throws Error if SDK fails to load or times out\n */\nexport async function loadExternalSdk(config: SdkLoaderConfig): Promise<void> {\n if (typeof window === \"undefined\") {\n throw new Error(`${config.name} SDK can only be loaded in the browser`);\n }\n\n const timeout = config.timeout ?? DEFAULT_SDK_TIMEOUT;\n\n return new Promise<void>((resolve, reject) => {\n // Set up timeout\n const timeoutId = setTimeout(() => {\n reject(\n new Error(`${config.name} SDK loading timed out after ${timeout}ms`),\n );\n }, timeout);\n\n // Create and load script\n const script = document.createElement(\"script\");\n script.src = config.src;\n script.async = true;\n\n script.onload = () => {\n clearTimeout(timeoutId);\n resolve();\n };\n\n script.onerror = () => {\n clearTimeout(timeoutId);\n reject(new Error(`Failed to load ${config.name} SDK from ${config.src}`));\n };\n\n document.body.appendChild(script);\n });\n}\n\n/**\n * Checks if a script with the given src is already loaded\n *\n * @param src - Script source URL to check\n * @returns true if script is already in the DOM\n */\nexport function isScriptLoaded(src: string): boolean {\n if (typeof window === \"undefined\") {\n return false;\n }\n\n const scripts = document.getElementsByTagName(\"script\");\n for (let i = 0; i < scripts.length; i++) {\n if (scripts[i]?.src === src) {\n return true;\n }\n }\n return false;\n}\n","/**\n * EIP-2098 Signature format (compact)\n */\nexport interface EIP2098Signature {\n yParity: number;\n r: `0x${string}`;\n s: `0x${string}`;\n}\n\n/**\n * Converts a standard signature to EIP-2098 format\n */\nexport const formatSignatureToEIP2098 = (signature: {\n v: string;\n r: string;\n s: string;\n}): EIP2098Signature => {\n const ensureHexPrefix = (value: string): `0x${string}` =>\n value.startsWith(\"0x\") ? (value as `0x${string}`) : `0x${value}`;\n\n // Normalize v to EIP-2098 yParity (0 or 1)\n const vNum = Number.parseInt(signature.v, 16);\n const yParity = (() => {\n if (Number.isNaN(vNum)) return 0;\n // v in {0,1} already parity; v in {27,28} -> 27->0, 28->1; v>=35 -> v%2\n if (vNum <= 1) return vNum;\n return vNum % 2 === 0 ? 1 : 0;\n })();\n\n return {\n yParity,\n r: ensureHexPrefix(signature.r),\n s: ensureHexPrefix(signature.s),\n };\n};\n","import type { Optional } from \"./types\";\n\n/**\n * Capitalizes the first letter of a string\n *\n * @param str – The string to capitalize\n * @returns The string with first letter capitalized, or undefined if input is\n * nullish\n */\nexport const capitalize = (str?: string): Optional<string> => {\n if (!str) return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * Converts a string to title case (capitalizes first letter, lowercase rest)\n *\n * @param str – The string to convert\n * @returns The string in title case, or undefined if input is nullish\n */\nexport const toTitleCase = (str?: string): Optional<string> => {\n if (!str) return str;\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n};\n","export type QueryParams = Record<\n string,\n string | number | boolean | null | undefined\n>;\n\n/**\n * Builds a query string from a params object, skipping undefined/null values.\n * Encodes using encodeURIComponent. Returns empty string if no params.\n */\nexport function buildQueryString(params: QueryParams): string {\n const usp = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value === undefined || value === null) return;\n usp.set(key, String(value));\n });\n const qs = usp.toString();\n return qs ? `?${qs}` : \"\";\n}\n\n/**\n * Build a URL by combining a base path with optional query params.\n */\nexport function buildUrl(path: string, params?: QueryParams): string {\n const qs = params ? buildQueryString(params) : \"\";\n return `${path}${qs}`;\n}\n","import type { ZodObject, ZodTypeAny } from \"zod\";\n\nimport { z } from \"zod\";\n\nimport { hexStringSchema } from \"@otim/utils/schemas\";\n\nimport { DEFAULT_ADDRESS } from \"./blockchain\";\nimport { getSecondsFromTimeUnitValue, parseTimeUnitValue } from \"./datetime\";\n\nexport type Validator<T> = (data: T, ctx: z.RefinementCtx) => void;\n\nexport const composeValidators = <T>(validators: Validator<T>[]) => {\n return (data: T, ctx: z.RefinementCtx) => {\n for (const validator of validators) {\n validator(data, ctx);\n }\n };\n};\n\n// convert seconds to human-readable format.\nconst secondsToHumanReadable = (seconds: number): string => {\n if (seconds >= 3600) {\n const hours = seconds / 3600;\n const roundedHours = Math.round(hours * 10) / 10;\n return roundedHours === 1 ? \"1 hour\" : `${roundedHours} hours`;\n } else if (seconds >= 60) {\n const minutes = seconds / 60;\n const roundedMinutes = Math.round(minutes * 10) / 10;\n return roundedMinutes === 1 ? \"1 minute\" : `${roundedMinutes} minutes`;\n } else {\n return seconds === 1 ? \"1 second\" : `${seconds} seconds`;\n }\n};\n\n/**\n * creates a time unit validator for fields stored as JSON strings.\n * validates both the JSON format and the minimum seconds requirement.\n *\n * @param fieldName – the name of the field for error messages\n * @param options – configuration options\n * @param options.minSeconds – minimum seconds required (default: 60)\n * @param options.allowZero – whether to allow 0 seconds for \"None\" option (default: false)\n * @param options.useHumanReadable – whether to use human-readable time in error messages (default: true)\n */\nexport const createTimeUnitValidator = (\n fieldName: string,\n options: {\n minSeconds?: number;\n allowZero?: boolean;\n useHumanReadable?: boolean;\n } = {},\n) => {\n const {\n minSeconds = 60,\n allowZero = false,\n useHumanReadable = true,\n } = options;\n\n return z\n .string()\n .optional()\n .refine(\n (value) => {\n if (!value) return true;\n\n // try to parse the value.\n const parsed = parseTimeUnitValue(value);\n if (!parsed) return false;\n\n // validate minimum seconds, allowing 0 for \"none\" option if specified\n const seconds = getSecondsFromTimeUnitValue(parsed);\n return allowZero ? seconds >= 0 : seconds >= minSeconds;\n },\n {\n message: useHumanReadable\n ? `${fieldName} must be at least ${secondsToHumanReadable(minSeconds)}`\n : `${fieldName} must be at least ${minSeconds} seconds`,\n },\n );\n};\n\n/**\n * Parse the input values using the provided schema. If the input values are\n * invalid, throw a ResolverError.\n * @param values - The input values to parse.\n * @param schema - The schema to use to parse the input values.\n * @param error - The error code to use if the input values are invalid.\n * @returns The parsed input values.\n * @throws ResolverError if the input values are invalid.\n */\nexport const parseSchema = <\n Values,\n Schema extends ZodTypeAny = ZodObject<{\n [P in keyof Values]: z.ZodType<Values[P]>;\n }>,\n>(\n values: Values,\n schema: Schema,\n): z.infer<Schema> => {\n const inputValues = schema.safeParse(values);\n if (!inputValues.success) {\n throw new Error(\n `parseSchema: invalid input values ${JSON.stringify(inputValues.error)}`,\n );\n }\n\n return inputValues.data as z.infer<Schema>;\n};\n\n/**\n * Creates a permissive decimal string schema that allows empty strings.\n * Converts undefined/null values to empty strings, preventing \"expected string, received undefined\" errors.\n * Useful for form fields where validation happens in a refine step.\n */\nexport const formDecimalStringSchema = () =>\n z.preprocess((val) => {\n if (val === undefined || val === null) return \"\";\n if (typeof val === \"string\" || typeof val === \"number\") return String(val);\n return \"\";\n }, z.string());\n\n/**\n * Creates a hex string schema with preprocessing that defaults to DEFAULT_ADDRESS.\n * Converts undefined/null/empty values to DEFAULT_ADDRESS before validation.\n * Useful for form fields that expect hex addresses.\n */\nexport const formHexStringSchema = () =>\n z.preprocess(\n (val) =>\n val === undefined || val === null || val === \"\" ? DEFAULT_ADDRESS : val,\n hexStringSchema,\n );\n\n/**\n * Checks if an error message is an internal Zod error that shouldn't be shown to users.\n */\nconst isInternalZodError = (error: string): boolean => {\n return (\n error.includes(\"expected string, received\") ||\n error.includes(\"Invalid input\") ||\n error.includes(\"Expected string\")\n );\n};\n\n/**\n * Filters out Zod internal errors that shouldn't be shown to users.\n * Only returns user-friendly validation messages.\n *\n * @param errors - Array of error messages from Zod validation, or a single error string\n * @param fieldValue - The field value being validated\n * @returns User-friendly error message or undefined\n */\nexport const getDisplayableZodError = (\n errors: string[] | string | undefined,\n fieldValue: unknown,\n): string | undefined => {\n if (!errors || (Array.isArray(errors) && errors.length === 0))\n return undefined;\n\n // Don't show errors for empty fields (better UX)\n const stringValue = typeof fieldValue === \"string\" ? fieldValue.trim() : \"\";\n if (!stringValue) return undefined;\n\n // Normalize to array\n const errorArray = Array.isArray(errors) ? errors : [errors];\n\n // Filter out internal Zod errors\n const filteredErrors = errorArray.filter(\n (error) => !isInternalZodError(error),\n );\n\n return filteredErrors.length > 0 ? filteredErrors.join(\", \") : undefined;\n};\n"],"mappings":"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"}