@qlever-llc/trellis 0.5.1 → 0.6.1

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 (490) hide show
  1. package/README.md +16 -2
  2. package/esm/_dnt.polyfills.d.ts +11 -0
  3. package/esm/_dnt.polyfills.d.ts.map +1 -1
  4. package/esm/_dnt.polyfills.js +14 -0
  5. package/esm/_dnt.shims.d.ts +6 -0
  6. package/esm/_dnt.shims.d.ts.map +1 -0
  7. package/esm/_dnt.shims.js +61 -0
  8. package/esm/auth/browser/login.d.ts +27 -0
  9. package/esm/auth/browser/login.d.ts.map +1 -0
  10. package/esm/auth/browser/login.js +94 -0
  11. package/esm/auth/browser/portal.d.ts +11 -0
  12. package/esm/auth/browser/portal.d.ts.map +1 -0
  13. package/esm/auth/browser/portal.js +33 -0
  14. package/esm/auth/browser/session.d.ts +19 -0
  15. package/esm/auth/browser/session.d.ts.map +1 -0
  16. package/esm/auth/browser/session.js +65 -0
  17. package/esm/auth/browser/storage.d.ts +12 -0
  18. package/esm/auth/browser/storage.d.ts.map +1 -0
  19. package/esm/auth/browser/storage.js +61 -0
  20. package/esm/auth/browser.d.ts +13 -0
  21. package/esm/auth/browser.d.ts.map +1 -0
  22. package/esm/auth/browser.js +11 -0
  23. package/esm/auth/keys.d.ts +5 -0
  24. package/esm/auth/keys.d.ts.map +1 -0
  25. package/esm/auth/keys.js +50 -0
  26. package/esm/auth/mod.d.ts +18 -0
  27. package/esm/auth/mod.d.ts.map +1 -0
  28. package/esm/auth/mod.js +17 -0
  29. package/esm/auth/proof.d.ts +9 -0
  30. package/esm/auth/proof.d.ts.map +1 -0
  31. package/esm/auth/proof.js +43 -0
  32. package/esm/auth/protocol.d.ts +1212 -0
  33. package/esm/auth/protocol.d.ts.map +1 -0
  34. package/esm/auth/protocol.js +682 -0
  35. package/esm/auth/schemas.d.ts +93 -0
  36. package/esm/auth/schemas.d.ts.map +1 -0
  37. package/esm/auth/schemas.js +64 -0
  38. package/esm/auth/session_auth.d.ts +20 -0
  39. package/esm/auth/session_auth.d.ts.map +1 -0
  40. package/esm/auth/session_auth.js +42 -0
  41. package/esm/auth/trellis_id.d.ts +2 -0
  42. package/esm/auth/trellis_id.d.ts.map +1 -0
  43. package/esm/auth/trellis_id.js +5 -0
  44. package/esm/auth/types.d.ts +8 -0
  45. package/esm/auth/types.d.ts.map +1 -0
  46. package/esm/auth/types.js +1 -0
  47. package/esm/auth/utils.d.ts +11 -0
  48. package/esm/auth/utils.d.ts.map +1 -0
  49. package/esm/auth/utils.js +68 -0
  50. package/esm/auth/workload_activation.d.ts +192 -0
  51. package/esm/auth/workload_activation.d.ts.map +1 -0
  52. package/esm/auth/workload_activation.js +290 -0
  53. package/esm/contracts/canonical.d.ts +14 -0
  54. package/esm/contracts/canonical.d.ts.map +1 -0
  55. package/esm/contracts/canonical.js +135 -0
  56. package/esm/contracts/mod.d.ts +466 -0
  57. package/esm/contracts/mod.d.ts.map +1 -0
  58. package/esm/contracts/mod.js +534 -0
  59. package/esm/contracts/protocol.d.ts +301 -0
  60. package/esm/contracts/protocol.d.ts.map +1 -0
  61. package/esm/contracts/protocol.js +130 -0
  62. package/esm/contracts/runtime.d.ts +48 -0
  63. package/esm/contracts/runtime.d.ts.map +1 -0
  64. package/esm/contracts/runtime.js +9 -0
  65. package/esm/contracts/schema_pointers.d.ts +18 -0
  66. package/esm/contracts/schema_pointers.d.ts.map +1 -0
  67. package/esm/contracts/schema_pointers.js +59 -0
  68. package/esm/server/deno.d.ts +7 -0
  69. package/esm/server/deno.d.ts.map +1 -0
  70. package/esm/server/deno.js +16 -0
  71. package/esm/server/health.d.ts +92 -0
  72. package/esm/server/health.d.ts.map +1 -0
  73. package/esm/server/health.js +74 -0
  74. package/esm/server/health_rpc.d.ts +16 -0
  75. package/esm/server/health_rpc.d.ts.map +1 -0
  76. package/esm/server/health_rpc.js +23 -0
  77. package/esm/server/health_schemas.d.ts +20 -0
  78. package/esm/server/health_schemas.d.ts.map +1 -0
  79. package/esm/server/health_schemas.js +18 -0
  80. package/esm/server/mod.d.ts +17 -0
  81. package/esm/server/mod.d.ts.map +1 -0
  82. package/esm/server/mod.js +17 -0
  83. package/esm/server/node.d.ts +7 -0
  84. package/esm/server/node.d.ts.map +1 -0
  85. package/esm/server/node.js +16 -0
  86. package/esm/server/runtime.d.ts +16 -0
  87. package/esm/server/runtime.d.ts.map +1 -0
  88. package/esm/server/runtime.js +1 -0
  89. package/esm/server/service.d.ts +121 -0
  90. package/esm/server/service.d.ts.map +1 -0
  91. package/esm/server/service.js +256 -0
  92. package/esm/server/subscription.d.ts +99 -0
  93. package/esm/server/subscription.d.ts.map +1 -0
  94. package/esm/server/subscription.js +25 -0
  95. package/esm/telemetry/carrier.d.ts +9 -0
  96. package/esm/telemetry/carrier.d.ts.map +1 -0
  97. package/esm/telemetry/carrier.js +20 -0
  98. package/esm/telemetry/core.d.ts +8 -0
  99. package/esm/telemetry/core.d.ts.map +1 -0
  100. package/esm/telemetry/core.js +14 -0
  101. package/esm/telemetry/env.d.ts +2 -0
  102. package/esm/telemetry/env.d.ts.map +1 -0
  103. package/esm/telemetry/env.js +10 -0
  104. package/esm/telemetry/mod.d.ts +11 -0
  105. package/esm/telemetry/mod.d.ts.map +1 -0
  106. package/esm/telemetry/mod.js +7 -0
  107. package/esm/telemetry/nats.d.ts +7 -0
  108. package/esm/telemetry/nats.d.ts.map +1 -0
  109. package/esm/telemetry/nats.js +6 -0
  110. package/esm/telemetry/result.d.ts +2 -0
  111. package/esm/telemetry/result.d.ts.map +1 -0
  112. package/esm/telemetry/result.js +18 -0
  113. package/esm/telemetry/runtime.d.ts +2 -0
  114. package/esm/telemetry/runtime.d.ts.map +1 -0
  115. package/esm/telemetry/runtime.js +53 -0
  116. package/esm/telemetry/trace.d.ts +5 -0
  117. package/esm/telemetry/trace.d.ts.map +1 -0
  118. package/esm/telemetry/trace.js +26 -0
  119. package/esm/telemetry/trellis.d.ts +3 -0
  120. package/esm/telemetry/trellis.d.ts.map +1 -0
  121. package/esm/telemetry/trellis.js +7 -0
  122. package/esm/trellis/_sdk/activity/_dnt.polyfills.d.ts +12 -0
  123. package/esm/trellis/_sdk/activity/_dnt.polyfills.d.ts.map +1 -0
  124. package/esm/trellis/_sdk/activity/_dnt.polyfills.js +15 -0
  125. package/esm/trellis/_sdk/activity/api.d.ts +10 -0
  126. package/esm/trellis/_sdk/activity/api.d.ts.map +1 -0
  127. package/esm/trellis/_sdk/activity/api.js +43 -0
  128. package/esm/trellis/_sdk/activity/contract.d.ts +8 -0
  129. package/esm/trellis/_sdk/activity/contract.d.ts.map +1 -0
  130. package/esm/trellis/_sdk/activity/contract.js +59 -0
  131. package/esm/trellis/_sdk/activity/mod.d.ts +7 -0
  132. package/esm/trellis/_sdk/activity/mod.d.ts.map +1 -0
  133. package/esm/trellis/_sdk/activity/mod.js +5 -0
  134. package/esm/trellis/_sdk/activity/package.json +3 -0
  135. package/esm/trellis/_sdk/activity/schemas.d.ts +607 -0
  136. package/esm/trellis/_sdk/activity/schemas.d.ts.map +1 -0
  137. package/esm/trellis/_sdk/activity/schemas.js +33 -0
  138. package/esm/trellis/_sdk/activity/types.d.ts +96 -0
  139. package/esm/trellis/_sdk/activity/types.d.ts.map +1 -0
  140. package/esm/trellis/_sdk/activity/types.js +3 -0
  141. package/esm/trellis/_sdk/auth/_dnt.polyfills.d.ts +12 -0
  142. package/esm/trellis/_sdk/auth/_dnt.polyfills.d.ts.map +1 -0
  143. package/esm/trellis/_sdk/auth/_dnt.polyfills.js +15 -0
  144. package/esm/trellis/_sdk/auth/api.d.ts +10 -0
  145. package/esm/trellis/_sdk/auth/api.d.ts.map +1 -0
  146. package/esm/trellis/_sdk/auth/api.js +354 -0
  147. package/esm/trellis/_sdk/auth/contract.d.ts +28 -0
  148. package/esm/trellis/_sdk/auth/contract.d.ts.map +1 -0
  149. package/esm/trellis/_sdk/auth/contract.js +83 -0
  150. package/esm/trellis/_sdk/auth/mod.d.ts +7 -0
  151. package/esm/trellis/_sdk/auth/mod.d.ts.map +1 -0
  152. package/esm/trellis/_sdk/auth/mod.js +5 -0
  153. package/esm/trellis/_sdk/auth/package.json +3 -0
  154. package/esm/trellis/_sdk/auth/schemas.d.ts +8967 -0
  155. package/esm/trellis/_sdk/auth/schemas.d.ts.map +1 -0
  156. package/esm/trellis/_sdk/auth/schemas.js +306 -0
  157. package/esm/trellis/_sdk/auth/types.d.ts +1232 -0
  158. package/esm/trellis/_sdk/auth/types.d.ts.map +1 -0
  159. package/esm/trellis/_sdk/auth/types.js +3 -0
  160. package/esm/trellis/_sdk/core/_dnt.polyfills.d.ts +12 -0
  161. package/esm/trellis/_sdk/core/_dnt.polyfills.d.ts.map +1 -0
  162. package/esm/trellis/_sdk/core/_dnt.polyfills.js +15 -0
  163. package/esm/trellis/_sdk/core/api.d.ts +10 -0
  164. package/esm/trellis/_sdk/core/api.d.ts.map +1 -0
  165. package/esm/trellis/_sdk/core/api.js +36 -0
  166. package/esm/trellis/_sdk/core/contract.d.ts +8 -0
  167. package/esm/trellis/_sdk/core/contract.d.ts.map +1 -0
  168. package/esm/trellis/_sdk/core/contract.js +59 -0
  169. package/esm/trellis/_sdk/core/mod.d.ts +7 -0
  170. package/esm/trellis/_sdk/core/mod.d.ts.map +1 -0
  171. package/esm/trellis/_sdk/core/mod.js +5 -0
  172. package/esm/trellis/_sdk/core/package.json +3 -0
  173. package/esm/trellis/_sdk/core/schemas.d.ts +1144 -0
  174. package/esm/trellis/_sdk/core/schemas.d.ts.map +1 -0
  175. package/esm/trellis/_sdk/core/schemas.js +28 -0
  176. package/esm/trellis/_sdk/core/types.d.ts +176 -0
  177. package/esm/trellis/_sdk/core/types.d.ts.map +1 -0
  178. package/esm/trellis/_sdk/core/types.js +3 -0
  179. package/esm/trellis/auth/browser.d.ts +3 -0
  180. package/esm/trellis/auth/browser.d.ts.map +1 -0
  181. package/esm/trellis/auth/browser.js +2 -0
  182. package/esm/trellis/auth.d.ts +3 -0
  183. package/esm/trellis/auth.d.ts.map +1 -0
  184. package/esm/trellis/auth.js +2 -0
  185. package/esm/trellis/browser.d.ts +2 -7
  186. package/esm/trellis/browser.d.ts.map +1 -1
  187. package/esm/trellis/browser.js +2 -7
  188. package/esm/trellis/client.d.ts +6 -4
  189. package/esm/trellis/client.d.ts.map +1 -1
  190. package/esm/trellis/client.js +28 -1
  191. package/esm/trellis/codec.d.ts +4 -3
  192. package/esm/trellis/codec.d.ts.map +1 -1
  193. package/esm/trellis/codec.js +15 -2
  194. package/esm/trellis/contract.d.ts +11 -0
  195. package/esm/trellis/contract.d.ts.map +1 -0
  196. package/esm/trellis/contract.js +15 -0
  197. package/esm/trellis/contracts.d.ts +5 -0
  198. package/esm/trellis/contracts.d.ts.map +1 -0
  199. package/esm/trellis/contracts.js +3 -0
  200. package/esm/trellis/env.d.ts +1 -1
  201. package/esm/trellis/env.d.ts.map +1 -1
  202. package/esm/trellis/env.js +1 -1
  203. package/esm/trellis/errors/AuthError.d.ts +1 -1
  204. package/esm/trellis/errors/AuthError.d.ts.map +1 -1
  205. package/esm/trellis/errors/AuthError.js +11 -0
  206. package/esm/trellis/errors/RemoteError.d.ts +3 -3
  207. package/esm/trellis/errors/RemoteError.d.ts.map +1 -1
  208. package/esm/trellis/errors/RemoteError.js +3 -3
  209. package/esm/trellis/errors/TrellisError.d.ts +1 -1
  210. package/esm/trellis/errors/TrellisError.js +1 -1
  211. package/esm/trellis/errors/index.d.ts +2 -1
  212. package/esm/trellis/errors/index.d.ts.map +1 -1
  213. package/esm/trellis/errors/index.js +3 -2
  214. package/esm/trellis/globals.d.ts +9 -1
  215. package/esm/trellis/globals.d.ts.map +1 -1
  216. package/esm/trellis/globals.js +16 -8
  217. package/esm/trellis/helpers.d.ts +2 -1
  218. package/esm/trellis/helpers.d.ts.map +1 -1
  219. package/esm/trellis/helpers.js +1 -0
  220. package/esm/trellis/index.d.ts +13 -5
  221. package/esm/trellis/index.d.ts.map +1 -1
  222. package/esm/trellis/index.js +8 -3
  223. package/esm/trellis/kv.d.ts +10 -7
  224. package/esm/trellis/kv.d.ts.map +1 -1
  225. package/esm/trellis/kv.js +57 -34
  226. package/esm/trellis/models/trellis/TrellisError.d.ts +1 -1
  227. package/esm/trellis/models/trellis/TrellisError.js +1 -1
  228. package/esm/trellis/operations.d.ts +81 -0
  229. package/esm/trellis/operations.d.ts.map +1 -0
  230. package/esm/trellis/operations.js +206 -0
  231. package/esm/trellis/sdk/activity.d.ts +3 -0
  232. package/esm/trellis/sdk/activity.d.ts.map +1 -0
  233. package/esm/trellis/sdk/activity.js +2 -0
  234. package/esm/trellis/sdk/auth.d.ts +4 -0
  235. package/esm/trellis/sdk/auth.d.ts.map +1 -0
  236. package/esm/trellis/sdk/auth.js +3 -0
  237. package/esm/trellis/sdk/core.d.ts +4 -0
  238. package/esm/trellis/sdk/core.d.ts.map +1 -0
  239. package/esm/trellis/sdk/core.js +3 -0
  240. package/esm/trellis/server/deno.d.ts +3 -0
  241. package/esm/trellis/server/deno.d.ts.map +1 -0
  242. package/esm/trellis/server/deno.js +2 -0
  243. package/esm/trellis/server/health.d.ts +5 -0
  244. package/esm/trellis/server/health.d.ts.map +1 -0
  245. package/esm/trellis/server/health.js +3 -0
  246. package/esm/trellis/server/mod.d.ts +3 -0
  247. package/esm/trellis/server/mod.d.ts.map +1 -0
  248. package/esm/trellis/server/mod.js +2 -0
  249. package/esm/trellis/server/node.d.ts +3 -0
  250. package/esm/trellis/server/node.d.ts.map +1 -0
  251. package/esm/trellis/server/node.js +2 -0
  252. package/esm/trellis/server/runtime.d.ts +4 -0
  253. package/esm/trellis/server/runtime.d.ts.map +1 -0
  254. package/esm/trellis/server/runtime.js +2 -0
  255. package/esm/trellis/server.d.ts +21 -0
  256. package/esm/trellis/server.d.ts.map +1 -0
  257. package/esm/trellis/server.js +536 -0
  258. package/esm/trellis/server_logger.d.ts +3 -0
  259. package/esm/trellis/server_logger.d.ts.map +1 -0
  260. package/esm/trellis/server_logger.js +7 -0
  261. package/esm/trellis/tasks.d.ts +3 -3
  262. package/esm/trellis/tasks.d.ts.map +1 -1
  263. package/esm/trellis/tasks.js +1 -1
  264. package/esm/trellis/tracing.d.ts +2 -2
  265. package/esm/trellis/tracing.d.ts.map +1 -1
  266. package/esm/trellis/tracing.js +2 -2
  267. package/esm/trellis/trellis.d.ts +167 -78
  268. package/esm/trellis/trellis.d.ts.map +1 -1
  269. package/esm/trellis/trellis.js +281 -87
  270. package/esm/trellis/workload.d.ts +45 -0
  271. package/esm/trellis/workload.d.ts.map +1 -0
  272. package/esm/trellis/workload.js +144 -0
  273. package/package.json +64 -5
  274. package/script/auth/browser/login.d.ts +27 -0
  275. package/script/auth/browser/login.d.ts.map +1 -0
  276. package/script/auth/browser/login.js +100 -0
  277. package/script/auth/browser/portal.d.ts +11 -0
  278. package/script/auth/browser/portal.d.ts.map +1 -0
  279. package/script/auth/browser/portal.js +40 -0
  280. package/script/auth/browser/session.d.ts +19 -0
  281. package/script/auth/browser/session.d.ts.map +1 -0
  282. package/script/auth/browser/session.js +79 -0
  283. package/script/auth/browser/storage.d.ts +12 -0
  284. package/script/auth/browser/storage.d.ts.map +1 -0
  285. package/script/auth/browser/storage.js +67 -0
  286. package/script/auth/browser.d.ts +13 -0
  287. package/script/auth/browser.d.ts.map +1 -0
  288. package/script/auth/browser.js +46 -0
  289. package/script/auth/keys.d.ts +5 -0
  290. package/script/auth/keys.d.ts.map +1 -0
  291. package/script/auth/keys.js +56 -0
  292. package/script/auth/mod.d.ts +18 -0
  293. package/script/auth/mod.d.ts.map +1 -0
  294. package/script/auth/mod.js +172 -0
  295. package/script/auth/proof.d.ts +9 -0
  296. package/script/auth/proof.d.ts.map +1 -0
  297. package/script/auth/proof.js +48 -0
  298. package/script/auth/protocol.d.ts +1212 -0
  299. package/script/auth/protocol.d.ts.map +1 -0
  300. package/script/auth/protocol.js +687 -0
  301. package/script/auth/schemas.d.ts +93 -0
  302. package/script/auth/schemas.d.ts.map +1 -0
  303. package/script/auth/schemas.js +67 -0
  304. package/script/auth/session_auth.d.ts +20 -0
  305. package/script/auth/session_auth.d.ts.map +1 -0
  306. package/script/auth/session_auth.js +45 -0
  307. package/script/auth/trellis_id.d.ts +2 -0
  308. package/script/auth/trellis_id.d.ts.map +1 -0
  309. package/script/auth/trellis_id.js +8 -0
  310. package/script/auth/types.d.ts +8 -0
  311. package/script/auth/types.d.ts.map +1 -0
  312. package/script/auth/utils.d.ts +11 -0
  313. package/script/auth/utils.d.ts.map +1 -0
  314. package/script/auth/utils.js +77 -0
  315. package/script/auth/workload_activation.d.ts +192 -0
  316. package/script/auth/workload_activation.d.ts.map +1 -0
  317. package/script/auth/workload_activation.js +308 -0
  318. package/script/contracts/canonical.d.ts +14 -0
  319. package/script/contracts/canonical.d.ts.map +1 -0
  320. package/script/contracts/canonical.js +144 -0
  321. package/script/contracts/mod.d.ts +466 -0
  322. package/script/contracts/mod.d.ts.map +1 -0
  323. package/script/contracts/mod.js +557 -0
  324. package/script/contracts/protocol.d.ts +301 -0
  325. package/script/contracts/protocol.d.ts.map +1 -0
  326. package/script/contracts/protocol.js +136 -0
  327. package/script/contracts/runtime.d.ts +48 -0
  328. package/script/contracts/runtime.d.ts.map +1 -0
  329. package/script/contracts/runtime.js +13 -0
  330. package/script/contracts/schema_pointers.d.ts +18 -0
  331. package/script/contracts/schema_pointers.d.ts.map +1 -0
  332. package/script/contracts/schema_pointers.js +63 -0
  333. package/script/telemetry/carrier.d.ts +9 -0
  334. package/script/telemetry/carrier.d.ts.map +1 -0
  335. package/script/telemetry/carrier.js +25 -0
  336. package/script/telemetry/core.d.ts +8 -0
  337. package/script/telemetry/core.d.ts.map +1 -0
  338. package/script/telemetry/core.js +24 -0
  339. package/script/telemetry/env.d.ts +2 -0
  340. package/script/telemetry/env.d.ts.map +1 -0
  341. package/script/telemetry/env.js +12 -0
  342. package/script/telemetry/mod.d.ts +11 -0
  343. package/script/telemetry/mod.d.ts.map +1 -0
  344. package/script/telemetry/mod.js +29 -0
  345. package/script/telemetry/nats.d.ts +7 -0
  346. package/script/telemetry/nats.d.ts.map +1 -0
  347. package/script/telemetry/nats.js +9 -0
  348. package/script/telemetry/result.d.ts +2 -0
  349. package/script/telemetry/result.d.ts.map +1 -0
  350. package/script/telemetry/result.js +21 -0
  351. package/script/telemetry/runtime.d.ts +2 -0
  352. package/script/telemetry/runtime.d.ts.map +1 -0
  353. package/script/telemetry/runtime.js +79 -0
  354. package/script/telemetry/trace.d.ts +5 -0
  355. package/script/telemetry/trace.d.ts.map +1 -0
  356. package/script/telemetry/trace.js +31 -0
  357. package/script/telemetry/trellis.d.ts +3 -0
  358. package/script/telemetry/trellis.d.ts.map +1 -0
  359. package/script/telemetry/trellis.js +14 -0
  360. package/script/trellis/_sdk/activity/_dnt.polyfills.d.ts +12 -0
  361. package/script/trellis/_sdk/activity/_dnt.polyfills.d.ts.map +1 -0
  362. package/script/trellis/_sdk/activity/_dnt.polyfills.js +16 -0
  363. package/script/trellis/_sdk/activity/api.d.ts +10 -0
  364. package/script/trellis/_sdk/activity/api.d.ts.map +1 -0
  365. package/script/trellis/_sdk/activity/api.js +46 -0
  366. package/script/trellis/_sdk/activity/contract.d.ts +8 -0
  367. package/script/trellis/_sdk/activity/contract.d.ts.map +1 -0
  368. package/script/trellis/_sdk/activity/contract.js +62 -0
  369. package/script/trellis/_sdk/activity/mod.d.ts +7 -0
  370. package/script/trellis/_sdk/activity/mod.d.ts.map +1 -0
  371. package/script/trellis/_sdk/activity/mod.js +30 -0
  372. package/script/trellis/_sdk/activity/package.json +3 -0
  373. package/script/trellis/_sdk/activity/schemas.d.ts +607 -0
  374. package/script/trellis/_sdk/activity/schemas.d.ts.map +1 -0
  375. package/script/trellis/_sdk/activity/schemas.js +36 -0
  376. package/script/trellis/_sdk/activity/types.d.ts +96 -0
  377. package/script/trellis/_sdk/activity/types.d.ts.map +1 -0
  378. package/script/trellis/_sdk/activity/types.js +6 -0
  379. package/script/trellis/_sdk/auth/_dnt.polyfills.d.ts +12 -0
  380. package/script/trellis/_sdk/auth/_dnt.polyfills.d.ts.map +1 -0
  381. package/script/trellis/_sdk/auth/_dnt.polyfills.js +16 -0
  382. package/script/trellis/_sdk/auth/api.d.ts +10 -0
  383. package/script/trellis/_sdk/auth/api.d.ts.map +1 -0
  384. package/script/trellis/_sdk/auth/api.js +357 -0
  385. package/script/trellis/_sdk/auth/contract.d.ts +28 -0
  386. package/script/trellis/_sdk/auth/contract.d.ts.map +1 -0
  387. package/script/trellis/_sdk/auth/contract.js +86 -0
  388. package/script/trellis/_sdk/auth/mod.d.ts +7 -0
  389. package/script/trellis/_sdk/auth/mod.d.ts.map +1 -0
  390. package/script/trellis/_sdk/auth/mod.js +31 -0
  391. package/script/trellis/_sdk/auth/package.json +3 -0
  392. package/script/trellis/_sdk/auth/schemas.d.ts +8967 -0
  393. package/script/trellis/_sdk/auth/schemas.d.ts.map +1 -0
  394. package/script/trellis/_sdk/auth/schemas.js +309 -0
  395. package/script/trellis/_sdk/auth/types.d.ts +1232 -0
  396. package/script/trellis/_sdk/auth/types.d.ts.map +1 -0
  397. package/script/trellis/_sdk/auth/types.js +6 -0
  398. package/script/trellis/_sdk/core/_dnt.polyfills.d.ts +12 -0
  399. package/script/trellis/_sdk/core/_dnt.polyfills.d.ts.map +1 -0
  400. package/script/trellis/_sdk/core/_dnt.polyfills.js +16 -0
  401. package/script/trellis/_sdk/core/api.d.ts +10 -0
  402. package/script/trellis/_sdk/core/api.d.ts.map +1 -0
  403. package/script/trellis/_sdk/core/api.js +39 -0
  404. package/script/trellis/_sdk/core/contract.d.ts +8 -0
  405. package/script/trellis/_sdk/core/contract.d.ts.map +1 -0
  406. package/script/trellis/_sdk/core/contract.js +62 -0
  407. package/script/trellis/_sdk/core/mod.d.ts +7 -0
  408. package/script/trellis/_sdk/core/mod.d.ts.map +1 -0
  409. package/script/trellis/_sdk/core/mod.js +30 -0
  410. package/script/trellis/_sdk/core/package.json +3 -0
  411. package/script/trellis/_sdk/core/schemas.d.ts +1144 -0
  412. package/script/trellis/_sdk/core/schemas.d.ts.map +1 -0
  413. package/script/trellis/_sdk/core/schemas.js +31 -0
  414. package/script/trellis/_sdk/core/types.d.ts +176 -0
  415. package/script/trellis/_sdk/core/types.d.ts.map +1 -0
  416. package/script/trellis/_sdk/core/types.js +6 -0
  417. package/script/trellis/auth.d.ts +2 -0
  418. package/script/trellis/auth.d.ts.map +1 -0
  419. package/script/trellis/auth.js +17 -0
  420. package/script/trellis/client.d.ts +8 -6
  421. package/script/trellis/client.d.ts.map +1 -1
  422. package/script/trellis/client.js +54 -3
  423. package/script/trellis/codec.d.ts +5 -4
  424. package/script/trellis/codec.d.ts.map +1 -1
  425. package/script/trellis/codec.js +31 -17
  426. package/script/trellis/contract.d.ts +11 -0
  427. package/script/trellis/contract.d.ts.map +1 -0
  428. package/script/trellis/contract.js +18 -0
  429. package/script/trellis/contracts.d.ts +4 -0
  430. package/script/trellis/contracts.d.ts.map +1 -0
  431. package/script/trellis/contracts.js +20 -0
  432. package/script/trellis/errors/AuthError.d.ts +2 -2
  433. package/script/trellis/errors/AuthError.d.ts.map +1 -1
  434. package/script/trellis/errors/AuthError.js +13 -2
  435. package/script/trellis/errors/KVError.d.ts +1 -1
  436. package/script/trellis/errors/KVError.d.ts.map +1 -1
  437. package/script/trellis/errors/KVError.js +2 -2
  438. package/script/trellis/errors/RemoteError.d.ts +4 -4
  439. package/script/trellis/errors/RemoteError.d.ts.map +1 -1
  440. package/script/trellis/errors/RemoteError.js +11 -11
  441. package/script/trellis/errors/TrellisError.d.ts +1 -1
  442. package/script/trellis/errors/TrellisError.d.ts.map +1 -1
  443. package/script/trellis/errors/TrellisError.js +2 -2
  444. package/script/trellis/errors/ValidationError.d.ts +1 -1
  445. package/script/trellis/errors/ValidationError.d.ts.map +1 -1
  446. package/script/trellis/errors/ValidationError.js +2 -2
  447. package/script/trellis/errors/index.d.ts +14 -14
  448. package/script/trellis/errors/index.d.ts.map +1 -1
  449. package/script/trellis/errors/index.js +31 -31
  450. package/script/trellis/globals.d.ts +9 -1
  451. package/script/trellis/globals.d.ts.map +1 -1
  452. package/script/trellis/globals.js +16 -8
  453. package/script/trellis/helpers.d.ts +1 -1
  454. package/script/trellis/helpers.d.ts.map +1 -1
  455. package/script/trellis/index.d.ts +17 -10
  456. package/script/trellis/index.d.ts.map +1 -1
  457. package/script/trellis/index.js +57 -22
  458. package/script/trellis/kv.d.ts +11 -8
  459. package/script/trellis/kv.d.ts.map +1 -1
  460. package/script/trellis/kv.js +91 -68
  461. package/script/trellis/models/trellis/TrellisError.d.ts +1 -1
  462. package/script/trellis/models/trellis/TrellisError.d.ts.map +1 -1
  463. package/script/trellis/models/trellis/TrellisError.js +8 -8
  464. package/script/trellis/operations.d.ts +81 -0
  465. package/script/trellis/operations.d.ts.map +1 -0
  466. package/script/trellis/operations.js +212 -0
  467. package/script/trellis/sdk/core.d.ts +3 -0
  468. package/script/trellis/sdk/core.d.ts.map +1 -0
  469. package/script/trellis/sdk/core.js +20 -0
  470. package/script/trellis/tasks.d.ts +3 -3
  471. package/script/trellis/tasks.d.ts.map +1 -1
  472. package/script/trellis/tasks.js +5 -5
  473. package/script/trellis/tracing.d.ts +2 -3
  474. package/script/trellis/tracing.d.ts.map +1 -1
  475. package/script/trellis/tracing.js +17 -20
  476. package/script/trellis/trellis.d.ts +169 -80
  477. package/script/trellis/trellis.d.ts.map +1 -1
  478. package/script/trellis/trellis.js +379 -177
  479. package/script/trellis/workload.d.ts +45 -0
  480. package/script/trellis/workload.d.ts.map +1 -0
  481. package/script/trellis/workload.js +172 -0
  482. package/script/_dnt.polyfills.d.ts +0 -7
  483. package/script/_dnt.polyfills.d.ts.map +0 -1
  484. package/script/trellis/browser.d.ts +0 -11
  485. package/script/trellis/browser.d.ts.map +0 -1
  486. package/script/trellis/browser.js +0 -21
  487. package/script/trellis/env.d.ts +0 -2
  488. package/script/trellis/env.d.ts.map +0 -1
  489. package/script/trellis/env.js +0 -5
  490. /package/script/{_dnt.polyfills.js → auth/types.js} +0 -0
@@ -0,0 +1,144 @@
1
+ import * as dntShim from "../_dnt.shims.js";
2
+ import { jwtAuthenticator } from "@nats-io/nats-core";
3
+ import { base64urlDecode, buildWorkloadActivationPayload, buildWorkloadActivationUrl, createWorkloadNatsAuthToken, deriveWorkloadIdentity, getWorkloadConnectInfo, verifyWorkloadConfirmationCode, waitForWorkloadActivation, } from "./auth.js";
4
+ function normalizeRootSecret(rootSecret) {
5
+ if (typeof rootSecret === "string") {
6
+ const decoded = base64urlDecode(rootSecret.trim());
7
+ if (decoded.length === 0)
8
+ throw new Error("rootSecret must not be empty");
9
+ return decoded;
10
+ }
11
+ if (rootSecret.length === 0)
12
+ throw new Error("rootSecret must not be empty");
13
+ return rootSecret;
14
+ }
15
+ async function signIdentityBytes(identitySeed, data) {
16
+ const { importEd25519PrivateKeyFromSeedBase64url } = await import("../auth/keys.js");
17
+ const { base64urlEncode, toArrayBuffer } = await import("../auth/utils.js");
18
+ const privateKey = await importEd25519PrivateKeyFromSeedBase64url(base64urlEncode(identitySeed));
19
+ return new Uint8Array(await crypto.subtle.sign("Ed25519", privateKey, toArrayBuffer(data)));
20
+ }
21
+ async function runtimeImport(specifier) {
22
+ const load = new Function("specifier", "return import(specifier);");
23
+ return await load(specifier);
24
+ }
25
+ export async function loadDefaultTransport(importModule = runtimeImport) {
26
+ if ("Deno" in dntShim.dntGlobalThis) {
27
+ const mod = await importModule("@nats-io/nats-core");
28
+ return {
29
+ connect: mod.wsconnect,
30
+ };
31
+ }
32
+ const mod = await runtimeImport("@nats-io/transport-node");
33
+ return {
34
+ connect: mod.connect,
35
+ };
36
+ }
37
+ const defaultDeps = {
38
+ loadTransport: loadDefaultTransport,
39
+ now: () => Date.now(),
40
+ };
41
+ function activationRequiredError() {
42
+ return new Error("Workload activation required but no activation handler was provided");
43
+ }
44
+ function isConnectInfoUnavailable(error) {
45
+ const message = error instanceof Error ? error.message : String(error);
46
+ return message.includes("404") || message.includes("unknown_workload");
47
+ }
48
+ export async function connectWorkloadWithDeps(args, deps) {
49
+ const rootSecret = normalizeRootSecret(args.rootSecret);
50
+ const identity = await deriveWorkloadIdentity(rootSecret);
51
+ const contractDigest = args.contract.CONTRACT_DIGEST;
52
+ let connectInfo = null;
53
+ try {
54
+ connectInfo = (await getWorkloadConnectInfo({
55
+ trellisUrl: args.authUrl,
56
+ publicIdentityKey: identity.publicIdentityKey,
57
+ identitySeed: identity.identitySeed,
58
+ contractDigest,
59
+ })).connectInfo;
60
+ }
61
+ catch (error) {
62
+ if (!isConnectInfoUnavailable(error))
63
+ throw error;
64
+ }
65
+ if (!connectInfo) {
66
+ if (!args.onActivationRequired)
67
+ throw activationRequiredError();
68
+ const nonce = crypto.randomUUID();
69
+ const payload = await buildWorkloadActivationPayload({
70
+ activationKey: identity.activationKey,
71
+ publicIdentityKey: identity.publicIdentityKey,
72
+ nonce,
73
+ });
74
+ const activationUrl = buildWorkloadActivationUrl({
75
+ trellisUrl: args.authUrl,
76
+ payload,
77
+ });
78
+ let activationCompleted = false;
79
+ let onlineConnectInfo = null;
80
+ await args.onActivationRequired({
81
+ url: activationUrl,
82
+ waitForOnlineApproval: async (opts) => {
83
+ if (activationCompleted)
84
+ return;
85
+ const activation = await waitForWorkloadActivation({
86
+ trellisUrl: args.authUrl,
87
+ publicIdentityKey: identity.publicIdentityKey,
88
+ nonce,
89
+ identitySeed: identity.identitySeed,
90
+ contractDigest,
91
+ signal: opts?.signal,
92
+ });
93
+ onlineConnectInfo = activation.connectInfo;
94
+ activationCompleted = true;
95
+ },
96
+ acceptConfirmationCode: async (code) => {
97
+ if (activationCompleted)
98
+ return;
99
+ const ok = await verifyWorkloadConfirmationCode({
100
+ activationKey: identity.activationKey,
101
+ publicIdentityKey: identity.publicIdentityKey,
102
+ nonce,
103
+ confirmationCode: code,
104
+ });
105
+ if (!ok) {
106
+ throw new Error("Invalid workload confirmation code");
107
+ }
108
+ activationCompleted = true;
109
+ },
110
+ });
111
+ if (!activationCompleted) {
112
+ throw new Error("Workload activation did not complete");
113
+ }
114
+ connectInfo = onlineConnectInfo ?? (await getWorkloadConnectInfo({
115
+ trellisUrl: args.authUrl,
116
+ publicIdentityKey: identity.publicIdentityKey,
117
+ identitySeed: identity.identitySeed,
118
+ contractDigest,
119
+ })).connectInfo;
120
+ }
121
+ const transport = await deps.loadTransport();
122
+ const iat = Math.floor(deps.now() / 1_000);
123
+ const authToken = await createWorkloadNatsAuthToken({
124
+ publicIdentityKey: identity.publicIdentityKey,
125
+ identitySeed: identity.identitySeed,
126
+ contractDigest,
127
+ iat,
128
+ });
129
+ const nc = await transport.connect({
130
+ servers: connectInfo.transport.natsServers,
131
+ token: JSON.stringify(authToken),
132
+ inboxPrefix: `_INBOX.${identity.publicIdentityKey.slice(0, 16)}`,
133
+ authenticator: jwtAuthenticator(connectInfo.transport.sentinel.jwt, new TextEncoder().encode(connectInfo.transport.sentinel.seed)),
134
+ });
135
+ return args.contract.createClient(nc, {
136
+ sessionKey: identity.publicIdentityKey,
137
+ sign: (data) => signIdentityBytes(identity.identitySeed, data),
138
+ });
139
+ }
140
+ export class TrellisWorkload {
141
+ static connect(args) {
142
+ return connectWorkloadWithDeps(args, defaultDeps);
143
+ }
144
+ }
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@qlever-llc/trellis",
3
- "version": "0.5.1",
3
+ "version": "0.6.1",
4
4
  "description": "Client-side Trellis runtime, models, and contract helpers for TypeScript applications.",
5
5
  "homepage": "https://github.com/Qlever-LLC/trellis#readme",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "https://github.com/Qlever-LLC/trellis"
8
+ "url": "git+https://github.com/Qlever-LLC/trellis.git"
9
9
  },
10
10
  "license": "Apache-2.0",
11
11
  "bugs": {
@@ -18,10 +18,62 @@
18
18
  "import": "./esm/trellis/index.js",
19
19
  "require": "./script/trellis/index.js"
20
20
  },
21
+ "./auth": {
22
+ "import": "./esm/trellis/auth.js",
23
+ "require": "./script/trellis/auth.js"
24
+ },
25
+ "./auth/browser": {
26
+ "import": "./esm/trellis/auth/browser.js",
27
+ "require": "./script/trellis/auth/browser.js"
28
+ },
21
29
  "./browser": {
22
30
  "import": "./esm/trellis/browser.js",
23
31
  "require": "./script/trellis/browser.js"
24
32
  },
33
+ "./contracts": {
34
+ "import": "./esm/trellis/contracts.js",
35
+ "require": "./script/trellis/contracts.js"
36
+ },
37
+ "./errors": {
38
+ "import": "./esm/trellis/errors/index.js",
39
+ "require": "./script/trellis/errors/index.js"
40
+ },
41
+ "./helpers": {
42
+ "import": "./esm/trellis/helpers.js",
43
+ "require": "./script/trellis/helpers.js"
44
+ },
45
+ "./server": {
46
+ "import": "./esm/trellis/server/mod.js",
47
+ "require": "./script/trellis/server/mod.js"
48
+ },
49
+ "./server/health": {
50
+ "import": "./esm/trellis/server/health.js",
51
+ "require": "./script/trellis/server/health.js"
52
+ },
53
+ "./server/deno": {
54
+ "import": "./esm/trellis/server/deno.js",
55
+ "require": "./script/trellis/server/deno.js"
56
+ },
57
+ "./server/node": {
58
+ "import": "./esm/trellis/server/node.js",
59
+ "require": "./script/trellis/server/node.js"
60
+ },
61
+ "./server/runtime": {
62
+ "import": "./esm/trellis/server/runtime.js",
63
+ "require": "./script/trellis/server/runtime.js"
64
+ },
65
+ "./sdk/activity": {
66
+ "import": "./esm/trellis/sdk/activity.js",
67
+ "require": "./script/trellis/sdk/activity.js"
68
+ },
69
+ "./sdk/auth": {
70
+ "import": "./esm/trellis/sdk/auth.js",
71
+ "require": "./script/trellis/sdk/auth.js"
72
+ },
73
+ "./sdk/core": {
74
+ "import": "./esm/trellis/sdk/core.js",
75
+ "require": "./script/trellis/sdk/core.js"
76
+ },
25
77
  "./tracing": {
26
78
  "import": "./esm/trellis/tracing.js",
27
79
  "require": "./script/trellis/tracing.js"
@@ -31,16 +83,23 @@
31
83
  "access": "public"
32
84
  },
33
85
  "dependencies": {
86
+ "@deno/shim-deno": "~0.18.0",
87
+ "@opentelemetry/api": "^1.9.0",
88
+ "@opentelemetry/exporter-trace-otlp-http": "^0.56.0",
89
+ "@opentelemetry/resources": "^1.30.1",
90
+ "@opentelemetry/sdk-trace-base": "^1.30.1",
91
+ "@opentelemetry/sdk-trace-node": "^1.30.1",
92
+ "@opentelemetry/semantic-conventions": "^1.28.0",
34
93
  "@nats-io/jetstream": "^3.3.0",
35
94
  "@nats-io/kv": "^3.2.0",
36
95
  "@nats-io/nats-core": "^3.3.1",
96
+ "@nats-io/transport-node": "^3.3.1",
97
+ "json-schema-library": "^10.5.2",
37
98
  "pino": "^9.11.0",
38
99
  "ts-deepmerge": "^7.0.3",
39
100
  "typebox": "^1.0.15",
40
101
  "ulid": "^3.0.1",
41
- "@qlever-llc/trellis-contracts": "^0.5.1",
42
- "@qlever-llc/trellis-result": "^0.5.1",
43
- "@qlever-llc/trellis-telemetry": "^0.5.1"
102
+ "@qlever-llc/result": "^0.6.1"
44
103
  },
45
104
  "devDependencies": {
46
105
  "@types/node": "^20.9.0"
@@ -0,0 +1,27 @@
1
+ import { type BindResponse, type BindSuccessResponse } from "../schemas.ts";
2
+ import type { SessionKeyHandle } from "./session.ts";
3
+ export type { BindResponse, BindSuccessResponse, ContractApproval, SentinelCreds, } from "../schemas.ts";
4
+ export type AuthConfig = {
5
+ authUrl: string;
6
+ };
7
+ export declare function buildLoginUrl(config: AuthConfig, provider: string | undefined, redirectTo: string, handle: SessionKeyHandle, contract: Record<string, unknown>, context?: unknown): Promise<string>;
8
+ export declare function buildLoginUrl(args: {
9
+ authUrl: string;
10
+ provider?: string;
11
+ redirectTo: string;
12
+ handle: SessionKeyHandle;
13
+ contract: Record<string, unknown>;
14
+ context?: unknown;
15
+ }): Promise<string>;
16
+ export declare function buildLoginUrl(args: {
17
+ config: AuthConfig;
18
+ provider?: string;
19
+ redirectTo: string;
20
+ handle: SessionKeyHandle;
21
+ contract: Record<string, unknown>;
22
+ context?: unknown;
23
+ }): Promise<string>;
24
+ export declare function isBindSuccessResponse(response: BindResponse): response is BindSuccessResponse;
25
+ export declare function bindFlow(config: AuthConfig, handle: SessionKeyHandle, flowId: string): Promise<BindResponse>;
26
+ export declare function bindSession(config: AuthConfig, handle: SessionKeyHandle, authToken: string): Promise<BindResponse>;
27
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../../../auth/browser/login.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,YAAY,EAEjB,KAAK,mBAAmB,EAEzB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AA4BF,wBAAsB,aAAa,CACjC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,CAAC,CAAC;AACnB,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA,OAAO,CAAC,MAAM,CAAC,CAAC;AACnB,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACA,OAAO,CAAC,MAAM,CAAC,CAAC;AAwEnB,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,QAAQ,IAAI,mBAAmB,CAE7F;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,CAAC,CAmBvB;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CAoBvB"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildLoginUrl = buildLoginUrl;
4
+ exports.isBindSuccessResponse = isBindSuccessResponse;
5
+ exports.bindFlow = bindFlow;
6
+ exports.bindSession = bindSession;
7
+ const utils_ts_1 = require("../utils.ts");
8
+ const value_1 = require("typebox/value");
9
+ const schemas_ts_1 = require("../schemas.ts");
10
+ const session_ts_1 = require("./session.ts");
11
+ function encodeJsonForQuery(value) {
12
+ const json = (0, utils_ts_1.canonicalizeJsonValue)(value);
13
+ const bytes = new TextEncoder().encode(json);
14
+ let binary = "";
15
+ for (const byte of bytes)
16
+ binary += String.fromCharCode(byte);
17
+ return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/g, "");
18
+ }
19
+ async function buildLoginUrl(argsOrConfig, provider, redirectTo, handle, contract, context) {
20
+ const resolved = isNestedBuildLoginUrlArgs(argsOrConfig)
21
+ ? argsOrConfig
22
+ : isFlatBuildLoginUrlArgs(argsOrConfig)
23
+ ? {
24
+ config: { authUrl: argsOrConfig.authUrl },
25
+ provider: argsOrConfig.provider,
26
+ redirectTo: argsOrConfig.redirectTo,
27
+ handle: argsOrConfig.handle,
28
+ contract: argsOrConfig.contract,
29
+ context: argsOrConfig.context,
30
+ }
31
+ : buildLoginUrlArgsFromPositional(argsOrConfig, provider, redirectTo, handle, contract, context);
32
+ const sessionKey = (0, session_ts_1.getPublicSessionKey)(resolved.handle);
33
+ const sig = await (0, session_ts_1.oauthInitSig)(resolved.handle, resolved.redirectTo, resolved.context);
34
+ const url = new URL(`${resolved.config.authUrl}/auth/login`);
35
+ url.searchParams.set("redirectTo", resolved.redirectTo);
36
+ url.searchParams.set("sessionKey", sessionKey);
37
+ url.searchParams.set("sig", sig);
38
+ url.searchParams.set("contract", encodeJsonForQuery(resolved.contract));
39
+ if (resolved.provider) {
40
+ url.searchParams.set("provider", resolved.provider);
41
+ }
42
+ if (resolved.context !== undefined) {
43
+ url.searchParams.set("context", encodeJsonForQuery(resolved.context));
44
+ }
45
+ return url.href;
46
+ }
47
+ function buildLoginUrlArgsFromPositional(config, provider, redirectTo, handle, contract, context) {
48
+ if (redirectTo === undefined || handle === undefined || contract === undefined) {
49
+ throw new TypeError("buildLoginUrl requires redirectTo, handle, and contract");
50
+ }
51
+ return {
52
+ config,
53
+ provider,
54
+ redirectTo,
55
+ handle,
56
+ contract,
57
+ context,
58
+ };
59
+ }
60
+ function isNestedBuildLoginUrlArgs(value) {
61
+ return "config" in value;
62
+ }
63
+ function isFlatBuildLoginUrlArgs(value) {
64
+ return "authUrl" in value && "redirectTo" in value && "handle" in value && "contract" in value;
65
+ }
66
+ function isBindSuccessResponse(response) {
67
+ return response.status === "bound";
68
+ }
69
+ async function bindFlow(config, handle, flowId) {
70
+ const sessionKey = (0, session_ts_1.getPublicSessionKey)(handle);
71
+ const sig = await (0, session_ts_1.bindFlowSig)(handle, flowId);
72
+ const response = await fetch(`${config.authUrl}/auth/flow/${encodeURIComponent(flowId)}/bind`, {
73
+ method: "POST",
74
+ headers: { "Content-Type": "application/json" },
75
+ body: JSON.stringify({ sessionKey, sig }),
76
+ });
77
+ if (!response.ok) {
78
+ const text = await response.text();
79
+ throw new Error(`Bind failed: ${response.status} ${text}`);
80
+ }
81
+ return value_1.Value.Parse(schemas_ts_1.BindResponseSchema, await response.json());
82
+ }
83
+ async function bindSession(config, handle, authToken) {
84
+ const sessionKey = (0, session_ts_1.getPublicSessionKey)(handle);
85
+ const sig = await (0, session_ts_1.bindSig)(handle, authToken);
86
+ const response = await fetch(`${config.authUrl}/auth/bind`, {
87
+ method: "POST",
88
+ headers: { "Content-Type": "application/json" },
89
+ body: JSON.stringify({
90
+ authToken,
91
+ sessionKey,
92
+ sig,
93
+ }),
94
+ });
95
+ if (!response.ok) {
96
+ const text = await response.text();
97
+ throw new Error(`Bind failed: ${response.status} ${text}`);
98
+ }
99
+ return value_1.Value.Parse(schemas_ts_1.BindResponseSchema, await response.json());
100
+ }
@@ -0,0 +1,11 @@
1
+ import { type PortalFlowState } from "../protocol.ts";
2
+ import type { ApprovalDecision } from "../schemas.ts";
3
+ import type { AuthConfig } from "./login.ts";
4
+ export type { PortalFlowState } from "../protocol.ts";
5
+ export type { ApprovalDecision } from "../schemas.ts";
6
+ export declare function portalFlowIdFromUrl(url: URL): string | null;
7
+ export declare function fetchPortalFlowState(config: AuthConfig, flowId: string): Promise<PortalFlowState>;
8
+ export declare function portalProviderLoginUrl(config: AuthConfig, providerId: string, flowId: string): string;
9
+ export declare function submitPortalApproval(config: AuthConfig, flowId: string, decision: ApprovalDecision): Promise<PortalFlowState>;
10
+ export declare function portalRedirectLocation(state: PortalFlowState | null): string | null;
11
+ //# sourceMappingURL=portal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../../../../auth/browser/portal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAyB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMtD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,CAO1B;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,MAAM,CAGR;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAe1B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAEnF"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.portalFlowIdFromUrl = portalFlowIdFromUrl;
4
+ exports.fetchPortalFlowState = fetchPortalFlowState;
5
+ exports.portalProviderLoginUrl = portalProviderLoginUrl;
6
+ exports.submitPortalApproval = submitPortalApproval;
7
+ exports.portalRedirectLocation = portalRedirectLocation;
8
+ const protocol_ts_1 = require("../protocol.ts");
9
+ const value_1 = require("typebox/value");
10
+ function authBaseUrl(config) {
11
+ return config.authUrl.replace(/\/$/, "");
12
+ }
13
+ function portalFlowIdFromUrl(url) {
14
+ return url.searchParams.get("flowId");
15
+ }
16
+ async function fetchPortalFlowState(config, flowId) {
17
+ const response = await fetch(`${authBaseUrl(config)}/auth/flow/${encodeURIComponent(flowId)}`);
18
+ if (!response.ok) {
19
+ throw new Error(`Failed to load portal flow (${response.status})`);
20
+ }
21
+ return value_1.Value.Parse(protocol_ts_1.PortalFlowStateSchema, await response.json());
22
+ }
23
+ function portalProviderLoginUrl(config, providerId, flowId) {
24
+ const base = `${authBaseUrl(config)}/auth/login/${encodeURIComponent(providerId)}`;
25
+ return `${base}?flowId=${encodeURIComponent(flowId)}`;
26
+ }
27
+ async function submitPortalApproval(config, flowId, decision) {
28
+ const response = await fetch(`${authBaseUrl(config)}/auth/flow/${encodeURIComponent(flowId)}/approval`, {
29
+ method: "POST",
30
+ headers: { "content-type": "application/json" },
31
+ body: JSON.stringify({ decision }),
32
+ });
33
+ if (!response.ok) {
34
+ throw new Error(`Approval request failed (${response.status})`);
35
+ }
36
+ return value_1.Value.Parse(protocol_ts_1.PortalFlowStateSchema, await response.json());
37
+ }
38
+ function portalRedirectLocation(state) {
39
+ return state?.status === "redirect" ? state.location : null;
40
+ }
@@ -0,0 +1,19 @@
1
+ export type SessionKeyHandle = {
2
+ privateKey: CryptoKey;
3
+ publicKey: CryptoKey;
4
+ publicKeyRaw: Uint8Array;
5
+ sessionKey: string;
6
+ };
7
+ export declare function generateSessionKey(): Promise<SessionKeyHandle>;
8
+ export declare function loadSessionKey(): Promise<SessionKeyHandle | null>;
9
+ export declare function getOrCreateSessionKey(): Promise<SessionKeyHandle>;
10
+ export declare function signBytes(handle: SessionKeyHandle, data: Uint8Array): Promise<Uint8Array>;
11
+ export declare function getPublicSessionKey(handle: SessionKeyHandle): string;
12
+ export declare function oauthInitSig(handle: SessionKeyHandle, redirectTo: string, context?: unknown): Promise<string>;
13
+ export declare function bindSig(handle: SessionKeyHandle, authToken: string): Promise<string>;
14
+ export declare function bindFlowSig(handle: SessionKeyHandle, flowId: string): Promise<string>;
15
+ export declare function natsConnectSigForBindingToken(handle: SessionKeyHandle, bindingToken: string): Promise<string>;
16
+ export declare function createRpcProof(handle: SessionKeyHandle, subject: string, payload: Uint8Array): Promise<string>;
17
+ export declare function clearSessionKey(): Promise<void>;
18
+ export declare function hasSessionKey(): Promise<boolean>;
19
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../../auth/browser/session.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAapE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CASvE;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAIvE;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAO/F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAEpE;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI1F;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3F;AAED,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAEtD"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateSessionKey = generateSessionKey;
4
+ exports.loadSessionKey = loadSessionKey;
5
+ exports.getOrCreateSessionKey = getOrCreateSessionKey;
6
+ exports.signBytes = signBytes;
7
+ exports.getPublicSessionKey = getPublicSessionKey;
8
+ exports.oauthInitSig = oauthInitSig;
9
+ exports.bindSig = bindSig;
10
+ exports.bindFlowSig = bindFlowSig;
11
+ exports.natsConnectSigForBindingToken = natsConnectSigForBindingToken;
12
+ exports.createRpcProof = createRpcProof;
13
+ exports.clearSessionKey = clearSessionKey;
14
+ exports.hasSessionKey = hasSessionKey;
15
+ const utils_ts_1 = require("../utils.ts");
16
+ const proof_ts_1 = require("../proof.ts");
17
+ const storage_ts_1 = require("./storage.ts");
18
+ async function generateSessionKey() {
19
+ const keyPair = await crypto.subtle.generateKey({ name: "Ed25519" }, false, ["sign", "verify"]);
20
+ const publicKeyRaw = new Uint8Array(await crypto.subtle.exportKey("raw", keyPair.publicKey));
21
+ const sessionKey = (0, utils_ts_1.base64urlEncode)(publicKeyRaw);
22
+ await (0, storage_ts_1.storeKeyPair)(keyPair, publicKeyRaw);
23
+ return { privateKey: keyPair.privateKey, publicKey: keyPair.publicKey, publicKeyRaw, sessionKey };
24
+ }
25
+ async function loadSessionKey() {
26
+ const stored = await (0, storage_ts_1.loadKeyPair)();
27
+ if (!stored)
28
+ return null;
29
+ return {
30
+ privateKey: stored.privateKey,
31
+ publicKey: stored.publicKey,
32
+ publicKeyRaw: stored.publicKeyRaw,
33
+ sessionKey: (0, utils_ts_1.base64urlEncode)(stored.publicKeyRaw),
34
+ };
35
+ }
36
+ async function getOrCreateSessionKey() {
37
+ const existing = await loadSessionKey();
38
+ if (existing)
39
+ return existing;
40
+ return await generateSessionKey();
41
+ }
42
+ async function signBytes(handle, data) {
43
+ const sig = await crypto.subtle.sign({ name: "Ed25519" }, handle.privateKey, (0, utils_ts_1.toArrayBuffer)(data));
44
+ return new Uint8Array(sig);
45
+ }
46
+ function getPublicSessionKey(handle) {
47
+ return handle.sessionKey;
48
+ }
49
+ async function oauthInitSig(handle, redirectTo, context) {
50
+ const canonicalContext = (0, utils_ts_1.canonicalizeJsonValue)(context ?? null);
51
+ const digest = await (0, utils_ts_1.sha256)((0, utils_ts_1.utf8)(`oauth-init:${redirectTo}:${canonicalContext}`));
52
+ const sig = await signBytes(handle, digest);
53
+ return (0, utils_ts_1.base64urlEncode)(sig);
54
+ }
55
+ async function bindSig(handle, authToken) {
56
+ const digest = await (0, utils_ts_1.sha256)((0, utils_ts_1.utf8)(`bind:${authToken}`));
57
+ const sig = await signBytes(handle, digest);
58
+ return (0, utils_ts_1.base64urlEncode)(sig);
59
+ }
60
+ async function bindFlowSig(handle, flowId) {
61
+ const digest = await (0, utils_ts_1.sha256)((0, utils_ts_1.utf8)(`bind-flow:${flowId}`));
62
+ const sig = await signBytes(handle, digest);
63
+ return (0, utils_ts_1.base64urlEncode)(sig);
64
+ }
65
+ async function natsConnectSigForBindingToken(handle, bindingToken) {
66
+ const digest = await (0, utils_ts_1.sha256)((0, utils_ts_1.utf8)(`nats-connect:${bindingToken}`));
67
+ const sig = await signBytes(handle, digest);
68
+ return (0, utils_ts_1.base64urlEncode)(sig);
69
+ }
70
+ async function createRpcProof(handle, subject, payload) {
71
+ const payloadHash = await (0, utils_ts_1.sha256)(payload);
72
+ return await (0, proof_ts_1.createProof)(handle.privateKey, { sessionKey: handle.sessionKey, subject, payloadHash });
73
+ }
74
+ async function clearSessionKey() {
75
+ await (0, storage_ts_1.deleteKeyPair)();
76
+ }
77
+ async function hasSessionKey() {
78
+ return await (0, storage_ts_1.hasKeyPair)();
79
+ }
@@ -0,0 +1,12 @@
1
+ export type StoredKeyPair = {
2
+ id: string;
3
+ privateKey: CryptoKey;
4
+ publicKey: CryptoKey;
5
+ publicKeyRaw: Uint8Array;
6
+ createdAt: number;
7
+ };
8
+ export declare function storeKeyPair(keyPair: CryptoKeyPair, publicKeyRaw: Uint8Array): Promise<void>;
9
+ export declare function loadKeyPair(): Promise<StoredKeyPair | null>;
10
+ export declare function deleteKeyPair(): Promise<void>;
11
+ export declare function hasKeyPair(): Promise<boolean>;
12
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../../../auth/browser/storage.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,UAAU,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBlG;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAYjE;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAYnD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAGnD"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.storeKeyPair = storeKeyPair;
4
+ exports.loadKeyPair = loadKeyPair;
5
+ exports.deleteKeyPair = deleteKeyPair;
6
+ exports.hasKeyPair = hasKeyPair;
7
+ const DB_NAME = "trellis-auth";
8
+ const DB_VERSION = 1;
9
+ const STORE_NAME = "keys";
10
+ const KEY_ID = "trellis-session-key";
11
+ function openDB() {
12
+ return new Promise((resolve, reject) => {
13
+ const request = indexedDB.open(DB_NAME, DB_VERSION);
14
+ request.onerror = () => reject(request.error);
15
+ request.onsuccess = () => resolve(request.result);
16
+ request.onupgradeneeded = () => {
17
+ const db = request.result;
18
+ if (!db.objectStoreNames.contains(STORE_NAME)) {
19
+ db.createObjectStore(STORE_NAME, { keyPath: "id" });
20
+ }
21
+ };
22
+ });
23
+ }
24
+ async function storeKeyPair(keyPair, publicKeyRaw) {
25
+ const db = await openDB();
26
+ return new Promise((resolve, reject) => {
27
+ const tx = db.transaction(STORE_NAME, "readwrite");
28
+ const store = tx.objectStore(STORE_NAME);
29
+ const record = {
30
+ id: KEY_ID,
31
+ privateKey: keyPair.privateKey,
32
+ publicKey: keyPair.publicKey,
33
+ publicKeyRaw,
34
+ createdAt: Date.now(),
35
+ };
36
+ const request = store.put(record);
37
+ request.onerror = () => reject(request.error);
38
+ request.onsuccess = () => resolve();
39
+ tx.oncomplete = () => db.close();
40
+ });
41
+ }
42
+ async function loadKeyPair() {
43
+ const db = await openDB();
44
+ return new Promise((resolve, reject) => {
45
+ const tx = db.transaction(STORE_NAME, "readonly");
46
+ const store = tx.objectStore(STORE_NAME);
47
+ const request = store.get(KEY_ID);
48
+ request.onerror = () => reject(request.error);
49
+ request.onsuccess = () => resolve(request.result ?? null);
50
+ tx.oncomplete = () => db.close();
51
+ });
52
+ }
53
+ async function deleteKeyPair() {
54
+ const db = await openDB();
55
+ return new Promise((resolve, reject) => {
56
+ const tx = db.transaction(STORE_NAME, "readwrite");
57
+ const store = tx.objectStore(STORE_NAME);
58
+ const request = store.delete(KEY_ID);
59
+ request.onerror = () => reject(request.error);
60
+ request.onsuccess = () => resolve();
61
+ tx.oncomplete = () => db.close();
62
+ });
63
+ }
64
+ async function hasKeyPair() {
65
+ const keyPair = await loadKeyPair();
66
+ return keyPair !== null;
67
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @module
3
+ * Browser-based authentication utilities for session-key based authentication.
4
+ * Uses WebCrypto API and IndexedDB for secure key storage.
5
+ */
6
+ export { type AuthConfig, type BindResponse, type BindSuccessResponse, bindFlow, bindSession, buildLoginUrl, isBindSuccessResponse, type SentinelCreds, } from "./browser/login.ts";
7
+ export { fetchPortalFlowState, portalFlowIdFromUrl, portalProviderLoginUrl, portalRedirectLocation, submitPortalApproval, type ApprovalDecision, type PortalFlowState as BrowserPortalFlowState, } from "./browser/portal.ts";
8
+ export { bindFlowSig, clearSessionKey, createRpcProof, generateSessionKey, getOrCreateSessionKey, getPublicSessionKey, hasSessionKey, loadSessionKey, natsConnectSigForBindingToken, type SessionKeyHandle, signBytes, } from "./browser/session.ts";
9
+ export { deleteKeyPair, hasKeyPair } from "./browser/storage.ts";
10
+ export { type BindResponse as BindResponseData, BindResponseSchema, type BindSuccessResponse as BindSuccessResponseData, BindSuccessResponseSchema, type ContractApproval as ContractApprovalData, ContractApprovalSchema, type NatsAuthTokenV1 as NatsAuthTokenV1Data, NatsAuthTokenV1Schema, type ApprovalDecision as ApprovalDecisionData, ApprovalDecisionSchema, type SentinelCreds as SentinelCredsData, SentinelCredsSchema, } from "./schemas.ts";
11
+ export type { NatsAuthTokenV1 } from "./types.ts";
12
+ export { base64urlDecode, base64urlEncode, sha256, toArrayBuffer, utf8, } from "./utils.ts";
13
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../auth/browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,QAAQ,EACR,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,IAAI,sBAAsB,GAC/C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,6BAA6B,EAC7B,KAAK,gBAAgB,EACrB,SAAS,GACV,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,KAAK,YAAY,IAAI,gBAAgB,EACrC,kBAAkB,EAClB,KAAK,mBAAmB,IAAI,uBAAuB,EACnD,yBAAyB,EACzB,KAAK,gBAAgB,IAAI,oBAAoB,EAC7C,sBAAsB,EACtB,KAAK,eAAe,IAAI,mBAAmB,EAC3C,qBAAqB,EACrB,KAAK,gBAAgB,IAAI,oBAAoB,EAC7C,sBAAsB,EACtB,KAAK,aAAa,IAAI,iBAAiB,EACvC,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,eAAe,EACf,eAAe,EACf,MAAM,EACN,aAAa,EACb,IAAI,GACL,MAAM,YAAY,CAAC"}