@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,786 @@
1
+ import type {
2
+ AccountKind,
3
+ AccountCategoryId,
4
+ UserNameResponse,
5
+ UserRelationship,
6
+ ThemePreference,
7
+ } from '@oxy.so/contracts';
8
+
9
+ export interface OxyConfig {
10
+ baseURL: string;
11
+ cloudURL?: string;
12
+ authWebUrl?: string;
13
+ authRedirectUri?: string;
14
+ /**
15
+ * The app's Oxy OAuth client id (ApplicationCredential publicKey).
16
+ *
17
+ * Identifies this app in OAuth authorize / consent flows (issue #214). Purely
18
+ * declarative: the SDK stores it on `OxyServices.config.clientId` for later
19
+ * OAuth-authorize use. It is unrelated to the cross-domain `/sso?client_id=…`
20
+ * bounce (which uses the RP origin, not this registered client id).
21
+ */
22
+ clientId?: string;
23
+ // Performance & caching options
24
+ /**
25
+ * Enable the per-instance GET response cache. Defaults to `true` (5-minute
26
+ * TTL). Set to `false` to disable caching entirely for this instance — GET
27
+ * responses are then never stored and never served from cache, so every read
28
+ * hits the network. Useful for a linked backend client where another layer
29
+ * (e.g. React Query) is the single cache authority and the SDK's own cache
30
+ * would otherwise serve stale data after a write.
31
+ */
32
+ enableCache?: boolean;
33
+ /**
34
+ * Cache TTL in milliseconds (default: 5 minutes). A value `<= 0` disables the
35
+ * per-instance GET response cache, equivalent to `enableCache: false`.
36
+ */
37
+ cacheTTL?: number;
38
+ enableRequestDeduplication?: boolean;
39
+ enableRetry?: boolean;
40
+ maxRetries?: number;
41
+ retryDelay?: number;
42
+ requestTimeout?: number; // Default timeout in milliseconds (default: 5000)
43
+ // Rate limiting
44
+ maxConcurrentRequests?: number;
45
+ requestQueueSize?: number;
46
+ // Logging
47
+ enableLogging?: boolean;
48
+ logLevel?: 'none' | 'error' | 'warn' | 'info' | 'debug';
49
+ // Performance monitoring
50
+ onRequestStart?: (url: string, method: string) => void;
51
+ onRequestEnd?: (url: string, method: string, duration: number, success: boolean) => void;
52
+ onRequestError?: (url: string, method: string, error: Error) => void;
53
+ }
54
+
55
+ /**
56
+ * Privacy settings for a user account.
57
+ *
58
+ * All fields are optional because:
59
+ * - Updates are dot-path partial PATCHes — clients send only changed keys.
60
+ * - The server may return a partial subdocument depending on the API
61
+ * build (older builds returned only the field that changed).
62
+ * - User accounts created before a new toggle was introduced won't
63
+ * have that key persisted yet.
64
+ *
65
+ * Mirrors `IPrivacySettings` from `packages/api/src/types/privacy.types.ts`,
66
+ * but with every field marked optional.
67
+ */
68
+ export interface PrivacySettings {
69
+ isPrivateAccount?: boolean;
70
+ hideOnlineStatus?: boolean;
71
+ hideLastSeen?: boolean;
72
+ profileVisibility?: boolean;
73
+ loginAlerts?: boolean;
74
+ blockScreenshots?: boolean;
75
+ login?: boolean;
76
+ biometricLogin?: boolean;
77
+ showActivity?: boolean;
78
+ allowTagging?: boolean;
79
+ allowMentions?: boolean;
80
+ hideReadReceipts?: boolean;
81
+ allowDirectMessages?: boolean;
82
+ dataSharing?: boolean;
83
+ locationSharing?: boolean;
84
+ analyticsSharing?: boolean;
85
+ sensitiveContent?: boolean;
86
+ autoFilter?: boolean;
87
+ muteKeywords?: boolean;
88
+ /** Allow sharing this user's content on the fediverse. Defaults to true. */
89
+ fediverseSharing?: boolean;
90
+ }
91
+
92
+ export interface User {
93
+ id: string;
94
+ publicKey: string;
95
+ username: string;
96
+ email?: string;
97
+ // Avatar file id (asset id)
98
+ avatar?: string | null;
99
+ // Named color preset (e.g. 'teal', 'blue', 'purple')
100
+ color?: string | null;
101
+ // Privacy and security settings
102
+ privacySettings?: PrivacySettings;
103
+ /**
104
+ * Structured human name. `name.displayName` is the canonical display string
105
+ * resolved by the API when present; consumers render it directly instead of
106
+ * recomposing names from `first` / `last` / `full` / `username`. It is now
107
+ * OPTIONAL (see `UserNameResponse`) — when absent, fall back to a handle
108
+ * (e.g. `getNormalizedUserHandle`) rather than recomposing a name locally.
109
+ */
110
+ name: UserNameResponse;
111
+ bio?: string;
112
+ /**
113
+ * Longer public profile text. Emitted alongside `bio` by every user DTO the
114
+ * API produces (single profile, `getUsersByIds`, follower/following/mutual
115
+ * lists, profile search) — the two are separate fields on the User document.
116
+ */
117
+ description?: string;
118
+ phone?: string;
119
+ address?: string;
120
+ birthday?: string;
121
+ website?: string;
122
+ createdAt?: string;
123
+ updatedAt?: string;
124
+ links?: string[];
125
+ linksMetadata?: Array<{
126
+ url: string;
127
+ title?: string;
128
+ description?: string;
129
+ image?: string;
130
+ id?: string;
131
+ }>;
132
+ // Social counts
133
+ _count?: {
134
+ followers?: number;
135
+ following?: number;
136
+ };
137
+ accountExpiresAfterInactivityDays?: number | null; // Days of inactivity before account expires (null = never expire)
138
+ /**
139
+ * Account-graph classification — WHAT this account is.
140
+ *
141
+ * ORTHOGONAL to `type` below, and easy to confuse with it: `type` says where
142
+ * the account lives and how it is driven (`local` / `federated` / `agent` /
143
+ * `automated`), `kind` says what it IS (`personal` / `organization` /
144
+ * `project` / `bot` / `channel`). A federated channel is `type: 'federated'`
145
+ * AND `kind: 'channel'`; neither value substitutes for the other.
146
+ *
147
+ * This is what a consumer rendering authored content reads to tell a
148
+ * channel's post from a person's — a channel is the author, so there is no
149
+ * second identity to carry alongside the user.
150
+ *
151
+ * Absent should be read as `personal` (the column's default), not as unknown.
152
+ */
153
+ kind?: AccountKind;
154
+ // User type and external account support
155
+ type?: 'local' | 'federated' | 'agent' | 'automated';
156
+ isFederated?: boolean;
157
+ /** Allow sharing this user's content on the fediverse. Defaults to true. */
158
+ fediverseSharing?: boolean;
159
+ isAgent?: boolean;
160
+ isAutomated?: boolean;
161
+ instance?: string;
162
+ federation?: {
163
+ actorUri?: string;
164
+ domain?: string;
165
+ actorId?: string;
166
+ };
167
+ automation?: {
168
+ ownerId?: string;
169
+ };
170
+ // Managed account fields
171
+ isManagedAccount?: boolean;
172
+ managedBy?: string;
173
+ /**
174
+ * What this account is about, for any NON-personal account. ORDERED — the
175
+ * first element is the primary category, and nothing may reorder it.
176
+ *
177
+ * Stable ids, not labels: render each through the
178
+ * `accounts.accountCategory.<id>` translation key so the reader sees their own
179
+ * language rather than the language of whoever chose it. Absent when the
180
+ * account has none.
181
+ */
182
+ accountCategories?: AccountCategoryId[];
183
+ /**
184
+ * The account's languages as full BCP-47 locales (`language-REGION`, e.g.
185
+ * `en-US`, `es-MX`, `pt-BR`), ordered with the PRIMARY (UI) locale first.
186
+ * `languages[0]` is the primary locale — there is no singular `language`
187
+ * field. Resolve via `getUserLanguages` / `getPrimaryLanguage`, which
188
+ * normalize, validate against the supported catalog, and de-duplicate.
189
+ */
190
+ languages?: string[];
191
+ // User-controlled notification preferences. All channels default to on; users
192
+ // opt out per-channel. Updated via `PUT /users/me`.
193
+ notificationPreferences?: NotificationPreferences;
194
+ // General app-wide user preferences. Updated via `PUT /users/me`.
195
+ userPreferences?: UserPreferences;
196
+ /**
197
+ * Portable theme preference (mode + Bloom color-preset key). Rides the
198
+ * self/session payload so it is present on the current-user DTO at cold boot
199
+ * (`useAuth().user.themePreference`) with no extra fetch. Absent until the
200
+ * user sets it. Updated via `updateThemePreference` / `updateProfile`.
201
+ */
202
+ themePreference?: ThemePreference;
203
+ /**
204
+ * The authenticated viewer's relationship to THIS profile. Populated ONLY on
205
+ * single-profile fetches (`getProfileByUsername` / `getUserById`) when the
206
+ * request is authenticated; absent for anonymous requests, self-views, and
207
+ * bulk fetches — so `undefined` means "unknown", not "not following".
208
+ */
209
+ relationship?: UserRelationship;
210
+ [key: string]: unknown;
211
+ }
212
+
213
+ /**
214
+ * User-controlled notification channels. Persisted on the User document.
215
+ */
216
+ export interface NotificationPreferences {
217
+ /** Push notifications on registered devices. */
218
+ pushEnabled?: boolean;
219
+ /** Periodic email digest of activity. */
220
+ emailDigest?: boolean;
221
+ /** Security/account alerts (sign-ins, recovery, key changes). */
222
+ securityAlerts?: boolean;
223
+ /** Marketing / product update emails. */
224
+ marketingEmails?: boolean;
225
+ }
226
+
227
+ /**
228
+ * General per-user preferences applied across all Oxy apps for the user.
229
+ * Persisted on the User document.
230
+ */
231
+ export interface UserPreferences {
232
+ /** BCP-47 language tag, e.g. "en-US", "es-ES". Empty string = follow device. */
233
+ language?: string;
234
+ /** Theme mode preference. */
235
+ theme?: 'light' | 'dark' | 'system';
236
+ /** Mirror of OS reduce-motion preference, persisted server-side. */
237
+ reduceMotion?: boolean;
238
+ /** IANA timezone, e.g. "Europe/Madrid". Empty string = follow device. */
239
+ timezone?: string;
240
+ }
241
+
242
+ export interface LoginResponse {
243
+ accessToken?: string;
244
+ user: User;
245
+ message?: string;
246
+ }
247
+
248
+ export interface Notification {
249
+ id: string;
250
+ message: string;
251
+ // Add other notification fields as needed
252
+ }
253
+
254
+ export interface Wallet {
255
+ id: string;
256
+ balance: number;
257
+ // Add other wallet fields as needed
258
+ }
259
+
260
+ export interface Transaction {
261
+ id: string;
262
+ amount: number;
263
+ type: string;
264
+ timestamp: string;
265
+ // Add other transaction fields as needed
266
+ }
267
+
268
+ export interface BlockedUser {
269
+ _id?: string;
270
+ blockedId: string | {
271
+ _id: string;
272
+ username: string;
273
+ avatar?: string;
274
+ name?: { displayName?: string };
275
+ };
276
+ userId: string;
277
+ createdAt?: string;
278
+ blockedAt?: string;
279
+ username?: string;
280
+ avatar?: string;
281
+ }
282
+
283
+ export interface RestrictedUser {
284
+ _id?: string;
285
+ restrictedId: string | {
286
+ _id: string;
287
+ username: string;
288
+ avatar?: string;
289
+ name?: { displayName?: string };
290
+ };
291
+ userId: string;
292
+ createdAt?: string;
293
+ restrictedAt?: string;
294
+ username?: string;
295
+ avatar?: string;
296
+ }
297
+
298
+ export interface TransferFundsRequest {
299
+ fromUserId: string;
300
+ toUserId: string;
301
+ amount: number;
302
+ }
303
+
304
+ export interface PurchaseRequest {
305
+ userId: string;
306
+ itemId: string;
307
+ amount: number;
308
+ }
309
+
310
+ export interface WithdrawalRequest {
311
+ userId: string;
312
+ amount: number;
313
+ address: string;
314
+ }
315
+
316
+ export interface TransactionResponse {
317
+ success: boolean;
318
+ transaction: Transaction;
319
+ }
320
+
321
+ export interface PaginationInfo {
322
+ total: number;
323
+ limit: number;
324
+ offset: number;
325
+ hasMore: boolean;
326
+ }
327
+
328
+ export interface SearchProfilesResponse {
329
+ data: User[];
330
+ pagination: PaginationInfo;
331
+ }
332
+
333
+ export interface ApiError {
334
+ message: string;
335
+ code: string;
336
+ status: number;
337
+ details?: Record<string, unknown>;
338
+ }
339
+
340
+ export interface PaymentMethod {
341
+ id: string;
342
+ type: string;
343
+ // Add other payment method fields as needed
344
+ }
345
+
346
+ export interface PaymentRequest {
347
+ userId: string;
348
+ planId: string;
349
+ paymentMethodId: string;
350
+ }
351
+
352
+ export interface PaymentResponse {
353
+ transactionId: string;
354
+ status: string;
355
+ }
356
+
357
+ export interface AnalyticsData {
358
+ userId: string;
359
+ // Add other analytics fields as needed
360
+ }
361
+
362
+ export interface FollowerDetails {
363
+ userId: string;
364
+ followers: number;
365
+ // Add other follower details as needed
366
+ }
367
+
368
+ export interface ContentViewer {
369
+ userId: string;
370
+ viewedAt: string;
371
+ // Add other content viewer fields as needed
372
+ }
373
+
374
+ /**
375
+ * File management interfaces
376
+ */
377
+ export interface FileMetadata {
378
+ id: string;
379
+ filename: string;
380
+ contentType: string;
381
+ length: number;
382
+ chunkSize: number;
383
+ uploadDate: string;
384
+ metadata?: {
385
+ userId?: string;
386
+ description?: string;
387
+ title?: string;
388
+ tags?: string[];
389
+ [key: string]: unknown;
390
+ };
391
+ variants?: Array<{
392
+ type: string; // e.g. 'thumb', 'poster'
393
+ key: string; // storage key/path
394
+ width?: number;
395
+ height?: number;
396
+ readyAt?: string;
397
+ metadata?: Record<string, unknown>;
398
+ }>;
399
+ }
400
+
401
+ export interface FileUploadResponse {
402
+ files: FileMetadata[];
403
+ }
404
+
405
+ export interface FileListResponse {
406
+ files: FileMetadata[];
407
+ total: number;
408
+ hasMore: boolean;
409
+ }
410
+
411
+ export interface FileUpdateRequest {
412
+ filename?: string;
413
+ metadata?: {
414
+ description?: string;
415
+ title?: string;
416
+ tags?: string[];
417
+ [key: string]: unknown;
418
+ };
419
+ }
420
+
421
+ export interface FileDeleteResponse {
422
+ success: boolean;
423
+ message: string;
424
+ fileId: string;
425
+ }
426
+
427
+ /**
428
+ * React Native file descriptor accepted by FormData.
429
+ *
430
+ * On React Native, the multipart upload reads the file from disk via the URI
431
+ * during the network request — no in-JS Blob construction is required (and
432
+ * doing so would fail on Hermes since RN's BlobManager cannot wrap an
433
+ * ArrayBuffer/ArrayBufferView).
434
+ *
435
+ * This shape matches what `expo-document-picker` and `expo-image-picker`
436
+ * return for selected assets, and is what `OxyServices.assetUpload` accepts
437
+ * on native platforms.
438
+ */
439
+ export interface RNFileDescriptor {
440
+ uri: string;
441
+ type?: string;
442
+ name?: string;
443
+ size?: number;
444
+ }
445
+
446
+ /**
447
+ * Asset upload input — accepted by `OxyServices.assetUpload` and `uploadRawFile`.
448
+ *
449
+ * - `File` / `Blob`: standard web browser path. `assetUpload` appends the
450
+ * Blob to FormData directly.
451
+ * - {@link RNFileDescriptor}: React Native path. FormData reads the file from
452
+ * disk via the URI during the multipart request.
453
+ */
454
+ export type AssetUploadInput = File | Blob | RNFileDescriptor;
455
+
456
+ /**
457
+ * Central Asset Service interfaces
458
+ */
459
+
460
+ /**
461
+ * File visibility levels
462
+ * - private: Only accessible by owner (default)
463
+ * - public: Accessible by anyone without authentication (e.g., avatars, public profile content)
464
+ * - unlisted: Accessible with direct link but not listed publicly
465
+ */
466
+ export type FileVisibility = 'private' | 'public' | 'unlisted';
467
+
468
+ export interface AssetLink {
469
+ app: string;
470
+ entityType: string;
471
+ entityId: string;
472
+ createdBy: string;
473
+ createdAt: string;
474
+ }
475
+
476
+ export type AssetMetadata = Record<string, string | number | boolean | null | undefined>;
477
+
478
+ export interface AssetVariant {
479
+ type: string;
480
+ key: string;
481
+ width?: number;
482
+ height?: number;
483
+ readyAt?: string;
484
+ size?: number;
485
+ metadata?: AssetMetadata;
486
+ }
487
+
488
+ export interface Asset {
489
+ id: string;
490
+ sha256: string;
491
+ size: number;
492
+ mime: string;
493
+ ext: string;
494
+ originalName?: string;
495
+ ownerUserId: string;
496
+ status: 'active' | 'trash' | 'deleted';
497
+ visibility: FileVisibility;
498
+ usageCount: number;
499
+ createdAt: string;
500
+ updatedAt: string;
501
+ links: AssetLink[];
502
+ variants: AssetVariant[];
503
+ metadata?: AssetMetadata;
504
+ }
505
+
506
+ export interface AssetInitRequest {
507
+ sha256: string;
508
+ size: number;
509
+ mime: string;
510
+ }
511
+
512
+ export interface AssetInitResponse {
513
+ uploadUrl: string;
514
+ fileId: string;
515
+ sha256: string;
516
+ }
517
+
518
+ export interface AssetCompleteRequest {
519
+ fileId: string;
520
+ originalName: string;
521
+ size: number;
522
+ mime: string;
523
+ visibility?: FileVisibility;
524
+ metadata?: AssetMetadata;
525
+ }
526
+
527
+ export interface AssetLinkRequest {
528
+ app: string;
529
+ entityType: string;
530
+ entityId: string;
531
+ visibility?: FileVisibility;
532
+ }
533
+
534
+ export interface AssetUnlinkRequest {
535
+ app: string;
536
+ entityType: string;
537
+ entityId: string;
538
+ }
539
+
540
+ export interface AssetUrlResponse {
541
+ success: boolean;
542
+ url: string;
543
+ variant?: string;
544
+ expiresIn: number;
545
+ }
546
+
547
+ /**
548
+ * Per-file result of `POST /assets/batch-access`. `allowed` is authoritative:
549
+ * when `false` the entry carries an `error` string (e.g. `'Access denied'`,
550
+ * `'File not found'`) and no `url`. When `true`, `url` is a caller-scoped,
551
+ * `<img src>`-ready URL — the public CDN form for a public asset or an
552
+ * API-origin stream URL carrying a short-lived media token for a private one.
553
+ */
554
+ export interface BatchFileAccessEntry {
555
+ allowed: boolean;
556
+ url?: string;
557
+ visibility?: FileVisibility;
558
+ mime?: string;
559
+ error?: string;
560
+ }
561
+
562
+ /** Envelope returned by `POST /assets/batch-access`, keyed by file id. */
563
+ export interface BatchFileAccessResponse {
564
+ results: Record<string, BatchFileAccessEntry>;
565
+ }
566
+
567
+ export interface AssetDeleteSummary {
568
+ fileId: string;
569
+ wouldDelete: boolean;
570
+ affectedApps: string[];
571
+ remainingLinks: number;
572
+ variants: string[];
573
+ }
574
+
575
+ export interface AssetUpdateVisibilityRequest {
576
+ visibility: FileVisibility;
577
+ }
578
+
579
+ export interface AssetUpdateVisibilityResponse {
580
+ success: boolean;
581
+ file: {
582
+ id: string;
583
+ visibility: FileVisibility;
584
+ updatedAt: string;
585
+ };
586
+ }
587
+
588
+ /**
589
+ * Minimal, service-token-scoped asset metadata returned by
590
+ * `POST /assets/service/by-ids`.
591
+ *
592
+ * Resolves an Oxy asset `id` to its content-addressed identity (`sha256`),
593
+ * MIME type, byte `size`, and storage `status`. Used by server-to-server
594
+ * callers (e.g. Mention's MTN Protocol blob-ref resolution) that hold a
595
+ * `files:read`-scoped service token rather than a user session. Unknown or
596
+ * deleted ids are omitted from the response (never error the whole batch),
597
+ * so the result may be shorter than the requested id list.
598
+ */
599
+ export interface ServiceAssetMetadata {
600
+ id: string;
601
+ sha256: string;
602
+ mime: string;
603
+ size: number;
604
+ status: 'active' | 'trash';
605
+ /** Intrinsic width in pixels when variant/metadata extraction has run. */
606
+ width?: number;
607
+ /** Intrinsic height in pixels when variant/metadata extraction has run. */
608
+ height?: number;
609
+ /** Playback duration in seconds for video/audio assets. */
610
+ durationSec?: number;
611
+ /** Derived once from width/height at asset processing time. */
612
+ orientation?: 'portrait' | 'landscape' | 'square';
613
+ /** width / height, derived at asset processing time. */
614
+ aspectRatio?: number;
615
+ /**
616
+ * When the adaptive HLS ladder for this asset finished transcoding.
617
+ *
618
+ * ABSENT when there is none. Transcoding runs after the upload call returns
619
+ * and per-rendition failures are swallowed, so a video may get its ladder
620
+ * minutes later or never. The `?variant=hls_master` URL is derivable from the
621
+ * `id` alone, which is exactly the trap: a consumer that builds it without
622
+ * this field hands the player a URL that 403s until the ladder exists, and
623
+ * the player pays a failed request before falling back — once per video, per
624
+ * play. Treat absence as "no adaptive stream, play the progressive original".
625
+ */
626
+ hlsReadyAt?: string;
627
+ }
628
+
629
+ /**
630
+ * Reverse-lookup asset metadata returned by `POST /assets/service/by-sha256`.
631
+ *
632
+ * Resolves a content-addressed `sha256` digest back to the live Oxy asset that
633
+ * holds those bytes: its file `id`, MIME type, byte `size`, storage `status`,
634
+ * and — for active, public, CDN-reachable assets only — a public `url`
635
+ * (`cloud.oxy.so`). This is the inverse of {@link ServiceAssetMetadata}: it lets
636
+ * a `files:read`-scoped service-to-server caller (e.g. Mention's MTN materializer
637
+ * / node-blob sync) turn a record's `blob.sha256` into a servable asset.
638
+ *
639
+ * `url` is omitted for private/unlisted assets (and for public assets whose
640
+ * bytes are not yet CDN-reachable) — those must be streamed through the origin.
641
+ * Unknown or deleted hashes are omitted from the response (never error the whole
642
+ * batch), so the result may be shorter than the requested hash list.
643
+ */
644
+ export interface ServiceAssetMetadataBySha {
645
+ sha256: string;
646
+ id: string;
647
+ mime: string;
648
+ size: number;
649
+ status: 'active' | 'trash';
650
+ url?: string;
651
+ width?: number;
652
+ height?: number;
653
+ durationSec?: number;
654
+ orientation?: 'portrait' | 'landscape' | 'square';
655
+ aspectRatio?: number;
656
+ }
657
+
658
+ /**
659
+ * Account storage usage (server-side usage, not local AsyncStorage)
660
+ */
661
+ export interface AccountStorageCategoryUsage {
662
+ bytes: number;
663
+ count: number;
664
+ }
665
+
666
+ export interface AccountStorageUsageResponse {
667
+ plan: 'basic' | 'pro' | 'business';
668
+ totalUsedBytes: number;
669
+ totalLimitBytes: number;
670
+ categories: {
671
+ documents: AccountStorageCategoryUsage;
672
+ mail: AccountStorageCategoryUsage;
673
+ photosVideos: AccountStorageCategoryUsage;
674
+ recordings: AccountStorageCategoryUsage;
675
+ family: AccountStorageCategoryUsage;
676
+ other: AccountStorageCategoryUsage;
677
+ };
678
+ updatedAt: string;
679
+ }
680
+
681
+ /**
682
+ * Security activity event types
683
+ */
684
+ export type SecurityEventType =
685
+ | 'sign_in'
686
+ | 'sign_out'
687
+ | 'email_changed'
688
+ | 'profile_updated'
689
+ | 'device_added'
690
+ | 'device_removed'
691
+ | 'account_recovery'
692
+ | 'security_settings_changed'
693
+ | 'private_key_exported'
694
+ | 'backup_created'
695
+ | 'suspicious_activity';
696
+
697
+ /**
698
+ * Security event severity levels
699
+ */
700
+ export type SecurityEventSeverity = 'low' | 'medium' | 'high' | 'critical';
701
+
702
+ /**
703
+ * Security event severity mapping (single source of truth)
704
+ * Maps each event type to its default severity level
705
+ */
706
+ export const SECURITY_EVENT_SEVERITY_MAP: Record<SecurityEventType, SecurityEventSeverity> = {
707
+ 'sign_in': 'low',
708
+ 'sign_out': 'low',
709
+ 'profile_updated': 'low',
710
+ 'email_changed': 'medium',
711
+ 'device_added': 'medium',
712
+ 'device_removed': 'medium',
713
+ 'security_settings_changed': 'medium',
714
+ 'account_recovery': 'high',
715
+ 'private_key_exported': 'high',
716
+ 'backup_created': 'high',
717
+ 'suspicious_activity': 'critical',
718
+ };
719
+
720
+ /**
721
+ * Security activity event
722
+ */
723
+ export interface SecurityActivity {
724
+ id: string;
725
+ userId: string;
726
+ eventType: SecurityEventType;
727
+ eventDescription: string;
728
+ metadata?: Record<string, any>;
729
+ userAgent?: string;
730
+ deviceId?: string;
731
+ timestamp: string;
732
+ severity: SecurityEventSeverity;
733
+ createdAt: string;
734
+ }
735
+
736
+ /**
737
+ * Security activity response with pagination
738
+ */
739
+ export interface SecurityActivityResponse {
740
+ data: SecurityActivity[];
741
+ total: number;
742
+ limit: number;
743
+ offset: number;
744
+ hasMore: boolean;
745
+ }
746
+
747
+ export interface AssetUploadProgress {
748
+ fileId: string;
749
+ uploaded: number;
750
+ total: number;
751
+ percentage: number;
752
+ status: 'uploading' | 'processing' | 'complete' | 'error';
753
+ error?: string;
754
+ }
755
+
756
+ // Device-linked session interfaces — the sessions that share one physical
757
+ // device (GET /session/device/sessions/:sessionId). Distinct from the
758
+ // server-authority `DeviceSession` Mongoose model / `DeviceSessionState`.
759
+ export interface DeviceLinkedSession {
760
+ sessionId: string;
761
+ deviceId: string;
762
+ deviceName: string;
763
+ isActive: boolean;
764
+ lastActive: string;
765
+ expiresAt: string;
766
+ isCurrent: boolean;
767
+ user?: User;
768
+ createdAt?: string;
769
+ }
770
+
771
+ export interface DeviceLinkedSessionsResponse {
772
+ deviceId: string;
773
+ sessions: DeviceLinkedSession[];
774
+ }
775
+
776
+ export interface DeviceLinkedSessionLogoutResponse {
777
+ message: string;
778
+ deviceId: string;
779
+ sessionsTerminated: number;
780
+ }
781
+
782
+ export interface UpdateDeviceNameResponse {
783
+ message: string;
784
+ deviceName: string;
785
+ }
786
+