@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,139 @@
1
+ /**
2
+ * OxyServices - Unified client for Oxy API and Oxy Cloud
3
+ *
4
+ * # Usage Examples
5
+ *
6
+ * ## Browser (ESM/TypeScript)
7
+ *
8
+ * ```typescript
9
+ * import { OxyServices } from './core/OxyServices';
10
+ *
11
+ * const oxy = new OxyServices({
12
+ * baseURL: 'https://api.oxy.so',
13
+ * cloudURL: 'https://cloud.oxy.so',
14
+ * });
15
+ *
16
+ * // Authenticate and fetch user
17
+ * await oxy.setTokens('ACCESS_TOKEN');
18
+ * const user = await oxy.getCurrentUser();
19
+ *
20
+ * // Upload a file (browser File API)
21
+ * const fileInput = document.querySelector('input[type=file]');
22
+ * const file = fileInput.files[0];
23
+ * await oxy.uploadRawFile(file);
24
+ *
25
+ * // Get a file download URL for <img src>
26
+ * const url = oxy.getFileDownloadUrl('fileId', 'thumb');
27
+ * ```
28
+ *
29
+ * ## Node.js (CommonJS/TypeScript)
30
+ *
31
+ * ```typescript
32
+ * import { OxyServices } from './core/OxyServices';
33
+ * import fs from 'fs';
34
+ *
35
+ * const oxy = new OxyServices({
36
+ * baseURL: 'https://api.oxy.so',
37
+ * cloudURL: 'https://cloud.oxy.so',
38
+ * });
39
+ *
40
+ * // Authenticate and fetch user
41
+ * await oxy.setTokens('ACCESS_TOKEN');
42
+ * const user = await oxy.getCurrentUser();
43
+ *
44
+ * // Upload a file (Node.js Buffer)
45
+ * const buffer = fs.readFileSync('myfile.png');
46
+ * const blob = new Blob([buffer]);
47
+ * await oxy.uploadRawFile(blob, { filename: 'myfile.png' });
48
+ *
49
+ * // Get a file download URL
50
+ * const url = oxy.getFileDownloadUrl('fileId');
51
+ * ```
52
+ *
53
+ * ## Configuration
54
+ * - `baseURL`: Oxy API endpoint (e.g., https://api.oxy.so)
55
+ * - `cloudURL`: Oxy Cloud/CDN endpoint (e.g., https://cloud.oxy.so)
56
+ *
57
+ * See method JSDoc for more details and options.
58
+ */
59
+ import { type LinkedHttpClient, type OxyConfig } from './OxyServices.base';
60
+ import { AssetUrlResolutionError, OxyAuthenticationError, OxyAuthenticationTimeoutError, ServiceAssetMetadataError } from './OxyServices.errors';
61
+ import { composeOxyServices } from './mixins';
62
+ /**
63
+ * OxyServices - Unified client library for interacting with the Oxy API
64
+ *
65
+ * This class provides all API functionality in one simple, easy-to-use interface.
66
+ *
67
+ * ## Architecture
68
+ * - **HttpService**: Unified HTTP service handling authentication, caching, deduplication, queuing, and retry
69
+ * - **OxyServices**: Provides high-level API methods
70
+ *
71
+ * ## Mixin Composition
72
+ * The class is composed using TypeScript mixins for better code organization:
73
+ * - **Base**: Core infrastructure (HTTP client, request management, error handling)
74
+ * - **Auth**: Authentication and session management
75
+ * - **User**: User profiles, follow, notifications
76
+ * - **Privacy**: Blocked and restricted users
77
+ * - **Language**: Language detection and metadata
78
+ * - **Payment**: Payment processing
79
+ * - **Reputation**: Reputation system (Oxy Trust)
80
+ * - **Assets**: File upload and asset management
81
+ * - **Accounts**: Unified account graph (tree, members, roles, bot credentials)
82
+ * and the applications owned within it (Application = OAuth client)
83
+ * - **Connected apps**: OAuth-consent surface (public app identity, grants)
84
+ * - **Location**: Location-based features
85
+ * - **Analytics**: Analytics tracking
86
+ * - **Devices**: Device management
87
+ * - **Utility**: Utility methods and Express middleware
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const oxy = new OxyServices({
92
+ * baseURL: 'https://api.oxy.so',
93
+ * cloudURL: 'https://cloud.oxy.so'
94
+ * });
95
+ * ```
96
+ */
97
+ declare const OxyServicesComposed: import("./mixins").ComposedOxyServicesConstructor;
98
+ export declare class OxyServices extends OxyServicesComposed {
99
+ constructor(config: OxyConfig);
100
+ }
101
+ export interface OxyServices extends InstanceType<ReturnType<typeof composeOxyServices>> {
102
+ createLinkedClient(config: OxyConfig): LinkedHttpClient;
103
+ auth(options?: {
104
+ debug?: boolean;
105
+ onError?: (error: unknown) => unknown;
106
+ loadUser?: boolean;
107
+ optional?: boolean;
108
+ serviceTokenJwksUrl?: string;
109
+ jwtSecret?: string;
110
+ expectedIssuer?: string;
111
+ expectedAudience?: string;
112
+ }): (req: unknown, res: unknown, next: (err?: unknown) => void) => Promise<void>;
113
+ authSocket(options?: {
114
+ debug?: boolean;
115
+ }): (socket: unknown, next: (err?: Error) => void) => Promise<void>;
116
+ serviceAuth(options?: {
117
+ debug?: boolean;
118
+ serviceTokenJwksUrl?: string;
119
+ jwtSecret?: string;
120
+ expectedIssuer?: string;
121
+ expectedAudience?: string;
122
+ }): (req: unknown, res: unknown, next: (err?: unknown) => void) => Promise<void>;
123
+ requireScope(scope: string): (req: unknown, res: unknown, next: (err?: unknown) => void) => void;
124
+ assetUpdateVisibility(fileId: string, visibility: 'private' | 'public' | 'unlisted'): Promise<unknown>;
125
+ }
126
+ export { AssetUrlResolutionError, OxyAuthenticationError, OxyAuthenticationTimeoutError, ServiceAssetMetadataError };
127
+ /**
128
+ * Default Oxy Cloud URL — used when no `cloudURL` is provided to OxyServices.
129
+ */
130
+ export declare const OXY_CLOUD_URL = "https://cloud.oxy.so";
131
+ /**
132
+ * Export the default Oxy API URL (for documentation)
133
+ */
134
+ export declare const OXY_API_URL: string;
135
+ /**
136
+ * Pre-configured client instance for easy import
137
+ * Uses OXY_API_URL as baseURL and OXY_CLOUD_URL as cloudURL
138
+ */
139
+ export declare const oxyClient: OxyServices;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Custom error types for better error handling
3
+ */
4
+ export declare class OxyAuthenticationError extends Error {
5
+ readonly code: string;
6
+ readonly status: number;
7
+ constructor(message: string, code?: string, status?: number);
8
+ }
9
+ /**
10
+ * Thrown when an asset's authorized download URL cannot be resolved.
11
+ *
12
+ * `getFileDownloadUrlAsync` asks the API for a URL that is valid for the
13
+ * CALLER and the asset's actual visibility. When that resolution fails there is
14
+ * no honest fallback: the public CDN origin only serves `public` assets, so
15
+ * handing back `https://cloud.oxy.so/<id>` for an unresolved asset produces a
16
+ * hard 404 at render time and hides the real failure from the caller. This
17
+ * error surfaces the failure instead.
18
+ *
19
+ * The message and fields deliberately carry only the asset id, the requested
20
+ * variant and the HTTP status — never the resolved URL, which embeds a scoped
21
+ * media token.
22
+ *
23
+ * ## `status` lets a caller decide whether a CDN fallback is safe
24
+ *
25
+ * Core itself never falls back to the public CDN builder, because it has no
26
+ * knowledge of the asset's visibility and that URL is a guaranteed 404 for a
27
+ * private asset. A CALLER that knows an asset is public MAY choose to fall back
28
+ * to `getFileDownloadUrl(id, variant)` — but only for a TRANSIENT failure, not
29
+ * a definitive denial:
30
+ * - `status` 401/403/404 → definitive: the asset is private/denied/missing.
31
+ * Never CDN-fall-back — it will 404.
32
+ * - `status` undefined (network error) or 5xx → transient: resolution itself
33
+ * failed. If the caller independently knows the asset is public, a CDN
34
+ * fallback is defensible best-effort.
35
+ */
36
+ export declare class AssetUrlResolutionError extends Error {
37
+ readonly code = "ASSET_URL_UNRESOLVED";
38
+ readonly fileId: string;
39
+ readonly variant?: string;
40
+ readonly status?: number;
41
+ /**
42
+ * The underlying transport/API failure, when there was one. Declared on the
43
+ * class rather than relying on `Error.cause` because this package targets
44
+ * ES2020, where `cause` is not part of the `Error` type.
45
+ */
46
+ readonly cause?: unknown;
47
+ constructor(fileId: string, variant: string | undefined, status: number | undefined, cause?: unknown);
48
+ }
49
+ /**
50
+ * Thrown when one or more chunks of `getServiceAssetMetadataByIds` could not be
51
+ * resolved.
52
+ *
53
+ * Exists because for this endpoint a FAILED request and an ABSENT asset produce
54
+ * the same observable result. The server legitimately omits unknown/deleted ids,
55
+ * so callers are documented to map the response by `id` and treat a missing
56
+ * entry as "no such asset" — which means a chunk that 429s, times out or 5xxs
57
+ * reads as authoritative absence unless it is raised.
58
+ *
59
+ * That was not hypothetical: a metadata backfill counted every throttled asset
60
+ * as needing no update and exited 0, and the MTN signed-record builder embedded
61
+ * media with no content hash into records that are immutable once signed. Both
62
+ * paths reported success and wrote nothing.
63
+ *
64
+ * `unresolvedIds` carries every id in a failed chunk — not the subset the server
65
+ * would have omitted anyway, which is unknowable when the request never landed.
66
+ * A caller that wants best-effort passes `{ partial: true }` and never sees this.
67
+ */
68
+ export declare class ServiceAssetMetadataError extends Error {
69
+ readonly code = "SERVICE_ASSET_METADATA_UNRESOLVED";
70
+ /** Every id belonging to a chunk whose request failed. */
71
+ readonly unresolvedIds: string[];
72
+ /** HTTP statuses observed across the failed chunks (deduped, ascending). */
73
+ readonly statuses: number[];
74
+ /**
75
+ * The first underlying transport/API failure. Declared on the class rather
76
+ * than relying on `Error.cause` because this package targets ES2020, where
77
+ * `cause` is not part of the `Error` type.
78
+ */
79
+ readonly cause?: unknown;
80
+ constructor(unresolvedIds: string[], statuses: number[], cause?: unknown);
81
+ }
82
+ export declare class OxyAuthenticationTimeoutError extends OxyAuthenticationError {
83
+ constructor(operationName: string, timeoutMs: number);
84
+ }
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Device-first session cold boot for every consumer.
3
+ *
4
+ * On a fresh page load / app launch this resolves the device's session in a
5
+ * deterministic order, built on the pure `runColdBoot` primitive. It NEVER
6
+ * redirects to a login page: an unresolved boot ends in a signed-out state that
7
+ * the app renders with a "Sign in with Oxy" button.
8
+ *
9
+ * Ordered steps (first to yield a session wins):
10
+ * 1. `warm-token-plant` (web + native) — the fastest path: when the persisted
11
+ * store still holds a warm access token that is valid for more than the
12
+ * refresh lead window, plant it and yield the session with NO network
13
+ * round-trip. The background scheduler rotates it shortly after.
14
+ * 2. `device-secret-mint` (web + native) — the zero-cookie transport: when the
15
+ * origin persisted a `deviceId` + `deviceSecret`, mint a short access token
16
+ * with a single bearer-less POST to `/session/device/token` (no cookie, no
17
+ * navigation) and rotate the secret in-use.
18
+ * 3. `shared-device-adopt` (native, ACCOUNT mode) — this app has no credential
19
+ * of its own but a sibling official app already put one in the shared native
20
+ * slot: adopt it and mint. This is how a newly installed official app joins
21
+ * the device's existing session WITHOUT another QR and without ever touching
22
+ * the Commons private key.
23
+ * 4. `shared-key-signin` (native, ACCOUNT mode) — the legacy lane: re-mint by
24
+ * signing with the shared-keychain IDENTITY key. Retained as a recovery /
25
+ * compatibility path for devices whose apps have not yet published a shared
26
+ * device credential — OR `identity-key-signin` (IDENTITY mode) — re-mint
27
+ * from THIS device's primary identity key.
28
+ * 5. Signed out.
29
+ *
30
+ * Two session modes (see {@link RunSessionColdBootOptions.sessionMode}):
31
+ * - `account` (default) — the device's ACTIVE account owns the session. Every
32
+ * Oxy app but the identity vault boots this way; behaviour is unchanged.
33
+ * - `identity` — the owner of the local PRIMARY identity key owns the session,
34
+ * permanently, regardless of which account the device is switched to. Each
35
+ * step above is bound to the persisted identity pin, and the shared-keychain
36
+ * lane is replaced by the primary-key one (the shared slot is a CROSS-APP
37
+ * slot that may hold a different identity).
38
+ *
39
+ * ESM-safe (no `require()`); no react/react-native/expo imports.
40
+ */
41
+ import { type ColdBootOutcome } from '../utils/coldBoot';
42
+ import { type IdentityBinding } from '../session/identitySession';
43
+ import { type SharedDeviceCredentialStore } from '../session/sharedDeviceCredential';
44
+ import type { OxyServices } from '../OxyServices';
45
+ import type { AuthStateStore } from '../session/authStateStore';
46
+ import type { DeviceSessionState } from '@oxy.so/contracts';
47
+ /**
48
+ * Who owns the session this boot resolves.
49
+ *
50
+ * - `account` — the device's active account (every ordinary Oxy app).
51
+ * - `identity` — the owner of the device's primary identity key (the identity
52
+ * vault). Requires {@link RunSessionColdBootOptions.identity}.
53
+ */
54
+ export type SessionMode = 'account' | 'identity';
55
+ /** The winning session shape a cold-boot step reports. */
56
+ export interface DeviceBootSession {
57
+ sessionId: string;
58
+ userId: string;
59
+ accessToken: string;
60
+ /** Server state already returned by the mint; absent on warm-token restore. */
61
+ state?: DeviceSessionState;
62
+ }
63
+ /** Why a cold boot ended without a session. */
64
+ export type SignedOutReason = 'no_session' | 'error';
65
+ export interface RunSessionColdBootOptions {
66
+ oxy: OxyServices;
67
+ store: AuthStateStore;
68
+ /** Platform hints; default derived from `@oxy.so/core`'s platform detection. */
69
+ platform?: {
70
+ isWeb?: boolean;
71
+ isNative?: boolean;
72
+ };
73
+ /** Invoked with the winning session (token already planted). */
74
+ onSession?: (session: DeviceBootSession & {
75
+ via: string;
76
+ }) => void | Promise<void>;
77
+ /** Invoked when the boot ended signed out. */
78
+ onSignedOut?: (reason: SignedOutReason) => void | Promise<void>;
79
+ onStepError?: (id: string, error: unknown) => void;
80
+ /**
81
+ * HARD overall deadline (ms) for the whole ordered step chain, forwarded to
82
+ * {@link runColdBoot}. Defense-in-depth so a single non-settling network step
83
+ * (a black-hole network that neither connects nor rejects) can NEVER hang the
84
+ * boot — and therefore app routing — indefinitely. Inert on healthy loads
85
+ * (every step settles well under it); only trips on pathological networks.
86
+ * When omitted there is no overall deadline (unchanged behavior).
87
+ */
88
+ overallDeadlineMs?: number;
89
+ /**
90
+ * Invoked once per step abandoned because {@link overallDeadlineMs} expired
91
+ * before it settled. Forwarded to {@link runColdBoot}. Must not throw.
92
+ */
93
+ onStepDeadline?: (stepId: string) => void;
94
+ /**
95
+ * Best-effort connectivity hint. When it returns `true` the two NETWORK steps
96
+ * (`device-secret-mint`, `shared-key-signin`) are skipped — an offline device
97
+ * cannot mint, and attempting to would burn the whole deadline on a doomed
98
+ * request before routing settles. The pure-local `warm-token-plant` step is
99
+ * NEVER gated by this: an offline returning user with an unexpired persisted
100
+ * token must still boot authenticated. Only an EXPLICIT offline verdict should
101
+ * be returned; the caller resolves unknown/timeout to `false` (assume online)
102
+ * so a flaky probe can never falsely skip a real sign-in.
103
+ */
104
+ isOffline?: () => boolean;
105
+ /**
106
+ * Who owns the resolved session. Defaults to `'account'` — the device's active
107
+ * account — which is the behaviour every ordinary Oxy app has today and which
108
+ * this option leaves byte-for-byte unchanged.
109
+ *
110
+ * `'identity'` binds the boot to the owner of this device's PRIMARY identity
111
+ * key and REQUIRES {@link identity}. When it is missing the boot refuses to
112
+ * run any lane (an identity-bound client silently falling back to the device's
113
+ * active account is precisely the bug this mode exists to prevent) and
114
+ * resolves signed out.
115
+ */
116
+ sessionMode?: SessionMode;
117
+ /**
118
+ * The identity binding (pin store + key/signature access) used by
119
+ * `sessionMode: 'identity'`. Ignored in `'account'` mode.
120
+ */
121
+ identity?: IdentityBinding;
122
+ /**
123
+ * The cross-app native slot holding this device's shared DeviceSession
124
+ * credential, enabling the `shared-device-adopt` lane. Supplied by
125
+ * `@oxy.so/services` on native; absent on web, where each origin is its own
126
+ * device by design.
127
+ *
128
+ * IGNORED in `sessionMode: 'identity'`. The shared slot belongs to whichever
129
+ * principal signed in on this device; an identity-bound client must resolve
130
+ * its session from the local key alone, and adopting a device credential is
131
+ * exactly the drift that mode exists to prevent.
132
+ */
133
+ sharedDeviceCredential?: SharedDeviceCredentialStore;
134
+ }
135
+ /**
136
+ * Run the device-first cold boot. Resolves to the `runColdBoot` outcome and, as
137
+ * a side effect, invokes `onSession` (winning session, token already planted) or
138
+ * `onSignedOut` (no session).
139
+ */
140
+ export declare function runSessionColdBoot(opts: RunSessionColdBootOptions): Promise<ColdBootOutcome<DeviceBootSession>>;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Package version and metadata constants
3
+ * This file is auto-generated to avoid runtime dependency on package.json
4
+ */
5
+ export declare const packageInfo: {
6
+ readonly name: "@oxy.so/services";
7
+ readonly version: "5.2.1";
8
+ readonly description: "Reusable OxyHQ module to handle authentication, user management, reputation system (Oxy Trust) and more 🚀";
9
+ readonly main: "lib/commonjs/node/index.js";
10
+ readonly module: "lib/module/node/index.js";
11
+ readonly types: "lib/typescript/node/index.d.ts";
12
+ };
13
+ export declare const name: "@oxy.so/services", version: "5.2.1", description: "Reusable OxyHQ module to handle authentication, user management, reputation system (Oxy Trust) and more 🚀";
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Authenticated Encryption with Associated Data (XChaCha20-Poly1305)
3
+ *
4
+ * Pure-JS/TS AEAD via `@noble/ciphers` — identical behaviour on web, Node, and
5
+ * React Native with zero WebCrypto / native-module dependency. This replaces
6
+ * the `crypto.subtle`-based path (unreliable on React Native) for the Commons
7
+ * encrypted backup and device-to-device transfer flows.
8
+ *
9
+ * XChaCha20-Poly1305 is chosen over AES-GCM specifically for its 24-byte
10
+ * (192-bit) random nonce: the nonce space is large enough that random nonces
11
+ * never collide in practice, so callers do not need to maintain a per-key
12
+ * counter. The 16-byte Poly1305 tag is appended to the ciphertext by the
13
+ * underlying library and validated on decrypt.
14
+ *
15
+ * The optional Associated Data (AAD) is authenticated but NOT encrypted: it
16
+ * binds the ciphertext to its context (e.g. a backup version, a device id, a
17
+ * DID). Decryption fails if the key, nonce, ciphertext, OR aad differ from
18
+ * those used at encryption time.
19
+ *
20
+ * ESM/CJS safe: static `import` only, no `require()`.
21
+ */
22
+ import './polyfill';
23
+ /** Key length for XChaCha20-Poly1305, in bytes (256-bit). */
24
+ export declare const AEAD_KEY_LENGTH = 32;
25
+ /** Nonce length for XChaCha20-Poly1305, in bytes (192-bit). */
26
+ export declare const AEAD_NONCE_LENGTH = 24;
27
+ /** Ciphertext (Poly1305 tag appended) plus the random nonce used to produce it. */
28
+ export interface AeadResult {
29
+ /** The 24-byte random nonce. Store/transmit alongside the ciphertext. */
30
+ nonce: Uint8Array;
31
+ /** Ciphertext with the 16-byte Poly1305 authentication tag appended. */
32
+ ciphertext: Uint8Array;
33
+ }
34
+ /**
35
+ * Encrypt `plaintext` under `key` with a fresh random nonce, authenticating the
36
+ * optional `aad`.
37
+ *
38
+ * @param key 32-byte symmetric key (e.g. from `hkdfSha256`).
39
+ * @param plaintext Bytes to encrypt.
40
+ * @param aad Optional associated data authenticated but not encrypted.
41
+ * @returns `{ nonce, ciphertext }` — both are required to decrypt.
42
+ */
43
+ export declare function encryptAead(key: Uint8Array, plaintext: Uint8Array, aad?: Uint8Array): AeadResult;
44
+ /**
45
+ * Decrypt and authenticate `ciphertext` produced by {@link encryptAead}.
46
+ *
47
+ * Throws if the key, nonce, ciphertext, or aad differ from those used at
48
+ * encryption time (tamper detection), or if the tag is invalid.
49
+ *
50
+ * @param key 32-byte symmetric key.
51
+ * @param nonce The 24-byte nonce returned by `encryptAead`.
52
+ * @param ciphertext Ciphertext with the appended Poly1305 tag.
53
+ * @param aad The same associated data supplied at encryption time.
54
+ * @returns The recovered plaintext bytes.
55
+ */
56
+ export declare function decryptAead(key: Uint8Array, nonce: Uint8Array, ciphertext: Uint8Array, aad?: Uint8Array): Uint8Array;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * ECDH shared-secret derivation (secp256k1)
3
+ *
4
+ * Derives a raw 32-byte ECDH shared secret from a local private key and a
5
+ * remote public key, using the shared `@oxy.so/protocol` secp256k1 primitive.
6
+ * This is the key-exchange
7
+ * step for the Commons device-to-device transfer flow: each side computes the
8
+ * same shared secret, which is then run through `hkdfSha256` to derive the
9
+ * symmetric key handed to `encryptAead` / `decryptAead`.
10
+ *
11
+ * The returned value is the raw x-coordinate of the ECDH point, big-endian,
12
+ * zero-padded to 32 bytes. It is NOT itself a symmetric key — always pass it
13
+ * through a KDF (HKDF) with a context-binding `info` before use.
14
+ *
15
+ * ESM/CJS safe: static `import` only, no `require()`.
16
+ */
17
+ /**
18
+ * Compute the ECDH shared secret between a local private key and a remote
19
+ * public key on secp256k1.
20
+ *
21
+ * Symmetric by construction:
22
+ * `deriveSharedSecret(privA, pubB) === deriveSharedSecret(privB, pubA)`.
23
+ *
24
+ * @param privateKeyHex Local private key, hex (up to 64 chars; canonicalized).
25
+ * @param otherPublicKeyHex Remote public key, hex — compressed (`02`/`03` + 32
26
+ * bytes) or uncompressed (`04` + 64 bytes).
27
+ * @returns The 32-byte big-endian shared secret.
28
+ */
29
+ export declare function deriveSharedSecret(privateKeyHex: string, otherPublicKeyHex: string): Uint8Array;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Identity marker — a NON-secret, AndroidKeyStore-independent record that an
3
+ * identity exists (or existed) on this device.
4
+ *
5
+ * WHY THIS EXISTS: the identity private/public keys live in expo-secure-store,
6
+ * whose Android backing (a single `key_v1` AndroidKeyStore key by default) can be
7
+ * invalidated by an OS/vendor keystore event. When that happens SDK 57's
8
+ * expo-secure-store DELETES the undecryptable ciphertext on the read path and
9
+ * returns `null` — indistinguishable, from the keys alone, from a genuinely
10
+ * fresh install. That ambiguity is what lets a real identity get silently
11
+ * replaced by the onboarding "create" flow.
12
+ *
13
+ * The marker breaks the tie. It is written to AsyncStorage (RN) / localStorage
14
+ * (web) — storage that is NOT protected by the identity's AndroidKeyStore key —
15
+ * so it SURVIVES a keystore death. `getIdentityStatus()` reads it: keys empty +
16
+ * marker present ⇒ `lost` (route to recovery, NEVER welcome/create); keys empty
17
+ * + no marker ⇒ `absent` (the only path to fresh onboarding).
18
+ *
19
+ * It holds only the PUBLIC key plus provenance metadata — never any secret — so
20
+ * persisting it in plain KV storage adds no exposure.
21
+ *
22
+ * Every operation fails OPEN (returns null / false / resolves): the marker is a
23
+ * best-effort disambiguation signal layered on top of the authoritative
24
+ * secure-store reads, never a gate that can itself lock the user out.
25
+ *
26
+ * ESM-safe (no `require()`); zero React/RN static imports — the RN AsyncStorage
27
+ * module is reached only through `@oxy.so/protocol`'s per-platform dynamic loader.
28
+ */
29
+ /**
30
+ * AsyncStorage / localStorage key holding the serialized {@link IdentityMarker}.
31
+ * `.v1` lets a future shape change ship a `.v2` key without misreading a stale
32
+ * blob. Distinct from every `oxy_identity_*` secure-store key so it never
33
+ * collides with the keychain material it disambiguates.
34
+ */
35
+ export declare const IDENTITY_MARKER_STORAGE_KEY = "oxy_identity_marker_v1";
36
+ /**
37
+ * A durable, non-secret record that an identity was provisioned on this device.
38
+ *
39
+ * `publicKey` is the identity's public key (NOT secret) — it lets recovery
40
+ * validate that whatever it restores is the SAME account this marker records,
41
+ * never a silent account switch. `origin` records how the identity came to be.
42
+ * `onboardingComplete` mirrors the onboarding milestone (Workstream 3.4) so a
43
+ * lost SecureStore milestone flag cannot re-route a real identity into the
44
+ * onboarding wizard.
45
+ */
46
+ export interface IdentityMarker {
47
+ v: 1;
48
+ /** The identity's PUBLIC key — never secret. */
49
+ publicKey: string;
50
+ createdAt: number;
51
+ origin: 'create' | 'import' | 'restore' | 'backfill';
52
+ /** Milestone mirror: `true` once onboarding has completed for this identity. */
53
+ onboardingComplete?: boolean;
54
+ }
55
+ /** Fields accepted when creating a marker; `createdAt` defaults to now. */
56
+ export interface WriteIdentityMarkerInput {
57
+ publicKey: string;
58
+ origin: IdentityMarker['origin'];
59
+ createdAt?: number;
60
+ onboardingComplete?: boolean;
61
+ }
62
+ /**
63
+ * Read the identity marker. Fails OPEN: returns `null` on any storage error,
64
+ * missing entry, or malformed blob — the caller treats "no marker" as the safe
65
+ * default (fresh install), and the authoritative secure-store read decides the
66
+ * rest.
67
+ */
68
+ export declare function readIdentityMarker(): Promise<IdentityMarker | null>;
69
+ /**
70
+ * Write (create/replace) the marker. Returns `true` when it durably landed,
71
+ * `false` when storage was unavailable or the write threw. Callers treat a
72
+ * `false` as non-fatal — the marker is best-effort and a subsequent read
73
+ * re-backfills it from the healthy key pair.
74
+ */
75
+ export declare function writeIdentityMarker(input: WriteIdentityMarkerInput): Promise<boolean>;
76
+ /**
77
+ * Merge a partial update into the existing marker, preserving every field the
78
+ * caller does not override (notably `createdAt` and `onboardingComplete`). When
79
+ * no marker exists yet, a partial carrying at least `publicKey` + `origin`
80
+ * creates one; otherwise the update is a no-op returning `false`.
81
+ *
82
+ * Used to (a) mirror the onboarding milestone (`{ onboardingComplete: true }`)
83
+ * without disturbing provenance, and (b) refresh `origin` on a same-identity
84
+ * re-persist without resetting `createdAt`.
85
+ */
86
+ export declare function updateIdentityMarker(partial: Partial<Omit<IdentityMarker, 'v'>>): Promise<boolean>;
87
+ /**
88
+ * Remove the marker. Called ONLY after the identity's keys have been
89
+ * successfully deleted (`KeyManager.deleteIdentity`), so a marker never outlives
90
+ * the identity it records. Fails open (swallows errors) — a leftover marker
91
+ * simply routes a truly-absent identity to `recovery` instead of `welcome`,
92
+ * which is the safe direction.
93
+ */
94
+ export declare function clearIdentityMarker(): Promise<void>;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Key Derivation Function (HKDF-SHA256)
3
+ *
4
+ * Pure-JS/TS HKDF via `@noble/hashes` — identical behaviour on web, Node, and
5
+ * React Native with zero WebCrypto / native-module dependency. Used to derive
6
+ * fixed-length symmetric keys from higher-entropy input keying material (an
7
+ * ECDH shared secret, a recovery-phrase seed, etc.) for the Commons encrypted
8
+ * backup and device-to-device transfer flows.
9
+ *
10
+ * ESM/CJS safe: static `import` only, no `require()`.
11
+ */
12
+ /**
13
+ * Derive `length` bytes of keying material from `ikm` using HKDF-SHA256
14
+ * (RFC 5869 — extract-then-expand).
15
+ *
16
+ * @param ikm Input keying material (the raw secret; NOT necessarily uniform).
17
+ * @param salt Non-secret random salt. An empty array is treated by HKDF as a
18
+ * zero-filled salt of the hash length — pass a real salt whenever
19
+ * one is available so derivations for different contexts diverge.
20
+ * @param info Context/application-binding string ("what is this key for").
21
+ * Distinct `info` values yield independent keys from the same ikm.
22
+ * @param length Number of output bytes. Must be in (0, 255 * 32].
23
+ * @returns Exactly `length` bytes of derived keying material.
24
+ */
25
+ export declare function hkdfSha256(ikm: Uint8Array, salt: Uint8Array, info: Uint8Array, length: number): Uint8Array;