@astrale-os/kernel-protocol 0.5.0-beta.2

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 (390) hide show
  1. package/LICENSE +202 -0
  2. package/dist/artifact/index.d.ts +2 -0
  3. package/dist/artifact/index.d.ts.map +1 -0
  4. package/dist/artifact/index.js +2 -0
  5. package/dist/artifact/index.js.map +1 -0
  6. package/dist/artifact/ref.d.ts +11 -0
  7. package/dist/artifact/ref.d.ts.map +1 -0
  8. package/dist/artifact/ref.js +71 -0
  9. package/dist/artifact/ref.js.map +1 -0
  10. package/dist/codecs/codec.d.ts +14 -0
  11. package/dist/codecs/codec.d.ts.map +1 -0
  12. package/dist/codecs/codec.js +7 -0
  13. package/dist/codecs/codec.js.map +1 -0
  14. package/dist/codecs/index.d.ts +5 -0
  15. package/dist/codecs/index.d.ts.map +1 -0
  16. package/dist/codecs/index.js +5 -0
  17. package/dist/codecs/index.js.map +1 -0
  18. package/dist/codecs/json.d.ts +3 -0
  19. package/dist/codecs/json.d.ts.map +1 -0
  20. package/dist/codecs/json.js +21 -0
  21. package/dist/codecs/json.js.map +1 -0
  22. package/dist/codecs/media-types.d.ts +3 -0
  23. package/dist/codecs/media-types.d.ts.map +1 -0
  24. package/dist/codecs/media-types.js +3 -0
  25. package/dist/codecs/media-types.js.map +1 -0
  26. package/dist/codecs/msgpack.d.ts +5 -0
  27. package/dist/codecs/msgpack.d.ts.map +1 -0
  28. package/dist/codecs/msgpack.js +51 -0
  29. package/dist/codecs/msgpack.js.map +1 -0
  30. package/dist/errors/codes.d.ts +24 -0
  31. package/dist/errors/codes.d.ts.map +1 -0
  32. package/dist/errors/codes.js +23 -0
  33. package/dist/errors/codes.js.map +1 -0
  34. package/dist/errors/http-status.d.ts +3 -0
  35. package/dist/errors/http-status.d.ts.map +1 -0
  36. package/dist/errors/http-status.js +26 -0
  37. package/dist/errors/http-status.js.map +1 -0
  38. package/dist/errors/index.d.ts +6 -0
  39. package/dist/errors/index.d.ts.map +1 -0
  40. package/dist/errors/index.js +6 -0
  41. package/dist/errors/index.js.map +1 -0
  42. package/dist/errors/payload.d.ts +9 -0
  43. package/dist/errors/payload.d.ts.map +1 -0
  44. package/dist/errors/payload.js +37 -0
  45. package/dist/errors/payload.js.map +1 -0
  46. package/dist/errors/protocol-error.d.ts +7 -0
  47. package/dist/errors/protocol-error.d.ts.map +1 -0
  48. package/dist/errors/protocol-error.js +10 -0
  49. package/dist/errors/protocol-error.js.map +1 -0
  50. package/dist/errors/reason.d.ts +8 -0
  51. package/dist/errors/reason.d.ts.map +1 -0
  52. package/dist/errors/reason.js +44 -0
  53. package/dist/errors/reason.js.map +1 -0
  54. package/dist/index.d.ts +9 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +9 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/invocation/admission.d.ts +22 -0
  59. package/dist/invocation/admission.d.ts.map +1 -0
  60. package/dist/invocation/admission.js +169 -0
  61. package/dist/invocation/admission.js.map +1 -0
  62. package/dist/invocation/binary.d.ts +10 -0
  63. package/dist/invocation/binary.d.ts.map +1 -0
  64. package/dist/invocation/binary.js +24 -0
  65. package/dist/invocation/binary.js.map +1 -0
  66. package/dist/invocation/binding-codecs.d.ts +9 -0
  67. package/dist/invocation/binding-codecs.d.ts.map +1 -0
  68. package/dist/invocation/binding-codecs.js +28 -0
  69. package/dist/invocation/binding-codecs.js.map +1 -0
  70. package/dist/invocation/cancellation.d.ts +9 -0
  71. package/dist/invocation/cancellation.d.ts.map +1 -0
  72. package/dist/invocation/cancellation.js +17 -0
  73. package/dist/invocation/cancellation.js.map +1 -0
  74. package/dist/invocation/correlation.d.ts +3 -0
  75. package/dist/invocation/correlation.d.ts.map +1 -0
  76. package/dist/invocation/correlation.js +8 -0
  77. package/dist/invocation/correlation.js.map +1 -0
  78. package/dist/invocation/delegate.d.ts +25 -0
  79. package/dist/invocation/delegate.d.ts.map +1 -0
  80. package/dist/invocation/delegate.js +44 -0
  81. package/dist/invocation/delegate.js.map +1 -0
  82. package/dist/invocation/http/binary.d.ts +6 -0
  83. package/dist/invocation/http/binary.d.ts.map +1 -0
  84. package/dist/invocation/http/binary.js +89 -0
  85. package/dist/invocation/http/binary.js.map +1 -0
  86. package/dist/invocation/http/index.d.ts +5 -0
  87. package/dist/invocation/http/index.d.ts.map +1 -0
  88. package/dist/invocation/http/index.js +5 -0
  89. package/dist/invocation/http/index.js.map +1 -0
  90. package/dist/invocation/http/negotiation.d.ts +4 -0
  91. package/dist/invocation/http/negotiation.d.ts.map +1 -0
  92. package/dist/invocation/http/negotiation.js +208 -0
  93. package/dist/invocation/http/negotiation.js.map +1 -0
  94. package/dist/invocation/http/stream.d.ts +6 -0
  95. package/dist/invocation/http/stream.d.ts.map +1 -0
  96. package/dist/invocation/http/stream.js +16 -0
  97. package/dist/invocation/http/stream.js.map +1 -0
  98. package/dist/invocation/http/trace.d.ts +7 -0
  99. package/dist/invocation/http/trace.d.ts.map +1 -0
  100. package/dist/invocation/http/trace.js +25 -0
  101. package/dist/invocation/http/trace.js.map +1 -0
  102. package/dist/invocation/idempotency.d.ts +11 -0
  103. package/dist/invocation/idempotency.d.ts.map +1 -0
  104. package/dist/invocation/idempotency.js +14 -0
  105. package/dist/invocation/idempotency.js.map +1 -0
  106. package/dist/invocation/index.d.ts +20 -0
  107. package/dist/invocation/index.d.ts.map +1 -0
  108. package/dist/invocation/index.js +20 -0
  109. package/dist/invocation/index.js.map +1 -0
  110. package/dist/invocation/miss.d.ts +8 -0
  111. package/dist/invocation/miss.d.ts.map +1 -0
  112. package/dist/invocation/miss.js +14 -0
  113. package/dist/invocation/miss.js.map +1 -0
  114. package/dist/invocation/redirect.d.ts +33 -0
  115. package/dist/invocation/redirect.d.ts.map +1 -0
  116. package/dist/invocation/redirect.js +68 -0
  117. package/dist/invocation/redirect.js.map +1 -0
  118. package/dist/invocation/request.d.ts +22 -0
  119. package/dist/invocation/request.d.ts.map +1 -0
  120. package/dist/invocation/request.js +55 -0
  121. package/dist/invocation/request.js.map +1 -0
  122. package/dist/invocation/response.d.ts +17 -0
  123. package/dist/invocation/response.d.ts.map +1 -0
  124. package/dist/invocation/response.js +34 -0
  125. package/dist/invocation/response.js.map +1 -0
  126. package/dist/invocation/routing.d.ts +14 -0
  127. package/dist/invocation/routing.d.ts.map +1 -0
  128. package/dist/invocation/routing.js +34 -0
  129. package/dist/invocation/routing.js.map +1 -0
  130. package/dist/invocation/schema.d.ts +10 -0
  131. package/dist/invocation/schema.d.ts.map +1 -0
  132. package/dist/invocation/schema.js +20 -0
  133. package/dist/invocation/schema.js.map +1 -0
  134. package/dist/invocation/service-reason.d.ts +41 -0
  135. package/dist/invocation/service-reason.d.ts.map +1 -0
  136. package/dist/invocation/service-reason.js +74 -0
  137. package/dist/invocation/service-reason.js.map +1 -0
  138. package/dist/invocation/stale-route.d.ts +11 -0
  139. package/dist/invocation/stale-route.d.ts.map +1 -0
  140. package/dist/invocation/stale-route.js +19 -0
  141. package/dist/invocation/stale-route.js.map +1 -0
  142. package/dist/invocation/stream.d.ts +26 -0
  143. package/dist/invocation/stream.d.ts.map +1 -0
  144. package/dist/invocation/stream.js +41 -0
  145. package/dist/invocation/stream.js.map +1 -0
  146. package/dist/invocation/target.d.ts +9 -0
  147. package/dist/invocation/target.d.ts.map +1 -0
  148. package/dist/invocation/target.js +12 -0
  149. package/dist/invocation/target.js.map +1 -0
  150. package/dist/invocation/trace.d.ts +10 -0
  151. package/dist/invocation/trace.d.ts.map +1 -0
  152. package/dist/invocation/trace.js +87 -0
  153. package/dist/invocation/trace.js.map +1 -0
  154. package/dist/invocation/version.d.ts +3 -0
  155. package/dist/invocation/version.d.ts.map +1 -0
  156. package/dist/invocation/version.js +2 -0
  157. package/dist/invocation/version.js.map +1 -0
  158. package/dist/invocation/websocket/binary.d.ts +4 -0
  159. package/dist/invocation/websocket/binary.d.ts.map +1 -0
  160. package/dist/invocation/websocket/binary.js +71 -0
  161. package/dist/invocation/websocket/binary.js.map +1 -0
  162. package/dist/invocation/websocket/index.d.ts +3 -0
  163. package/dist/invocation/websocket/index.d.ts.map +1 -0
  164. package/dist/invocation/websocket/index.js +3 -0
  165. package/dist/invocation/websocket/index.js.map +1 -0
  166. package/dist/invocation/websocket/subprotocol.d.ts +11 -0
  167. package/dist/invocation/websocket/subprotocol.d.ts.map +1 -0
  168. package/dist/invocation/websocket/subprotocol.js +30 -0
  169. package/dist/invocation/websocket/subprotocol.js.map +1 -0
  170. package/dist/issuer/configuration.d.ts +15 -0
  171. package/dist/issuer/configuration.d.ts.map +1 -0
  172. package/dist/issuer/configuration.js +87 -0
  173. package/dist/issuer/configuration.js.map +1 -0
  174. package/dist/issuer/error.d.ts +8 -0
  175. package/dist/issuer/error.d.ts.map +1 -0
  176. package/dist/issuer/error.js +12 -0
  177. package/dist/issuer/error.js.map +1 -0
  178. package/dist/issuer/exchange.d.ts +26 -0
  179. package/dist/issuer/exchange.d.ts.map +1 -0
  180. package/dist/issuer/exchange.js +130 -0
  181. package/dist/issuer/exchange.js.map +1 -0
  182. package/dist/issuer/hosted.d.ts +3 -0
  183. package/dist/issuer/hosted.d.ts.map +1 -0
  184. package/dist/issuer/hosted.js +8 -0
  185. package/dist/issuer/hosted.js.map +1 -0
  186. package/dist/issuer/index.d.ts +7 -0
  187. package/dist/issuer/index.d.ts.map +1 -0
  188. package/dist/issuer/index.js +7 -0
  189. package/dist/issuer/index.js.map +1 -0
  190. package/dist/issuer/key-set.d.ts +7 -0
  191. package/dist/issuer/key-set.d.ts.map +1 -0
  192. package/dist/issuer/key-set.js +48 -0
  193. package/dist/issuer/key-set.js.map +1 -0
  194. package/dist/issuer/paths.d.ts +7 -0
  195. package/dist/issuer/paths.d.ts.map +1 -0
  196. package/dist/issuer/paths.js +11 -0
  197. package/dist/issuer/paths.js.map +1 -0
  198. package/dist/issuer/url.d.ts +3 -0
  199. package/dist/issuer/url.d.ts.map +1 -0
  200. package/dist/issuer/url.js +34 -0
  201. package/dist/issuer/url.js.map +1 -0
  202. package/dist/publication/bindings/callable.d.ts +9 -0
  203. package/dist/publication/bindings/callable.d.ts.map +1 -0
  204. package/dist/publication/bindings/callable.js +32 -0
  205. package/dist/publication/bindings/callable.js.map +1 -0
  206. package/dist/publication/bindings/index.d.ts +4 -0
  207. package/dist/publication/bindings/index.d.ts.map +1 -0
  208. package/dist/publication/bindings/index.js +4 -0
  209. package/dist/publication/bindings/index.js.map +1 -0
  210. package/dist/publication/bindings/invocation.d.ts +6 -0
  211. package/dist/publication/bindings/invocation.d.ts.map +1 -0
  212. package/dist/publication/bindings/invocation.js +14 -0
  213. package/dist/publication/bindings/invocation.js.map +1 -0
  214. package/dist/publication/bindings/view.d.ts +8 -0
  215. package/dist/publication/bindings/view.d.ts.map +1 -0
  216. package/dist/publication/bindings/view.js +29 -0
  217. package/dist/publication/bindings/view.js.map +1 -0
  218. package/dist/publication/bundle.d.ts +16 -0
  219. package/dist/publication/bundle.d.ts.map +1 -0
  220. package/dist/publication/bundle.js +65 -0
  221. package/dist/publication/bundle.js.map +1 -0
  222. package/dist/publication/content.d.ts +11 -0
  223. package/dist/publication/content.d.ts.map +1 -0
  224. package/dist/publication/content.js +56 -0
  225. package/dist/publication/content.js.map +1 -0
  226. package/dist/publication/delivery/attestation.d.ts +7 -0
  227. package/dist/publication/delivery/attestation.d.ts.map +1 -0
  228. package/dist/publication/delivery/attestation.js +11 -0
  229. package/dist/publication/delivery/attestation.js.map +1 -0
  230. package/dist/publication/delivery/claims.d.ts +16 -0
  231. package/dist/publication/delivery/claims.d.ts.map +1 -0
  232. package/dist/publication/delivery/claims.js +62 -0
  233. package/dist/publication/delivery/claims.js.map +1 -0
  234. package/dist/publication/delivery/delivery.d.ts +10 -0
  235. package/dist/publication/delivery/delivery.d.ts.map +1 -0
  236. package/dist/publication/delivery/delivery.js +30 -0
  237. package/dist/publication/delivery/delivery.js.map +1 -0
  238. package/dist/publication/delivery/error.d.ts +8 -0
  239. package/dist/publication/delivery/error.d.ts.map +1 -0
  240. package/dist/publication/delivery/error.js +12 -0
  241. package/dist/publication/delivery/error.js.map +1 -0
  242. package/dist/publication/delivery/index.d.ts +7 -0
  243. package/dist/publication/delivery/index.d.ts.map +1 -0
  244. package/dist/publication/delivery/index.js +7 -0
  245. package/dist/publication/delivery/index.js.map +1 -0
  246. package/dist/publication/delivery/limits.d.ts +5 -0
  247. package/dist/publication/delivery/limits.d.ts.map +1 -0
  248. package/dist/publication/delivery/limits.js +5 -0
  249. package/dist/publication/delivery/limits.js.map +1 -0
  250. package/dist/publication/delivery/request.d.ts +16 -0
  251. package/dist/publication/delivery/request.d.ts.map +1 -0
  252. package/dist/publication/delivery/request.js +52 -0
  253. package/dist/publication/delivery/request.js.map +1 -0
  254. package/dist/publication/delivery-endpoint.d.ts +12 -0
  255. package/dist/publication/delivery-endpoint.d.ts.map +1 -0
  256. package/dist/publication/delivery-endpoint.js +23 -0
  257. package/dist/publication/delivery-endpoint.js.map +1 -0
  258. package/dist/publication/error.d.ts +8 -0
  259. package/dist/publication/error.d.ts.map +1 -0
  260. package/dist/publication/error.js +12 -0
  261. package/dist/publication/error.js.map +1 -0
  262. package/dist/publication/etag.d.ts +7 -0
  263. package/dist/publication/etag.d.ts.map +1 -0
  264. package/dist/publication/etag.js +80 -0
  265. package/dist/publication/etag.js.map +1 -0
  266. package/dist/publication/index.d.ts +14 -0
  267. package/dist/publication/index.d.ts.map +1 -0
  268. package/dist/publication/index.js +8 -0
  269. package/dist/publication/index.js.map +1 -0
  270. package/dist/publication/manifest.d.ts +7 -0
  271. package/dist/publication/manifest.d.ts.map +1 -0
  272. package/dist/publication/manifest.js +26 -0
  273. package/dist/publication/manifest.js.map +1 -0
  274. package/dist/publication/publication.d.ts +39 -0
  275. package/dist/publication/publication.d.ts.map +1 -0
  276. package/dist/publication/publication.js +190 -0
  277. package/dist/publication/publication.js.map +1 -0
  278. package/dist/publication/reference.d.ts +17 -0
  279. package/dist/publication/reference.d.ts.map +1 -0
  280. package/dist/publication/reference.js +68 -0
  281. package/dist/publication/reference.js.map +1 -0
  282. package/dist/publication/requirements.d.ts +26 -0
  283. package/dist/publication/requirements.d.ts.map +1 -0
  284. package/dist/publication/requirements.js +180 -0
  285. package/dist/publication/requirements.js.map +1 -0
  286. package/dist/publication/route.d.ts +33 -0
  287. package/dist/publication/route.d.ts.map +1 -0
  288. package/dist/publication/route.js +132 -0
  289. package/dist/publication/route.js.map +1 -0
  290. package/dist/publication/schema.d.ts +8 -0
  291. package/dist/publication/schema.d.ts.map +1 -0
  292. package/dist/publication/schema.js +16 -0
  293. package/dist/publication/schema.js.map +1 -0
  294. package/dist/routes/compile.d.ts +5 -0
  295. package/dist/routes/compile.d.ts.map +1 -0
  296. package/dist/routes/compile.js +69 -0
  297. package/dist/routes/compile.js.map +1 -0
  298. package/dist/routes/credential.d.ts +9 -0
  299. package/dist/routes/credential.d.ts.map +1 -0
  300. package/dist/routes/credential.js +119 -0
  301. package/dist/routes/credential.js.map +1 -0
  302. package/dist/routes/decode.d.ts +4 -0
  303. package/dist/routes/decode.d.ts.map +1 -0
  304. package/dist/routes/decode.js +147 -0
  305. package/dist/routes/decode.js.map +1 -0
  306. package/dist/routes/encode.d.ts +4 -0
  307. package/dist/routes/encode.d.ts.map +1 -0
  308. package/dist/routes/encode.js +147 -0
  309. package/dist/routes/encode.js.map +1 -0
  310. package/dist/routes/error-response.d.ts +6 -0
  311. package/dist/routes/error-response.d.ts.map +1 -0
  312. package/dist/routes/error-response.js +32 -0
  313. package/dist/routes/error-response.js.map +1 -0
  314. package/dist/routes/error.d.ts +9 -0
  315. package/dist/routes/error.d.ts.map +1 -0
  316. package/dist/routes/error.js +15 -0
  317. package/dist/routes/error.js.map +1 -0
  318. package/dist/routes/index.d.ts +13 -0
  319. package/dist/routes/index.d.ts.map +1 -0
  320. package/dist/routes/index.js +13 -0
  321. package/dist/routes/index.js.map +1 -0
  322. package/dist/routes/mapping.d.ts +6 -0
  323. package/dist/routes/mapping.d.ts.map +1 -0
  324. package/dist/routes/mapping.js +135 -0
  325. package/dist/routes/mapping.js.map +1 -0
  326. package/dist/routes/match.d.ts +5 -0
  327. package/dist/routes/match.d.ts.map +1 -0
  328. package/dist/routes/match.js +9 -0
  329. package/dist/routes/match.js.map +1 -0
  330. package/dist/routes/request.d.ts +27 -0
  331. package/dist/routes/request.d.ts.map +1 -0
  332. package/dist/routes/request.js +52 -0
  333. package/dist/routes/request.js.map +1 -0
  334. package/dist/routes/reservation.d.ts +4 -0
  335. package/dist/routes/reservation.d.ts.map +1 -0
  336. package/dist/routes/reservation.js +34 -0
  337. package/dist/routes/reservation.js.map +1 -0
  338. package/dist/routes/route.d.ts +13 -0
  339. package/dist/routes/route.d.ts.map +1 -0
  340. package/dist/routes/route.js +6 -0
  341. package/dist/routes/route.js.map +1 -0
  342. package/dist/routes/routing.d.ts +23 -0
  343. package/dist/routes/routing.d.ts.map +1 -0
  344. package/dist/routes/routing.js +88 -0
  345. package/dist/routes/routing.js.map +1 -0
  346. package/dist/routes/scalar.d.ts +7 -0
  347. package/dist/routes/scalar.d.ts.map +1 -0
  348. package/dist/routes/scalar.js +58 -0
  349. package/dist/routes/scalar.js.map +1 -0
  350. package/dist/routes/select.d.ts +4 -0
  351. package/dist/routes/select.d.ts.map +1 -0
  352. package/dist/routes/select.js +17 -0
  353. package/dist/routes/select.js.map +1 -0
  354. package/dist/routes/stream.d.ts +15 -0
  355. package/dist/routes/stream.d.ts.map +1 -0
  356. package/dist/routes/stream.js +51 -0
  357. package/dist/routes/stream.js.map +1 -0
  358. package/dist/routes/template.d.ts +9 -0
  359. package/dist/routes/template.d.ts.map +1 -0
  360. package/dist/routes/template.js +228 -0
  361. package/dist/routes/template.js.map +1 -0
  362. package/dist/runtime/artifact.d.ts +48 -0
  363. package/dist/runtime/artifact.d.ts.map +1 -0
  364. package/dist/runtime/artifact.js +177 -0
  365. package/dist/runtime/artifact.js.map +1 -0
  366. package/dist/runtime/index.d.ts +2 -0
  367. package/dist/runtime/index.d.ts.map +1 -0
  368. package/dist/runtime/index.js +2 -0
  369. package/dist/runtime/index.js.map +1 -0
  370. package/dist/schema/index.d.ts +2 -0
  371. package/dist/schema/index.d.ts.map +1 -0
  372. package/dist/schema/index.js +2 -0
  373. package/dist/schema/index.js.map +1 -0
  374. package/dist/schema/installation/index.d.ts +2 -0
  375. package/dist/schema/installation/index.d.ts.map +1 -0
  376. package/dist/schema/installation/index.js +2 -0
  377. package/dist/schema/installation/index.js.map +1 -0
  378. package/dist/schema/installation/introspection/codec.d.ts +6 -0
  379. package/dist/schema/installation/introspection/codec.d.ts.map +1 -0
  380. package/dist/schema/installation/introspection/codec.js +273 -0
  381. package/dist/schema/installation/introspection/codec.js.map +1 -0
  382. package/dist/schema/installation/introspection/index.d.ts +3 -0
  383. package/dist/schema/installation/introspection/index.d.ts.map +1 -0
  384. package/dist/schema/installation/introspection/index.js +2 -0
  385. package/dist/schema/installation/introspection/index.js.map +1 -0
  386. package/dist/schema/installation/introspection/result.d.ts +34 -0
  387. package/dist/schema/installation/introspection/result.d.ts.map +1 -0
  388. package/dist/schema/installation/introspection/result.js +2 -0
  389. package/dist/schema/installation/introspection/result.js.map +1 -0
  390. package/package.json +59 -0
@@ -0,0 +1,10 @@
1
+ export declare const MAXIMUM_TRACEPARENT_BYTES = 512;
2
+ export declare const MAXIMUM_TRACESTATE_BYTES = 512;
3
+ export declare const MAXIMUM_TRACESTATE_MEMBERS = 32;
4
+ export interface Trace {
5
+ readonly traceparent: string;
6
+ readonly tracestate?: string;
7
+ }
8
+ /** Admit portable correlation syntax without making it an invocation validity condition. */
9
+ export declare function admitTrace(input: unknown): Trace | undefined;
10
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../invocation/trace.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,MAAM,CAAA;AAC5C,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAC3C,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAE5C,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC7B;AASD,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CA2B5D"}
@@ -0,0 +1,87 @@
1
+ export const MAXIMUM_TRACEPARENT_BYTES = 512;
2
+ export const MAXIMUM_TRACESTATE_BYTES = 512;
3
+ export const MAXIMUM_TRACESTATE_MEMBERS = 32;
4
+ const TRACEPARENT_PREFIX = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})/u;
5
+ const FUTURE_SUFFIX = /^-[\x21-\x7e]+$/u;
6
+ const SIMPLE_KEY = /^[a-z][a-z0-9_*/-]{0,255}$/u;
7
+ const TENANT_ID = /^[a-z0-9][a-z0-9_*/-]{0,240}$/u;
8
+ const SYSTEM_ID = /^[a-z][a-z0-9_*/-]{0,13}$/u;
9
+ const STATE_VALUE = /^[\x20-\x2b\x2d-\x3c\x3e-\x7e]{0,255}[\x21-\x2b\x2d-\x3c\x3e-\x7e]$/u;
10
+ /** Admit portable correlation syntax without making it an invocation validity condition. */
11
+ export function admitTrace(input) {
12
+ if (input === null || typeof input !== 'object' || Array.isArray(input))
13
+ return undefined;
14
+ const keys = Reflect.ownKeys(input);
15
+ if (!keys.includes('traceparent') ||
16
+ keys.some((key) => key !== 'traceparent' && key !== 'tracestate')) {
17
+ return undefined;
18
+ }
19
+ let traceparent;
20
+ let tracestate;
21
+ try {
22
+ const value = input;
23
+ traceparent = value.traceparent;
24
+ tracestate = value.tracestate;
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ if (typeof traceparent !== 'string' || !validTraceparent(traceparent))
30
+ return undefined;
31
+ const state = typeof tracestate === 'string' && validTracestate(tracestate) ? tracestate : undefined;
32
+ return Object.freeze({
33
+ traceparent,
34
+ ...(state === undefined || state.trim() === '' ? {} : { tracestate: state }),
35
+ });
36
+ }
37
+ function validTraceparent(input) {
38
+ if (input.length < 55 || input.length > MAXIMUM_TRACEPARENT_BYTES)
39
+ return false;
40
+ const match = TRACEPARENT_PREFIX.exec(input);
41
+ if (match === null || match.index !== 0)
42
+ return false;
43
+ const [, version, traceId, parentId, flags] = match;
44
+ if (version === undefined ||
45
+ traceId === undefined ||
46
+ parentId === undefined ||
47
+ flags === undefined ||
48
+ version === 'ff' ||
49
+ /^0+$/u.test(traceId) ||
50
+ /^0+$/u.test(parentId)) {
51
+ return false;
52
+ }
53
+ if (version === '00')
54
+ return input.length === 55 && (flags === '00' || flags === '01');
55
+ return input.length === 55 || FUTURE_SUFFIX.test(input.slice(55));
56
+ }
57
+ function validTracestate(input) {
58
+ if (input.length > MAXIMUM_TRACESTATE_BYTES)
59
+ return false;
60
+ const members = input.split(',');
61
+ if (members.length > MAXIMUM_TRACESTATE_MEMBERS)
62
+ return false;
63
+ const keys = new Set();
64
+ for (const inputMember of members) {
65
+ const member = inputMember.replace(/^[ \t]+|[ \t]+$/gu, '');
66
+ if (member === '')
67
+ continue;
68
+ const separator = member.indexOf('=');
69
+ if (separator < 1 || separator !== member.lastIndexOf('='))
70
+ return false;
71
+ const key = member.slice(0, separator);
72
+ const value = member.slice(separator + 1);
73
+ if (!validStateKey(key) || !STATE_VALUE.test(value) || keys.has(key))
74
+ return false;
75
+ keys.add(key);
76
+ }
77
+ return true;
78
+ }
79
+ function validStateKey(input) {
80
+ const separator = input.indexOf('@');
81
+ if (separator === -1)
82
+ return SIMPLE_KEY.test(input);
83
+ if (separator !== input.lastIndexOf('@'))
84
+ return false;
85
+ return TENANT_ID.test(input.slice(0, separator)) && SYSTEM_ID.test(input.slice(separator + 1));
86
+ }
87
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../invocation/trace.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAA;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;AAC3C,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAA;AAO5C,MAAM,kBAAkB,GAAG,6DAA6D,CAAA;AACxF,MAAM,aAAa,GAAG,kBAAkB,CAAA;AACxC,MAAM,UAAU,GAAG,6BAA6B,CAAA;AAChD,MAAM,SAAS,GAAG,gCAAgC,CAAA;AAClD,MAAM,SAAS,GAAG,4BAA4B,CAAA;AAC9C,MAAM,WAAW,GAAG,sEAAsE,CAAA;AAE1F,4FAA4F;AAC5F,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACzF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACnC,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,YAAY,CAAC,EACjE,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,WAAoB,CAAA;IACxB,IAAI,UAAmB,CAAA;IACvB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAA0E,CAAA;QACxF,WAAW,GAAG,KAAK,CAAC,WAAW,CAAA;QAC/B,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAA;IAEvF,MAAM,KAAK,GACT,OAAO,UAAU,KAAK,QAAQ,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;IACxF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,WAAW;QACX,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;KAC7E,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,yBAAyB;QAAE,OAAO,KAAK,CAAA;IAC/E,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,KAAK,CAAA;IACnD,IACE,OAAO,KAAK,SAAS;QACrB,OAAO,KAAK,SAAS;QACrB,QAAQ,KAAK,SAAS;QACtB,KAAK,KAAK,SAAS;QACnB,OAAO,KAAK,IAAI;QAChB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EACtB,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC,CAAA;IACtF,OAAO,KAAK,CAAC,MAAM,KAAK,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,KAAK,CAAC,MAAM,GAAG,wBAAwB;QAAE,OAAO,KAAK,CAAA;IACzD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,OAAO,CAAC,MAAM,GAAG,0BAA0B;QAAE,OAAO,KAAK,CAAA;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QAC3D,IAAI,MAAM,KAAK,EAAE;YAAE,SAAQ;QAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,SAAS,GAAG,CAAC,IAAI,SAAS,KAAK,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QACxE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;QACzC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAClF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACf,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnD,IAAI,SAAS,KAAK,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACtD,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAA;AAChG,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const VERSION: 2;
2
+ export type Version = typeof VERSION;
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../invocation/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,EAAG,CAAU,CAAA;AACjC,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const VERSION = 2;
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../invocation/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAU,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { BinaryResponse } from '../binary.js';
2
+ export declare function encodeBinary(response: BinaryResponse): Uint8Array;
3
+ export declare function decodeBinary(input: Uint8Array): BinaryResponse | undefined;
4
+ //# sourceMappingURL=binary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../../../invocation/websocket/binary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAWlD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CA0BjE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,SAAS,CAgC1E"}
@@ -0,0 +1,71 @@
1
+ import { CODES, ProtocolError } from '../../errors/index.js';
2
+ import { decodeBinaryResponse } from '../binary.js';
3
+ const MAGIC = new Uint8Array([0x41, 0x53, 0x54, 0x42, 0x01]);
4
+ const LENGTH_BYTES = 4;
5
+ const MAXIMUM_METADATA_BYTES = 65_536;
6
+ const encoder = new TextEncoder();
7
+ const decoder = new TextDecoder('utf-8', { fatal: true });
8
+ export function encodeBinary(response) {
9
+ const headers = response.headers === undefined
10
+ ? undefined
11
+ : Object.fromEntries(Object.entries(response.headers).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0));
12
+ const metadata = encoder.encode(JSON.stringify({
13
+ kind: response.kind,
14
+ id: response.id,
15
+ mediaType: response.mediaType,
16
+ ...(headers === undefined ? {} : { headers }),
17
+ }));
18
+ if (metadata.byteLength > MAXIMUM_METADATA_BYTES)
19
+ invalid();
20
+ const output = new Uint8Array(MAGIC.byteLength + LENGTH_BYTES + metadata.byteLength + response.body.byteLength);
21
+ output.set(MAGIC, 0);
22
+ new DataView(output.buffer).setUint32(MAGIC.byteLength, metadata.byteLength);
23
+ output.set(metadata, MAGIC.byteLength + LENGTH_BYTES);
24
+ output.set(response.body, MAGIC.byteLength + LENGTH_BYTES + metadata.byteLength);
25
+ return output;
26
+ }
27
+ export function decodeBinary(input) {
28
+ if (!hasMagic(input))
29
+ return undefined;
30
+ const headerBytes = MAGIC.byteLength + LENGTH_BYTES;
31
+ if (input.byteLength < headerBytes)
32
+ invalid();
33
+ const metadataLength = new DataView(input.buffer, input.byteOffset + MAGIC.byteLength, LENGTH_BYTES).getUint32(0);
34
+ const bodyOffset = headerBytes + metadataLength;
35
+ if (metadataLength === 0 ||
36
+ metadataLength > MAXIMUM_METADATA_BYTES ||
37
+ bodyOffset > input.byteLength) {
38
+ invalid();
39
+ }
40
+ let metadata;
41
+ try {
42
+ metadata = JSON.parse(decoder.decode(input.subarray(headerBytes, bodyOffset)));
43
+ }
44
+ catch (cause) {
45
+ if (cause instanceof SyntaxError || cause instanceof TypeError)
46
+ return invalid();
47
+ throw cause;
48
+ }
49
+ if (typeof metadata !== 'object' || metadata === null || Array.isArray(metadata))
50
+ invalid();
51
+ return decodeBinaryResponse({
52
+ ...metadata,
53
+ body: input.slice(bodyOffset),
54
+ });
55
+ }
56
+ function hasMagic(input) {
57
+ if (input.byteLength < MAGIC.byteLength)
58
+ return false;
59
+ for (let index = 0; index < MAGIC.byteLength; index += 1) {
60
+ if (input[index] !== MAGIC[index])
61
+ return false;
62
+ }
63
+ return true;
64
+ }
65
+ function invalid() {
66
+ throw new ProtocolError({
67
+ code: CODES.INVALID_REQUEST,
68
+ message: 'WebSocket binary response is invalid.',
69
+ });
70
+ }
71
+ //# sourceMappingURL=binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../../invocation/websocket/binary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { decodeBinary, encodeBinary } from './binary.js';
2
+ export { JSON_SUBPROTOCOL, MSGPACK_SUBPROTOCOL, selectSubprotocol, subprotocolFor, type Subprotocol, type SubprotocolSelection, } from './subprotocol.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../invocation/websocket/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { decodeBinary, encodeBinary } from './binary.js';
2
+ export { JSON_SUBPROTOCOL, MSGPACK_SUBPROTOCOL, selectSubprotocol, subprotocolFor, } from './subprotocol.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../invocation/websocket/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,GAGf,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { Codec } from '../../codecs/index.js';
2
+ export declare const JSON_SUBPROTOCOL: 'astrale.invocation.v2.json';
3
+ export declare const MSGPACK_SUBPROTOCOL: 'astrale.invocation.v2.msgpack';
4
+ export type Subprotocol = typeof JSON_SUBPROTOCOL | typeof MSGPACK_SUBPROTOCOL;
5
+ export interface SubprotocolSelection {
6
+ readonly subprotocol: Subprotocol;
7
+ readonly codec: Codec;
8
+ }
9
+ export declare function subprotocolFor(codec: Codec): Subprotocol;
10
+ export declare function selectSubprotocol(offered: string | null, supported: readonly Codec[]): SubprotocolSelection | undefined;
11
+ //# sourceMappingURL=subprotocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprotocol.d.ts","sourceRoot":"","sources":["../../../invocation/websocket/subprotocol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAIlD,eAAO,MAAM,gBAAgB,EAAG,4BAAqC,CAAA;AACrE,eAAO,MAAM,mBAAmB,EAAG,+BAAwC,CAAA;AAC3E,MAAM,MAAM,WAAW,GAAG,OAAO,gBAAgB,GAAG,OAAO,mBAAmB,CAAA;AAE9E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACtB;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAIxD;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,SAAS,KAAK,EAAE,GAC1B,oBAAoB,GAAG,SAAS,CAgBlC"}
@@ -0,0 +1,30 @@
1
+ import { admitSupportedCodecs, codecProfile } from '../binding-codecs.js';
2
+ export const JSON_SUBPROTOCOL = 'astrale.invocation.v2.json';
3
+ export const MSGPACK_SUBPROTOCOL = 'astrale.invocation.v2.msgpack';
4
+ const TOKEN = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u;
5
+ export function subprotocolFor(codec) {
6
+ const profile = codecProfile(codec);
7
+ if (profile === undefined)
8
+ throw new TypeError('codec is not a canonical Invocation codec.');
9
+ return profile === 'json' ? JSON_SUBPROTOCOL : MSGPACK_SUBPROTOCOL;
10
+ }
11
+ export function selectSubprotocol(offered, supported) {
12
+ const admitted = admitSupportedCodecs(supported);
13
+ if (offered === null || offered.trim() === '')
14
+ return undefined;
15
+ const tokens = offered.split(',').map((token) => token.trim());
16
+ const seen = new Set();
17
+ for (const token of tokens) {
18
+ if (!TOKEN.test(token) || seen.has(token))
19
+ return undefined;
20
+ seen.add(token);
21
+ }
22
+ for (const token of tokens) {
23
+ const entry = admitted.find((candidate) => subprotocolFor(candidate.codec) === token);
24
+ if (entry !== undefined) {
25
+ return Object.freeze({ subprotocol: token, codec: entry.codec });
26
+ }
27
+ }
28
+ return undefined;
29
+ }
30
+ //# sourceMappingURL=subprotocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprotocol.js","sourceRoot":"","sources":["../../../invocation/websocket/subprotocol.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAEzE,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAAqC,CAAA;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAAwC,CAAA;AAQ3E,MAAM,KAAK,GAAG,gCAAgC,CAAA;AAE9C,MAAM,UAAU,cAAc,CAAC,KAAY;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IACnC,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC,4CAA4C,CAAC,CAAA;IAC5F,OAAO,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAA;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAAsB,EACtB,SAA2B;IAE3B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,SAAS,CAAA;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;QAC3D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACjB,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAA;QACrF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,KAAoB,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;QACjF,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { IssuerId } from '@astrale-os/kernel-core/auth';
2
+ export interface Configuration {
3
+ readonly issuer: IssuerId;
4
+ readonly jwks_uri: string;
5
+ readonly subject_types_supported: readonly ['public'];
6
+ readonly id_token_signing_alg_values_supported: readonly [string, ...string[]];
7
+ readonly token_exchange_endpoint?: string;
8
+ }
9
+ export interface ConfigurationOptions {
10
+ readonly tokenExchange?: boolean;
11
+ }
12
+ export declare function configuration(issuer: string, algorithms: readonly [string, ...string[]], options?: ConfigurationOptions): Configuration;
13
+ export declare function acceptConfiguration(input: unknown, expectedIssuer?: string): Configuration;
14
+ export declare function acceptAlgorithms(input: unknown): readonly [string, ...string[]];
15
+ //# sourceMappingURL=configuration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../issuer/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAK5D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,uBAAuB,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IACrD,QAAQ,CAAC,qCAAqC,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;IAC9E,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAA;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CACjC;AAID,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAC1C,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAWf;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa,CA4B1F;AAgBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAc/E"}
@@ -0,0 +1,87 @@
1
+ import { fail } from './error.js';
2
+ import { acceptIssuer } from './url.js';
3
+ const ALGORITHM = /^[A-Za-z0-9_-]{1,64}$/u;
4
+ export function configuration(issuer, algorithms, options = {}) {
5
+ const admitted = acceptIssuer(issuer);
6
+ const acceptedAlgorithms = acceptAlgorithms(algorithms);
7
+ const tokenExchange = acceptConfigurationOptions(options).tokenExchange === true;
8
+ return deepFreeze({
9
+ issuer: admitted,
10
+ jwks_uri: `${admitted}/.well-known/jwks.json`,
11
+ subject_types_supported: ['public'],
12
+ id_token_signing_alg_values_supported: acceptedAlgorithms,
13
+ ...(tokenExchange ? { token_exchange_endpoint: `${admitted}/.well-known/astrale/token` } : {}),
14
+ });
15
+ }
16
+ export function acceptConfiguration(input, expectedIssuer) {
17
+ const value = record(input);
18
+ exact(value, ['issuer', 'jwks_uri', 'subject_types_supported', 'id_token_signing_alg_values_supported'], ['token_exchange_endpoint']);
19
+ const admitted = acceptIssuer(value.issuer);
20
+ if (expectedIssuer !== undefined && admitted !== acceptIssuer(expectedIssuer)) {
21
+ fail('ISSUER_DISCOVERY_MISMATCH', 'Issuer discovery does not match the requested issuer.');
22
+ }
23
+ if (value.jwks_uri !== `${admitted}/.well-known/jwks.json`) {
24
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer discovery key URL is not canonical.');
25
+ }
26
+ if (!Array.isArray(value.subject_types_supported) ||
27
+ value.subject_types_supported.length !== 1 ||
28
+ value.subject_types_supported[0] !== 'public') {
29
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer discovery subject types are invalid.');
30
+ }
31
+ const endpoint = value.token_exchange_endpoint;
32
+ if (endpoint !== undefined && endpoint !== `${admitted}/.well-known/astrale/token`) {
33
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer token-exchange URL is not canonical.');
34
+ }
35
+ return configuration(admitted, acceptAlgorithms(value.id_token_signing_alg_values_supported), {
36
+ tokenExchange: endpoint !== undefined,
37
+ });
38
+ }
39
+ function acceptConfigurationOptions(input) {
40
+ if (input === null || typeof input !== 'object' || Array.isArray(input)) {
41
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer configuration options are invalid.');
42
+ }
43
+ const keys = Reflect.ownKeys(input);
44
+ if (keys.some((key) => key !== 'tokenExchange')) {
45
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer configuration options contain unexpected fields.');
46
+ }
47
+ if (input.tokenExchange !== undefined && typeof input.tokenExchange !== 'boolean') {
48
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer token-exchange option is invalid.');
49
+ }
50
+ return input;
51
+ }
52
+ export function acceptAlgorithms(input) {
53
+ if (!Array.isArray(input) || input.length === 0) {
54
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer algorithms must be a non-empty array.');
55
+ }
56
+ const algorithms = input.map((algorithm) => {
57
+ if (typeof algorithm !== 'string' || !ALGORITHM.test(algorithm)) {
58
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer algorithm is invalid.');
59
+ }
60
+ return algorithm;
61
+ });
62
+ if (new Set(algorithms).size !== algorithms.length) {
63
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer algorithms must be unique.');
64
+ }
65
+ return Object.freeze(algorithms);
66
+ }
67
+ function record(input) {
68
+ if (input === null || typeof input !== 'object' || Array.isArray(input)) {
69
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer discovery is invalid.');
70
+ }
71
+ return input;
72
+ }
73
+ function exact(input, required, optional = []) {
74
+ const keys = Reflect.ownKeys(input);
75
+ if (required.some((field) => !Object.hasOwn(input, field)) ||
76
+ keys.some((key) => typeof key !== 'string' || (!required.includes(key) && !optional.includes(key)))) {
77
+ fail('ISSUER_DISCOVERY_INVALID', 'Issuer discovery document contains unexpected fields.');
78
+ }
79
+ }
80
+ function deepFreeze(input) {
81
+ if (input === null || typeof input !== 'object' || Object.isFrozen(input))
82
+ return input;
83
+ for (const value of Object.values(input))
84
+ deepFreeze(value);
85
+ return Object.freeze(input);
86
+ }
87
+ //# sourceMappingURL=configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../issuer/configuration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type DiscoveryErrorCode = 'ISSUER_DISCOVERY_INVALID' | 'ISSUER_DISCOVERY_MISMATCH' | 'ISSUER_KEY_SET_INVALID';
2
+ export declare class DiscoveryError extends Error {
3
+ readonly code: DiscoveryErrorCode;
4
+ readonly name = "DiscoveryError";
5
+ constructor(code: DiscoveryErrorCode, message: string, options?: ErrorOptions);
6
+ }
7
+ export declare function fail(code: DiscoveryErrorCode, message: string, cause?: unknown): never;
8
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../issuer/error.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAC1B,0BAA0B,GAC1B,2BAA2B,GAC3B,wBAAwB,CAAA;AAE5B,qBAAa,cAAe,SAAQ,KAAK;IAIrC,QAAQ,CAAC,IAAI,EAAE,kBAAkB;IAHnC,SAAkB,IAAI,oBAAmB;IAEzC,YACW,IAAI,EAAE,kBAAkB,EACjC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,EAGvB;CACF;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAEtF"}
@@ -0,0 +1,12 @@
1
+ export class DiscoveryError extends Error {
2
+ code;
3
+ name = 'DiscoveryError';
4
+ constructor(code, message, options) {
5
+ super(message, options);
6
+ this.code = code;
7
+ }
8
+ }
9
+ export function fail(code, message, cause) {
10
+ throw new DiscoveryError(code, message, cause === undefined ? undefined : { cause });
11
+ }
12
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../issuer/error.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,cAAe,SAAQ,KAAK;IAI5B,IAAI;IAHG,IAAI,GAAG,gBAAgB,CAAA;IAEzC,YACW,IAAwB,EACjC,OAAe,EACf,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;oBAJd,IAAI;IAKf,CAAC;CACF;AAED,MAAM,UAAU,IAAI,CAAC,IAAwB,EAAE,OAAe,EAAE,KAAe;IAC7E,MAAM,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AACtF,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { ErrorPayload } from '../errors/index.js';
2
+ export declare const MEDIA_TYPE: 'application/vnd.astrale+json';
3
+ export interface Request {
4
+ readonly token: string;
5
+ }
6
+ export interface Response {
7
+ readonly token: string;
8
+ readonly expiresAt: number;
9
+ }
10
+ export interface ErrorResponse {
11
+ readonly error: ErrorPayload;
12
+ }
13
+ export interface HttpRequest {
14
+ readonly method: string;
15
+ readonly url: string;
16
+ readonly authorization: string | null;
17
+ readonly accept: string | null;
18
+ }
19
+ export declare function request(token: string): Request;
20
+ export declare function acceptRequest(input: unknown): Request;
21
+ export declare function response(token: string, expiresAt: number): Response;
22
+ export declare function acceptResponse(input: unknown): Response;
23
+ export declare function acceptErrorResponse(input: unknown): ErrorResponse;
24
+ export declare function acceptHttpRequest(input: HttpRequest): Request;
25
+ export declare function responseHeaders(): Readonly<Record<string, string>>;
26
+ //# sourceMappingURL=exchange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../../issuer/exchange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAItD,eAAO,MAAM,UAAU,EAAG,8BAAuC,CAAA;AAEjE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGrD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAEnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CASvD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAGjE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAiC7D;AAED,wBAAgB,eAAe,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAOlE"}
@@ -0,0 +1,130 @@
1
+ import { acceptPayload, CODES, ProtocolError } from '../errors/index.js';
2
+ export const MEDIA_TYPE = 'application/vnd.astrale+json';
3
+ export function request(token) {
4
+ return acceptRequest({ token });
5
+ }
6
+ export function acceptRequest(input) {
7
+ const value = exactObject(input, ['token'], 'token-exchange request');
8
+ return Object.freeze({ token: nonEmptyText(value.token, 'token-exchange request.token') });
9
+ }
10
+ export function response(token, expiresAt) {
11
+ return acceptResponse({ token, expiresAt });
12
+ }
13
+ export function acceptResponse(input) {
14
+ const value = exactObject(input, ['token', 'expiresAt'], 'token-exchange response');
15
+ if (!Number.isSafeInteger(value.expiresAt) || value.expiresAt <= 0) {
16
+ throw new TypeError('token-exchange response.expiresAt must be a positive safe integer.');
17
+ }
18
+ return Object.freeze({
19
+ token: nonEmptyText(value.token, 'token-exchange response.token'),
20
+ expiresAt: value.expiresAt,
21
+ });
22
+ }
23
+ export function acceptErrorResponse(input) {
24
+ const value = exactObject(input, ['error'], 'token-exchange error response');
25
+ return Object.freeze({ error: acceptPayload(value.error, 'token-exchange error response.error') });
26
+ }
27
+ export function acceptHttpRequest(input) {
28
+ const value = exactObject(input, ['method', 'url', 'authorization', 'accept'], 'token-exchange HTTP request');
29
+ if (value.method !== 'POST') {
30
+ fail(CODES.METHOD_NOT_ALLOWED, 'Token exchange supports POST only.');
31
+ }
32
+ if (typeof value.url !== 'string')
33
+ invalid('Token-exchange URL is invalid.');
34
+ let url;
35
+ try {
36
+ url = new URL(value.url);
37
+ }
38
+ catch {
39
+ invalid('Token-exchange URL is invalid.');
40
+ }
41
+ if (url.search !== '' || url.hash !== '') {
42
+ invalid('Token-exchange URL must not contain a query or fragment.');
43
+ }
44
+ if (value.authorization === null) {
45
+ fail(CODES.AUTH_MISSING, 'Authentication is required.');
46
+ }
47
+ if (typeof value.authorization !== 'string') {
48
+ fail(CODES.AUTH_INVALID, 'Token is invalid.');
49
+ }
50
+ const authorization = /^Bearer ([^\s,]+)$/iu.exec(value.authorization);
51
+ if (authorization === null)
52
+ fail(CODES.AUTH_INVALID, 'Token is invalid.');
53
+ if (value.accept !== null) {
54
+ if (typeof value.accept !== 'string' || !acceptsJson(value.accept)) {
55
+ invalid('Token-exchange response representation is not accepted.');
56
+ }
57
+ }
58
+ return request(authorization[1]);
59
+ }
60
+ export function responseHeaders() {
61
+ return Object.freeze({
62
+ 'content-type': MEDIA_TYPE,
63
+ 'cache-control': 'no-store',
64
+ pragma: 'no-cache',
65
+ 'x-content-type-options': 'nosniff',
66
+ });
67
+ }
68
+ function acceptsJson(input) {
69
+ for (const member of input.split(',')) {
70
+ const parts = member.split(';');
71
+ const media = parts.shift()?.trim().toLowerCase();
72
+ if (media === undefined)
73
+ continue;
74
+ let quality = 1;
75
+ let valid = media === MEDIA_TYPE || media === 'application/json' || media === '*/*';
76
+ for (const parameter of parts) {
77
+ const [rawName, rawValue, ...extra] = parameter.split('=');
78
+ if (extra.length > 0 || rawName?.trim().toLowerCase() !== 'q') {
79
+ valid = false;
80
+ break;
81
+ }
82
+ const value = rawValue?.trim();
83
+ if (value === undefined || !/^(?:0(?:\.\d{0,3})?|1(?:\.0{0,3})?)$/u.test(value)) {
84
+ valid = false;
85
+ break;
86
+ }
87
+ quality = Number(value);
88
+ }
89
+ if (valid && quality > 0)
90
+ return true;
91
+ }
92
+ return false;
93
+ }
94
+ function invalid(message) {
95
+ fail(CODES.INVALID_REQUEST, message);
96
+ }
97
+ function fail(code, message) {
98
+ throw new ProtocolError({ code, message });
99
+ }
100
+ function exactObject(input, expected, label) {
101
+ if (input === null || typeof input !== 'object' || Array.isArray(input)) {
102
+ throw new TypeError(`${label} must be an object.`);
103
+ }
104
+ const prototype = Object.getPrototypeOf(input);
105
+ if (prototype !== Object.prototype && prototype !== null) {
106
+ throw new TypeError(`${label} must be a plain object.`);
107
+ }
108
+ const output = {};
109
+ const keys = Reflect.ownKeys(input);
110
+ if (keys.length !== expected.length)
111
+ throw new TypeError(`${label} must be exact.`);
112
+ for (const key of keys) {
113
+ if (typeof key !== 'string' || !expected.includes(key)) {
114
+ throw new TypeError(`${label} contains an unexpected field.`);
115
+ }
116
+ const descriptor = Object.getOwnPropertyDescriptor(input, key);
117
+ if (descriptor === undefined || !descriptor.enumerable || !('value' in descriptor)) {
118
+ throw new TypeError(`${label}.${key} must be an enumerable data field.`);
119
+ }
120
+ output[key] = descriptor.value;
121
+ }
122
+ return output;
123
+ }
124
+ function nonEmptyText(input, label) {
125
+ if (typeof input !== 'string' || input.length === 0) {
126
+ throw new TypeError(`${label} must be non-empty text.`);
127
+ }
128
+ return input;
129
+ }
130
+ //# sourceMappingURL=exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.js","sourceRoot":"","sources":["../../issuer/exchange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { IssuerId } from '@astrale-os/kernel-core/auth';
2
+ export declare function hosted(base: string, thumbprint: string): IssuerId | undefined;
3
+ //# sourceMappingURL=hosted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted.d.ts","sourceRoot":"","sources":["../../issuer/hosted.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAM5D,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAG7E"}
@@ -0,0 +1,8 @@
1
+ import { acceptIssuer } from './url.js';
2
+ const THUMBPRINT = /^[A-Za-z0-9_-]{43}$/u;
3
+ export function hosted(base, thumbprint) {
4
+ if (typeof thumbprint !== 'string' || !THUMBPRINT.test(thumbprint))
5
+ return undefined;
6
+ return acceptIssuer(`${acceptIssuer(base)}/iss/${thumbprint}`);
7
+ }
8
+ //# sourceMappingURL=hosted.js.map