@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,56 @@
1
+ /**
2
+ * The inference API, reached with whatever bearer this session already holds
3
+ * (issue #972, workstream 15).
4
+ *
5
+ * ```typescript
6
+ * const models = await oxyServices.inference().listModels();
7
+ * ```
8
+ *
9
+ * One method, and it is a FACTORY rather than a set of inference methods on
10
+ * `OxyServices`. The calls themselves live once, in
11
+ * {@link OxyInferenceClient} — which an external developer holding only an
12
+ * `oxy_sk_…` machine key constructs directly, with no Oxy session anywhere in
13
+ * the picture. Declaring the same calls a second time here would give the
14
+ * ecosystem two spellings of one request, and only one of them would stay
15
+ * correct.
16
+ *
17
+ * This is the reasoning `createLinkedClient` is already built on: the plumbing
18
+ * that binds an Oxy bearer to a client belongs in core, once, rather than in
19
+ * each app.
20
+ *
21
+ * The credential is a FUNCTION, not the current token: a session bearer rotates
22
+ * on refresh and on account switch, and a client that captured one at
23
+ * construction would start answering 401 an hour into the process's life.
24
+ */
25
+ import { OxyInferenceClient } from '../inference/OxyInferenceClient.js';
26
+ export function OxyServicesInferenceMixin(Base) {
27
+ return class extends Base {
28
+ constructor() {
29
+ super(...arguments);
30
+ /** @internal Memoized so repeated calls return one object identity. */
31
+ this._inferenceClient = null;
32
+ }
33
+ /**
34
+ * The inference client for this session.
35
+ *
36
+ * Bound to this instance's base URL and to `getAccessToken()`, so it
37
+ * follows every refresh, sign-in and account switch without being
38
+ * rebuilt.
39
+ *
40
+ * A service-authenticated process wants a different credential and
41
+ * builds {@link OxyInferenceClient} directly:
42
+ * `new OxyInferenceClient({ credential: () => oxy.getServiceToken() })`.
43
+ * The mint is asynchronous and cached, which is exactly what a
44
+ * credential function is for.
45
+ */
46
+ inference() {
47
+ if (this._inferenceClient === null) {
48
+ this._inferenceClient = new OxyInferenceClient({
49
+ baseURL: this.getBaseURL(),
50
+ credential: () => this.getAccessToken(),
51
+ });
52
+ }
53
+ return this._inferenceClient;
54
+ }
55
+ };
56
+ }
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Language Methods Mixin
3
+ */
4
+ import { normalizeLocale, getPrimaryLanguage, getLanguageMetadata, getLanguageName, getNativeLanguageName } from '../utils/languageUtils.js';
5
+ import { loadAsyncStorage } from '@oxy.so/protocol';
6
+ import { logger } from '../logger/index.js';
7
+ export function OxyServicesLanguageMixin(Base) {
8
+ return class extends Base {
9
+ constructor(...args) {
10
+ super(...args);
11
+ }
12
+ /**
13
+ * Get appropriate storage for the platform (similar to DeviceManager)
14
+ */
15
+ async getStorage() {
16
+ const isReactNative = typeof navigator !== 'undefined' && navigator.product === 'ReactNative';
17
+ if (isReactNative) {
18
+ try {
19
+ // `loadAsyncStorage` is per-platform: the RN variant statically imports
20
+ // @react-native-async-storage/async-storage, the default variant throws
21
+ // (never called outside RN because of the `isReactNative` gate above).
22
+ const asyncStorageModule = await loadAsyncStorage();
23
+ const storage = asyncStorageModule.default;
24
+ return {
25
+ getItem: storage.getItem.bind(storage),
26
+ setItem: storage.setItem.bind(storage),
27
+ removeItem: storage.removeItem.bind(storage),
28
+ };
29
+ }
30
+ catch (error) {
31
+ logger.error('AsyncStorage not available in React Native', error, { component: 'OxyServices.language' });
32
+ throw new Error('AsyncStorage is required in React Native environment');
33
+ }
34
+ }
35
+ else {
36
+ // Use localStorage for web
37
+ return {
38
+ getItem: async (key) => {
39
+ if (typeof window !== 'undefined' && window.localStorage) {
40
+ return localStorage.getItem(key);
41
+ }
42
+ return null;
43
+ },
44
+ setItem: async (key, value) => {
45
+ if (typeof window !== 'undefined' && window.localStorage) {
46
+ localStorage.setItem(key, value);
47
+ }
48
+ },
49
+ removeItem: async (key) => {
50
+ if (typeof window !== 'undefined' && window.localStorage) {
51
+ localStorage.removeItem(key);
52
+ }
53
+ }
54
+ };
55
+ }
56
+ }
57
+ /**
58
+ * Get the current locale from the user profile or local storage.
59
+ * @param storageKeyPrefix - Optional prefix for storage key (default: 'oxy_session')
60
+ * @returns The current BCP-47 locale (e.g., 'en-US') or null if not set
61
+ */
62
+ async getCurrentLanguage(storageKeyPrefix = 'oxy_session') {
63
+ try {
64
+ // First try the authenticated user's primary account locale.
65
+ try {
66
+ const user = await this.getCurrentUser();
67
+ const primary = getPrimaryLanguage(user);
68
+ if (primary) {
69
+ return primary;
70
+ }
71
+ }
72
+ catch {
73
+ // Not authenticated or the profile fetch failed — fall through to the
74
+ // locally stored preference below.
75
+ }
76
+ // Fall back to the locally stored locale preference.
77
+ const storage = await this.getStorage();
78
+ const storageKey = `${storageKeyPrefix}_language`;
79
+ const storedLanguage = await storage.getItem(storageKey);
80
+ if (storedLanguage) {
81
+ return normalizeLocale(storedLanguage) ?? storedLanguage;
82
+ }
83
+ return null;
84
+ }
85
+ catch (error) {
86
+ logger.warn('Failed to get current language', { component: 'OxyServices.language' }, error);
87
+ return null;
88
+ }
89
+ }
90
+ /**
91
+ * Get the current language with metadata (name, nativeName, etc.)
92
+ * @param storageKeyPrefix - Optional prefix for storage key (default: 'oxy_session')
93
+ * @returns Language metadata object or null if not set
94
+ */
95
+ async getCurrentLanguageMetadata(storageKeyPrefix = 'oxy_session') {
96
+ const languageCode = await this.getCurrentLanguage(storageKeyPrefix);
97
+ return getLanguageMetadata(languageCode);
98
+ }
99
+ /**
100
+ * Get the current language name (e.g., 'English')
101
+ * @param storageKeyPrefix - Optional prefix for storage key (default: 'oxy_session')
102
+ * @returns Language name or null if not set
103
+ */
104
+ async getCurrentLanguageName(storageKeyPrefix = 'oxy_session') {
105
+ const languageCode = await this.getCurrentLanguage(storageKeyPrefix);
106
+ if (!languageCode)
107
+ return null;
108
+ return getLanguageName(languageCode);
109
+ }
110
+ /**
111
+ * Get the current native language name (e.g., 'Español')
112
+ * @param storageKeyPrefix - Optional prefix for storage key (default: 'oxy_session')
113
+ * @returns Native language name or null if not set
114
+ */
115
+ async getCurrentNativeLanguageName(storageKeyPrefix = 'oxy_session') {
116
+ const languageCode = await this.getCurrentLanguage(storageKeyPrefix);
117
+ if (!languageCode)
118
+ return null;
119
+ return getNativeLanguageName(languageCode);
120
+ }
121
+ };
122
+ }
@@ -0,0 +1,69 @@
1
+ import { buildUrl } from '../utils/apiUtils.js';
2
+ /**
3
+ * Maximum number of URLs sent per `POST /links/previews` request. Matches the
4
+ * server-side batch cap (`linkPreviewBatchRequestSchema`'s `.max(50)`); larger
5
+ * inputs are split into multiple chunked calls and the result maps merged,
6
+ * mirroring how `getUsersByIds` chunks at 100.
7
+ */
8
+ const LINK_PREVIEWS_CHUNK_SIZE = 50;
9
+ export function OxyServicesLinksMixin(Base) {
10
+ return class extends Base {
11
+ constructor(...args) {
12
+ super(...args);
13
+ }
14
+ /**
15
+ * Resolve a single link preview via `GET /links/preview?url=<encoded>&wait=0|1`.
16
+ *
17
+ * @param url - The URL to unfurl. Sent percent-encoded in the query string.
18
+ * @param opts.wait - When `true`, asks the server to resolve synchronously
19
+ * (`wait=1`) instead of returning a `'pending'` placeholder for a
20
+ * first-seen URL. Defaults to `false` (`wait=0`).
21
+ *
22
+ * Not cached at the SDK layer: a `'pending'` result can become `'resolved'`
23
+ * on a later read, so caching here would serve the stale placeholder.
24
+ */
25
+ async getLinkPreview(url, opts) {
26
+ try {
27
+ const path = buildUrl('/links/preview', { url, wait: opts?.wait ? 1 : 0 });
28
+ return await this.makeRequest('GET', path, undefined, { cache: false });
29
+ }
30
+ catch (error) {
31
+ throw this.handleError(error);
32
+ }
33
+ }
34
+ /**
35
+ * Resolve multiple link previews via `POST /links/previews` (body `{ urls }`).
36
+ *
37
+ * Inputs are de-duplicated and split into chunks of {@link LINK_PREVIEWS_CHUNK_SIZE}
38
+ * (the server-side cap). Chunks run concurrently and their result maps are
39
+ * merged into a single result keyed by the REQUESTED url (the exact string
40
+ * passed in `urls`) — matching the batch contract — so a caller can always
41
+ * look its own input back up.
42
+ *
43
+ * `makeRequest` unwraps the API's top-level `{ data }` envelope (same as
44
+ * `getUsersByIds`'s `makeServiceRequest<User[]>`), so each chunk response is
45
+ * already the `Record<url, LinkPreview>` map — merge it directly.
46
+ *
47
+ * An empty / whitespace-only input resolves immediately with `{}` and
48
+ * performs no network call. A failure in any chunk surfaces (via
49
+ * `handleError`) rather than being swallowed.
50
+ */
51
+ async getLinkPreviews(urls) {
52
+ const uniqueUrls = Array.from(new Set(urls.filter((u) => typeof u === 'string' && u.trim().length > 0)));
53
+ if (uniqueUrls.length === 0) {
54
+ return {};
55
+ }
56
+ const chunks = [];
57
+ for (let i = 0; i < uniqueUrls.length; i += LINK_PREVIEWS_CHUNK_SIZE) {
58
+ chunks.push(uniqueUrls.slice(i, i + LINK_PREVIEWS_CHUNK_SIZE));
59
+ }
60
+ try {
61
+ const responses = await Promise.all(chunks.map((chunk) => this.makeRequest('POST', '/links/previews', { urls: chunk }, { cache: false })));
62
+ return responses.reduce((merged, response) => Object.assign(merged, response ?? {}), {});
63
+ }
64
+ catch (error) {
65
+ throw this.handleError(error);
66
+ }
67
+ }
68
+ };
69
+ }
@@ -0,0 +1,40 @@
1
+ export function OxyServicesLocationMixin(Base) {
2
+ return class extends Base {
3
+ constructor(...args) {
4
+ super(...args);
5
+ }
6
+ /**
7
+ * Update user location
8
+ * @param latitude - Latitude coordinate
9
+ * @param longitude - Longitude coordinate
10
+ * @returns Location update result
11
+ */
12
+ async updateLocation(latitude, longitude) {
13
+ try {
14
+ return await this.makeRequest('POST', '/location', {
15
+ latitude,
16
+ longitude
17
+ }, { cache: false });
18
+ }
19
+ catch (error) {
20
+ throw this.handleError(error);
21
+ }
22
+ }
23
+ /**
24
+ * Get nearby users
25
+ * @param radius - Optional search radius in meters
26
+ * @returns Array of nearby users
27
+ */
28
+ async getNearbyUsers(radius) {
29
+ try {
30
+ const params = radius ? { radius } : undefined;
31
+ return await this.makeRequest('GET', '/location/nearby', params, {
32
+ cache: false, // Don't cache location data - always get fresh data
33
+ });
34
+ }
35
+ catch (error) {
36
+ throw this.handleError(error);
37
+ }
38
+ }
39
+ };
40
+ }
@@ -0,0 +1,172 @@
1
+ import { SignatureService } from '../crypto/signatureService.js';
2
+ import { buildUserDid } from './OxyServices.identity.js';
3
+ import { CACHE_TIMES } from './mixinHelpers.js';
4
+ /**
5
+ * AtProto-style collection (NSID) for a user-node registration record — matches
6
+ * the server's `NODE_COLLECTION`. A user has exactly one node, so the record is
7
+ * keyed by the constant {@link NODE_RKEY} (last-writer-wins): re-registering
8
+ * over-writes the single `self` record rather than appending a second node.
9
+ */
10
+ const NODE_COLLECTION = 'app.oxy.node';
11
+ /**
12
+ * The AtProto-style record key for the single node registration — matches the
13
+ * server's `NODE_RKEY`. Constant (`'self'`) because a user has one node.
14
+ */
15
+ const NODE_RKEY = 'self';
16
+ /**
17
+ * Cache-key prefix of every node read (`GET /nodes/me`). Swept after a
18
+ * register / revoke / managed-provision so a re-read reflects the new node
19
+ * (or its absence) instead of a stale cached one. The identity tag is a key
20
+ * SUFFIX, so this prefix invalidates the resource for every cached identity.
21
+ */
22
+ const NODES_CACHE_PREFIX = 'GET:/nodes/';
23
+ /**
24
+ * Cache-key prefix of the current user's `GET /users/me`. Swept alongside the
25
+ * node caches because the user's derived DID document embeds an `#oxy-node`
26
+ * service entry derived from the node row, so registering / revoking / managing
27
+ * a node changes user-facing identity state.
28
+ */
29
+ const USERS_ME_CACHE_PREFIX = 'GET:/users/me';
30
+ export function OxyServicesNodesMixin(Base) {
31
+ return class extends Base {
32
+ constructor(...args) {
33
+ super(...args);
34
+ }
35
+ /**
36
+ * Register (or re-register) the caller's SELF-HOSTED personal data node.
37
+ *
38
+ * Builds the `{ endpoint, nodePublicKey, mode }` node record, signs a v2
39
+ * envelope on the caller's own per-subject hash chain (fetching the current
40
+ * chain head first so `seq`/`prev` are never stale), and publishes it through
41
+ * the EXISTING `POST /identity/records` path — which verifies the signature
42
+ * and materializes the operational node cache as a side effect. The signed
43
+ * record (not this call) is the authority; re-registering over-writes the
44
+ * single `self` record (last-writer-wins).
45
+ *
46
+ * NATIVE-ONLY: signs with the on-device identity key (throws on web / when no
47
+ * identity or no authenticated user — the guard fires before any network).
48
+ * `mode` defaults to `'pull'`. After a successful publish the node + `/users/me`
49
+ * GET caches are swept, then the freshly-materialized status is returned.
50
+ *
51
+ * Throws if the chain record stored but the server skipped materialization
52
+ * (e.g. a malformed endpoint the server rejected) — an unexpected state rather
53
+ * than a silent `null`.
54
+ *
55
+ * @param input - The node's endpoint, public key, and optional transport mode.
56
+ */
57
+ async registerNode(input) {
58
+ try {
59
+ const userId = this.getCurrentUserId();
60
+ if (!userId) {
61
+ throw new Error('No authenticated user — sign in before registering a node.');
62
+ }
63
+ const subject = buildUserDid(userId);
64
+ const record = {
65
+ endpoint: input.endpoint,
66
+ nodePublicKey: input.nodePublicKey,
67
+ mode: input.mode ?? 'pull',
68
+ };
69
+ // Fetch the caller's chain head fresh (uncached) so seq/prev are correct
70
+ // → no bad_seq / chain_fork — exactly as the identity/civic signers do.
71
+ const head = await this.makeRequest('GET', `/identity/records/${encodeURIComponent(userId)}/chain/head`, undefined, { cache: false });
72
+ const envelope = await SignatureService.signRecordV2('node', subject, record, {
73
+ seq: head.seq + 1,
74
+ prev: head.headRecordId,
75
+ collection: NODE_COLLECTION,
76
+ rkey: NODE_RKEY,
77
+ });
78
+ await this.makeRequest('POST', '/identity/records', envelope, { cache: false });
79
+ this._sweepNodeCaches();
80
+ const node = await this.getMyNode();
81
+ if (!node) {
82
+ throw new Error('Node registration stored but the node could not be materialized.');
83
+ }
84
+ return node;
85
+ }
86
+ catch (error) {
87
+ throw this.handleError(error);
88
+ }
89
+ }
90
+ /**
91
+ * Read the caller's registered node status (`GET /nodes/me`), or `null` when
92
+ * the caller has no node. Auth required; short-TTL cached (the liveness badge
93
+ * is background-maintained) and swept after the caller's own
94
+ * register / revoke / managed-provision.
95
+ */
96
+ async getMyNode() {
97
+ try {
98
+ const res = await this.makeRequest('GET', '/nodes/me', undefined, { cache: true, cacheTTL: CACHE_TIMES.SHORT });
99
+ return res.node ?? null;
100
+ }
101
+ catch (error) {
102
+ throw this.handleError(error);
103
+ }
104
+ }
105
+ /**
106
+ * Revoke the caller's node registration (`DELETE /nodes/me`). The node flips
107
+ * to `revoked` server-side (leaving the DID document and liveness sweeps).
108
+ * Auth required; the node + `/users/me` GET caches are swept on success.
109
+ *
110
+ * Maps the server's `{ success }` to the SDK's `{ revoked }` semantic.
111
+ */
112
+ async removeMyNode() {
113
+ try {
114
+ const res = await this.makeRequest('DELETE', '/nodes/me', undefined, { cache: false });
115
+ this._sweepNodeCaches();
116
+ return { revoked: res.success === true };
117
+ }
118
+ catch (error) {
119
+ throw this.handleError(error);
120
+ }
121
+ }
122
+ /**
123
+ * Provision (or refresh) an Oxy-operated MANAGED vault for the caller
124
+ * (`POST /nodes/managed`) — the "Create your vault" convenience for
125
+ * non-technical users. Oxy custodial-signs the node registration onto the
126
+ * caller's chain and returns the materialized node (`managed:true,
127
+ * controller:'oxy'`). Idempotent server-side. Auth required; the owner id is
128
+ * resolved from the session, never the body. The node + `/users/me` GET caches
129
+ * are swept on success.
130
+ */
131
+ async provisionManagedVault() {
132
+ try {
133
+ const res = await this.makeRequest('POST', '/nodes/managed', undefined, { cache: false });
134
+ this._sweepNodeCaches();
135
+ return res.node;
136
+ }
137
+ catch (error) {
138
+ throw this.handleError(error);
139
+ }
140
+ }
141
+ /**
142
+ * Send an ingest HINT that a user's node has new records
143
+ * (`POST /nodes/ingest/notify/:userId`). Unauthenticated by design and
144
+ * fire-and-forget on the server (it only schedules a background re-pull of the
145
+ * named user's OWN node, then fully re-verifies — a notify can never inject
146
+ * data), so this resolves once the 202 hint is accepted and returns nothing.
147
+ *
148
+ * @param userId - The user whose node may have new records. URL-encoded.
149
+ */
150
+ async notifyNodeIngest(userId) {
151
+ try {
152
+ await this.makeRequest('POST', `/nodes/ingest/notify/${encodeURIComponent(userId)}`, undefined, { cache: false });
153
+ }
154
+ catch (error) {
155
+ throw this.handleError(error);
156
+ }
157
+ }
158
+ /**
159
+ * Sweep the GET caches a node mutation invalidates: every node read
160
+ * (`GET:/nodes/`) so a re-read reflects the new node / its absence, and
161
+ * `/users/me` because the user's derived DID document embeds an `#oxy-node`
162
+ * service entry that changes on register / revoke / manage. Public rather
163
+ * than `private` because mixins compose into an exported anonymous class
164
+ * where TypeScript cannot represent a private member in the emitted
165
+ * declaration file (TS4094) — mirrors the civic / identity cache sweepers.
166
+ */
167
+ _sweepNodeCaches() {
168
+ this.clearCacheByPrefix(NODES_CACHE_PREFIX);
169
+ this.clearCacheByPrefix(USERS_ME_CACHE_PREFIX);
170
+ }
171
+ };
172
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Shape of an Expo push token: `ExponentPushToken[…]` (what
3
+ * `getExpoPushTokenAsync()` returns today) or the equivalent `ExpoPushToken[…]`
4
+ * spelling. Deliberately plain ASCII — `@oxy.so/core` ships to Hermes, where
5
+ * Unicode property escapes throw at runtime.
6
+ */
7
+ const EXPO_PUSH_TOKEN_PATTERN = /^Expo(nent)?PushToken\[[^[\]\s]+\]$/;
8
+ export function OxyServicesNotificationsMixin(Base) {
9
+ return class extends Base {
10
+ /**
11
+ * Register this installation's **Expo** push token for the authenticated
12
+ * identity (`POST /notifications/push-token`, bearer required).
13
+ *
14
+ * Idempotent server-side: re-registering the same token for the same
15
+ * identity refreshes the existing row rather than creating a duplicate, so
16
+ * callers can safely re-register on every cold boot.
17
+ *
18
+ * @throws When `expoPushToken` is not an Expo push token — a raw APNs/FCM
19
+ * device token fails here rather than becoming a silently undeliverable
20
+ * registration.
21
+ */
22
+ async registerPushToken(input) {
23
+ try {
24
+ if (!EXPO_PUSH_TOKEN_PATTERN.test(input.expoPushToken)) {
25
+ throw new Error('registerPushToken expects an Expo push token ("ExponentPushToken[...]", from getExpoPushTokenAsync). ' +
26
+ 'A raw APNs/FCM device token from getDevicePushTokenAsync cannot be delivered to.');
27
+ }
28
+ await this.makeRequest('POST', '/notifications/push-token', {
29
+ token: input.expoPushToken,
30
+ platform: input.platform,
31
+ // Omitted entirely when absent so the body stays exactly what the
32
+ // endpoint has always received (the server reads presence).
33
+ ...(input.deviceId ? { deviceId: input.deviceId } : {}),
34
+ ...(input.clientId ? { clientId: input.clientId } : {}),
35
+ }, { cache: false });
36
+ }
37
+ catch (error) {
38
+ throw this.handleError(error);
39
+ }
40
+ }
41
+ /**
42
+ * Retire an **Expo** push token for the authenticated identity
43
+ * (`DELETE /notifications/push-token`, bearer required).
44
+ *
45
+ * Call it when the user turns notifications off, when the vault identity is
46
+ * replaced, and on sign-out — otherwise the installation keeps receiving
47
+ * approval requests for an identity it no longer holds.
48
+ *
49
+ * @param expoPushToken - The exact token previously registered.
50
+ */
51
+ async unregisterPushToken(expoPushToken) {
52
+ try {
53
+ await this.makeRequest('DELETE', '/notifications/push-token', { token: expoPushToken }, { cache: false });
54
+ }
55
+ catch (error) {
56
+ throw this.handleError(error);
57
+ }
58
+ }
59
+ };
60
+ }
@@ -0,0 +1,155 @@
1
+ import { CACHE_TIMES } from './mixinHelpers.js';
2
+ export function OxyServicesPaymentMixin(Base) {
3
+ return class extends Base {
4
+ constructor(...args) {
5
+ super(...args);
6
+ }
7
+ /**
8
+ * Create a payment
9
+ * @param data - Payment data
10
+ * @returns Created payment object
11
+ */
12
+ async createPayment(data) {
13
+ try {
14
+ return await this.makeRequest('POST', '/payments', data, { cache: false });
15
+ }
16
+ catch (error) {
17
+ throw this.handleError(error);
18
+ }
19
+ }
20
+ /**
21
+ * Get payment by ID
22
+ * @param paymentId - The payment ID
23
+ * @returns Payment object
24
+ */
25
+ async getPayment(paymentId) {
26
+ try {
27
+ return await this.makeRequest('GET', `/payments/${paymentId}`, undefined, {
28
+ cache: true,
29
+ cacheTTL: CACHE_TIMES.LONG,
30
+ });
31
+ }
32
+ catch (error) {
33
+ throw this.handleError(error);
34
+ }
35
+ }
36
+ /**
37
+ * Get user payments
38
+ * @returns Array of user payments
39
+ */
40
+ async getUserPayments() {
41
+ try {
42
+ return await this.makeRequest('GET', '/payments/user', undefined, {
43
+ cache: false, // Don't cache user payments - always get fresh data
44
+ });
45
+ }
46
+ catch (error) {
47
+ throw this.handleError(error);
48
+ }
49
+ }
50
+ /**
51
+ * Get user subscription
52
+ * @param userId - The user ID
53
+ * @returns Subscription object
54
+ */
55
+ async getSubscription(userId) {
56
+ try {
57
+ return await this.makeRequest('GET', `/subscription/${userId}`, undefined, {
58
+ cache: true,
59
+ cacheTTL: CACHE_TIMES.MEDIUM,
60
+ });
61
+ }
62
+ catch (error) {
63
+ throw this.handleError(error);
64
+ }
65
+ }
66
+ /**
67
+ * Get current user's subscription
68
+ * @returns Subscription object
69
+ */
70
+ async getCurrentUserSubscription() {
71
+ try {
72
+ const userId = this.getCurrentUserId();
73
+ if (!userId) {
74
+ throw new Error('User not authenticated');
75
+ }
76
+ return await this.getSubscription(userId);
77
+ }
78
+ catch (error) {
79
+ throw this.handleError(error);
80
+ }
81
+ }
82
+ /**
83
+ * Get user wallet
84
+ * @param userId - The user ID
85
+ * @returns Wallet object with balance
86
+ */
87
+ async getWallet(userId) {
88
+ try {
89
+ return await this.makeRequest('GET', `/wallet/${userId}`, undefined, {
90
+ cache: true,
91
+ cacheTTL: CACHE_TIMES.SHORT, // Cache wallet for short time as balance changes frequently
92
+ });
93
+ }
94
+ catch (error) {
95
+ throw this.handleError(error);
96
+ }
97
+ }
98
+ /**
99
+ * Get current user's wallet
100
+ * @returns Wallet object with balance
101
+ */
102
+ async getCurrentUserWallet() {
103
+ try {
104
+ const userId = this.getCurrentUserId();
105
+ if (!userId) {
106
+ throw new Error('User not authenticated');
107
+ }
108
+ return await this.getWallet(userId);
109
+ }
110
+ catch (error) {
111
+ throw this.handleError(error);
112
+ }
113
+ }
114
+ /**
115
+ * Get wallet transaction history
116
+ * @param userId - The user ID
117
+ * @param options - Pagination options
118
+ * @returns Transaction history
119
+ */
120
+ async getWalletTransactions(userId, options) {
121
+ try {
122
+ const params = new URLSearchParams();
123
+ if (options?.limit)
124
+ params.append('limit', options.limit.toString());
125
+ if (options?.offset)
126
+ params.append('offset', options.offset.toString());
127
+ const queryString = params.toString();
128
+ const url = `/wallet/transactions/${userId}${queryString ? `?${queryString}` : ''}`;
129
+ return await this.makeRequest('GET', url, undefined, {
130
+ cache: false, // Don't cache transactions - always get fresh data
131
+ });
132
+ }
133
+ catch (error) {
134
+ throw this.handleError(error);
135
+ }
136
+ }
137
+ /**
138
+ * Get current user's wallet transaction history
139
+ * @param options - Pagination options
140
+ * @returns Transaction history
141
+ */
142
+ async getCurrentUserWalletTransactions(options) {
143
+ try {
144
+ const userId = this.getCurrentUserId();
145
+ if (!userId) {
146
+ throw new Error('User not authenticated');
147
+ }
148
+ return await this.getWalletTransactions(userId, options);
149
+ }
150
+ catch (error) {
151
+ throw this.handleError(error);
152
+ }
153
+ }
154
+ };
155
+ }