@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,582 @@
1
+ /**
2
+ * Key Manager - ECDSA secp256k1 Key Generation and Storage
3
+ *
4
+ * Handles secure generation, storage, and retrieval of cryptographic keys.
5
+ * Private keys are stored securely using expo-secure-store and never leave the device.
6
+ */
7
+ import { type IdentityMarker } from './identityMarker';
8
+ /**
9
+ * Thrown when an identity-mutating operation (createIdentity / importKeyPair)
10
+ * is invoked while a valid identity already exists on the device.
11
+ *
12
+ * The local private key IS the user's identity — overwriting it without
13
+ * explicit consent permanently loses access to their account (unless
14
+ * they previously saved their recovery phrase). This error forces callers
15
+ * to make an explicit, audited decision instead of silently clobbering.
16
+ */
17
+ export declare class IdentityAlreadyExistsError extends Error {
18
+ readonly name = "IdentityAlreadyExistsError";
19
+ readonly existingPublicKey: string;
20
+ constructor(existingPublicKey: string);
21
+ }
22
+ /**
23
+ * Thrown when a freshly written identity cannot be read back, parsed, or
24
+ * round-tripped through sign/verify. Indicates a storage failure or
25
+ * corruption that would otherwise silently leave the user with an
26
+ * unusable account.
27
+ */
28
+ export declare class IdentityPersistError extends Error {
29
+ readonly cause?: unknown | undefined;
30
+ readonly name = "IdentityPersistError";
31
+ constructor(message: string, cause?: unknown | undefined);
32
+ }
33
+ /**
34
+ * Thrown when identity storage cannot be read/written right now — the keychain
35
+ * is locked, the module failed to load, or a read threw — as opposed to the
36
+ * identity being genuinely absent.
37
+ *
38
+ * This is the crux of the corruption-vs-fresh-install fix: a storage THROW must
39
+ * NEVER be flattened into "no identity" (the old behavior, which let onboarding
40
+ * treat a momentarily-locked keystore as a blank device). Callers that used to
41
+ * tolerate a `false`/`null` from `hasIdentity()`/`getPublicKey()` on error must
42
+ * now treat this typed error as "cannot determine" — retry, surface a locked
43
+ * state, or abort a destructive path — never as "safe to create/overwrite".
44
+ */
45
+ export declare class IdentityUnavailableError extends Error {
46
+ readonly cause?: unknown | undefined;
47
+ readonly name = "IdentityUnavailableError";
48
+ constructor(message: string, cause?: unknown | undefined);
49
+ }
50
+ /**
51
+ * Authoritative tri-state (plus `unavailable`) verdict on the on-device
52
+ * identity, from {@link KeyManager.getIdentityStatus}.
53
+ *
54
+ * - `present` — a healthy, round-tripping key pair exists.
55
+ * - `absent` — storage read succeeded and returned nothing, AND no marker
56
+ * records a prior identity → a genuine fresh device. The ONLY
57
+ * state that may route to create/onboarding.
58
+ * - `lost` — storage read succeeded but the keys are empty/unreadable while
59
+ * the independent {@link IdentityMarker} records that an identity
60
+ * DID exist here → corruption/keystore death. Route to recovery,
61
+ * NEVER to create.
62
+ * - `unavailable` — a storage read THREW (keychain locked, module load failure).
63
+ * Transient by assumption; NEVER cached; callers retry.
64
+ */
65
+ export type IdentityStatus = {
66
+ state: 'present';
67
+ publicKey: string;
68
+ } | {
69
+ state: 'absent';
70
+ } | {
71
+ state: 'lost';
72
+ marker: IdentityMarker;
73
+ } | {
74
+ state: 'unavailable';
75
+ cause: unknown;
76
+ };
77
+ /**
78
+ * Result of {@link KeyManager.attemptIdentityRecovery}. On success it reports
79
+ * which independent, `key_v1`-surviving source restored the identity. On failure
80
+ * `reason` distinguishes "wasn't lost", "no surviving source", "a source held a
81
+ * DIFFERENT account" (never silently switched), and "storage unavailable".
82
+ */
83
+ export type IdentityRecoveryResult = {
84
+ recovered: true;
85
+ source: 'backup' | 'shared';
86
+ publicKey: string;
87
+ } | {
88
+ recovered: false;
89
+ reason: 'not-lost' | 'no-sources' | 'mismatch' | 'unavailable';
90
+ };
91
+ export interface KeyPair {
92
+ publicKey: string;
93
+ privateKey: string;
94
+ }
95
+ export declare class KeyManager {
96
+ private static cachedPublicKey;
97
+ private static cachedHasIdentity;
98
+ private static cachedSharedPublicKey;
99
+ private static cachedHasSharedIdentity;
100
+ /**
101
+ * Distinguishes "public key genuinely absent (a successful empty read, safe to
102
+ * cache)" from "never resolved / storage threw (must NOT be cached)". A `null`
103
+ * {@link cachedPublicKey} alone is ambiguous — this flag makes the genuine
104
+ * absence cacheable WITHOUT ever caching a null produced by a thrown read.
105
+ */
106
+ private static cachedPublicKeyResolved;
107
+ /** Listeners notified synchronously whenever the identity verdict may have changed. */
108
+ private static readonly identityChangeListeners;
109
+ /**
110
+ * Memoized one-run-per-process slot migration. `slotMigrationResult` caches a
111
+ * STABLE outcome (`v2`/`legacy`); a `deferred` outcome is intentionally not
112
+ * cached (the in-flight promise is cleared) so a later call retries once the
113
+ * keychain unlocks.
114
+ */
115
+ private static slotMigrationPromise;
116
+ private static slotMigrationResult;
117
+ /**
118
+ * Invalidate cached identity state
119
+ * Called internally when identity is created/deleted/imported
120
+ */
121
+ private static invalidateCache;
122
+ /**
123
+ * Subscribe to identity-verdict changes (create / import / delete / restore /
124
+ * cache invalidation). Fires synchronously; the returned function unsubscribes.
125
+ * Consumed via `useOxyEvent`-style hooks in commons to invalidate the routing
126
+ * queries the instant the identity state moves, without polling.
127
+ */
128
+ static subscribeIdentityChanged(listener: () => void): () => void;
129
+ /** Synchronous fan-out with per-listener isolation (one throwing listener never blocks the rest). */
130
+ private static notifyIdentityChanged;
131
+ /** Build `getItemAsync`/`deleteItemAsync` options for a given keychain service (read/delete). */
132
+ private static _slotOpts;
133
+ /** Build private-key write options (device-only accessibility) for a given keychain service. */
134
+ private static _privateWriteOpts;
135
+ /** True only when both keys are present, well-formed, AND the public derives from the private. */
136
+ private static _isHealthyPair;
137
+ /**
138
+ * Resolve the AsyncStorage-backed KV store for the advisory migration flag, or
139
+ * `null` off-RN / when unavailable. Independent of the keychain, so the flag
140
+ * cannot be taken down by the keystore event this whole subsystem defends
141
+ * against.
142
+ */
143
+ private static _advisoryStorage;
144
+ private static _readSlotsMigratedFlag;
145
+ private static _setSlotsMigratedFlag;
146
+ /**
147
+ * Ensure the identity has been migrated onto the isolated v2 slots (or that we
148
+ * know we must read legacy this session). Memoized so concurrent callers share
149
+ * ONE run; a `deferred` (read-threw) outcome is not cached so a later call
150
+ * retries after the keychain unlocks. Every identity-slot accessor awaits this
151
+ * before touching storage.
152
+ */
153
+ private static _ensureIdentitySlotsMigrated;
154
+ /**
155
+ * One-shot slot migration state machine. All reads are DIRECT and a thrown
156
+ * read defers everything (zero writes/deletes) so a locked keychain is never
157
+ * mistaken for an empty one. INVARIANT: at every instant ≥1 readable copy of a
158
+ * previously-existing identity remains — legacy is deleted ONLY after the v2
159
+ * copy is verified re-readable in its new (non-aliasable) location.
160
+ */
161
+ private static _runSlotMigration;
162
+ /**
163
+ * Seed the v2 backup slot during migration. Prefers a healthy legacy backup;
164
+ * otherwise mirrors the (already-verified) v2 primary material so a v2 backup
165
+ * always exists on an independent keychain key. Best-effort — a failure just
166
+ * defers backup population to the next {@link _persistIdentityAtomic}.
167
+ */
168
+ private static _migrateBackupSlotToV2;
169
+ /** Best-effort single delete under an optional keychain service. Cleanup only — never surfaces. */
170
+ private static _bestEffortDelete;
171
+ private static _bestEffortDeleteV2Primary;
172
+ private static _bestEffortDeleteLegacyPrimaryAndBackup;
173
+ private static _bestEffortDeleteBackupsAllGenerations;
174
+ /**
175
+ * Clear the cross-app shared identity slot (force-delete only) so a deleted
176
+ * identity cannot be resurrected via the recovery ladder's shared rung.
177
+ * Best-effort — the shared slot is a redundant convenience copy.
178
+ */
179
+ private static _clearSharedSlot;
180
+ /**
181
+ * Invalidate cached shared identity state
182
+ * Called internally when shared identity is created/deleted/imported
183
+ */
184
+ private static invalidateSharedCache;
185
+ /**
186
+ * Lowercase and pad to canonical 64-hex-char form.
187
+ *
188
+ * Tolerates legacy leading-zero-stripped keys and externally imported
189
+ * uppercase hex. Every derivation path canonicalizes first so storage
190
+ * representation cannot change the resulting identity.
191
+ *
192
+ * Private (used only inside KeyManager) — public consumers should not need
193
+ * to think about hex representation.
194
+ */
195
+ private static canonicalPrivateKey;
196
+ /**
197
+ * Generate a new ECDSA secp256k1 key pair
198
+ * Returns the keys in hexadecimal format
199
+ */
200
+ static generateKeyPairSync(): KeyPair;
201
+ /**
202
+ * Generate a new key pair using secure random bytes
203
+ */
204
+ static generateKeyPair(): Promise<KeyPair>;
205
+ /**
206
+ * Create a shared identity accessible across all Oxy apps
207
+ *
208
+ * iOS: Stores in shared keychain group (requires entitlement configuration)
209
+ * Android: Stores in Account Manager (requires sharedUserId in manifest)
210
+ *
211
+ * This enables true cross-app SSO - when user signs in to one Oxy app,
212
+ * they're automatically signed in to all other Oxy apps.
213
+ *
214
+ * @returns Public key of the shared identity
215
+ * @throws Error if not on native platform or if sharing is not configured
216
+ */
217
+ static createSharedIdentity(): Promise<string>;
218
+ /**
219
+ * Get the shared public key (accessible across all Oxy apps)
220
+ *
221
+ * @returns Shared public key or null if no shared identity exists
222
+ */
223
+ static getSharedPublicKey(): Promise<string | null>;
224
+ /**
225
+ * Get the shared private key (for signing operations)
226
+ *
227
+ * WARNING: Only use this for signing operations within the app.
228
+ * The private key should NEVER be transmitted or exposed.
229
+ *
230
+ * @returns Shared private key or null if no shared identity exists
231
+ */
232
+ static getSharedPrivateKey(): Promise<string | null>;
233
+ /**
234
+ * Check if a shared identity exists (accessible across all Oxy apps)
235
+ *
236
+ * @returns True if shared identity exists, false otherwise
237
+ */
238
+ static hasSharedIdentity(): Promise<boolean>;
239
+ /**
240
+ * Import an existing key pair as shared identity
241
+ *
242
+ * This is used when:
243
+ * 1. User signs in to a new Oxy app for the first time
244
+ * 2. User has existing identity on another Oxy app
245
+ * 3. We want to sync the identity across apps
246
+ *
247
+ * @param privateKey - Private key in hex format
248
+ * @returns Public key
249
+ */
250
+ static importSharedIdentity(privateKey: string): Promise<string>;
251
+ /**
252
+ * Store session information in shared storage
253
+ *
254
+ * This allows all Oxy apps to access the same session without
255
+ * re-authenticating. When user signs in to one app, all apps
256
+ * get the session automatically.
257
+ *
258
+ * @param sessionId - Session ID from authentication
259
+ * @param accessToken - Access token for API calls
260
+ */
261
+ static storeSharedSession(sessionId: string, accessToken: string): Promise<void>;
262
+ /**
263
+ * Get shared session information
264
+ *
265
+ * This allows any Oxy app to check if user is already signed in
266
+ * via another Oxy app. Enables instant cross-app SSO.
267
+ *
268
+ * @returns Session data or null if no shared session exists
269
+ */
270
+ static getSharedSession(): Promise<{
271
+ sessionId: string;
272
+ accessToken: string;
273
+ } | null>;
274
+ /**
275
+ * Clear shared session (on logout)
276
+ *
277
+ * This signs out the user from ALL Oxy apps simultaneously.
278
+ * Call this when user explicitly logs out.
279
+ */
280
+ static clearSharedSession(): Promise<void>;
281
+ /**
282
+ * Migrate local identity to shared identity
283
+ *
284
+ * Call this when upgrading existing apps to use shared identities.
285
+ * Copies the device-specific identity to shared storage so it can
286
+ * be accessed by other Oxy apps.
287
+ *
288
+ * @returns True if migration was successful, false if no local identity exists
289
+ */
290
+ static migrateToSharedIdentity(): Promise<boolean>;
291
+ /**
292
+ * Atomically persist a key pair to secure storage with verification + backup.
293
+ *
294
+ * INVARIANT (the reason this method exists): at no instant during the write
295
+ * may the device be left holding ZERO recoverable copies of a healthy
296
+ * identity. This matters most on the OVERWRITE / account-switch path: if we
297
+ * are replacing identity A with B and the write fails halfway, we MUST end
298
+ * up back on A — never on a half-written B, and never on nothing.
299
+ *
300
+ * Algorithm (recoverability-preserving):
301
+ * 0. Snapshot the existing primary (privA, pubA) so we can roll back to
302
+ * EXACTLY what was there.
303
+ * 1. Write the new primary: public first, then private.
304
+ * 2. Read back + sign/verify the new primary.
305
+ * 3. ONLY after the new primary is proven durable, refresh the backup to
306
+ * the new key. The backup is NEVER touched before this point, so any
307
+ * prior identity's backup remains intact and `restoreIdentityFromBackup`
308
+ * can always recover it.
309
+ * 4. On ANY failure in steps 1–2, restore the snapshotted primary verbatim
310
+ * (or delete it if there was none), then surface the error.
311
+ *
312
+ * Earlier versions wrote the *incoming* key to the backup FIRST, which
313
+ * destroyed the previous identity's backup, and rolled back by blindly
314
+ * deleting the primary — so a failed overwrite silently switched the user
315
+ * to (or lost them into) the half-written new identity. That is fixed here.
316
+ *
317
+ * @internal
318
+ */
319
+ private static _persistIdentityAtomic;
320
+ /**
321
+ * Write/refresh the identity marker after a successful persist. A same-identity
322
+ * re-persist (e.g. backup refresh, idempotent re-import) preserves `createdAt`
323
+ * and the `onboardingComplete` milestone by only updating `origin`; a NEW or
324
+ * switched identity writes a fresh marker. Best-effort — never throws.
325
+ *
326
+ * @internal
327
+ */
328
+ private static _syncMarkerAfterPersist;
329
+ /**
330
+ * Restore the backup slot to a previously-snapshotted state. Best-effort so
331
+ * the original persistence error remains the one surfaced to the caller.
332
+ *
333
+ * @internal
334
+ */
335
+ private static _rollbackBackup;
336
+ /**
337
+ * Restore the primary slot to a previously-snapshotted (privA, pubA) pair,
338
+ * or delete it entirely if there was no prior identity. Best-effort: every
339
+ * step is wrapped so a rollback failure never masks the original error the
340
+ * caller is about to throw. Invalidates the in-memory cache so the next read
341
+ * reflects whatever actually landed on disk.
342
+ *
343
+ * @internal
344
+ */
345
+ private static _rollbackPrimary;
346
+ /**
347
+ * Generate and securely store a new key pair on the device.
348
+ *
349
+ * Refuses to overwrite an existing identity unless `options.overwrite === true`.
350
+ * Returns the public key. The private key never leaves secure storage.
351
+ *
352
+ * @throws IdentityAlreadyExistsError if an identity already exists and overwrite is not set
353
+ * @throws IdentityPersistError if the key cannot be durably written
354
+ */
355
+ static createIdentity(options?: {
356
+ overwrite?: boolean;
357
+ }): Promise<string>;
358
+ /**
359
+ * Read the primary key pair DIRECTLY from storage, bypassing the in-memory
360
+ * cache (which a prior transient failure could have poisoned). Awaits slot
361
+ * migration first. Throws {@link IdentityUnavailableError} if storage is
362
+ * deferred/locked or a read throws — so overwrite guards never write blind.
363
+ *
364
+ * @internal
365
+ */
366
+ private static _readPrimaryDirect;
367
+ /**
368
+ * Import an existing key pair (e.g., from recovery phrase).
369
+ *
370
+ * Refuses to overwrite an existing identity unless `options.overwrite === true`.
371
+ *
372
+ * @throws IdentityAlreadyExistsError if an identity already exists and overwrite is not set
373
+ * @throws IdentityPersistError if the key cannot be durably written
374
+ */
375
+ static importKeyPair(privateKey: string, options?: {
376
+ overwrite?: boolean;
377
+ }): Promise<string>;
378
+ /**
379
+ * Get the stored private key
380
+ * WARNING: Only use this for signing operations within the app
381
+ *
382
+ * Preserves the "return null on any storage failure" contract signing paths
383
+ * rely on (a locked keychain simply means "cannot sign now"); unlike
384
+ * {@link getPublicKey}, it does NOT throw {@link IdentityUnavailableError}.
385
+ */
386
+ static getPrivateKey(): Promise<string | null>;
387
+ /**
388
+ * Get the stored public key (cached for performance).
389
+ *
390
+ * Returns the public key, or `null` when a read SUCCEEDS and finds none.
391
+ * THROWS {@link IdentityUnavailableError} when storage is unreadable (keychain
392
+ * locked / module load failure) — a thrown read is NEVER flattened to `null`
393
+ * and NEVER cached, so a poisoned "no identity" verdict can no longer stick.
394
+ */
395
+ static getPublicKey(): Promise<string | null>;
396
+ /**
397
+ * Persist the recovery mnemonic (the 12-word phrase) into its dedicated,
398
+ * device-only keychain slot so the user can re-reveal it from Settings after
399
+ * onboarding.
400
+ *
401
+ * Called best-effort at identity creation/import, where the phrase is already
402
+ * in memory: a failure to persist it must NEVER fail the identity itself, so
403
+ * callers deliberately swallow the thrown error (logging it). Storage errors
404
+ * throw {@link IdentityUnavailableError} — same "cannot determine" semantics as
405
+ * the other getters — so a caller MAY observe/log the failure.
406
+ *
407
+ * The mnemonic is stored ONLY here — never in the marker, `getIdentityStatus`,
408
+ * logs, or any exported bundle.
409
+ */
410
+ static storeRecoveryMnemonic(mnemonic: string): Promise<void>;
411
+ /**
412
+ * Read the stored recovery mnemonic for re-reveal in Settings.
413
+ *
414
+ * Returns the phrase, or `null` when a read SUCCEEDS and finds none — the
415
+ * expected result for any identity created/imported before this feature
416
+ * existed, since the phrase was never captured for those. THROWS
417
+ * {@link IdentityUnavailableError} when storage is unreadable (keychain locked
418
+ * / module load failure), matching {@link getPublicKey}'s contract — a thrown
419
+ * read is never flattened to `null`, so a caller distinguishes "phrase was
420
+ * never stored" from "keychain temporarily locked, retry".
421
+ */
422
+ static getRecoveryMnemonic(): Promise<string | null>;
423
+ /**
424
+ * Delete the stored recovery mnemonic. Best-effort: a delete failure is logged
425
+ * and swallowed, never thrown — it runs inside the identity-deletion path where
426
+ * an unreadable keychain must not abort the wider teardown.
427
+ */
428
+ static deleteRecoveryMnemonic(): Promise<void>;
429
+ /**
430
+ * Check if a complete, parseable identity exists on this device.
431
+ *
432
+ * Returns `true` only when BOTH the private and public keys are present,
433
+ * both are well-formed, AND the public key derives from the private key.
434
+ * A partially-written or corrupted identity (read succeeded, bytes empty/bad)
435
+ * returns `false` so that downstream code can resume the create / restore flow.
436
+ * THROWS {@link IdentityUnavailableError} when storage is unreadable — a locked
437
+ * keychain must never be mistaken for "no identity" (the old behavior that let
438
+ * onboarding treat a transient lock as a blank device).
439
+ *
440
+ * Note: this does NOT perform the full sign/verify roundtrip — call
441
+ * `verifyIdentityIntegrity()` for that.
442
+ */
443
+ static hasIdentity(): Promise<boolean>;
444
+ /**
445
+ * Authoritative identity verdict — the corruption-vs-fresh-install
446
+ * disambiguator that routing (commons) keys off of.
447
+ *
448
+ * - Healthy pair → `present` (and the marker is backfilled if missing or
449
+ * pointing at a different key, `origin: 'backfill'`).
450
+ * - Read succeeded but no healthy pair, WITH a marker → `lost` (keystore death
451
+ * / corruption; route to recovery, NEVER to create).
452
+ * - Read succeeded, no pair, NO marker → `absent` (a genuine fresh device; the
453
+ * only state that may route to onboarding/create).
454
+ * - A read THREW → `unavailable` (keychain locked); this verdict is NEVER
455
+ * cached, so a later call re-reads.
456
+ *
457
+ * @param opts.bypassCache When true, never reads OR writes the in-memory cache
458
+ * — a pure, fresh storage verdict for the auto-create interlock preflight.
459
+ */
460
+ static getIdentityStatus(opts?: {
461
+ bypassCache?: boolean;
462
+ }): Promise<IdentityStatus>;
463
+ /**
464
+ * Delete the stored identity (both keys)
465
+ * Use with EXTREME caution - this is irreversible without a recovery phrase
466
+ * This should ONLY be called when explicitly requested by the user
467
+ * @param skipBackup - If true, skip backup before deletion (default: false)
468
+ * @param force - If true, skip confirmation checks (default: false)
469
+ * @param userConfirmed - If true, user has explicitly confirmed deletion (default: false)
470
+ */
471
+ static deleteIdentity(skipBackup?: boolean, force?: boolean, userConfirmed?: boolean): Promise<void>;
472
+ /**
473
+ * Backup identity to SecureStore (separate backup storage)
474
+ * This provides a recovery mechanism if primary storage fails
475
+ */
476
+ static backupIdentity(): Promise<boolean>;
477
+ /**
478
+ * Verify identity integrity — checks keys are valid, accessible, derive
479
+ * consistently, AND can sign + verify a probe message.
480
+ *
481
+ * Returns true only when the full sign/verify roundtrip succeeds. Use
482
+ * this on app start to detect silent corruption before the user finds
483
+ * out by failing to sign in.
484
+ */
485
+ static verifyIdentityIntegrity(): Promise<boolean>;
486
+ /**
487
+ * Restore identity from backup if primary storage is genuinely missing or
488
+ * corrupt.
489
+ *
490
+ * SAFETY (three independent guards against silently switching accounts):
491
+ * 1. If the primary passes a full sign/verify probe, do nothing.
492
+ * 2. If the primary keys CANNOT BE READ (storage threw — e.g. a transient
493
+ * keychain lock during a background launch), do nothing. We must NOT
494
+ * treat "couldn't read" as "corrupted" and restore a possibly-stale
495
+ * backup over an identity that is actually fine but momentarily
496
+ * inaccessible.
497
+ * 3. If a primary private/public key IS present but does not match the
498
+ * backup, the backup may belong to a different identity — refuse, so we
499
+ * never silently switch the user to another account.
500
+ *
501
+ * Only when the primary is provably absent (read succeeded, returned
502
+ * null/empty) or provably corrupt (read succeeded, bytes malformed AND no
503
+ * conflicting key material is present) do we rebuild it from the backup.
504
+ */
505
+ static restoreIdentityFromBackup(): Promise<boolean>;
506
+ /**
507
+ * Recovery ladder — restore a `lost` identity from an independent,
508
+ * `key_v1`-surviving source WITHOUT the user re-entering their recovery phrase.
509
+ *
510
+ * Gated on {@link getIdentityStatus} being `lost` (marker present, keys empty):
511
+ * - `present` / `absent` → `not-lost` (nothing to recover / nothing lost)
512
+ * - `unavailable` → `unavailable` (keychain locked; retry later)
513
+ *
514
+ * Rungs, tried in order, each fully validated (well-formed + derive-match +
515
+ * `publicKey === marker.publicKey`, so a source holding a DIFFERENT account is
516
+ * SKIPPED, never restored):
517
+ * 1. the v2 backup slot (independent keychain key from the primary), then
518
+ * 2. the cross-app shared slot (Android bridge `getShared` / iOS keychain
519
+ * group) — the copy that survives a primary+backup `key_v1` death.
520
+ *
521
+ * On success it re-persists via {@link _persistIdentityAtomic} (origin
522
+ * `'restore'`) and invalidates the cache so routing re-reads `present`. When no
523
+ * rung matches, the UI proceeds to recovery-phrase entry.
524
+ */
525
+ static attemptIdentityRecovery(): Promise<IdentityRecoveryResult>;
526
+ /** Read the active-layout backup slot as a healthy candidate, or null. @internal */
527
+ private static _readBackupCandidate;
528
+ /** Read the cross-app shared slot as a healthy candidate, or null. @internal */
529
+ private static _readSharedCandidate;
530
+ /** Persist a validated recovery candidate + refresh caches/subscribers. @internal */
531
+ private static _commitRecovery;
532
+ /**
533
+ * Derive public key from a private key (without storing)
534
+ */
535
+ static derivePublicKey(privateKey: string): string;
536
+ /**
537
+ * Normalize a public key to uncompressed, lowercased hex. Used when building
538
+ * signed rotation payloads so legacy compressed/cased encodings still verify.
539
+ */
540
+ static canonicalPublicKey(publicKey: string): string;
541
+ /**
542
+ * Validate that a string is a valid public key
543
+ *
544
+ * Returns false on parse errors (invalid input is the expected fail mode here).
545
+ * Errors are logged at debug level so they're available when troubleshooting
546
+ * but don't pollute production logs.
547
+ */
548
+ static isValidPublicKey(publicKey: string): boolean;
549
+ /**
550
+ * Validate that a string is a valid private key.
551
+ *
552
+ * secp256k1 private keys are 256-bit, so 64 hex chars. We require strict
553
+ * hex-only input so malformed text can never be coerced into a scalar.
554
+ */
555
+ static isValidPrivateKey(privateKey: string): boolean;
556
+ /**
557
+ * Derive a 32-byte, domain-separated seed from the on-device Oxy identity
558
+ * private key via HKDF-SHA256, WITHOUT ever exposing the raw private key.
559
+ *
560
+ * The domain separation is carried by `info` (e.g. `"oxypay/faircoin/v1"`),
561
+ * so distinct apps/purposes get independent seeds from the same identity.
562
+ * The output is HKDF keying material, never the private key itself — a
563
+ * consumer (e.g. Oxy Pay's FairCoin HD wallet) can feed it straight into
564
+ * `HDKey.fromMasterSeed` and never touches the identity key.
565
+ *
566
+ * Key source (native only): prefers the shared ecosystem identity written to
567
+ * `group.so.oxy.shared` (what a Relying Party like Oxy Pay reads), then falls
568
+ * back to this device's primary identity (Commons/Accounts). Both reproduce
569
+ * from the user's Oxy recovery phrase, so the derived seed is recoverable.
570
+ *
571
+ * @param info Context/domain-binding label (distinct labels → independent seeds).
572
+ * @returns 32 bytes of derived keying material, or `null` on web / when no
573
+ * identity key is available on this device.
574
+ */
575
+ static deriveScopedSeed(info: string): Promise<Uint8Array | null>;
576
+ /**
577
+ * Get a shortened version of the public key for display
578
+ * Format: first 8 chars...last 8 chars
579
+ */
580
+ static shortenPublicKey(publicKey: string): string;
581
+ }
582
+ export default KeyManager;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Crypto Polyfills
3
+ *
4
+ * Ensures Buffer and crypto.getRandomValues are available
5
+ * across all platforms (Node.js, Browser, React Native).
6
+ *
7
+ * Guard order when installing a `getRandomValues` shim (see bottom of file and
8
+ * {@link cryptoPolyfill}):
9
+ *
10
+ * 1. A REAL `globalThis.crypto.getRandomValues` — used as-is (browser, Node
11
+ * >= 20, modern Hermes). The shim below is only installed when the host is
12
+ * missing it, so this branch is the install-time gate.
13
+ * 2. Node — backed by the built-in `node:crypto` module (`webcrypto`, else
14
+ * `randomFillSync`). This is what a Node runtime WITHOUT a global WebCrypto
15
+ * (Node 18 script entrypoints, some embedded hosts) falls back to.
16
+ * 3. React Native — `expo-crypto.getRandomBytes` (statically imported via the
17
+ * per-platform `platform/crypto` module in `@oxy.so/protocol`).
18
+ *
19
+ * Historically step (2) delegated to `@oxy.so/protocol`'s RN-only
20
+ * `getRandomBytesRN`, which THROWS on Node — so any Node host lacking a global
21
+ * WebCrypto crashed here instead of getting randomness. It is now a proper
22
+ * Node-backed implementation.
23
+ */
24
+ import { Buffer } from 'buffer';
25
+ export { Buffer };