@oxy.so/core 1.0.0

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 (673) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +16 -0
  3. package/README.md +221 -0
  4. package/dist/cjs/.tsbuildinfo +1 -0
  5. package/dist/cjs/HttpService.js +1270 -0
  6. package/dist/cjs/OxyServices.base.js +390 -0
  7. package/dist/cjs/OxyServices.errors.js +95 -0
  8. package/dist/cjs/OxyServices.js +72 -0
  9. package/dist/cjs/boot/sessionColdBoot.js +395 -0
  10. package/dist/cjs/constants/version.js +16 -0
  11. package/dist/cjs/crypto/aead.js +79 -0
  12. package/dist/cjs/crypto/ecdh.js +35 -0
  13. package/dist/cjs/crypto/identityMarker.js +255 -0
  14. package/dist/cjs/crypto/kdf.js +39 -0
  15. package/dist/cjs/crypto/keyManager.js +2234 -0
  16. package/dist/cjs/crypto/polyfill.js +131 -0
  17. package/dist/cjs/crypto/recoveryPhrase.js +242 -0
  18. package/dist/cjs/crypto/signatureService.js +273 -0
  19. package/dist/cjs/i18n/accountCategoryLabels.js +44 -0
  20. package/dist/cjs/i18n/accountRoleLabels.js +27 -0
  21. package/dist/cjs/i18n/index.js +90 -0
  22. package/dist/cjs/i18n/locales/ar-SA.json +282 -0
  23. package/dist/cjs/i18n/locales/ca-ES.json +282 -0
  24. package/dist/cjs/i18n/locales/de-DE.json +282 -0
  25. package/dist/cjs/i18n/locales/en-US.json +2161 -0
  26. package/dist/cjs/i18n/locales/es-ES.json +2161 -0
  27. package/dist/cjs/i18n/locales/fr-FR.json +282 -0
  28. package/dist/cjs/i18n/locales/it-IT.json +282 -0
  29. package/dist/cjs/i18n/locales/ja-JP.json +282 -0
  30. package/dist/cjs/i18n/locales/ko-KR.json +282 -0
  31. package/dist/cjs/i18n/locales/locales/ar-SA.json +282 -0
  32. package/dist/cjs/i18n/locales/locales/ca-ES.json +282 -0
  33. package/dist/cjs/i18n/locales/locales/de-DE.json +282 -0
  34. package/dist/cjs/i18n/locales/locales/en-US.json +2161 -0
  35. package/dist/cjs/i18n/locales/locales/es-ES.json +2161 -0
  36. package/dist/cjs/i18n/locales/locales/fr-FR.json +282 -0
  37. package/dist/cjs/i18n/locales/locales/it-IT.json +282 -0
  38. package/dist/cjs/i18n/locales/locales/ja-JP.json +282 -0
  39. package/dist/cjs/i18n/locales/locales/ko-KR.json +282 -0
  40. package/dist/cjs/i18n/locales/locales/pt-PT.json +282 -0
  41. package/dist/cjs/i18n/locales/locales/zh-CN.json +282 -0
  42. package/dist/cjs/i18n/locales/pt-PT.json +282 -0
  43. package/dist/cjs/i18n/locales/zh-CN.json +282 -0
  44. package/dist/cjs/i18n/reputationCategoryLabels.js +20 -0
  45. package/dist/cjs/i18n/trustTierLabels.js +19 -0
  46. package/dist/cjs/index.js +498 -0
  47. package/dist/cjs/inference/OxyInferenceClient.js +544 -0
  48. package/dist/cjs/logger/index.js +149 -0
  49. package/dist/cjs/mixins/OxyServices.accounts.js +555 -0
  50. package/dist/cjs/mixins/OxyServices.analytics.js +49 -0
  51. package/dist/cjs/mixins/OxyServices.appData.js +108 -0
  52. package/dist/cjs/mixins/OxyServices.assets.js +764 -0
  53. package/dist/cjs/mixins/OxyServices.auth.js +1254 -0
  54. package/dist/cjs/mixins/OxyServices.chains.js +73 -0
  55. package/dist/cjs/mixins/OxyServices.civic.js +611 -0
  56. package/dist/cjs/mixins/OxyServices.connectedApps.js +78 -0
  57. package/dist/cjs/mixins/OxyServices.contacts.js +50 -0
  58. package/dist/cjs/mixins/OxyServices.deviceBoot.js +191 -0
  59. package/dist/cjs/mixins/OxyServices.deviceTransfer.js +314 -0
  60. package/dist/cjs/mixins/OxyServices.devices.js +116 -0
  61. package/dist/cjs/mixins/OxyServices.features.js +335 -0
  62. package/dist/cjs/mixins/OxyServices.followGraph.js +221 -0
  63. package/dist/cjs/mixins/OxyServices.identity.js +461 -0
  64. package/dist/cjs/mixins/OxyServices.identityBackup.js +172 -0
  65. package/dist/cjs/mixins/OxyServices.inference.js +59 -0
  66. package/dist/cjs/mixins/OxyServices.language.js +125 -0
  67. package/dist/cjs/mixins/OxyServices.links.js +72 -0
  68. package/dist/cjs/mixins/OxyServices.location.js +43 -0
  69. package/dist/cjs/mixins/OxyServices.nodes.js +175 -0
  70. package/dist/cjs/mixins/OxyServices.notifications.js +63 -0
  71. package/dist/cjs/mixins/OxyServices.payment.js +158 -0
  72. package/dist/cjs/mixins/OxyServices.privacy.js +199 -0
  73. package/dist/cjs/mixins/OxyServices.reputation.js +289 -0
  74. package/dist/cjs/mixins/OxyServices.security.js +89 -0
  75. package/dist/cjs/mixins/OxyServices.store.js +266 -0
  76. package/dist/cjs/mixins/OxyServices.topics.js +137 -0
  77. package/dist/cjs/mixins/OxyServices.user.js +902 -0
  78. package/dist/cjs/mixins/OxyServices.utility.js +1098 -0
  79. package/dist/cjs/mixins/index.js +135 -0
  80. package/dist/cjs/mixins/mixinHelpers.js +53 -0
  81. package/dist/cjs/models/Topic.js +16 -0
  82. package/dist/cjs/models/interfaces.js +20 -0
  83. package/dist/cjs/models/session.js +2 -0
  84. package/dist/cjs/server/auth.js +167 -0
  85. package/dist/cjs/server/capabilityTicket.js +192 -0
  86. package/dist/cjs/server/cors.js +225 -0
  87. package/dist/cjs/server/index.js +97 -0
  88. package/dist/cjs/server/rateLimit.js +207 -0
  89. package/dist/cjs/server/safeFetch.js +458 -0
  90. package/dist/cjs/server/securityHeaders.js +377 -0
  91. package/dist/cjs/server/userInvalidation.js +156 -0
  92. package/dist/cjs/server/verifySecret.js +50 -0
  93. package/dist/cjs/session/SessionClient.js +865 -0
  94. package/dist/cjs/session/accountDelegationAccess.js +48 -0
  95. package/dist/cjs/session/accountDialogController.js +1131 -0
  96. package/dist/cjs/session/accountSwitchTargets.js +81 -0
  97. package/dist/cjs/session/authStateStore.js +404 -0
  98. package/dist/cjs/session/createSessionClient.js +32 -0
  99. package/dist/cjs/session/deviceDirectory.js +143 -0
  100. package/dist/cjs/session/deviceSwitcherRows.js +76 -0
  101. package/dist/cjs/session/identityPin.js +256 -0
  102. package/dist/cjs/session/identitySession.js +135 -0
  103. package/dist/cjs/session/projectSessionState.js +121 -0
  104. package/dist/cjs/session/refresh.js +398 -0
  105. package/dist/cjs/session/sessionClientHost.js +34 -0
  106. package/dist/cjs/session/sharedDeviceCredential.js +247 -0
  107. package/dist/cjs/session/socketLoader.js +55 -0
  108. package/dist/cjs/shared/utils/colorUtils.js +153 -0
  109. package/dist/cjs/shared/utils/errorUtils.js +183 -0
  110. package/dist/cjs/shared/utils/index.js +49 -0
  111. package/dist/cjs/shared/utils/networkUtils.js +183 -0
  112. package/dist/cjs/shared/utils/themeUtils.js +106 -0
  113. package/dist/cjs/utils/accountCacheSweep.js +80 -0
  114. package/dist/cjs/utils/accountUtils.js +140 -0
  115. package/dist/cjs/utils/activityId.js +6 -0
  116. package/dist/cjs/utils/apiUtils.js +91 -0
  117. package/dist/cjs/utils/asyncUtils.js +222 -0
  118. package/dist/cjs/utils/authHelpers.js +120 -0
  119. package/dist/cjs/utils/authWebUrl.js +19 -0
  120. package/dist/cjs/utils/avatarUtils.js +29 -0
  121. package/dist/cjs/utils/cache.js +235 -0
  122. package/dist/cjs/utils/cacheKey.js +85 -0
  123. package/dist/cjs/utils/coldBoot.js +122 -0
  124. package/dist/cjs/utils/commonsApproval.js +31 -0
  125. package/dist/cjs/utils/commonsDelivery.js +59 -0
  126. package/dist/cjs/utils/deviceManager.js +174 -0
  127. package/dist/cjs/utils/displayNamePolicyRanges.generated.js +60 -0
  128. package/dist/cjs/utils/edgeRegion.js +6 -0
  129. package/dist/cjs/utils/errorUtils.js +243 -0
  130. package/dist/cjs/utils/identityCacheSweep.js +97 -0
  131. package/dist/cjs/utils/languageUtils.js +224 -0
  132. package/dist/cjs/utils/oauthPkce.js +311 -0
  133. package/dist/cjs/utils/officialOrigins.js +64 -0
  134. package/dist/cjs/utils/oxyServiceEnvironment.js +19 -0
  135. package/dist/cjs/utils/platform.js +119 -0
  136. package/dist/cjs/utils/profileLinks.js +63 -0
  137. package/dist/cjs/utils/redactUrl.js +29 -0
  138. package/dist/cjs/utils/registrableApex.js +45 -0
  139. package/dist/cjs/utils/requestUtils.js +209 -0
  140. package/dist/cjs/utils/sessionUtils.js +181 -0
  141. package/dist/cjs/utils/textNormalization.js +158 -0
  142. package/dist/cjs/utils/userHandle.js +37 -0
  143. package/dist/cjs/utils/userIdentity.js +50 -0
  144. package/dist/cjs/utils/validationUtils.js +370 -0
  145. package/dist/cjs/utils/webauthnOrigin.js +51 -0
  146. package/dist/esm/.tsbuildinfo +1 -0
  147. package/dist/esm/HttpService.js +1266 -0
  148. package/dist/esm/OxyServices.base.js +386 -0
  149. package/dist/esm/OxyServices.errors.js +88 -0
  150. package/dist/esm/OxyServices.js +66 -0
  151. package/dist/esm/boot/sessionColdBoot.js +392 -0
  152. package/dist/esm/constants/version.js +13 -0
  153. package/dist/esm/crypto/aead.js +74 -0
  154. package/dist/esm/crypto/ecdh.js +32 -0
  155. package/dist/esm/crypto/identityMarker.js +248 -0
  156. package/dist/esm/crypto/kdf.js +36 -0
  157. package/dist/esm/crypto/keyManager.js +2227 -0
  158. package/dist/esm/crypto/polyfill.js +129 -0
  159. package/dist/esm/crypto/recoveryPhrase.js +238 -0
  160. package/dist/esm/crypto/signatureService.js +269 -0
  161. package/dist/esm/i18n/accountCategoryLabels.js +37 -0
  162. package/dist/esm/i18n/accountRoleLabels.js +20 -0
  163. package/dist/esm/i18n/index.js +83 -0
  164. package/dist/esm/i18n/locales/ar-SA.json +282 -0
  165. package/dist/esm/i18n/locales/ca-ES.json +282 -0
  166. package/dist/esm/i18n/locales/de-DE.json +282 -0
  167. package/dist/esm/i18n/locales/en-US.json +2161 -0
  168. package/dist/esm/i18n/locales/es-ES.json +2161 -0
  169. package/dist/esm/i18n/locales/fr-FR.json +282 -0
  170. package/dist/esm/i18n/locales/it-IT.json +282 -0
  171. package/dist/esm/i18n/locales/ja-JP.json +282 -0
  172. package/dist/esm/i18n/locales/ko-KR.json +282 -0
  173. package/dist/esm/i18n/locales/locales/ar-SA.json +282 -0
  174. package/dist/esm/i18n/locales/locales/ca-ES.json +282 -0
  175. package/dist/esm/i18n/locales/locales/de-DE.json +282 -0
  176. package/dist/esm/i18n/locales/locales/en-US.json +2161 -0
  177. package/dist/esm/i18n/locales/locales/es-ES.json +2161 -0
  178. package/dist/esm/i18n/locales/locales/fr-FR.json +282 -0
  179. package/dist/esm/i18n/locales/locales/it-IT.json +282 -0
  180. package/dist/esm/i18n/locales/locales/ja-JP.json +282 -0
  181. package/dist/esm/i18n/locales/locales/ko-KR.json +282 -0
  182. package/dist/esm/i18n/locales/locales/pt-PT.json +282 -0
  183. package/dist/esm/i18n/locales/locales/zh-CN.json +282 -0
  184. package/dist/esm/i18n/locales/pt-PT.json +282 -0
  185. package/dist/esm/i18n/locales/zh-CN.json +282 -0
  186. package/dist/esm/i18n/reputationCategoryLabels.js +13 -0
  187. package/dist/esm/i18n/trustTierLabels.js +12 -0
  188. package/dist/esm/index.js +254 -0
  189. package/dist/esm/inference/OxyInferenceClient.js +538 -0
  190. package/dist/esm/logger/index.js +140 -0
  191. package/dist/esm/mixins/OxyServices.accounts.js +543 -0
  192. package/dist/esm/mixins/OxyServices.analytics.js +46 -0
  193. package/dist/esm/mixins/OxyServices.appData.js +103 -0
  194. package/dist/esm/mixins/OxyServices.assets.js +761 -0
  195. package/dist/esm/mixins/OxyServices.auth.js +1247 -0
  196. package/dist/esm/mixins/OxyServices.chains.js +70 -0
  197. package/dist/esm/mixins/OxyServices.civic.js +605 -0
  198. package/dist/esm/mixins/OxyServices.connectedApps.js +75 -0
  199. package/dist/esm/mixins/OxyServices.contacts.js +47 -0
  200. package/dist/esm/mixins/OxyServices.deviceBoot.js +186 -0
  201. package/dist/esm/mixins/OxyServices.deviceTransfer.js +311 -0
  202. package/dist/esm/mixins/OxyServices.devices.js +113 -0
  203. package/dist/esm/mixins/OxyServices.features.js +332 -0
  204. package/dist/esm/mixins/OxyServices.followGraph.js +218 -0
  205. package/dist/esm/mixins/OxyServices.identity.js +457 -0
  206. package/dist/esm/mixins/OxyServices.identityBackup.js +169 -0
  207. package/dist/esm/mixins/OxyServices.inference.js +56 -0
  208. package/dist/esm/mixins/OxyServices.language.js +122 -0
  209. package/dist/esm/mixins/OxyServices.links.js +69 -0
  210. package/dist/esm/mixins/OxyServices.location.js +40 -0
  211. package/dist/esm/mixins/OxyServices.nodes.js +172 -0
  212. package/dist/esm/mixins/OxyServices.notifications.js +60 -0
  213. package/dist/esm/mixins/OxyServices.payment.js +155 -0
  214. package/dist/esm/mixins/OxyServices.privacy.js +196 -0
  215. package/dist/esm/mixins/OxyServices.reputation.js +286 -0
  216. package/dist/esm/mixins/OxyServices.security.js +86 -0
  217. package/dist/esm/mixins/OxyServices.store.js +263 -0
  218. package/dist/esm/mixins/OxyServices.topics.js +134 -0
  219. package/dist/esm/mixins/OxyServices.user.js +899 -0
  220. package/dist/esm/mixins/OxyServices.utility.js +1095 -0
  221. package/dist/esm/mixins/index.js +132 -0
  222. package/dist/esm/mixins/mixinHelpers.js +48 -0
  223. package/dist/esm/models/Topic.js +13 -0
  224. package/dist/esm/models/interfaces.js +17 -0
  225. package/dist/esm/models/session.js +1 -0
  226. package/dist/esm/server/auth.js +154 -0
  227. package/dist/esm/server/capabilityTicket.js +183 -0
  228. package/dist/esm/server/cors.js +220 -0
  229. package/dist/esm/server/index.js +47 -0
  230. package/dist/esm/server/rateLimit.js +201 -0
  231. package/dist/esm/server/safeFetch.js +447 -0
  232. package/dist/esm/server/securityHeaders.js +364 -0
  233. package/dist/esm/server/userInvalidation.js +152 -0
  234. package/dist/esm/server/verifySecret.js +47 -0
  235. package/dist/esm/session/SessionClient.js +861 -0
  236. package/dist/esm/session/accountDelegationAccess.js +45 -0
  237. package/dist/esm/session/accountDialogController.js +1126 -0
  238. package/dist/esm/session/accountSwitchTargets.js +77 -0
  239. package/dist/esm/session/authStateStore.js +398 -0
  240. package/dist/esm/session/createSessionClient.js +29 -0
  241. package/dist/esm/session/deviceDirectory.js +135 -0
  242. package/dist/esm/session/deviceSwitcherRows.js +72 -0
  243. package/dist/esm/session/identityPin.js +249 -0
  244. package/dist/esm/session/identitySession.js +131 -0
  245. package/dist/esm/session/projectSessionState.js +114 -0
  246. package/dist/esm/session/refresh.js +390 -0
  247. package/dist/esm/session/sessionClientHost.js +31 -0
  248. package/dist/esm/session/sharedDeviceCredential.js +239 -0
  249. package/dist/esm/session/socketLoader.js +19 -0
  250. package/dist/esm/shared/utils/colorUtils.js +143 -0
  251. package/dist/esm/shared/utils/errorUtils.js +170 -0
  252. package/dist/esm/shared/utils/index.js +15 -0
  253. package/dist/esm/shared/utils/networkUtils.js +173 -0
  254. package/dist/esm/shared/utils/themeUtils.js +98 -0
  255. package/dist/esm/utils/accountCacheSweep.js +75 -0
  256. package/dist/esm/utils/accountUtils.js +131 -0
  257. package/dist/esm/utils/activityId.js +2 -0
  258. package/dist/esm/utils/apiUtils.js +84 -0
  259. package/dist/esm/utils/asyncUtils.js +207 -0
  260. package/dist/esm/utils/authHelpers.js +111 -0
  261. package/dist/esm/utils/authWebUrl.js +16 -0
  262. package/dist/esm/utils/avatarUtils.js +26 -0
  263. package/dist/esm/utils/cache.js +227 -0
  264. package/dist/esm/utils/cacheKey.js +80 -0
  265. package/dist/esm/utils/coldBoot.js +119 -0
  266. package/dist/esm/utils/commonsApproval.js +27 -0
  267. package/dist/esm/utils/commonsDelivery.js +54 -0
  268. package/dist/esm/utils/deviceManager.js +170 -0
  269. package/dist/esm/utils/displayNamePolicyRanges.generated.js +57 -0
  270. package/dist/esm/utils/edgeRegion.js +2 -0
  271. package/dist/esm/utils/errorUtils.js +232 -0
  272. package/dist/esm/utils/identityCacheSweep.js +92 -0
  273. package/dist/esm/utils/languageUtils.js +212 -0
  274. package/dist/esm/utils/oauthPkce.js +297 -0
  275. package/dist/esm/utils/officialOrigins.js +59 -0
  276. package/dist/esm/utils/oxyServiceEnvironment.js +16 -0
  277. package/dist/esm/utils/platform.js +110 -0
  278. package/dist/esm/utils/profileLinks.js +60 -0
  279. package/dist/esm/utils/redactUrl.js +26 -0
  280. package/dist/esm/utils/registrableApex.js +42 -0
  281. package/dist/esm/utils/requestUtils.js +203 -0
  282. package/dist/esm/utils/sessionUtils.js +171 -0
  283. package/dist/esm/utils/textNormalization.js +154 -0
  284. package/dist/esm/utils/userHandle.js +33 -0
  285. package/dist/esm/utils/userIdentity.js +45 -0
  286. package/dist/esm/utils/validationUtils.js +350 -0
  287. package/dist/esm/utils/webauthnOrigin.js +48 -0
  288. package/dist/types/.tsbuildinfo +1 -0
  289. package/dist/types/HttpService.d.ts +413 -0
  290. package/dist/types/OxyServices.base.d.ts +187 -0
  291. package/dist/types/OxyServices.d.ts +139 -0
  292. package/dist/types/OxyServices.errors.d.ts +84 -0
  293. package/dist/types/boot/sessionColdBoot.d.ts +140 -0
  294. package/dist/types/constants/version.d.ts +13 -0
  295. package/dist/types/crypto/aead.d.ts +56 -0
  296. package/dist/types/crypto/ecdh.d.ts +29 -0
  297. package/dist/types/crypto/identityMarker.d.ts +94 -0
  298. package/dist/types/crypto/kdf.d.ts +25 -0
  299. package/dist/types/crypto/keyManager.d.ts +582 -0
  300. package/dist/types/crypto/polyfill.d.ts +25 -0
  301. package/dist/types/crypto/recoveryPhrase.d.ts +173 -0
  302. package/dist/types/crypto/signatureService.d.ts +136 -0
  303. package/dist/types/i18n/accountCategoryLabels.d.ts +34 -0
  304. package/dist/types/i18n/accountRoleLabels.d.ts +10 -0
  305. package/dist/types/i18n/index.d.ts +3 -0
  306. package/dist/types/i18n/reputationCategoryLabels.d.ts +10 -0
  307. package/dist/types/i18n/trustTierLabels.d.ts +9 -0
  308. package/dist/types/index.d.ts +145 -0
  309. package/dist/types/inference/OxyInferenceClient.d.ts +342 -0
  310. package/dist/types/logger/index.d.ts +104 -0
  311. package/dist/types/mixins/OxyServices.accounts.d.ts +868 -0
  312. package/dist/types/mixins/OxyServices.analytics.d.ts +72 -0
  313. package/dist/types/mixins/OxyServices.appData.d.ts +108 -0
  314. package/dist/types/mixins/OxyServices.assets.d.ts +329 -0
  315. package/dist/types/mixins/OxyServices.auth.d.ts +908 -0
  316. package/dist/types/mixins/OxyServices.chains.d.ts +156 -0
  317. package/dist/types/mixins/OxyServices.civic.d.ts +510 -0
  318. package/dist/types/mixins/OxyServices.connectedApps.d.ts +169 -0
  319. package/dist/types/mixins/OxyServices.contacts.d.ts +100 -0
  320. package/dist/types/mixins/OxyServices.deviceBoot.d.ts +185 -0
  321. package/dist/types/mixins/OxyServices.deviceTransfer.d.ts +149 -0
  322. package/dist/types/mixins/OxyServices.devices.d.ts +103 -0
  323. package/dist/types/mixins/OxyServices.features.d.ts +250 -0
  324. package/dist/types/mixins/OxyServices.followGraph.d.ts +223 -0
  325. package/dist/types/mixins/OxyServices.identity.d.ts +351 -0
  326. package/dist/types/mixins/OxyServices.identityBackup.d.ts +129 -0
  327. package/dist/types/mixins/OxyServices.inference.d.ts +95 -0
  328. package/dist/types/mixins/OxyServices.language.d.ts +87 -0
  329. package/dist/types/mixins/OxyServices.links.d.ts +104 -0
  330. package/dist/types/mixins/OxyServices.location.d.ts +70 -0
  331. package/dist/types/mixins/OxyServices.nodes.d.ts +198 -0
  332. package/dist/types/mixins/OxyServices.notifications.d.ts +143 -0
  333. package/dist/types/mixins/OxyServices.payment.d.ts +117 -0
  334. package/dist/types/mixins/OxyServices.privacy.d.ts +146 -0
  335. package/dist/types/mixins/OxyServices.reputation.d.ts +202 -0
  336. package/dist/types/mixins/OxyServices.security.d.ts +84 -0
  337. package/dist/types/mixins/OxyServices.store.d.ts +334 -0
  338. package/dist/types/mixins/OxyServices.topics.d.ts +110 -0
  339. package/dist/types/mixins/OxyServices.user.d.ts +558 -0
  340. package/dist/types/mixins/OxyServices.utility.d.ts +393 -0
  341. package/dist/types/mixins/index.d.ts +87 -0
  342. package/dist/types/mixins/mixinHelpers.d.ts +31 -0
  343. package/dist/types/models/Topic.d.ts +42 -0
  344. package/dist/types/models/interfaces.d.ts +675 -0
  345. package/dist/types/models/session.d.ts +51 -0
  346. package/dist/types/server/auth.d.ts +130 -0
  347. package/dist/types/server/capabilityTicket.d.ts +41 -0
  348. package/dist/types/server/cors.d.ts +98 -0
  349. package/dist/types/server/index.d.ts +35 -0
  350. package/dist/types/server/rateLimit.d.ts +40 -0
  351. package/dist/types/server/safeFetch.d.ts +137 -0
  352. package/dist/types/server/securityHeaders.d.ts +221 -0
  353. package/dist/types/server/userInvalidation.d.ts +114 -0
  354. package/dist/types/server/verifySecret.d.ts +29 -0
  355. package/dist/types/session/SessionClient.d.ts +418 -0
  356. package/dist/types/session/accountDelegationAccess.d.ts +40 -0
  357. package/dist/types/session/accountDialogController.d.ts +648 -0
  358. package/dist/types/session/accountSwitchTargets.d.ts +70 -0
  359. package/dist/types/session/authStateStore.d.ts +153 -0
  360. package/dist/types/session/createSessionClient.d.ts +30 -0
  361. package/dist/types/session/deviceDirectory.d.ts +182 -0
  362. package/dist/types/session/deviceSwitcherRows.d.ts +92 -0
  363. package/dist/types/session/identityPin.d.ts +87 -0
  364. package/dist/types/session/identitySession.d.ts +105 -0
  365. package/dist/types/session/projectSessionState.d.ts +74 -0
  366. package/dist/types/session/refresh.d.ts +179 -0
  367. package/dist/types/session/sessionClientHost.d.ts +18 -0
  368. package/dist/types/session/sharedDeviceCredential.d.ts +202 -0
  369. package/dist/types/session/socketLoader.d.ts +11 -0
  370. package/dist/types/shared/utils/colorUtils.d.ts +104 -0
  371. package/dist/types/shared/utils/errorUtils.d.ts +97 -0
  372. package/dist/types/shared/utils/index.d.ts +13 -0
  373. package/dist/types/shared/utils/networkUtils.d.ts +139 -0
  374. package/dist/types/shared/utils/themeUtils.d.ts +90 -0
  375. package/dist/types/utils/accountCacheSweep.d.ts +75 -0
  376. package/dist/types/utils/accountUtils.d.ts +100 -0
  377. package/dist/types/utils/activityId.d.ts +2 -0
  378. package/dist/types/utils/apiUtils.d.ts +95 -0
  379. package/dist/types/utils/asyncUtils.d.ts +62 -0
  380. package/dist/types/utils/authHelpers.d.ts +58 -0
  381. package/dist/types/utils/authWebUrl.d.ts +16 -0
  382. package/dist/types/utils/avatarUtils.d.ts +16 -0
  383. package/dist/types/utils/cache.d.ts +130 -0
  384. package/dist/types/utils/cacheKey.d.ts +66 -0
  385. package/dist/types/utils/coldBoot.d.ts +131 -0
  386. package/dist/types/utils/commonsApproval.d.ts +13 -0
  387. package/dist/types/utils/commonsDelivery.d.ts +105 -0
  388. package/dist/types/utils/deviceManager.d.ts +65 -0
  389. package/dist/types/utils/displayNamePolicyRanges.generated.d.ts +57 -0
  390. package/dist/types/utils/edgeRegion.d.ts +2 -0
  391. package/dist/types/utils/errorUtils.d.ts +125 -0
  392. package/dist/types/utils/identityCacheSweep.d.ts +80 -0
  393. package/dist/types/utils/languageUtils.d.ts +100 -0
  394. package/dist/types/utils/oauthPkce.d.ts +157 -0
  395. package/dist/types/utils/officialOrigins.d.ts +13 -0
  396. package/dist/types/utils/oxyServiceEnvironment.d.ts +17 -0
  397. package/dist/types/utils/platform.d.ts +49 -0
  398. package/dist/types/utils/profileLinks.d.ts +44 -0
  399. package/dist/types/utils/redactUrl.d.ts +17 -0
  400. package/dist/types/utils/registrableApex.d.ts +27 -0
  401. package/dist/types/utils/requestUtils.d.ts +123 -0
  402. package/dist/types/utils/sessionUtils.d.ts +54 -0
  403. package/dist/types/utils/textNormalization.d.ts +103 -0
  404. package/dist/types/utils/userHandle.d.ts +26 -0
  405. package/dist/types/utils/userIdentity.d.ts +21 -0
  406. package/dist/types/utils/validationUtils.d.ts +268 -0
  407. package/dist/types/utils/webauthnOrigin.d.ts +32 -0
  408. package/package.json +168 -0
  409. package/src/HttpService.ts +1553 -0
  410. package/src/OxyServices.base.ts +478 -0
  411. package/src/OxyServices.errors.ts +122 -0
  412. package/src/OxyServices.ts +172 -0
  413. package/src/__tests__/authSocket.test.ts +96 -0
  414. package/src/__tests__/httpServiceActivityId.test.ts +49 -0
  415. package/src/__tests__/httpServiceAuthSelfAwait.test.ts +108 -0
  416. package/src/__tests__/httpServiceCache.test.ts +318 -0
  417. package/src/__tests__/httpServiceCsrf.test.ts +235 -0
  418. package/src/__tests__/httpServiceFormEncoded.test.ts +142 -0
  419. package/src/__tests__/httpServiceQueueDeadlock.test.ts +128 -0
  420. package/src/__tests__/httpServiceUnwrapEnvelope.test.ts +115 -0
  421. package/src/__tests__/inSessionRefresh.test.ts +260 -0
  422. package/src/__tests__/linkedClient.test.ts +370 -0
  423. package/src/__tests__/parseHttpErrorBody.test.ts +116 -0
  424. package/src/__tests__/serverValueImportsDeclared.test.ts +120 -0
  425. package/src/__tests__/userIdentity.test.ts +143 -0
  426. package/src/boot/__tests__/sessionColdBoot.identity.test.ts +393 -0
  427. package/src/boot/__tests__/sessionColdBoot.sharedDevice.test.ts +325 -0
  428. package/src/boot/__tests__/sessionColdBoot.test.ts +570 -0
  429. package/src/boot/sessionColdBoot.ts +529 -0
  430. package/src/constants/version.ts +15 -0
  431. package/src/crypto/__tests__/backupMaterial.test.ts +86 -0
  432. package/src/crypto/__tests__/cryptoPrimitives.test.ts +226 -0
  433. package/src/crypto/__tests__/identityMocks.ts +125 -0
  434. package/src/crypto/__tests__/keyManager.atomicity.test.ts +272 -0
  435. package/src/crypto/__tests__/keyManager.cacheSafety.test.ts +175 -0
  436. package/src/crypto/__tests__/keyManager.identityStatus.test.ts +217 -0
  437. package/src/crypto/__tests__/keyManager.recoveryLadder.test.ts +179 -0
  438. package/src/crypto/__tests__/keyManager.recoveryMnemonic.test.ts +138 -0
  439. package/src/crypto/__tests__/keyManager.storageMigration.test.ts +227 -0
  440. package/src/crypto/__tests__/keyManager.test.ts +329 -0
  441. package/src/crypto/__tests__/polyfill.test.ts +109 -0
  442. package/src/crypto/__tests__/recoveryPhrase.test.ts +61 -0
  443. package/src/crypto/__tests__/scopedSeed.test.ts +126 -0
  444. package/src/crypto/__tests__/signChallengeShared.test.ts +63 -0
  445. package/src/crypto/__tests__/signedRecord.test.ts +230 -0
  446. package/src/crypto/aead.ts +97 -0
  447. package/src/crypto/ecdh.ts +37 -0
  448. package/src/crypto/identityMarker.ts +291 -0
  449. package/src/crypto/kdf.ts +43 -0
  450. package/src/crypto/keyManager.ts +2607 -0
  451. package/src/crypto/polyfill.ts +143 -0
  452. package/src/crypto/recoveryPhrase.ts +337 -0
  453. package/src/crypto/signatureService.ts +350 -0
  454. package/src/i18n/__tests__/accountCategoryLabels.test.ts +62 -0
  455. package/src/i18n/__tests__/accountRoleLabels.test.ts +54 -0
  456. package/src/i18n/__tests__/reputationCategoryLabels.test.ts +56 -0
  457. package/src/i18n/__tests__/trustTierLabels.test.ts +47 -0
  458. package/src/i18n/accountCategoryLabels.ts +44 -0
  459. package/src/i18n/accountRoleLabels.ts +26 -0
  460. package/src/i18n/index.ts +88 -0
  461. package/src/i18n/locales/ar-SA.json +282 -0
  462. package/src/i18n/locales/ca-ES.json +282 -0
  463. package/src/i18n/locales/de-DE.json +282 -0
  464. package/src/i18n/locales/en-US.json +2161 -0
  465. package/src/i18n/locales/es-ES.json +2161 -0
  466. package/src/i18n/locales/fr-FR.json +282 -0
  467. package/src/i18n/locales/it-IT.json +282 -0
  468. package/src/i18n/locales/ja-JP.json +282 -0
  469. package/src/i18n/locales/ko-KR.json +282 -0
  470. package/src/i18n/locales/pt-PT.json +282 -0
  471. package/src/i18n/locales/zh-CN.json +282 -0
  472. package/src/i18n/reputationCategoryLabels.ts +20 -0
  473. package/src/i18n/trustTierLabels.ts +18 -0
  474. package/src/index.ts +881 -0
  475. package/src/inference/OxyInferenceClient.ts +888 -0
  476. package/src/inference/__tests__/OxyInferenceClient.test.ts +834 -0
  477. package/src/logger/__tests__/logger.test.ts +207 -0
  478. package/src/logger/index.ts +217 -0
  479. package/src/mixins/OxyServices.accounts.ts +1330 -0
  480. package/src/mixins/OxyServices.analytics.ts +53 -0
  481. package/src/mixins/OxyServices.appData.ts +158 -0
  482. package/src/mixins/OxyServices.assets.ts +861 -0
  483. package/src/mixins/OxyServices.auth.ts +1858 -0
  484. package/src/mixins/OxyServices.chains.ts +134 -0
  485. package/src/mixins/OxyServices.civic.ts +945 -0
  486. package/src/mixins/OxyServices.connectedApps.ts +174 -0
  487. package/src/mixins/OxyServices.contacts.ts +73 -0
  488. package/src/mixins/OxyServices.deviceBoot.ts +210 -0
  489. package/src/mixins/OxyServices.deviceTransfer.ts +393 -0
  490. package/src/mixins/OxyServices.devices.ts +120 -0
  491. package/src/mixins/OxyServices.features.ts +454 -0
  492. package/src/mixins/OxyServices.followGraph.ts +293 -0
  493. package/src/mixins/OxyServices.identity.ts +705 -0
  494. package/src/mixins/OxyServices.identityBackup.ts +250 -0
  495. package/src/mixins/OxyServices.inference.ts +57 -0
  496. package/src/mixins/OxyServices.language.ts +144 -0
  497. package/src/mixins/OxyServices.links.ts +107 -0
  498. package/src/mixins/OxyServices.location.ts +46 -0
  499. package/src/mixins/OxyServices.nodes.ts +337 -0
  500. package/src/mixins/OxyServices.notifications.ts +142 -0
  501. package/src/mixins/OxyServices.payment.ts +163 -0
  502. package/src/mixins/OxyServices.privacy.ts +219 -0
  503. package/src/mixins/OxyServices.reputation.ts +436 -0
  504. package/src/mixins/OxyServices.security.ts +110 -0
  505. package/src/mixins/OxyServices.store.ts +585 -0
  506. package/src/mixins/OxyServices.topics.ts +169 -0
  507. package/src/mixins/OxyServices.user.ts +1137 -0
  508. package/src/mixins/OxyServices.utility.ts +1370 -0
  509. package/src/mixins/__tests__/OxyServices.civic.test.ts +1095 -0
  510. package/src/mixins/__tests__/OxyServices.deviceBoot.test.ts +124 -0
  511. package/src/mixins/__tests__/OxyServices.deviceTransfer.test.ts +271 -0
  512. package/src/mixins/__tests__/OxyServices.identity.test.ts +376 -0
  513. package/src/mixins/__tests__/OxyServices.links.test.ts +154 -0
  514. package/src/mixins/__tests__/OxyServices.nodes.test.ts +341 -0
  515. package/src/mixins/__tests__/OxyServices.rotateKey.test.ts +276 -0
  516. package/src/mixins/__tests__/OxyServices.serviceAssetMetadata.test.ts +192 -0
  517. package/src/mixins/__tests__/OxyServices.serviceAssetMetadataBySha.test.ts +135 -0
  518. package/src/mixins/__tests__/accounts.test.ts +727 -0
  519. package/src/mixins/__tests__/appData.test.ts +203 -0
  520. package/src/mixins/__tests__/assetCredentials.test.ts +47 -0
  521. package/src/mixins/__tests__/assetUpload.test.ts +191 -0
  522. package/src/mixins/__tests__/backgroundCredential.httpIntegration.test.ts +135 -0
  523. package/src/mixins/__tests__/chains.test.ts +113 -0
  524. package/src/mixins/__tests__/commonsSignIn.test.ts +1144 -0
  525. package/src/mixins/__tests__/connectedApps.test.ts +123 -0
  526. package/src/mixins/__tests__/deviceTokenMintPinned.test.ts +113 -0
  527. package/src/mixins/__tests__/discoveryErrorHandling.test.ts +266 -0
  528. package/src/mixins/__tests__/followCacheInvalidation.test.ts +173 -0
  529. package/src/mixins/__tests__/followGraph.test.ts +147 -0
  530. package/src/mixins/__tests__/followGraphPagination.test.ts +271 -0
  531. package/src/mixins/__tests__/getFileDownloadUrl.test.ts +346 -0
  532. package/src/mixins/__tests__/getFollowStatuses.test.ts +95 -0
  533. package/src/mixins/__tests__/getUsersByIds.test.ts +149 -0
  534. package/src/mixins/__tests__/identityBackup.test.ts +315 -0
  535. package/src/mixins/__tests__/identityWriteCacheInvalidation.test.ts +407 -0
  536. package/src/mixins/__tests__/inferenceFactory.test.ts +58 -0
  537. package/src/mixins/__tests__/onTokensChanged.test.ts +129 -0
  538. package/src/mixins/__tests__/preSessionSkipAuth.test.ts +284 -0
  539. package/src/mixins/__tests__/privacyCacheInvalidation.test.ts +155 -0
  540. package/src/mixins/__tests__/reputation.test.ts +522 -0
  541. package/src/mixins/__tests__/serviceAuth.test.ts +832 -0
  542. package/src/mixins/__tests__/serviceTokenJwks.test.ts +208 -0
  543. package/src/mixins/__tests__/store.test.ts +304 -0
  544. package/src/mixins/__tests__/topics.test.ts +156 -0
  545. package/src/mixins/__tests__/userReadCacheBypass.test.ts +129 -0
  546. package/src/mixins/__tests__/userTokenAuth.test.ts +746 -0
  547. package/src/mixins/__tests__/verifyChallenge.test.ts +130 -0
  548. package/src/mixins/__tests__/verifyServiceActingAs.test.ts +167 -0
  549. package/src/mixins/__tests__/webauthnAuth.test.ts +205 -0
  550. package/src/mixins/index.ts +201 -0
  551. package/src/mixins/mixinHelpers.ts +69 -0
  552. package/src/models/Topic.ts +46 -0
  553. package/src/models/interfaces.ts +786 -0
  554. package/src/models/session.ts +55 -0
  555. package/src/server/__tests__/auth.test.ts +78 -0
  556. package/src/server/__tests__/capabilityTicket.test.ts +111 -0
  557. package/src/server/__tests__/cors.socket.test.ts +225 -0
  558. package/src/server/__tests__/cors.test.ts +158 -0
  559. package/src/server/__tests__/rateLimit.test.ts +257 -0
  560. package/src/server/__tests__/safeFetch.test.ts +232 -0
  561. package/src/server/__tests__/securityHeaders.test.ts +348 -0
  562. package/src/server/__tests__/serviceTokenAttribution.test.ts +396 -0
  563. package/src/server/__tests__/userInvalidation.test.ts +203 -0
  564. package/src/server/__tests__/verifySecret.test.ts +40 -0
  565. package/src/server/auth.ts +271 -0
  566. package/src/server/capabilityTicket.ts +258 -0
  567. package/src/server/cors.ts +277 -0
  568. package/src/server/index.ts +136 -0
  569. package/src/server/rateLimit.ts +313 -0
  570. package/src/server/safeFetch.ts +586 -0
  571. package/src/server/securityHeaders.ts +467 -0
  572. package/src/server/userInvalidation.ts +199 -0
  573. package/src/server/verifySecret.ts +52 -0
  574. package/src/session/SessionClient.ts +1001 -0
  575. package/src/session/__tests__/SessionClient.additive.test.ts +153 -0
  576. package/src/session/__tests__/SessionClient.broadcastChannel.test.ts +114 -0
  577. package/src/session/__tests__/SessionClient.diagnostics.test.ts +91 -0
  578. package/src/session/__tests__/SessionClient.directory.test.ts +688 -0
  579. package/src/session/__tests__/SessionClient.httpIntegration.test.ts +65 -0
  580. package/src/session/__tests__/SessionClient.identityPin.test.ts +175 -0
  581. package/src/session/__tests__/SessionClient.rest.test.ts +119 -0
  582. package/src/session/__tests__/SessionClient.serverEvents.test.ts +72 -0
  583. package/src/session/__tests__/SessionClient.socket.test.ts +202 -0
  584. package/src/session/__tests__/SessionClient.socketFactory.test.ts +81 -0
  585. package/src/session/__tests__/SessionClient.state.test.ts +78 -0
  586. package/src/session/__tests__/SessionClient.switchTokenOrder.test.ts +170 -0
  587. package/src/session/__tests__/accountDelegationAccess.test.ts +104 -0
  588. package/src/session/__tests__/accountDialogController.test.ts +1969 -0
  589. package/src/session/__tests__/accountDialogShape.test.ts +118 -0
  590. package/src/session/__tests__/accountSwitchTargets.test.ts +137 -0
  591. package/src/session/__tests__/authStateStore.test.ts +451 -0
  592. package/src/session/__tests__/deviceDirectory.test.ts +422 -0
  593. package/src/session/__tests__/deviceSwitcherRows.test.ts +223 -0
  594. package/src/session/__tests__/identityPin.test.ts +131 -0
  595. package/src/session/__tests__/identitySession.test.ts +194 -0
  596. package/src/session/__tests__/projectSessionState.test.ts +105 -0
  597. package/src/session/__tests__/refresh.identityPin.test.ts +307 -0
  598. package/src/session/__tests__/refresh.test.ts +443 -0
  599. package/src/session/__tests__/sessionIntegration.test.ts +209 -0
  600. package/src/session/__tests__/sharedDeviceCredential.test.ts +300 -0
  601. package/src/session/accountDelegationAccess.ts +72 -0
  602. package/src/session/accountDialogController.ts +1494 -0
  603. package/src/session/accountSwitchTargets.ts +93 -0
  604. package/src/session/authStateStore.ts +502 -0
  605. package/src/session/createSessionClient.ts +39 -0
  606. package/src/session/deviceDirectory.ts +269 -0
  607. package/src/session/deviceSwitcherRows.ts +145 -0
  608. package/src/session/identityPin.ts +310 -0
  609. package/src/session/identitySession.ts +206 -0
  610. package/src/session/projectSessionState.ts +137 -0
  611. package/src/session/refresh.ts +517 -0
  612. package/src/session/sessionClientHost.ts +39 -0
  613. package/src/session/sharedDeviceCredential.ts +349 -0
  614. package/src/session/socketLoader.ts +30 -0
  615. package/src/shared/utils/colorUtils.ts +155 -0
  616. package/src/shared/utils/errorUtils.ts +181 -0
  617. package/src/shared/utils/index.ts +59 -0
  618. package/src/shared/utils/networkUtils.ts +248 -0
  619. package/src/shared/utils/themeUtils.ts +115 -0
  620. package/src/types/buffer.d.ts +97 -0
  621. package/src/types/expo-crypto.d.ts +16 -0
  622. package/src/types/expo-secure-store.d.ts +17 -0
  623. package/src/utils/__tests__/accountUtils.test.ts +151 -0
  624. package/src/utils/__tests__/activityId.test.ts +45 -0
  625. package/src/utils/__tests__/asyncUtils.test.ts +187 -0
  626. package/src/utils/__tests__/authWebUrl.test.ts +15 -0
  627. package/src/utils/__tests__/cacheKey.test.ts +0 -0
  628. package/src/utils/__tests__/coldBoot.test.ts +496 -0
  629. package/src/utils/__tests__/commonsApproval.test.ts +60 -0
  630. package/src/utils/__tests__/identityCacheSweep.test.ts +151 -0
  631. package/src/utils/__tests__/languageUtils.test.ts +219 -0
  632. package/src/utils/__tests__/oauthPkce.test.ts +272 -0
  633. package/src/utils/__tests__/officialOrigins.test.ts +31 -0
  634. package/src/utils/__tests__/oxyServiceEnvironment.test.ts +7 -0
  635. package/src/utils/__tests__/profileLinks.test.ts +180 -0
  636. package/src/utils/__tests__/redactUrl.test.ts +33 -0
  637. package/src/utils/__tests__/registrableApex.test.ts +62 -0
  638. package/src/utils/__tests__/textNormalization.test.ts +205 -0
  639. package/src/utils/__tests__/validationUtils.test.ts +703 -0
  640. package/src/utils/__tests__/webauthnOrigin.test.ts +83 -0
  641. package/src/utils/accountCacheSweep.ts +93 -0
  642. package/src/utils/accountUtils.ts +194 -0
  643. package/src/utils/activityId.ts +2 -0
  644. package/src/utils/apiUtils.ts +137 -0
  645. package/src/utils/asyncUtils.ts +280 -0
  646. package/src/utils/authHelpers.ts +148 -0
  647. package/src/utils/authWebUrl.ts +17 -0
  648. package/src/utils/avatarUtils.ts +39 -0
  649. package/src/utils/cache.ts +273 -0
  650. package/src/utils/cacheKey.ts +93 -0
  651. package/src/utils/coldBoot.ts +218 -0
  652. package/src/utils/commonsApproval.ts +39 -0
  653. package/src/utils/commonsDelivery.ts +132 -0
  654. package/src/utils/deviceManager.ts +203 -0
  655. package/src/utils/displayNamePolicyRanges.generated.ts +69 -0
  656. package/src/utils/edgeRegion.ts +2 -0
  657. package/src/utils/errorUtils.ts +352 -0
  658. package/src/utils/identityCacheSweep.ts +104 -0
  659. package/src/utils/languageUtils.ts +256 -0
  660. package/src/utils/oauthPkce.ts +392 -0
  661. package/src/utils/officialOrigins.ts +62 -0
  662. package/src/utils/oxyServiceEnvironment.ts +17 -0
  663. package/src/utils/platform.ts +139 -0
  664. package/src/utils/profileLinks.ts +91 -0
  665. package/src/utils/redactUrl.ts +28 -0
  666. package/src/utils/registrableApex.ts +41 -0
  667. package/src/utils/requestUtils.ts +237 -0
  668. package/src/utils/sessionUtils.ts +206 -0
  669. package/src/utils/textNormalization.ts +162 -0
  670. package/src/utils/userHandle.ts +49 -0
  671. package/src/utils/userIdentity.ts +60 -0
  672. package/src/utils/validationUtils.ts +390 -0
  673. package/src/utils/webauthnOrigin.ts +52 -0
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * Theme Utility Functions
4
+ *
5
+ * Consolidated theme utilities for normalizing and handling color schemes
6
+ * across the OxyServices ecosystem.
7
+ *
8
+ * @module shared/utils/themeUtils
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.getSystemColorScheme = exports.systemPrefersDarkMode = exports.getOppositeTheme = exports.normalizeColorScheme = exports.normalizeTheme = void 0;
12
+ /**
13
+ * Normalizes a theme value to ensure it's always 'light' or 'dark'.
14
+ *
15
+ * @param theme - Theme value (may be 'light' | 'dark' | string | undefined)
16
+ * @returns Normalized 'light' | 'dark' theme (defaults to 'light')
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * normalizeTheme('dark'); // 'dark'
21
+ * normalizeTheme('light'); // 'light'
22
+ * normalizeTheme('unknown'); // 'light'
23
+ * normalizeTheme(undefined); // 'light'
24
+ * normalizeTheme(null); // 'light'
25
+ * ```
26
+ */
27
+ const normalizeTheme = (theme) => theme === 'light' || theme === 'dark' ? theme : 'light';
28
+ exports.normalizeTheme = normalizeTheme;
29
+ /**
30
+ * Normalizes a color scheme value with optional fallback chain.
31
+ *
32
+ * Handles null/undefined cases from React Native's useColorScheme() hook
33
+ * with a proper fallback chain.
34
+ *
35
+ * @param colorScheme - The color scheme from useColorScheme() hook (may be null/undefined)
36
+ * @param theme - Optional theme prop as fallback
37
+ * @returns Normalized 'light' | 'dark' color scheme
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * // In a React Native component:
42
+ * const systemScheme = useColorScheme(); // might be null
43
+ * const colorScheme = normalizeColorScheme(systemScheme, props.theme);
44
+ *
45
+ * normalizeColorScheme('dark', 'light'); // 'dark'
46
+ * normalizeColorScheme(null, 'dark'); // 'dark'
47
+ * normalizeColorScheme(undefined, undefined); // 'light'
48
+ * ```
49
+ */
50
+ const normalizeColorScheme = (colorScheme, theme) => {
51
+ if (colorScheme === 'light' || colorScheme === 'dark') {
52
+ return colorScheme;
53
+ }
54
+ if (theme === 'light' || theme === 'dark') {
55
+ return theme;
56
+ }
57
+ return 'light';
58
+ };
59
+ exports.normalizeColorScheme = normalizeColorScheme;
60
+ /**
61
+ * Gets the opposite theme value.
62
+ *
63
+ * @param theme - Current theme value
64
+ * @returns The opposite theme ('light' → 'dark', 'dark' → 'light')
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * getOppositeTheme('light'); // 'dark'
69
+ * getOppositeTheme('dark'); // 'light'
70
+ * ```
71
+ */
72
+ const getOppositeTheme = (theme) => theme === 'light' ? 'dark' : 'light';
73
+ exports.getOppositeTheme = getOppositeTheme;
74
+ /**
75
+ * Checks if the system prefers dark mode.
76
+ *
77
+ * This function only works in browser environments.
78
+ * Returns false in non-browser environments (Node.js, React Native).
79
+ *
80
+ * @returns true if system prefers dark mode, false otherwise
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * if (systemPrefersDarkMode()) {
85
+ * setTheme('dark');
86
+ * }
87
+ * ```
88
+ */
89
+ const systemPrefersDarkMode = () => {
90
+ if (typeof window === 'undefined')
91
+ return false;
92
+ return window.matchMedia?.('(prefers-color-scheme: dark)').matches ?? false;
93
+ };
94
+ exports.systemPrefersDarkMode = systemPrefersDarkMode;
95
+ /**
96
+ * Gets the system's preferred color scheme.
97
+ *
98
+ * @returns 'dark' if system prefers dark mode, 'light' otherwise
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * const theme = getSystemColorScheme();
103
+ * ```
104
+ */
105
+ const getSystemColorScheme = () => (0, exports.systemPrefersDarkMode)() ? 'dark' : 'light';
106
+ exports.getSystemColorScheme = getSystemColorScheme;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * THE enumeration of `OxyServices` GET-cache keys that serve the ACCOUNT FOREST
4
+ * — the caller's accessible accounts, as lists and as individual detail rows —
5
+ * and the one sweep that clears them.
6
+ *
7
+ * WHY THIS IS NOT A METHOD ON THE ACCOUNTS MIXIN
8
+ * ---------------------------------------------
9
+ * `AccountNode.account` is a whole `User`, so a forest read embeds the very
10
+ * profile the identity reads serve. That makes an IDENTITY write a writer of
11
+ * these keys too: `updateProfile` edits the caller's own personal account,
12
+ * which is a row in `GET /accounts` and is its own `GET /accounts/<id>`. Leave
13
+ * those cached and the account switcher keeps drawing the pre-edit name and
14
+ * picture for the full TTL, against a perfectly healthy server.
15
+ *
16
+ * The mixins compose into one class at runtime but are typed one at a time, so
17
+ * the user mixin cannot call a method the accounts mixin owns. The key list
18
+ * therefore lives here, once, and every writer calls {@link
19
+ * evictOxyAccountForestCache} — exactly like the identity key list in
20
+ * `identityCacheSweep`, which the accounts mixin already calls for the
21
+ * mirror-image case (an account write staling the identity reads). The
22
+ * alternative — a second hand-written copy of these keys in the other mixin —
23
+ * is the drift that shipped the two stale-profile bugs `identityCacheSweep`
24
+ * documents.
25
+ *
26
+ * WHY THE LIST NEEDS A PREFIX AND THE DETAIL DOES NOT
27
+ * --------------------------------------------------
28
+ * `listAccounts({tree?})` keys the flat list as `GET:/accounts` and every
29
+ * option variant as `GET:/accounts?<query>` (the query string is part of the
30
+ * URL, hence of the key), and a writer cannot enumerate which variants a caller
31
+ * has read. The detail key, by contrast, is derivable from the account id the
32
+ * writer already holds.
33
+ *
34
+ * The `GET:/accounts?` prefix matches ONLY the query-string list variants —
35
+ * never `GET:/accounts/<id>` or its `…/members`, `…/credentials`, `…/children`
36
+ * sub-resources, which are the accounts mixin's own business and stay there.
37
+ */
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.OXY_ACCOUNT_PER_ACCOUNT_CACHE_PREFIX = exports.OXY_ACCOUNT_LIST_CACHE_QUERY_PREFIX = exports.OXY_ACCOUNT_LIST_CACHE_KEY = void 0;
40
+ exports.oxyAccountDetailCacheKey = oxyAccountDetailCacheKey;
41
+ exports.evictOxyAccountForestCache = evictOxyAccountForestCache;
42
+ /** The cache key `listAccounts()` reads under with no options. */
43
+ exports.OXY_ACCOUNT_LIST_CACHE_KEY = 'GET:/accounts';
44
+ /**
45
+ * The prefix covering every option-carrying `listAccounts(opts)` variant
46
+ * (`?tree=true`, …), none of which a writer can enumerate.
47
+ */
48
+ exports.OXY_ACCOUNT_LIST_CACHE_QUERY_PREFIX = 'GET:/accounts?';
49
+ /**
50
+ * Prefix covering every per-account sub-resource cache key
51
+ * (`GET:/accounts/<id>`, `…/members`, `…/credentials`, `…/children`). A
52
+ * membership mutation on an ancestor must sweep ALL of these, not only the
53
+ * account named in the path: descendant member rosters embed inherited rows
54
+ * resolved from that ancestor, and the writer cannot enumerate which descendant
55
+ * ids a caller has already read. The trailing slash deliberately excludes the
56
+ * forest list keys (`GET:/accounts`, `GET:/accounts?…`) documented above.
57
+ */
58
+ exports.OXY_ACCOUNT_PER_ACCOUNT_CACHE_PREFIX = 'GET:/accounts/';
59
+ /**
60
+ * Build the exact cache key `getAccount(accountId)` reads under.
61
+ */
62
+ function oxyAccountDetailCacheKey(accountId) {
63
+ return `GET:/accounts/${encodeURIComponent(accountId)}`;
64
+ }
65
+ /**
66
+ * Sweep an `OxyServices` GET response cache of the account forest.
67
+ *
68
+ * @param oxy - Anything exposing the SDK's two eviction methods.
69
+ * @param accountId - The account whose detail row to drop as well. Optional: a
70
+ * writer that changed the SHAPE of the forest rather than one
71
+ * account in it (create, archive, ownership transfer) has no
72
+ * detail row to name, and clears only the lists.
73
+ */
74
+ function evictOxyAccountForestCache(oxy, accountId) {
75
+ oxy.clearCacheEntry(exports.OXY_ACCOUNT_LIST_CACHE_KEY);
76
+ oxy.clearCacheByPrefix(exports.OXY_ACCOUNT_LIST_CACHE_QUERY_PREFIX);
77
+ if (accountId) {
78
+ oxy.clearCacheEntry(oxyAccountDetailCacheKey(accountId));
79
+ }
80
+ }
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ /**
3
+ * Shared account types and pure helper functions.
4
+ * Used by the @oxy.so/services account stores (Expo/RN and RN-Web).
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getAccountColor = exports.createQuickAccount = exports.buildAccountsArray = exports.getAccountFallbackHandle = exports.getAccountDisplayName = exports.formatPublicKeyHandle = void 0;
8
+ const i18n_1 = require("../i18n");
9
+ const userHandle_1 = require("./userHandle");
10
+ /**
11
+ * Truncate a long public key for display, e.g. `0x12345678…`.
12
+ * Falls back to the raw key if it's too short to truncate.
13
+ */
14
+ const formatPublicKeyHandle = (publicKey) => {
15
+ const cleaned = publicKey.startsWith('0x') ? publicKey.slice(2) : publicKey;
16
+ if (cleaned.length <= 8)
17
+ return `0x${cleaned}`;
18
+ return `0x${cleaned.slice(0, 8)}…`;
19
+ };
20
+ exports.formatPublicKeyHandle = formatPublicKeyHandle;
21
+ /**
22
+ * Resolve a friendly display name for a user.
23
+ *
24
+ * Order of preference:
25
+ * 1. `name.displayName` from the API user contract.
26
+ * 2. `name.full`, or composed `name.first name.last` for local unsaved shapes.
27
+ * 3. `name` when passed as a plain string by local non-DTO call sites.
28
+ * 4. pre-normalized account-row `displayName`.
29
+ * 5. `username`
30
+ * 6. `Account 0x12345678…` (derived from publicKey, when present)
31
+ * 7. Translated fallback (e.g. "Unnamed")
32
+ *
33
+ * The translation key `common.unnamed` is used for the final fallback. If the
34
+ * caller does not pass a locale, the default English translation is used.
35
+ */
36
+ const getAccountDisplayName = (user, locale) => {
37
+ if (!user)
38
+ return (0, i18n_1.translate)(locale, 'common.unnamed');
39
+ const { name, displayName, username, publicKey } = user;
40
+ if (name && typeof name === 'object') {
41
+ if (typeof name.displayName === 'string' && name.displayName.trim()) {
42
+ return name.displayName.trim();
43
+ }
44
+ if (typeof name.full === 'string' && name.full.trim())
45
+ return name.full.trim();
46
+ const first = typeof name.first === 'string' ? name.first.trim() : '';
47
+ const last = typeof name.last === 'string' ? name.last.trim() : '';
48
+ const composed = [first, last].filter(Boolean).join(' ').trim();
49
+ if (composed)
50
+ return composed;
51
+ }
52
+ else if (typeof name === 'string' && name.trim()) {
53
+ return name.trim();
54
+ }
55
+ if (typeof displayName === 'string' && displayName.trim())
56
+ return displayName.trim();
57
+ if (typeof username === 'string' && username.trim())
58
+ return username.trim();
59
+ if (typeof publicKey === 'string' && publicKey.length > 0) {
60
+ return (0, i18n_1.translate)(locale, 'common.accountFallback', {
61
+ handle: (0, exports.formatPublicKeyHandle)(publicKey),
62
+ });
63
+ }
64
+ return (0, i18n_1.translate)(locale, 'common.unnamed');
65
+ };
66
+ exports.getAccountDisplayName = getAccountDisplayName;
67
+ /**
68
+ * Resolve a `@handle` style identifier for a user.
69
+ *
70
+ * Returns the bare username when present (without the `@`), otherwise a
71
+ * truncated public-key handle (`0x12345678…`), or `undefined` when neither is
72
+ * available — callers can decide whether to hide the line entirely.
73
+ */
74
+ const getAccountFallbackHandle = (user) => {
75
+ if (!user)
76
+ return undefined;
77
+ if (typeof user.username === 'string' && user.username.trim())
78
+ return user.username.trim();
79
+ if (typeof user.publicKey === 'string' && user.publicKey.length > 0) {
80
+ return (0, exports.formatPublicKeyHandle)(user.publicKey);
81
+ }
82
+ return undefined;
83
+ };
84
+ exports.getAccountFallbackHandle = getAccountFallbackHandle;
85
+ /**
86
+ * Build an ordered array of QuickAccounts from a map and order list.
87
+ */
88
+ const buildAccountsArray = (accounts, order) => {
89
+ const result = [];
90
+ for (const id of order) {
91
+ const account = accounts[id];
92
+ if (account)
93
+ result.push(account);
94
+ }
95
+ return result;
96
+ };
97
+ exports.buildAccountsArray = buildAccountsArray;
98
+ /**
99
+ * Create a QuickAccount from user data returned by the API.
100
+ *
101
+ * @param sessionId - Session identifier
102
+ * @param userData - Raw user object from the API
103
+ * @param existingAccount - Previously cached account (to preserve avatarUrl if unchanged)
104
+ * @param getFileDownloadUrl - Function to generate avatar download URL from file ID
105
+ */
106
+ const createQuickAccount = (sessionId, userData, existingAccount, getFileDownloadUrl) => {
107
+ const nameObj = userData.name && typeof userData.name === 'object' ? userData.name : undefined;
108
+ const apiDisplayName = typeof nameObj?.displayName === 'string' ? nameObj.displayName.trim() : '';
109
+ const displayName = apiDisplayName ||
110
+ (0, userHandle_1.getNormalizedUserHandle)(userData) ||
111
+ (0, exports.getAccountDisplayName)(null);
112
+ const userId = userData.id || (typeof userData._id === 'string' ? userData._id : userData._id?.toString());
113
+ // Preserve existing avatarUrl if avatar hasn't changed (prevents image reload)
114
+ let avatarUrl;
115
+ const avatar = userData.avatar ?? undefined;
116
+ if (existingAccount && existingAccount.avatar === avatar && existingAccount.avatarUrl) {
117
+ avatarUrl = existingAccount.avatarUrl;
118
+ }
119
+ else if (avatar && getFileDownloadUrl) {
120
+ avatarUrl = getFileDownloadUrl(avatar, 'thumb');
121
+ }
122
+ return {
123
+ sessionId,
124
+ userId,
125
+ username: userData.username || '',
126
+ displayName,
127
+ avatar,
128
+ avatarUrl,
129
+ };
130
+ };
131
+ exports.createQuickAccount = createQuickAccount;
132
+ /**
133
+ * Return the account's preferred Bloom color preset, or `null` if it has no
134
+ * preference. Centralises the `color ?? null` normalisation so consumers can
135
+ * drive per-account theming without duplicating the nullish-handling.
136
+ */
137
+ const getAccountColor = (account) => {
138
+ return account.color ?? null;
139
+ };
140
+ exports.getAccountColor = getAccountColor;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBrowserActivityIdHeader = void 0;
4
+ /** @deprecated Import from `@oxy.so/telemetry/browser` in new code. */
5
+ var browser_1 = require("@oxy.so/telemetry/browser");
6
+ Object.defineProperty(exports, "getBrowserActivityIdHeader", { enumerable: true, get: function () { return browser_1.getBrowserActivityIdHeader; } });
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Utility functions for common API patterns
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.buildQueryParams = buildQueryParams;
7
+ exports.buildSearchParams = buildSearchParams;
8
+ exports.buildUrl = buildUrl;
9
+ exports.buildPaginationParams = buildPaginationParams;
10
+ exports.safeJsonParse = safeJsonParse;
11
+ /**
12
+ * Build a plain query-parameter record from an object, stringifying values and
13
+ * dropping `undefined`/`null` entries.
14
+ *
15
+ * This is the shape `OxyServices.makeRequest` expects for a GET's `params`:
16
+ * `HttpService` inspects it with `Object.keys(...)` (both to decide whether to
17
+ * append a query string and to build the request's cache key), and
18
+ * `Object.keys(new URLSearchParams({ limit: '20' }))` is `[]` — a
19
+ * `URLSearchParams` exposes its entries through iterator methods, never as own
20
+ * enumerable properties. Passing one to `makeRequest` therefore silently drops
21
+ * the whole query string. Always hand `makeRequest` a plain record.
22
+ *
23
+ * Generic over the input object rather than taking `Record<string, unknown>`,
24
+ * because a TypeScript `interface` (`PaginationParams`, `FollowGraphParams`, …)
25
+ * has no implicit index signature and so is not assignable to that type.
26
+ */
27
+ function buildQueryParams(params) {
28
+ const query = {};
29
+ // Widening the value to `unknown` is always sound; the default overload of
30
+ // `Object.entries` would otherwise infer `any` here.
31
+ for (const [key, value] of Object.entries(params)) {
32
+ if (value !== undefined && value !== null) {
33
+ query[key] = String(value);
34
+ }
35
+ }
36
+ return query;
37
+ }
38
+ /**
39
+ * Build URL search parameters from an object.
40
+ *
41
+ * For building a URL string only — see {@link buildQueryParams} for the shape
42
+ * `makeRequest` needs.
43
+ *
44
+ * @param params Object with parameter key-value pairs
45
+ * @returns URLSearchParams instance
46
+ */
47
+ function buildSearchParams(params) {
48
+ return new URLSearchParams(buildQueryParams(params));
49
+ }
50
+ /**
51
+ * Build URL with search parameters
52
+ * @param baseUrl Base URL
53
+ * @param params Object with parameter key-value pairs
54
+ * @returns Complete URL with search parameters
55
+ */
56
+ function buildUrl(baseUrl, params) {
57
+ if (!params)
58
+ return baseUrl;
59
+ const searchParams = buildSearchParams(params);
60
+ const queryString = searchParams.toString();
61
+ return queryString ? `${baseUrl}?${queryString}` : baseUrl;
62
+ }
63
+ /**
64
+ * Build pagination query parameters.
65
+ *
66
+ * Returns a plain record — NOT a `URLSearchParams` — because that is the only
67
+ * shape `makeRequest`/`HttpService` can read. See {@link buildQueryParams}.
68
+ *
69
+ * @param params Pagination parameters
70
+ * @returns Query record with pagination
71
+ */
72
+ function buildPaginationParams(params) {
73
+ return buildQueryParams(params);
74
+ }
75
+ /**
76
+ * Safe JSON parsing with error handling
77
+ * @param data Data to parse
78
+ * @param fallback Fallback value if parsing fails
79
+ * @returns Parsed data or fallback
80
+ */
81
+ function safeJsonParse(data, fallback) {
82
+ if (typeof data === 'string') {
83
+ try {
84
+ return JSON.parse(data);
85
+ }
86
+ catch {
87
+ return fallback;
88
+ }
89
+ }
90
+ return data;
91
+ }
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ /**
3
+ * Async utilities for common asynchronous patterns and error handling
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.delay = void 0;
7
+ exports.withErrorHandling = withErrorHandling;
8
+ exports.parallelWithErrorHandling = parallelWithErrorHandling;
9
+ exports.retryAsync = retryAsync;
10
+ exports.debounceAsync = debounceAsync;
11
+ exports.throttleAsync = throttleAsync;
12
+ exports.sequentialWithProgress = sequentialWithProgress;
13
+ exports.batchAsync = batchAsync;
14
+ exports.createCancellableAsync = createCancellableAsync;
15
+ exports.withTimeout = withTimeout;
16
+ exports.withLoadingState = withLoadingState;
17
+ exports.retryOnError = retryOnError;
18
+ const logger_1 = require("../logger");
19
+ /**
20
+ * Wrapper for async operations with automatic error handling
21
+ * Returns null on error instead of throwing
22
+ */
23
+ async function withErrorHandling(operation, errorHandler, context) {
24
+ try {
25
+ return await operation();
26
+ }
27
+ catch (error) {
28
+ if (errorHandler) {
29
+ errorHandler(error);
30
+ }
31
+ else {
32
+ logger_1.logger.error(`Error in ${context || 'operation'}`, error instanceof Error ? error : new Error(String(error)), {
33
+ component: 'asyncUtils',
34
+ method: 'withErrorHandling',
35
+ });
36
+ }
37
+ return null;
38
+ }
39
+ }
40
+ /**
41
+ * Execute multiple async operations in parallel with error handling
42
+ */
43
+ async function parallelWithErrorHandling(operations, errorHandler) {
44
+ const results = await Promise.allSettled(operations.map((op, index) => withErrorHandling(op, error => errorHandler?.(error, index))));
45
+ return results.map(result => result.status === 'fulfilled' ? result.value : null);
46
+ }
47
+ /**
48
+ * Extract an HTTP status code from an error value, tolerating both the
49
+ * axios-style nested shape (`error.response.status`) and the flat shape
50
+ * produced by {@link handleHttpError} / fetch-based clients (`error.status`).
51
+ *
52
+ * Centralising this lookup prevents retry predicates from silently falling
53
+ * through when one of the two shapes is missing, which previously caused
54
+ * @oxy.so/core to retry 4xx responses and turn sub-10ms failures into
55
+ * multi-second stalls for every missing-resource lookup.
56
+ */
57
+ function extractHttpStatus(error) {
58
+ if (!error || typeof error !== 'object')
59
+ return undefined;
60
+ const candidate = error;
61
+ const flat = candidate.status;
62
+ if (typeof flat === 'number' && Number.isFinite(flat))
63
+ return flat;
64
+ const nested = candidate.response?.status;
65
+ if (typeof nested === 'number' && Number.isFinite(nested))
66
+ return nested;
67
+ return undefined;
68
+ }
69
+ /**
70
+ * Retry an async operation with exponential backoff
71
+ *
72
+ * By default, does not retry on 4xx errors (client errors). The default
73
+ * predicate accepts both the axios-style `error.response.status` and the
74
+ * flat `error.status` shape produced by {@link handleHttpError}, so callers
75
+ * never accidentally retry a deterministic client failure.
76
+ *
77
+ * Use the `shouldRetry` callback to customize retry behavior.
78
+ */
79
+ async function retryAsync(operation, maxRetries = 3, baseDelay = 1000, shouldRetry) {
80
+ let lastError;
81
+ // Default shouldRetry: don't retry on 4xx errors (client errors).
82
+ // Checks BOTH `error.status` (flat shape from handleHttpError / fetch
83
+ // clients) AND `error.response.status` (axios-style shape) so neither
84
+ // representation can leak a client error into the retry loop.
85
+ const defaultShouldRetry = (error) => {
86
+ const status = extractHttpStatus(error);
87
+ if (status !== undefined && status >= 400 && status < 500) {
88
+ return false;
89
+ }
90
+ return true;
91
+ };
92
+ const retryCheck = shouldRetry || defaultShouldRetry;
93
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
94
+ try {
95
+ return await operation();
96
+ }
97
+ catch (error) {
98
+ lastError = error;
99
+ if (attempt === maxRetries) {
100
+ break;
101
+ }
102
+ if (!retryCheck(error)) {
103
+ break;
104
+ }
105
+ // Calculate delay with exponential backoff and jitter
106
+ const delay = baseDelay * Math.pow(2, attempt) + Math.random() * 1000;
107
+ await new Promise(resolve => setTimeout(resolve, delay));
108
+ }
109
+ }
110
+ throw lastError;
111
+ }
112
+ /**
113
+ * Debounce async function calls
114
+ */
115
+ function debounceAsync(func, delay) {
116
+ let timeoutId;
117
+ return (...args) => {
118
+ return new Promise((resolve, reject) => {
119
+ clearTimeout(timeoutId);
120
+ timeoutId = setTimeout(async () => {
121
+ try {
122
+ const result = await func(...args);
123
+ resolve(result);
124
+ }
125
+ catch (error) {
126
+ reject(error);
127
+ }
128
+ }, delay);
129
+ });
130
+ };
131
+ }
132
+ /**
133
+ * Throttle async function calls
134
+ */
135
+ function throttleAsync(func, limit, interval) {
136
+ let inThrottle = false;
137
+ let lastPromise = null;
138
+ return (...args) => {
139
+ if (inThrottle) {
140
+ return lastPromise;
141
+ }
142
+ inThrottle = true;
143
+ lastPromise = func(...args);
144
+ setTimeout(() => {
145
+ inThrottle = false;
146
+ }, interval);
147
+ return lastPromise;
148
+ };
149
+ }
150
+ /**
151
+ * Execute async operations sequentially with progress tracking
152
+ */
153
+ async function sequentialWithProgress(operations, onProgress) {
154
+ const results = [];
155
+ for (let i = 0; i < operations.length; i++) {
156
+ const result = await operations[i]();
157
+ results.push(result);
158
+ onProgress?.(i + 1, operations.length);
159
+ }
160
+ return results;
161
+ }
162
+ /**
163
+ * Batch async operations
164
+ */
165
+ async function batchAsync(items, batchSize, processor) {
166
+ for (let i = 0; i < items.length; i += batchSize) {
167
+ const batch = items.slice(i, i + batchSize);
168
+ await processor(batch);
169
+ }
170
+ }
171
+ /**
172
+ * Create a cancellable async operation
173
+ */
174
+ function createCancellableAsync(operation) {
175
+ let abortController = null;
176
+ return {
177
+ execute: async () => {
178
+ abortController = new AbortController();
179
+ return await operation(abortController.signal);
180
+ },
181
+ cancel: () => {
182
+ abortController?.abort();
183
+ }
184
+ };
185
+ }
186
+ /**
187
+ * Timeout wrapper for async operations
188
+ */
189
+ async function withTimeout(operation, timeoutMs, timeoutMessage) {
190
+ const timeoutPromise = new Promise((_, reject) => {
191
+ setTimeout(() => {
192
+ reject(new Error(timeoutMessage || `Operation timed out after ${timeoutMs}ms`));
193
+ }, timeoutMs);
194
+ });
195
+ return Promise.race([operation, timeoutPromise]);
196
+ }
197
+ /**
198
+ * Execute async operation with loading state
199
+ */
200
+ async function withLoadingState(operation, setLoading) {
201
+ setLoading(true);
202
+ try {
203
+ return await operation();
204
+ }
205
+ finally {
206
+ setLoading(false);
207
+ }
208
+ }
209
+ /**
210
+ * Create a promise that resolves after a delay
211
+ */
212
+ const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
213
+ exports.delay = delay;
214
+ /**
215
+ * Execute async operation with retry on specific errors
216
+ */
217
+ async function retryOnError(operation, retryableErrors, maxRetries = 3) {
218
+ return retryAsync(operation, maxRetries, 1000, (error) => {
219
+ const errorCode = error?.code || error?.status || error?.message;
220
+ return retryableErrors.includes(errorCode);
221
+ });
222
+ }