@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,51 @@
1
+ import type { UserNameResponse } from '@oxy.so/contracts';
2
+ export interface ClientSession {
3
+ sessionId: string;
4
+ deviceId: string;
5
+ expiresAt: string;
6
+ lastActive: string;
7
+ userId?: string;
8
+ isCurrent?: boolean;
9
+ /**
10
+ * The account's ordinal slot (0..N) within the device's account set
11
+ * (`SessionAccount.authuser` in `@oxy.so/contracts`), projected from the
12
+ * device-first `DeviceSessionState` — used purely for stable Google-style
13
+ * account-chooser ordering, not for any token-refresh mechanism.
14
+ */
15
+ authuser?: number;
16
+ /**
17
+ * The HUMAN operating this account, when it is a delegated session — the
18
+ * audit actor behind "The Oxy Collective". Absent when the session belongs to
19
+ * the account itself.
20
+ *
21
+ * The flat wire shape has carried it since the multi-account model shipped and
22
+ * nothing read it, so an operated org rendered exactly like a directly
23
+ * signed-in one. `SessionClient.getActiveContext()` is the richer answer
24
+ * (ADR 0002); this is the same fact on the compatibility lane.
25
+ */
26
+ operatedByUserId?: string;
27
+ }
28
+ export interface StorageKeys {
29
+ sessions: string;
30
+ activeSessionId: string;
31
+ }
32
+ export interface MinimalUserData {
33
+ id: string;
34
+ username: string;
35
+ name: UserNameResponse;
36
+ avatar?: string;
37
+ }
38
+ export interface SessionLoginResponse {
39
+ sessionId: string;
40
+ deviceId: string;
41
+ expiresAt: string;
42
+ user: MinimalUserData;
43
+ /** JWT access token for API authentication */
44
+ accessToken?: string;
45
+ /**
46
+ * Rotating zero-cookie device credential minted on sign-in / claim. Persisted
47
+ * first-party alongside `deviceId` so cold boot can re-mint via
48
+ * `POST /session/device/token`.
49
+ */
50
+ deviceSecret?: string;
51
+ }
@@ -0,0 +1,130 @@
1
+ import type { NextFunction, Request, RequestHandler, Response } from 'express';
2
+ import type { OxyServices } from '../OxyServices';
3
+ import { OXY_SERVICE_ENVIRONMENTS, type OxyServiceEnvironment } from '../utils/oxyServiceEnvironment';
4
+ export { OXY_SERVICE_ENVIRONMENTS };
5
+ export type { OxyServiceEnvironment };
6
+ export interface OxyRequestUser {
7
+ id: string;
8
+ _id?: string;
9
+ username?: string;
10
+ email?: string;
11
+ avatar?: string;
12
+ [key: string]: unknown;
13
+ }
14
+ export interface OxyServiceAppContext {
15
+ appId: string;
16
+ appName: string;
17
+ scopes: string[];
18
+ credentialId: string;
19
+ /**
20
+ * The Oxy account that owns `appId` and is financially responsible for it.
21
+ * Read off the VERIFIED service-token claim set — never a user id, and never
22
+ * the delegated `X-Oxy-User-Id` (ADR 0007).
23
+ */
24
+ ownerAccountId: string;
25
+ environment: OxyServiceEnvironment;
26
+ }
27
+ export interface OxyServiceActingAsContext {
28
+ userId: string;
29
+ scopes: string[];
30
+ }
31
+ export interface OxyAuthRequest extends Request {
32
+ userId?: string | null;
33
+ user?: OxyRequestUser | null;
34
+ accessToken?: string;
35
+ sessionId?: string | null;
36
+ serviceApp?: OxyServiceAppContext;
37
+ serviceActingAs?: OxyServiceActingAsContext;
38
+ }
39
+ export interface OxyAuthenticatedRequest extends OxyAuthRequest {
40
+ userId: string;
41
+ user: OxyRequestUser;
42
+ }
43
+ export interface OxyAuthMiddlewareOptions {
44
+ /**
45
+ * Options forwarded to `oxy.auth()`.
46
+ * `optional` is forced to `true` by the composed helpers so route guards can
47
+ * produce one consistent 401 shape.
48
+ */
49
+ auth?: Parameters<OxyServices['auth']>[0];
50
+ }
51
+ export declare function getOxyUserId(req: Request): string | null;
52
+ export declare function isOxyAuthenticated(req: Request): req is OxyAuthenticatedRequest;
53
+ /**
54
+ * The principal a request is CHARGED to, and the identifiers a receipt needs.
55
+ *
56
+ * Every field is read from the verified service-token claim set. It is an
57
+ * OBJECT, not a string, and that is the point: `getOxyUserId` returns a
58
+ * `string | null`, so a delegated end-user id cannot be passed anywhere an
59
+ * `OxyBillingPrincipal` is expected. The confusion ADR 0007 forbids —
60
+ * attributing spend to the person a service is acting for rather than to the
61
+ * service's own account — stops being a code-review question and becomes a
62
+ * compile error.
63
+ *
64
+ * `scopes` are the effective scopes minted into the token (credential ∩
65
+ * application). Nothing re-intersects them here.
66
+ */
67
+ export interface OxyBillingPrincipal {
68
+ /** `applications.owner_account_id` — the financially responsible account. */
69
+ readonly accountId: string;
70
+ readonly applicationId: string;
71
+ readonly credentialId: string;
72
+ readonly environment: OxyServiceEnvironment;
73
+ readonly scopes: readonly string[];
74
+ }
75
+ /**
76
+ * The full canonical attribution of ADR 0007 for a request: the billing
77
+ * principal PLUS the optional delegated end user.
78
+ *
79
+ * `delegatedUserId` is named for what it is. It answers "on whose behalf" and
80
+ * is absent for a machine credential acting for itself — its absence is normal,
81
+ * and nothing may synthesize one. If removing it would change what any account
82
+ * is charged, the code reading it is wrong.
83
+ */
84
+ export interface OxyRequestAttribution extends OxyBillingPrincipal {
85
+ readonly delegatedUserId: string | null;
86
+ }
87
+ /**
88
+ * The billing principal of a request, or `null` when the request carries no
89
+ * verified service principal (an ordinary user session is not a billable
90
+ * machine principal — its account is resolved from the account graph, not from
91
+ * a token claim).
92
+ *
93
+ * Reads `req.serviceApp` and NOTHING else: not `req.userId`, not `req.user`,
94
+ * not `req.serviceActingAs`. That exclusivity is the invariant this function
95
+ * exists to hold, and `serviceTokenAttribution.test.ts` mutation-tests it.
96
+ *
97
+ * **It answers for the SERVICE-TOKEN lane only.** The API's machine-credential
98
+ * lane (`oxy_sk_*`, issue #972 §2.3) resolves the same five facts into its own
99
+ * `req.machineCredential`, deliberately never `req.serviceApp` — populating the
100
+ * latter would hand a self-serve third-party credential the lane that only
101
+ * platform-trusted applications may enter. So a machine-credential request has
102
+ * no billing principal HERE and resolves `null`, which fails closed: the caller
103
+ * must handle it, and `getRequiredOxyBillingPrincipal` throws rather than
104
+ * charging anyone. One accessor answering for both lanes belongs to the public
105
+ * inference edge that has to admit both, and it needs the machine principal's
106
+ * shape to move into this package first.
107
+ */
108
+ export declare function getOxyBillingPrincipal(req: Request): OxyBillingPrincipal | null;
109
+ /**
110
+ * {@link getOxyBillingPrincipal}, throwing when the request has none. Use on
111
+ * routes that have already required a service token.
112
+ */
113
+ export declare function getRequiredOxyBillingPrincipal(req: Request): OxyBillingPrincipal;
114
+ /**
115
+ * The delegated end user of a service request, or `null`.
116
+ *
117
+ * Deliberately reads `req.serviceActingAs` — the grant-verified delegation —
118
+ * and not `req.userId`, which on a non-service request is the caller's own
119
+ * session identity and is not a delegation at all.
120
+ */
121
+ export declare function getOxyDelegatedUserId(req: Request): string | null;
122
+ /**
123
+ * The whole attribution tuple for a service request: who pays, which
124
+ * application and credential, and optionally on whose behalf.
125
+ */
126
+ export declare function getOxyRequestAttribution(req: Request): OxyRequestAttribution | null;
127
+ export declare function getRequiredOxyUserId(req: Request): string;
128
+ export declare function requireOxyAuth(req: Request, res: Response, next: NextFunction): void;
129
+ export declare function createOptionalOxyAuth(oxy: OxyServices, options?: OxyAuthMiddlewareOptions): RequestHandler;
130
+ export declare function createOxyAuthMiddleware(oxy: OxyServices, options?: OxyAuthMiddlewareOptions): RequestHandler;
@@ -0,0 +1,41 @@
1
+ import { type KeyObject } from 'node:crypto';
2
+ import { type CapabilityTicketClaims, type GrantLimit, type PolicyDecision } from '@oxy.so/contracts';
3
+ import type { Request, RequestHandler } from 'express';
4
+ type UnsignedCapabilityTicketClaims = Omit<CapabilityTicketClaims, 'iss' | 'iat' | 'exp' | 'jti'>;
5
+ export interface CapabilityTicketSigningOptions {
6
+ privateKey: KeyObject;
7
+ keyId: string;
8
+ issuer: string;
9
+ ttlSeconds?: number;
10
+ now?: Date;
11
+ jti?: string;
12
+ }
13
+ export interface CapabilityTicketVerificationOptions {
14
+ resolvePublicKey: (keyId: string) => KeyObject | undefined;
15
+ audience: string;
16
+ issuer?: string;
17
+ now?: Date;
18
+ maximumTtlSeconds?: number;
19
+ }
20
+ export interface CapabilityTicketRequest extends Request {
21
+ capabilityTicket?: CapabilityTicketClaims;
22
+ }
23
+ export interface CapabilityTicketMiddlewareOptions extends CapabilityTicketVerificationOptions {
24
+ authorize: (claims: CapabilityTicketClaims) => Promise<PolicyDecision>;
25
+ }
26
+ export declare class CapabilityTicketError extends Error {
27
+ readonly code: 'malformed' | 'invalid_signature' | 'unknown_key' | 'invalid_claims' | 'expired' | 'not_yet_valid' | 'wrong_audience' | 'wrong_issuer' | 'ttl_exceeded';
28
+ constructor(code: 'malformed' | 'invalid_signature' | 'unknown_key' | 'invalid_claims' | 'expired' | 'not_yet_valid' | 'wrong_audience' | 'wrong_issuer' | 'ttl_exceeded', message: string);
29
+ }
30
+ /** Enforces the signed per-action bounds before a domain handler runs. */
31
+ export declare function inputSatisfiesCapabilityLimits(tool: string, input: Record<string, unknown>, limits: readonly GrantLimit[]): boolean;
32
+ export declare function issueCapabilityTicket(claims: UnsignedCapabilityTicketClaims, options: CapabilityTicketSigningOptions): string;
33
+ export declare function verifyCapabilityTicket(token: string, options: CapabilityTicketVerificationOptions): CapabilityTicketClaims;
34
+ export declare function readCapabilityAuthorization(authorization: string | undefined): string | null;
35
+ /**
36
+ * Verifies cryptographic scope first, then asks the authority service for a
37
+ * live decision. This second check is what makes revocation effective between
38
+ * planning and execution.
39
+ */
40
+ export declare function createCapabilityTicketMiddleware(options: CapabilityTicketMiddlewareOptions): RequestHandler;
41
+ export {};
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Strict CORS allowlist for Oxy backends.
3
+ *
4
+ * WHY THIS EXISTS
5
+ * ---------------
6
+ * App backends kept hand-rolling CORS, and the unsafe patterns recurred:
7
+ * - `Access-Control-Allow-Origin: *` together with credentials (which is
8
+ * spec-invalid AND a credential-leak vector), or
9
+ * - a "reflect whatever Origin the request carried" fallback (effectively
10
+ * `*` for credentialed requests — the Allo wildcard-fallback class).
11
+ *
12
+ * `createOxyCors` returns a self-contained Express middleware (no `cors`
13
+ * package dependency) that:
14
+ * - allows the Oxy apex origin family over HTTPS only: the apex plus
15
+ * one-label subdomains such as `auth.oxy.so`, `api.oxy.so`,
16
+ * `accounts.oxy.so`, `console.oxy.so`, and `inbox.oxy.so`,
17
+ * - allows the caller's explicit `appOrigins`,
18
+ * - REFUSES the opaque origin on both sides (see `OPAQUE_ORIGIN`),
19
+ * - DENIES everything else (no reflection, never a wildcard with credentials),
20
+ * - echoes back the EXACT matched origin (so credentialed requests work) and
21
+ * sets `Vary: Origin` for correct caching,
22
+ * - answers CORS preflight (`OPTIONS`) with `204`.
23
+ *
24
+ * Node/Express-only: exported solely from `@oxy.so/core/server`.
25
+ */
26
+ import type { RequestHandler } from 'express';
27
+ export interface OxyCorsOptions {
28
+ /**
29
+ * Explicit additional allowed origins (exact-origin match, e.g.
30
+ * `https://app.example.com`, `http://localhost:3000`). These are allowed IN
31
+ * ADDITION TO the built-in HTTPS Oxy apex origin family. Each is normalized
32
+ * via `new URL().origin`.
33
+ *
34
+ * An entry that is not a URL, or whose origin is the opaque origin
35
+ * (`exp://…`, `capacitor://…`, `chrome-extension://…`, `file:`, `data:`), is
36
+ * DROPPED with an error log rather than admitted — see `OPAQUE_ORIGIN` for
37
+ * why one such entry would otherwise admit every other one.
38
+ */
39
+ appOrigins?: string[];
40
+ /**
41
+ * Whether to emit `Access-Control-Allow-Credentials: true`. Default `true`
42
+ * (the Oxy ecosystem uses cookie/bearer credentials). Even when `true`, the
43
+ * helper NEVER emits a wildcard origin — only an exact matched origin.
44
+ */
45
+ allowCredentials?: boolean;
46
+ /** HTTP methods to allow. Defaults to the full standard set. */
47
+ methods?: string[];
48
+ /** Request headers to allow. Defaults to the common Oxy set. */
49
+ allowedHeaders?: string[];
50
+ /** Response headers to expose to the browser. Defaults to none. */
51
+ exposedHeaders?: string[];
52
+ /** Preflight cache lifetime in seconds. Default 86400 (24h). */
53
+ maxAgeSeconds?: number;
54
+ }
55
+ /**
56
+ * Normalize the configured `appOrigins` into the exact-match set — the
57
+ * CONFIGURE-SIDE half of the opaque-origin guard.
58
+ *
59
+ * An entry that is not a URL, or whose origin is opaque, is dropped and named
60
+ * in an error log. Dropped rather than thrown on because `appOrigins` is
61
+ * deployment configuration — at least one Oxy backend reads it from the
62
+ * environment — and a typo there must cost that one origin its CORS headers,
63
+ * never the whole service its boot. Both failure modes are equally SAFE (the
64
+ * entry is absent from the set either way), so the choice is purely about
65
+ * blast radius, and dropping keeps it to one origin whose requests then fail
66
+ * visibly in the browser.
67
+ *
68
+ * Exported for `__tests__/cors.socket.test.ts` and NOT re-exported from
69
+ * `server/index.ts`, so it is not part of the package's public surface. The
70
+ * two halves of the guard are separately exported because they are separately
71
+ * testable only that way: with this half in place the match-side half is
72
+ * unreachable through `createOxyCors`, so a test driving the public API alone
73
+ * would measure this function twice and the other one never.
74
+ */
75
+ export declare function normalizeAppOrigins(appOrigins: string[]): Set<string>;
76
+ /**
77
+ * Whether `origin` may be echoed back: it is in the built-in HTTPS Oxy apex
78
+ * family, or it exactly matches one of the configured app origins.
79
+ *
80
+ * The opaque-origin refusal here is the MATCH-SIDE half of the guard, and it
81
+ * is what makes the property hold regardless of how `explicit` was built — a
82
+ * set that somehow contains `"null"` still matches nothing, because no
83
+ * incoming origin ever normalizes past this line. `normalizeAppOrigins` is
84
+ * what stops such a set existing today; this is what stops it mattering.
85
+ *
86
+ * Exported for the same reason as `normalizeAppOrigins`, and likewise absent
87
+ * from `server/index.ts`.
88
+ */
89
+ export declare function matchesAllowedOrigin(explicit: ReadonlySet<string>, origin: string): boolean;
90
+ /**
91
+ * Create a strict Oxy CORS middleware. See module docs.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * app.use(createOxyCors({ appOrigins: ['https://app.example.com'] }));
96
+ * ```
97
+ */
98
+ export declare function createOxyCors(options?: OxyCorsOptions): RequestHandler;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @oxy.so/core/server — Server-only utilities for Oxy backends
3
+ *
4
+ * This subpath export provides Express middleware and Node.js-specific
5
+ * utilities that are not available in React Native or browser environments.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import { createOxyRateLimit } from '@oxy.so/core/server';
10
+ * import { oxyClient } from '@oxy.so/core';
11
+ *
12
+ * const oxy = oxyClient({ apiUrl: 'https://api.oxy.so' });
13
+ *
14
+ * app.use(createOxyRateLimit(oxy, { store: redisStore }));
15
+ * ```
16
+ */
17
+ export { createOptionalOxyAuth, createOxyAuthMiddleware, getOxyBillingPrincipal, getOxyDelegatedUserId, getOxyRequestAttribution, getOxyUserId, getRequiredOxyBillingPrincipal, getRequiredOxyUserId, isOxyAuthenticated, requireOxyAuth, OXY_SERVICE_ENVIRONMENTS, } from './auth';
18
+ export type { OxyAuthenticatedRequest, OxyAuthMiddlewareOptions, OxyAuthRequest, OxyBillingPrincipal, OxyRequestAttribution, OxyRequestUser, OxyServiceActingAsContext, OxyServiceAppContext, OxyServiceEnvironment, } from './auth';
19
+ export { createOxyRateLimit } from './rateLimit';
20
+ export type { OxyRateLimitOptions } from './rateLimit';
21
+ export { assertSafePublicUrl, isBlockedIp, safeFetch, SsrfRejection, UpstreamError, ALLOWED_PORTS, ALLOWED_PROTOCOLS, BLOCKED_HOSTNAMES, DEFAULT_USER_AGENT, MAX_REDIRECTS, MAX_URL_LENGTH, UPSTREAM_HEADERS_TIMEOUT_MS, } from './safeFetch';
22
+ export type { SafeFetchOptions, SafeFetchResult, SsrfCheckFail, SsrfCheckOk, SsrfCheckResult, } from './safeFetch';
23
+ export { createOxyCors } from './cors';
24
+ export type { OxyCorsOptions } from './cors';
25
+ export { buildOxyCspDirectives, buildOxyPagesHeaders, createOxySecurityHeaders, cspSourcesFor, extractInlineScripts, formatOxyCspPolicy, inlineScriptCspHash, OXY_CSP_BASELINE, } from './securityHeaders';
26
+ export type { OxyCspDirective, OxyCspExtensions, OxyPagesHeadersOptions, OxySecurityHeadersOptions, } from './securityHeaders';
27
+ export { CapabilityTicketError, createCapabilityTicketMiddleware, inputSatisfiesCapabilityLimits, issueCapabilityTicket, readCapabilityAuthorization, verifyCapabilityTicket, } from './capabilityTicket';
28
+ export type { CapabilityTicketMiddlewareOptions, CapabilityTicketRequest, CapabilityTicketSigningOptions, CapabilityTicketVerificationOptions, } from './capabilityTicket';
29
+ export { verifySecret } from './verifySecret';
30
+ export { createOxyUserInvalidationHandler, publishOxyUserInvalidation, } from './userInvalidation';
31
+ export type { OxyInvalidationPublisher, OxyUserInvalidationHandlerOptions, } from './userInvalidation';
32
+ export { evictOxyIdentityCache, oxyUserByIdCacheKey, OXY_IDENTITY_CACHE_PREFIXES } from '../utils/identityCacheSweep';
33
+ export type { OxyIdentityCacheEvictor } from '../utils/identityCacheSweep';
34
+ export { registrableApex } from '../utils/registrableApex';
35
+ export { isOfficialWebOrigin } from '../utils/officialOrigins';
@@ -0,0 +1,40 @@
1
+ import type { Request, RequestHandler } from 'express';
2
+ import { type Store } from 'express-rate-limit';
3
+ import type { OxyServices } from '../OxyServices';
4
+ export interface OxyRateLimitOptions {
5
+ /**
6
+ * Max requests per window for AUTHENTICATED users (keyed per user).
7
+ * Default 5000 — ~5.5 req/s sustained, comfortable for a media client that
8
+ * fans out into many small requests per screen.
9
+ */
10
+ authenticatedMax?: number;
11
+ /**
12
+ * Max requests per window for ANONYMOUS callers (keyed per IP).
13
+ * Default 600 — enough to browse public pages while bounding abuse.
14
+ */
15
+ anonymousMax?: number;
16
+ /** Rate-limit window in milliseconds. Default 15 minutes. */
17
+ windowMs?: number;
18
+ /**
19
+ * Optional `express-rate-limit` store (e.g. a Redis store) for distributed
20
+ * limiting across instances. Defaults to the library's in-memory store.
21
+ */
22
+ store?: Store;
23
+ /**
24
+ * Extra path predicates to exempt from limiting, in addition to the built-in
25
+ * exemptions (uploads, image proxy, streaming sub-requests, health probes,
26
+ * CORS preflight). Return `true` to skip limiting for the request.
27
+ */
28
+ exempt?: (req: Request) => boolean;
29
+ /** Response message body sent with a 429. */
30
+ message?: string;
31
+ /**
32
+ * Options forwarded to the internal `oxy.auth({ optional: true })` resolver
33
+ * (e.g. `{ jwtSecret }` to verify service tokens). `optional` is forced true.
34
+ */
35
+ auth?: Parameters<OxyServices['auth']>[0];
36
+ }
37
+ /**
38
+ * Build the composed Oxy rate-limit middleware. See module docs for rationale.
39
+ */
40
+ export declare function createOxyRateLimit(oxy: OxyServices, options?: OxyRateLimitOptions): RequestHandler;
@@ -0,0 +1,137 @@
1
+ /**
2
+ * SSRF-safe upstream HTTP fetch for Oxy backends.
3
+ *
4
+ * WHY THIS EXISTS
5
+ * ---------------
6
+ * Every Oxy backend that contacts a caller-influenced URL — media proxies,
7
+ * the website MCP image upload/debug tools, federated fetches, link
8
+ * unfurlers — needs the exact same Server-Side Request Forgery (SSRF)
9
+ * defence. Apps were re-implementing it (or worse, omitting it), so the
10
+ * gold-standard primitive (originally `packages/backend/src/utils` in
11
+ * Mention) lives here ONCE.
12
+ *
13
+ * THE CONTRACT
14
+ * ------------
15
+ * - Every URL — including each redirect hop — is validated by
16
+ * {@link assertSafePublicUrl}: a real DNS resolution plus a denylist of
17
+ * private/reserved/metadata ranges (10/8, 127/8, 169.254.169.254, ::1, …).
18
+ * - The TCP connection is PINNED to the validated IP via a custom `lookup`,
19
+ * closing the DNS-rebind TOCTOU window — DNS is NOT re-resolved at connect
20
+ * time, so the address we validated is exactly the address Node connects to.
21
+ * - Redirects are followed manually (bounded) so every hop is re-validated and
22
+ * redirect bodies (potentially unbounded) are destroyed, not drained.
23
+ *
24
+ * Node-only: this module imports `node:http`/`node:https`/`node:dns` and is
25
+ * exported solely from `@oxy.so/core/server`. It MUST NOT be reachable from the
26
+ * browser `@oxy.so/core` entry.
27
+ */
28
+ import { type IncomingMessage, type IncomingHttpHeaders } from 'node:http';
29
+ /** Maximum accepted length of an input URL (DoS guard). */
30
+ export declare const MAX_URL_LENGTH = 2048;
31
+ /** The only network ports a safe fetch is allowed to reach upstream. */
32
+ export declare const ALLOWED_PORTS: ReadonlySet<number>;
33
+ /** Protocols a safe fetch is allowed to contact. */
34
+ export declare const ALLOWED_PROTOCOLS: ReadonlySet<string>;
35
+ /**
36
+ * Time-to-first-byte deadline: how long to wait for the upstream to establish
37
+ * the connection and send its RESPONSE HEADERS before aborting. Enforced via
38
+ * `req.setTimeout` on the `ClientRequest`; once headers arrive, the caller owns
39
+ * the (longer) streaming lifetime of the response body.
40
+ */
41
+ export declare const UPSTREAM_HEADERS_TIMEOUT_MS = 8000;
42
+ /** Maximum number of HTTP redirects to follow; each hop is re-validated. */
43
+ export declare const MAX_REDIRECTS = 5;
44
+ /** Default User-Agent presented to upstreams when the caller does not set one. */
45
+ export declare const DEFAULT_USER_AGENT = "OxyServices/1.0 (+https://oxy.so)";
46
+ /** Hostnames that must never be resolved or contacted, regardless of DNS. */
47
+ export declare const BLOCKED_HOSTNAMES: ReadonlySet<string>;
48
+ export interface SsrfCheckOk {
49
+ ok: true;
50
+ /** The validated literal IP the caller MUST connect to. */
51
+ ip: string;
52
+ /** IP family of the validated address (4 or 6). */
53
+ family: 4 | 6;
54
+ }
55
+ export interface SsrfCheckFail {
56
+ ok: false;
57
+ /** Human-readable, non-sensitive reason (safe to log; not echoed to clients). */
58
+ reason: string;
59
+ }
60
+ export type SsrfCheckResult = SsrfCheckOk | SsrfCheckFail;
61
+ /**
62
+ * Return true if a literal IP address is private/loopback/link-local/reserved/
63
+ * multicast/metadata and therefore must NOT be contacted.
64
+ */
65
+ export declare function isBlockedIp(rawIp: string): boolean;
66
+ /**
67
+ * Validate that a URL is syntactically a public http(s) URL and that its
68
+ * hostname resolves ONLY to non-blocked, public IP addresses.
69
+ *
70
+ * On success, returns the single validated IP (the first allowed record) that
71
+ * the HTTP client MUST pin its connection to. Every resolved address is checked;
72
+ * if ANY resolves into a blocked range the URL is rejected (an attacker
73
+ * controlling a multi-record DNS response cannot smuggle one internal IP past
74
+ * the check).
75
+ *
76
+ * Re-run this on EVERY redirect hop so a public hostname cannot redirect (or
77
+ * DNS-rebind) into an internal address.
78
+ */
79
+ export declare function assertSafePublicUrl(rawUrl: string): Promise<SsrfCheckResult>;
80
+ /** Marker error for a blocked SSRF target (map to 403 at the route layer). */
81
+ export declare class SsrfRejection extends Error {
82
+ constructor(reason: string);
83
+ }
84
+ /** Marker error for a generic upstream failure (map to 502 at the route layer). */
85
+ export declare class UpstreamError extends Error {
86
+ constructor(reason: string);
87
+ }
88
+ /** Options for {@link safeFetch}. */
89
+ export interface SafeFetchOptions {
90
+ /** HTTP method. Defaults to `GET`. */
91
+ method?: string;
92
+ /** Extra request headers. A `User-Agent` is added if none is provided. */
93
+ headers?: Record<string, string>;
94
+ /** Request body for POST/PUT/PATCH. */
95
+ body?: string | Buffer;
96
+ /**
97
+ * Maximum number of redirects to follow (each re-validated). Defaults to
98
+ * {@link MAX_REDIRECTS}. Set to `0` to disallow redirects.
99
+ */
100
+ maxRedirects?: number;
101
+ /**
102
+ * Time-to-first-byte deadline in milliseconds (connect + response headers).
103
+ * Defaults to {@link UPSTREAM_HEADERS_TIMEOUT_MS}.
104
+ */
105
+ headersTimeoutMs?: number;
106
+ /**
107
+ * Optional external abort signal. When it fires the in-flight request is
108
+ * destroyed.
109
+ */
110
+ signal?: AbortSignal;
111
+ }
112
+ /** The validated, non-redirect response returned by {@link safeFetch}. */
113
+ export interface SafeFetchResult {
114
+ /**
115
+ * The first non-redirect response. The caller OWNS draining/destroying this
116
+ * stream (stream it to the client, or buffer a bounded prefix, then destroy).
117
+ */
118
+ response: IncomingMessage;
119
+ /** The HTTP status code of the response. */
120
+ status: number;
121
+ /** Response headers. */
122
+ headers: IncomingHttpHeaders;
123
+ /** The final, post-redirect URL that produced the response. */
124
+ finalUrl: string;
125
+ }
126
+ /**
127
+ * SSRF-safe HTTP(S) fetch. Validates the URL (and every redirect hop) against
128
+ * the private/metadata-range denylist, pins the connection to the validated IP,
129
+ * follows a bounded number of redirects (destroying redirect bodies), and
130
+ * returns the first non-redirect response.
131
+ *
132
+ * The caller owns the returned response stream — drain or destroy it.
133
+ *
134
+ * @throws {SsrfRejection} when any hop targets a blocked address/host/port.
135
+ * @throws {UpstreamError} on redirect-loop / malformed-redirect / timeout.
136
+ */
137
+ export declare function safeFetch(rawUrl: string, options?: SafeFetchOptions): Promise<SafeFetchResult>;