@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,72 @@
1
+ /**
2
+ * Analytics Methods Mixin
3
+ *
4
+ * Provides methods for analytics tracking and data retrieval
5
+ */
6
+ import type { OxyServicesBase } from '../OxyServices.base';
7
+ export declare function OxyServicesAnalyticsMixin<T extends typeof OxyServicesBase>(Base: T): {
8
+ new (...args: any[]): {
9
+ /**
10
+ * Track an analytics event
11
+ * @param eventName - Name of the event to track
12
+ * @param properties - Optional event properties
13
+ */
14
+ trackEvent(eventName: string, properties?: Record<string, any>): Promise<void>;
15
+ /**
16
+ * Get analytics data for a date range
17
+ * @param startDate - Optional start date (ISO string)
18
+ * @param endDate - Optional end date (ISO string)
19
+ * @returns Analytics data
20
+ */
21
+ getAnalytics(startDate?: string, endDate?: string): Promise<any>;
22
+ httpService: import("../HttpService").HttpService;
23
+ cloudURL: string;
24
+ config: import("../OxyServices.base").OxyConfig;
25
+ __resetTokensForTests(): void;
26
+ makeRequest<T_1>(method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", url: string, data?: any, options?: import("../HttpService").RequestOptions): Promise<T_1>;
27
+ getBaseURL(): string;
28
+ getClient(): import("../HttpService").HttpService;
29
+ createLinkedClient(config: import("../OxyServices.base").OxyConfig): import("..").LinkedHttpClient;
30
+ getMetrics(): {
31
+ totalRequests: number;
32
+ successfulRequests: number;
33
+ failedRequests: number;
34
+ cacheHits: number;
35
+ cacheMisses: number;
36
+ averageResponseTime: number;
37
+ };
38
+ clearCache(): void;
39
+ clearCacheEntry(key: string): void;
40
+ clearCacheByPrefix(prefix: string): number;
41
+ getCacheStats(): {
42
+ size: number;
43
+ hits: number;
44
+ misses: number;
45
+ hitRate: number;
46
+ };
47
+ getCloudURL(): string;
48
+ setTokens(accessToken: string): void;
49
+ clearTokens(): void;
50
+ onTokensChanged(listener: (accessToken: string | null) => void): () => void;
51
+ _cachedUserId: string | null | undefined;
52
+ _cachedAccessToken: string | null;
53
+ getCurrentUserId(): string | null;
54
+ hasValidToken(): boolean;
55
+ getAccessToken(): string | null;
56
+ getAccessTokenExpiry(): number | null;
57
+ waitForAuth(timeoutMs?: number): Promise<boolean>;
58
+ withAuthRetry<T_1>(operation: () => Promise<T_1>, operationName: string, options?: {
59
+ maxRetries?: number;
60
+ retryDelay?: number;
61
+ authTimeoutMs?: number;
62
+ }): Promise<T_1>;
63
+ validate(): Promise<boolean>;
64
+ handleError(error: unknown): Error;
65
+ healthCheck(): Promise<{
66
+ status: string;
67
+ users?: number;
68
+ timestamp?: string;
69
+ [key: string]: any;
70
+ }>;
71
+ };
72
+ } & T;
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Per-user App-Data Mixin
3
+ *
4
+ * Thin client around `/users/me/app-data/...` — a generic per-user JSON KV
5
+ * store on the API. Authenticated callers can read, write, list, and delete
6
+ * entries scoped to their own user account.
7
+ *
8
+ * Identifier rules (must match the API):
9
+ * - Both `namespace` and `key` must match `/^[a-z0-9_-]{1,64}$/u`.
10
+ *
11
+ * Limits (enforced by the API):
12
+ * - Serialized JSON values are capped at 64 KB.
13
+ * - Writes are rate-limited to 100 / minute / user.
14
+ *
15
+ * Intended use cases are small bits of cross-device app state — e.g. Academy
16
+ * course progress, "last viewed" markers, dismissed banner flags. Do not use
17
+ * this for large blobs or anything that needs server-side querying; it's a
18
+ * write-it-and-read-it-back store.
19
+ */
20
+ import type { OxyServicesBase } from '../OxyServices.base';
21
+ /** Thrown when a namespace or key fails the kebab/snake-case validator. */
22
+ export declare class OxyAppDataIdentifierError extends Error {
23
+ constructor(field: 'namespace' | 'key', value: string);
24
+ }
25
+ export declare function OxyServicesAppDataMixin<T extends typeof OxyServicesBase>(Base: T): {
26
+ new (...args: any[]): {
27
+ /**
28
+ * Read the value stored under `(namespace, key)` for the current user.
29
+ *
30
+ * @returns The previously-stored value, or `null` if nothing has been
31
+ * stored yet. Never throws on "not found" — a missing entry is
32
+ * semantically a `null` value.
33
+ */
34
+ getAppData<TValue = unknown>(namespace: string, key: string): Promise<TValue | null>;
35
+ /**
36
+ * Upsert the value under `(namespace, key)` for the current user.
37
+ *
38
+ * Returns the value the server confirmed it stored — typically the same
39
+ * value the caller passed in, but consumers should prefer the returned
40
+ * value (the API is the source of truth).
41
+ *
42
+ * @throws OxyAppDataIdentifierError when namespace or key is malformed.
43
+ */
44
+ setAppData<TValue = unknown>(namespace: string, key: string, value: TValue): Promise<TValue>;
45
+ /**
46
+ * Delete the value stored under `(namespace, key)` for the current user.
47
+ *
48
+ * Idempotent — resolves successfully whether or not the entry existed.
49
+ */
50
+ deleteAppData(namespace: string, key: string): Promise<void>;
51
+ /**
52
+ * List every entry stored under `namespace` for the current user.
53
+ *
54
+ * Returns an empty object when the namespace contains no entries (the
55
+ * endpoint never 404s on an empty namespace).
56
+ */
57
+ listAppData<TValue = unknown>(namespace: string): Promise<Record<string, TValue>>;
58
+ httpService: import("../HttpService").HttpService;
59
+ cloudURL: string;
60
+ config: import("../OxyServices.base").OxyConfig;
61
+ __resetTokensForTests(): void;
62
+ makeRequest<T_1>(method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", url: string, data?: any, options?: import("../HttpService").RequestOptions): Promise<T_1>;
63
+ getBaseURL(): string;
64
+ getClient(): import("../HttpService").HttpService;
65
+ createLinkedClient(config: import("../OxyServices.base").OxyConfig): import("..").LinkedHttpClient;
66
+ getMetrics(): {
67
+ totalRequests: number;
68
+ successfulRequests: number;
69
+ failedRequests: number;
70
+ cacheHits: number;
71
+ cacheMisses: number;
72
+ averageResponseTime: number;
73
+ };
74
+ clearCache(): void;
75
+ clearCacheEntry(key: string): void;
76
+ clearCacheByPrefix(prefix: string): number;
77
+ getCacheStats(): {
78
+ size: number;
79
+ hits: number;
80
+ misses: number;
81
+ hitRate: number;
82
+ };
83
+ getCloudURL(): string;
84
+ setTokens(accessToken: string): void;
85
+ clearTokens(): void;
86
+ onTokensChanged(listener: (accessToken: string | null) => void): () => void;
87
+ _cachedUserId: string | null | undefined;
88
+ _cachedAccessToken: string | null;
89
+ getCurrentUserId(): string | null;
90
+ hasValidToken(): boolean;
91
+ getAccessToken(): string | null;
92
+ getAccessTokenExpiry(): number | null;
93
+ waitForAuth(timeoutMs?: number): Promise<boolean>;
94
+ withAuthRetry<T_1>(operation: () => Promise<T_1>, operationName: string, options?: {
95
+ maxRetries?: number;
96
+ retryDelay?: number;
97
+ authTimeoutMs?: number;
98
+ }): Promise<T_1>;
99
+ validate(): Promise<boolean>;
100
+ handleError(error: unknown): Error;
101
+ healthCheck(): Promise<{
102
+ status: string;
103
+ users?: number;
104
+ timestamp?: string;
105
+ [key: string]: any;
106
+ }>;
107
+ };
108
+ } & T;
@@ -0,0 +1,329 @@
1
+ import type { AccountStorageUsageResponse, AssetUploadInput, AssetUrlResponse, AssetVariant, BatchFileAccessResponse, ServiceAssetMetadata, ServiceAssetMetadataBySha } from '../models/interfaces';
2
+ import type { OxyServicesBase } from '../OxyServices.base';
3
+ export declare function OxyServicesAssetsMixin<T extends typeof OxyServicesBase>(Base: T): {
4
+ new (...args: any[]): {
5
+ /**
6
+ * Service-token request, implemented by the auth mixin earlier in the
7
+ * composition pipeline (see `mixins/index.ts`). The assets mixin is typed
8
+ * against `OxyServicesBase`, which does not carry the auth mixin's methods,
9
+ * so this `declare` surfaces the inherited runtime method to TypeScript
10
+ * without re-implementing it. Used by
11
+ * {@link getServiceAssetMetadataByIds} to authenticate the server-to-server
12
+ * `/assets/service/by-ids` bulk fetch with a bearer service token.
13
+ */
14
+ makeServiceRequest: <R = unknown>(method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", url: string, data?: unknown, userId?: string) => Promise<R>;
15
+ /**
16
+ * Delete file
17
+ */
18
+ deleteFile(fileId: string): Promise<any>;
19
+ /**
20
+ * Build a synchronous, `<img src>`-ready URL for a **PUBLIC** Oxy asset.
21
+ *
22
+ * ## Contract — read before calling
23
+ *
24
+ * This is a pure string builder. It performs no network call and therefore
25
+ * has **no knowledge of the asset's visibility**. It always produces the
26
+ * public form: `${cloudURL}/<id>[?variant=…]`, which the CDN serves from
27
+ * the public media origin only.
28
+ *
29
+ * Consequently:
30
+ * - Call it ONLY when the asset is known to be `public` — e.g. avatars and
31
+ * profile banners, which {@link uploadAvatar} / {@link uploadProfileBanner}
32
+ * upload with `visibility: 'public'`.
33
+ * - For an asset that may be `private` or `unlisted` — anything uploaded
34
+ * through the generic {@link assetUpload} path, whose server-side default
35
+ * is private — this URL resolves to a hard **404**. Use
36
+ * {@link getFileDownloadUrlAsync}, which asks the API for a URL scoped to
37
+ * the current caller.
38
+ * - It must never guess visibility, and must never embed the caller's
39
+ * bearer token: the returned string is rendered into DOM attributes,
40
+ * browser network panels, HTTP caches, and logs.
41
+ *
42
+ * Passing `expiresIn` switches to the API-origin stream form
43
+ * (`${baseURL}/assets/<id>/stream?…`) WITHOUT any credential. That form
44
+ * still only serves what an unauthenticated request may see — it is not a
45
+ * synchronous private-asset path, and none exists: authorization for a
46
+ * private asset requires the round-trip in {@link getFileDownloadUrlAsync}.
47
+ */
48
+ getFileDownloadUrl(fileId: string, variant?: string, expiresIn?: number): string;
49
+ /**
50
+ * Resolve an asset id to a URL that is valid for the CURRENT caller,
51
+ * whatever the asset's visibility.
52
+ *
53
+ * Asks the API (`GET /assets/:id/url`) rather than guessing: a `public`
54
+ * asset resolves to the CDN form, while a `private`/`unlisted` asset the
55
+ * caller may read resolves to an API-origin stream URL carrying a scoped,
56
+ * short-lived media token. The returned URL is passed through **unchanged**
57
+ * — the SDK never rewrites, re-signs, or strips it.
58
+ *
59
+ * ## Failure behaviour — no CDN fallback
60
+ *
61
+ * Throws {@link AssetUrlResolutionError} when the API returns no URL or the
62
+ * request fails (including 401/403/404). It deliberately does NOT fall back
63
+ * to {@link getFileDownloadUrl}: that builder only produces the public CDN
64
+ * form, so falling back would hand the caller a URL that renders as a hard
65
+ * 404 for every private asset and would silently swallow the real failure.
66
+ * A caller that knows an asset is public should call the synchronous
67
+ * builder directly instead of relying on a fallback here.
68
+ *
69
+ * The resolved URL is cached per identity for well under the media token's
70
+ * lifetime — see {@link getAssetUrlCacheTTL}.
71
+ */
72
+ getFileDownloadUrlAsync(fileId: string, variant?: string, expiresIn?: number): Promise<string>;
73
+ /**
74
+ * List user files
75
+ */
76
+ listUserFiles(limit?: number, offset?: number): Promise<{
77
+ files: any[];
78
+ total: number;
79
+ hasMore: boolean;
80
+ }>;
81
+ /**
82
+ * Get account storage usage (server-side usage aggregated from assets)
83
+ */
84
+ getAccountStorageUsage(): Promise<AccountStorageUsageResponse>;
85
+ /**
86
+ * Get file content as text
87
+ */
88
+ getFileContentAsText(fileId: string, variant?: string): Promise<string>;
89
+ /**
90
+ * Get file content as blob
91
+ */
92
+ getFileContentAsBlob(fileId: string, variant?: string): Promise<Blob>;
93
+ /**
94
+ * Resolve access + a caller-scoped URL for many assets — each with its OWN
95
+ * requested variant — in ONE round trip via `POST /assets/batch-access`.
96
+ *
97
+ * `requests` is a per-file `{ fileId, variant? }` list (a `variant` of
98
+ * `undefined` asks for the original). `options.expiresIn` sets the requested
99
+ * media-token / signed-URL lifetime (seconds); `options.context` is the
100
+ * server-side access-check context. Entries with a blank `fileId` are
101
+ * dropped and exact `(fileId, variant)` duplicates are collapsed before the
102
+ * request; an empty effective list performs no network call.
103
+ *
104
+ * The server caps the batch at 100 entries — callers that page beyond that
105
+ * must chunk. Returns the raw per-file envelope (see
106
+ * {@link BatchFileAccessResponse}); most callers want {@link getFileDownloadUrls},
107
+ * which flattens it to just the usable URLs.
108
+ */
109
+ getBatchFileAccess(requests: Array<{
110
+ fileId: string;
111
+ variant?: string;
112
+ }>, options?: {
113
+ expiresIn?: number;
114
+ context?: string;
115
+ }): Promise<BatchFileAccessResponse>;
116
+ /**
117
+ * Resolve many assets — each with its OWN variant — to caller-scoped,
118
+ * `<img src>`-ready URLs in one round trip. The batch counterpart of
119
+ * {@link getFileDownloadUrlAsync}, built to resolve a whole grid page at once.
120
+ *
121
+ * `requests` is a per-file `{ fileId, variant? }` list (e.g. `poster` for a
122
+ * video, `thumb` for an image); the per-file variant RULE lives in the
123
+ * caller — core just forwards what it is given. `options.expiresIn` /
124
+ * `options.context` are passed through to the endpoint.
125
+ *
126
+ * Each returned URL is the API's own scoped form, passed through unchanged:
127
+ * the public CDN URL for a public asset, or an API-origin
128
+ * `/assets/:id/stream?…&mt=<media token>` URL for a private asset the caller
129
+ * may read. Ids the caller cannot access (or that do not exist) are simply
130
+ * OMITTED from the returned map — there is NO public-CDN fallback, so a grid
131
+ * never renders a known-404 URL. Callers detect a miss by the absent key
132
+ * (the map never contains an empty-string value). Keyed by `fileId`.
133
+ */
134
+ getFileDownloadUrls(requests: Array<{
135
+ fileId: string;
136
+ variant?: string;
137
+ }>, options?: {
138
+ expiresIn?: number;
139
+ context?: string;
140
+ }): Promise<Record<string, string>>;
141
+ /**
142
+ * Resolve many Oxy asset ids to their content-addressed metadata in one
143
+ * round-trip per chunk via `POST /assets/service/by-ids` (body `{ ids }`).
144
+ *
145
+ * Returns each asset's `sha256`, `mime`, byte `size`, and `status` — built
146
+ * for server-to-server callers (e.g. Mention's MTN Protocol blob-ref
147
+ * resolution) that need the content hash for an asset id. Ids are
148
+ * deduplicated and validated (empty/blank ids dropped) before being split
149
+ * into chunks of {@link SERVICE_ASSET_METADATA_CHUNK_SIZE} (the server-side
150
+ * cap). The server omits unknown/deleted ids from each chunk's `data`, so
151
+ * the merged result may be shorter than the requested id list and the caller
152
+ * is expected to map by `id`.
153
+ *
154
+ * **Service-token auth (required).** `/assets/service/by-ids` is guarded by
155
+ * `serviceAuthMiddleware` + the `files:read` scope and is called via
156
+ * `makeServiceRequest`, which attaches `Authorization: Bearer <serviceToken>`
157
+ * (the same client that calls `POST /assets/service/cache`). The calling
158
+ * client MUST be service-configured (`configureServiceAuth(apiKey,
159
+ * apiSecret)`) before invoking this method; otherwise `getServiceToken()`
160
+ * throws because no credentials are available. A plain user-session request
161
+ * is rejected by the route's service-auth guard.
162
+ *
163
+ * FAILURE IS NOT ABSENCE. The server legitimately omits unknown/deleted ids,
164
+ * so a short result is normal — which means a chunk that FAILED (a 429, a
165
+ * timeout, a 5xx) is indistinguishable from "those assets don't exist" if it
166
+ * simply contributes nothing. This method used to swallow a failed chunk and
167
+ * return the rest, so every caller silently read a throttled request as "no
168
+ * metadata": a backfill counted the asset as needing no update, and the
169
+ * signed-record builder embedded a media item with no hash. Both reported
170
+ * success while writing nothing, and the MTN chain's records are immutable.
171
+ *
172
+ * So a failed chunk THROWS {@link ServiceAssetMetadataError} by default,
173
+ * carrying the ids it could not resolve. A caller that genuinely wants
174
+ * best-effort opts in with `{ partial: true }` and gets the old behaviour
175
+ * explicitly. An empty/whitespace-only input resolves immediately with `[]`
176
+ * and performs no network call.
177
+ *
178
+ * Not cached at the SDK layer: it's a POST keyed on a multi-id body (low hit
179
+ * rate), mirroring the sibling service/POST methods which never cache.
180
+ */
181
+ getServiceAssetMetadataByIds(ids: string[], options?: {
182
+ partial?: boolean;
183
+ }): Promise<ServiceAssetMetadata[]>;
184
+ /**
185
+ * Reverse content-address lookup: resolve many content `sha256` digests to
186
+ * the servable Oxy asset holding each, in one round-trip per chunk via
187
+ * `POST /assets/service/by-sha256` (body `{ sha256s }`).
188
+ *
189
+ * This is the INVERSE of {@link getServiceAssetMetadataByIds}: given a
190
+ * record's `blob.sha256`, it returns the asset's `id`, `mime`, byte `size`,
191
+ * `status`, and — for active, public, CDN-reachable assets only — a public
192
+ * `url` (`cloud.oxy.so`). Built for server-to-server callers (e.g. Mention's
193
+ * MTN materializer / node-blob sync) that hold a content hash and need to
194
+ * map it back to a servable asset. Hashes are lowercased, validated against
195
+ * a 64-char hex pattern (malformed entries dropped client-side), and
196
+ * deduplicated before being split into chunks of
197
+ * {@link SERVICE_ASSET_METADATA_BY_SHA_CHUNK_SIZE} (the server-side cap). The
198
+ * server omits unknown/deleted hashes from each chunk's `data`, so the
199
+ * merged result may be shorter than the requested list and the caller is
200
+ * expected to map by `sha256`.
201
+ *
202
+ * **Service-token auth (required).** `/assets/service/by-sha256` is guarded
203
+ * by `serviceAuthMiddleware` + the `files:read` scope and is called via
204
+ * `makeServiceRequest` (`Authorization: Bearer <serviceToken>`, `cache:false`).
205
+ * The calling client MUST be service-configured (`configureServiceAuth`)
206
+ * before invoking; a plain user-session request is rejected by the route's
207
+ * service-auth guard.
208
+ *
209
+ * Resilience: chunks are independent. A failed chunk is logged and skipped —
210
+ * every entry that resolved is still returned. An empty input (or one whose
211
+ * every value is malformed) resolves immediately with `[]` and performs no
212
+ * network call.
213
+ *
214
+ * Not cached at the SDK layer: it's a POST keyed on a multi-hash body (low
215
+ * hit rate), mirroring the sibling service/POST methods which never cache.
216
+ */
217
+ getServiceAssetMetadataBySha256(sha256s: string[]): Promise<ServiceAssetMetadataBySha[]>;
218
+ /**
219
+ * Upload raw file data
220
+ */
221
+ uploadRawFile(file: AssetUploadInput, visibility?: "private" | "public" | "unlisted", metadata?: Record<string, any>): Promise<any>;
222
+ /**
223
+ * Upload file using Central Asset Service.
224
+ *
225
+ * Accepts either a web File/Blob or a React Native file descriptor
226
+ * ({uri, type, name, size}). RN descriptors are passed directly to
227
+ * FormData.append, which handles them natively.
228
+ */
229
+ assetUpload(file: AssetUploadInput, visibility?: "private" | "public" | "unlisted", metadata?: Record<string, any>, onProgress?: (progress: number) => void): Promise<any>;
230
+ /**
231
+ * Link asset to an entity
232
+ */
233
+ assetLink(fileId: string, app: string, entityType: string, entityId: string, visibility?: "private" | "public" | "unlisted", webhookUrl?: string): Promise<any>;
234
+ /**
235
+ * Unlink asset from an entity
236
+ */
237
+ assetUnlink(fileId: string, app: string, entityType: string, entityId: string): Promise<any>;
238
+ /**
239
+ * Get asset metadata
240
+ */
241
+ assetGet(fileId: string): Promise<any>;
242
+ /**
243
+ * Get asset URL (CDN or signed URL)
244
+ */
245
+ assetGetUrl(fileId: string, variant?: string, expiresIn?: number): Promise<AssetUrlResponse>;
246
+ /**
247
+ * Restore asset from trash
248
+ */
249
+ assetRestore(fileId: string): Promise<any>;
250
+ /**
251
+ * Delete asset with optional force
252
+ */
253
+ assetDelete(fileId: string, force?: boolean): Promise<any>;
254
+ /**
255
+ * Get list of available variants for an asset
256
+ */
257
+ assetGetVariants(fileId: string): Promise<AssetVariant[]>;
258
+ /**
259
+ * Update asset visibility
260
+ */
261
+ assetUpdateVisibility(fileId: string, visibility: "private" | "public" | "unlisted"): Promise<any>;
262
+ uploadAvatar(file: AssetUploadInput, userId: string, app?: string): Promise<any>;
263
+ uploadProfileBanner(file: AssetUploadInput, userId: string, app?: string): Promise<any>;
264
+ /**
265
+ * How long a resolved asset URL may stay in the SDK's GET cache, in ms.
266
+ *
267
+ * A resolved private-asset URL dies the instant its scoped media token
268
+ * expires (~{@link ASSET_MEDIA_TOKEN_TTL_MS}). Caching it for its full
269
+ * nominal lifetime would leave a window where the cache serves an
270
+ * already-dead URL (clock skew, render-pipeline latency, an image request
271
+ * queued behind others). So the TTL is (a) never longer than the token's
272
+ * lifetime and (b) discounted to {@link ASSET_URL_CACHE_LIFETIME_FRACTION}
273
+ * of that bound — comfortably below the token TTL by construction.
274
+ */
275
+ getAssetUrlCacheTTL(expiresIn?: number): number;
276
+ fetchAssetDownloadUrl(fileId: string, variant?: string, cacheTTL?: number, expiresIn?: number): Promise<string | null>;
277
+ fetchAssetContent(url: string, type: "text"): Promise<string>;
278
+ fetchAssetContent(url: string, type: "blob"): Promise<Blob>;
279
+ httpService: import("../HttpService").HttpService;
280
+ cloudURL: string;
281
+ config: import("../OxyServices.base").OxyConfig;
282
+ __resetTokensForTests(): void;
283
+ makeRequest<T_1>(method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE", url: string, data?: any, options?: import("../HttpService").RequestOptions): Promise<T_1>;
284
+ getBaseURL(): string;
285
+ getClient(): import("../HttpService").HttpService;
286
+ createLinkedClient(config: import("../OxyServices.base").OxyConfig): import("..").LinkedHttpClient;
287
+ getMetrics(): {
288
+ totalRequests: number;
289
+ successfulRequests: number;
290
+ failedRequests: number;
291
+ cacheHits: number;
292
+ cacheMisses: number;
293
+ averageResponseTime: number;
294
+ };
295
+ clearCache(): void;
296
+ clearCacheEntry(key: string): void;
297
+ clearCacheByPrefix(prefix: string): number;
298
+ getCacheStats(): {
299
+ size: number;
300
+ hits: number;
301
+ misses: number;
302
+ hitRate: number;
303
+ };
304
+ getCloudURL(): string;
305
+ setTokens(accessToken: string): void;
306
+ clearTokens(): void;
307
+ onTokensChanged(listener: (accessToken: string | null) => void): () => void;
308
+ _cachedUserId: string | null | undefined;
309
+ _cachedAccessToken: string | null;
310
+ getCurrentUserId(): string | null;
311
+ hasValidToken(): boolean;
312
+ getAccessToken(): string | null;
313
+ getAccessTokenExpiry(): number | null;
314
+ waitForAuth(timeoutMs?: number): Promise<boolean>;
315
+ withAuthRetry<T_1>(operation: () => Promise<T_1>, operationName: string, options?: {
316
+ maxRetries?: number;
317
+ retryDelay?: number;
318
+ authTimeoutMs?: number;
319
+ }): Promise<T_1>;
320
+ validate(): Promise<boolean>;
321
+ handleError(error: unknown): Error;
322
+ healthCheck(): Promise<{
323
+ status: string;
324
+ users?: number;
325
+ timestamp?: string;
326
+ [key: string]: any;
327
+ }>;
328
+ };
329
+ } & T;