@adonis-agora/durable 1.0.0-rc.2 → 1.0.0-rc.21

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 (398) hide show
  1. package/CHANGELOG.md +204 -0
  2. package/dist/assets/spa/assets/index-BgoNV3TR.css +1 -0
  3. package/dist/assets/spa/assets/index-DzXygyDm.js +57 -0
  4. package/dist/assets/spa/assets/index-DzXygyDm.js.map +1 -0
  5. package/dist/assets/spa/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  6. package/dist/assets/spa/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  7. package/dist/assets/spa/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  8. package/dist/assets/spa/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  9. package/dist/assets/spa/assets/jetbrains-mono-latin-600-normal-BfsvjouI.woff +0 -0
  10. package/dist/assets/spa/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
  11. package/dist/assets/spa/assets/sora-latin-400-normal-CRt88UEn.woff2 +0 -0
  12. package/dist/assets/spa/assets/sora-latin-400-normal-OW7qkl5a.woff +0 -0
  13. package/dist/assets/spa/assets/sora-latin-500-normal-01eiPEn0.woff2 +0 -0
  14. package/dist/assets/spa/assets/sora-latin-500-normal-w58xtEt9.woff +0 -0
  15. package/dist/assets/spa/assets/sora-latin-600-normal-1_7fyUAY.woff +0 -0
  16. package/dist/assets/spa/assets/sora-latin-600-normal-Cdg4DaK0.woff2 +0 -0
  17. package/dist/assets/spa/assets/sora-latin-700-normal-9waGdLWo.woff2 +0 -0
  18. package/dist/assets/spa/assets/sora-latin-700-normal-BKPfQAnC.woff +0 -0
  19. package/dist/assets/spa/index.html +2 -8
  20. package/dist/commands/agora_doctor.d.ts +23 -0
  21. package/dist/commands/agora_doctor.d.ts.map +1 -0
  22. package/dist/commands/agora_doctor.js +110 -0
  23. package/dist/commands/agora_doctor.js.map +1 -0
  24. package/dist/commands/durable_doctor.d.ts +8 -0
  25. package/dist/commands/durable_doctor.d.ts.map +1 -0
  26. package/dist/commands/durable_doctor.js +8 -0
  27. package/dist/commands/durable_doctor.js.map +1 -0
  28. package/dist/commands/durable_worker.d.ts +3 -3
  29. package/dist/commands/durable_worker.js +7 -7
  30. package/dist/commands/durable_worker.js.map +1 -1
  31. package/dist/commands/health.d.ts +12 -0
  32. package/dist/commands/health.d.ts.map +1 -0
  33. package/dist/commands/health.js +34 -0
  34. package/dist/commands/health.js.map +1 -0
  35. package/dist/commands/lifecycle_republish.d.ts +8 -9
  36. package/dist/commands/lifecycle_republish.d.ts.map +1 -1
  37. package/dist/commands/lifecycle_republish.js +29 -16
  38. package/dist/commands/lifecycle_republish.js.map +1 -1
  39. package/dist/commands/main.d.ts +25 -5
  40. package/dist/commands/main.d.ts.map +1 -1
  41. package/dist/commands/main.js +54 -7
  42. package/dist/commands/main.js.map +1 -1
  43. package/dist/commands/runs.d.ts +9 -16
  44. package/dist/commands/runs.d.ts.map +1 -1
  45. package/dist/commands/runs.js +60 -47
  46. package/dist/commands/runs.js.map +1 -1
  47. package/dist/commands/runs_bulk.d.ts +17 -0
  48. package/dist/commands/runs_bulk.d.ts.map +1 -0
  49. package/dist/commands/runs_bulk.js +76 -0
  50. package/dist/commands/runs_bulk.js.map +1 -0
  51. package/dist/commands/runs_cancel.d.ts +15 -0
  52. package/dist/commands/runs_cancel.d.ts.map +1 -0
  53. package/dist/commands/runs_cancel.js +39 -0
  54. package/dist/commands/runs_cancel.js.map +1 -0
  55. package/dist/commands/runs_continue.d.ts +12 -0
  56. package/dist/commands/runs_continue.d.ts.map +1 -0
  57. package/dist/commands/runs_continue.js +28 -0
  58. package/dist/commands/runs_continue.js.map +1 -0
  59. package/dist/commands/runs_event.d.ts +13 -0
  60. package/dist/commands/runs_event.d.ts.map +1 -0
  61. package/dist/commands/runs_event.js +28 -0
  62. package/dist/commands/runs_event.js.map +1 -0
  63. package/dist/commands/runs_fan.d.ts +16 -0
  64. package/dist/commands/runs_fan.d.ts.map +1 -0
  65. package/dist/commands/runs_fan.js +58 -0
  66. package/dist/commands/runs_fan.js.map +1 -0
  67. package/dist/commands/runs_redispatch.d.ts +14 -0
  68. package/dist/commands/runs_redispatch.d.ts.map +1 -0
  69. package/dist/commands/runs_redispatch.js +35 -0
  70. package/dist/commands/runs_redispatch.js.map +1 -0
  71. package/dist/commands/runs_replay.d.ts +14 -0
  72. package/dist/commands/runs_replay.d.ts.map +1 -0
  73. package/dist/commands/runs_replay.js +38 -0
  74. package/dist/commands/runs_replay.js.map +1 -0
  75. package/dist/commands/runs_retry.d.ts +13 -0
  76. package/dist/commands/runs_retry.d.ts.map +1 -0
  77. package/dist/commands/runs_retry.js +29 -0
  78. package/dist/commands/runs_retry.js.map +1 -0
  79. package/dist/commands/runs_show.d.ts +14 -0
  80. package/dist/commands/runs_show.d.ts.map +1 -0
  81. package/dist/commands/runs_show.js +96 -0
  82. package/dist/commands/runs_show.js.map +1 -0
  83. package/dist/commands/runs_signal.d.ts +17 -0
  84. package/dist/commands/runs_signal.d.ts.map +1 -0
  85. package/dist/commands/runs_signal.js +49 -0
  86. package/dist/commands/runs_signal.js.map +1 -0
  87. package/dist/commands/runs_update.d.ts +15 -0
  88. package/dist/commands/runs_update.d.ts.map +1 -0
  89. package/dist/commands/runs_update.js +39 -0
  90. package/dist/commands/runs_update.js.map +1 -0
  91. package/dist/commands/runs_values.d.ts +15 -0
  92. package/dist/commands/runs_values.d.ts.map +1 -0
  93. package/dist/commands/runs_values.js +45 -0
  94. package/dist/commands/runs_values.js.map +1 -0
  95. package/dist/commands/schedules.d.ts +18 -0
  96. package/dist/commands/schedules.d.ts.map +1 -0
  97. package/dist/commands/schedules.js +70 -0
  98. package/dist/commands/schedules.js.map +1 -0
  99. package/dist/commands/schedules_pause.d.ts +16 -0
  100. package/dist/commands/schedules_pause.d.ts.map +1 -0
  101. package/dist/commands/schedules_pause.js +40 -0
  102. package/dist/commands/schedules_pause.js.map +1 -0
  103. package/dist/commands/schedules_resume.d.ts +8 -0
  104. package/dist/commands/schedules_resume.d.ts.map +1 -0
  105. package/dist/commands/schedules_resume.js +8 -0
  106. package/dist/commands/schedules_resume.js.map +1 -0
  107. package/dist/commands/schedules_trigger.d.ts +13 -0
  108. package/dist/commands/schedules_trigger.d.ts.map +1 -0
  109. package/dist/commands/schedules_trigger.js +32 -0
  110. package/dist/commands/schedules_trigger.js.map +1 -0
  111. package/dist/commands/tasks_complete.d.ts +15 -0
  112. package/dist/commands/tasks_complete.d.ts.map +1 -0
  113. package/dist/commands/tasks_complete.js +41 -0
  114. package/dist/commands/tasks_complete.js.map +1 -0
  115. package/dist/commands/tasks_fail.d.ts +16 -0
  116. package/dist/commands/tasks_fail.d.ts.map +1 -0
  117. package/dist/commands/tasks_fail.js +47 -0
  118. package/dist/commands/tasks_fail.js.map +1 -0
  119. package/dist/commands/workers.d.ts +11 -0
  120. package/dist/commands/workers.d.ts.map +1 -0
  121. package/dist/commands/workers.js +35 -0
  122. package/dist/commands/workers.js.map +1 -0
  123. package/dist/commands/workflows_lifecycle.d.ts +12 -0
  124. package/dist/commands/workflows_lifecycle.d.ts.map +1 -0
  125. package/dist/commands/workflows_lifecycle.js +37 -0
  126. package/dist/commands/workflows_lifecycle.js.map +1 -0
  127. package/dist/configure.d.ts +2 -2
  128. package/dist/configure.js +2 -2
  129. package/dist/providers/dashboard_provider.d.ts +57 -54
  130. package/dist/providers/dashboard_provider.d.ts.map +1 -1
  131. package/dist/providers/dashboard_provider.js +399 -288
  132. package/dist/providers/dashboard_provider.js.map +1 -1
  133. package/dist/providers/durable_provider.d.ts.map +1 -1
  134. package/dist/providers/durable_provider.js +67 -37
  135. package/dist/providers/durable_provider.js.map +1 -1
  136. package/dist/src/commands/console_command.d.ts +82 -0
  137. package/dist/src/commands/console_command.d.ts.map +1 -0
  138. package/dist/src/commands/console_command.js +238 -0
  139. package/dist/src/commands/console_command.js.map +1 -0
  140. package/dist/src/commands/runs.js +2 -2
  141. package/dist/src/commands/runs.js.map +1 -1
  142. package/dist/src/concurrency.d.ts.map +1 -1
  143. package/dist/src/concurrency.js +1 -0
  144. package/dist/src/concurrency.js.map +1 -1
  145. package/dist/src/config_types.d.ts +79 -26
  146. package/dist/src/config_types.d.ts.map +1 -1
  147. package/dist/src/dashboard/access_denied_page.d.ts +5 -7
  148. package/dist/src/dashboard/access_denied_page.d.ts.map +1 -1
  149. package/dist/src/dashboard/access_denied_page.js +2 -6
  150. package/dist/src/dashboard/access_denied_page.js.map +1 -1
  151. package/dist/src/dashboard/audit.d.ts +14 -0
  152. package/dist/src/dashboard/audit.d.ts.map +1 -0
  153. package/dist/src/dashboard/audit.js +36 -0
  154. package/dist/src/dashboard/audit.js.map +1 -0
  155. package/dist/src/dashboard/console_authorize.d.ts +98 -0
  156. package/dist/src/dashboard/console_authorize.d.ts.map +1 -0
  157. package/dist/src/dashboard/console_authorize.js +163 -0
  158. package/dist/src/dashboard/console_authorize.js.map +1 -0
  159. package/dist/src/dashboard/console_shell.d.ts +45 -0
  160. package/dist/src/dashboard/console_shell.d.ts.map +1 -0
  161. package/dist/src/dashboard/console_shell.js +125 -0
  162. package/dist/src/dashboard/console_shell.js.map +1 -0
  163. package/dist/src/dashboard/console_switcher.d.ts +132 -0
  164. package/dist/src/dashboard/console_switcher.d.ts.map +1 -0
  165. package/dist/src/dashboard/console_switcher.js +201 -0
  166. package/dist/src/dashboard/console_switcher.js.map +1 -0
  167. package/dist/src/dashboard/define_config.d.ts +68 -81
  168. package/dist/src/dashboard/define_config.d.ts.map +1 -1
  169. package/dist/src/dashboard/define_config.js +18 -112
  170. package/dist/src/dashboard/define_config.js.map +1 -1
  171. package/dist/src/dashboard/dev_tools.d.ts +102 -0
  172. package/dist/src/dashboard/dev_tools.d.ts.map +1 -0
  173. package/dist/src/dashboard/dev_tools.js +502 -0
  174. package/dist/src/dashboard/dev_tools.js.map +1 -0
  175. package/dist/src/dashboard/diagnostics-recorder.d.ts +1 -1
  176. package/dist/src/dashboard/diagnostics-recorder.js +1 -1
  177. package/dist/src/dashboard/gateway-adapter.d.ts +6 -6
  178. package/dist/src/dashboard/gateway-adapter.d.ts.map +1 -1
  179. package/dist/src/dashboard/gateway-adapter.js +5 -5
  180. package/dist/src/dashboard/gateway-adapter.js.map +1 -1
  181. package/dist/src/dashboard/handlers.d.ts +48 -39
  182. package/dist/src/dashboard/handlers.d.ts.map +1 -1
  183. package/dist/src/dashboard/handlers.js +181 -83
  184. package/dist/src/dashboard/handlers.js.map +1 -1
  185. package/dist/src/dashboard/index.d.ts +12 -9
  186. package/dist/src/dashboard/index.d.ts.map +1 -1
  187. package/dist/src/dashboard/index.js +10 -7
  188. package/dist/src/dashboard/index.js.map +1 -1
  189. package/dist/src/dashboard/list-filters.d.ts +27 -0
  190. package/dist/src/dashboard/list-filters.d.ts.map +1 -0
  191. package/dist/src/dashboard/list-filters.js +69 -0
  192. package/dist/src/dashboard/list-filters.js.map +1 -0
  193. package/dist/src/dashboard/openapi.d.ts.map +1 -1
  194. package/dist/src/dashboard/openapi.js +127 -52
  195. package/dist/src/dashboard/openapi.js.map +1 -1
  196. package/dist/src/dashboard/run-filter.d.ts +18 -15
  197. package/dist/src/dashboard/run-filter.d.ts.map +1 -1
  198. package/dist/src/dashboard/run-filter.js +30 -22
  199. package/dist/src/dashboard/run-filter.js.map +1 -1
  200. package/dist/src/dashboard/spa.d.ts +26 -1
  201. package/dist/src/dashboard/spa.d.ts.map +1 -1
  202. package/dist/src/dashboard/spa.js +9 -2
  203. package/dist/src/dashboard/spa.js.map +1 -1
  204. package/dist/src/dashboard/tenant_scope.d.ts +38 -0
  205. package/dist/src/dashboard/tenant_scope.d.ts.map +1 -0
  206. package/dist/src/dashboard/tenant_scope.js +166 -0
  207. package/dist/src/dashboard/tenant_scope.js.map +1 -0
  208. package/dist/src/define_config.d.ts +27 -12
  209. package/dist/src/define_config.d.ts.map +1 -1
  210. package/dist/src/define_config.js +9 -4
  211. package/dist/src/define_config.js.map +1 -1
  212. package/dist/src/diagnostics/index.d.ts +11 -0
  213. package/dist/src/diagnostics/index.d.ts.map +1 -0
  214. package/dist/src/diagnostics/index.js +6 -0
  215. package/dist/src/diagnostics/index.js.map +1 -0
  216. package/dist/src/diagnostics/transport.d.ts +71 -0
  217. package/dist/src/diagnostics/transport.d.ts.map +1 -0
  218. package/dist/src/diagnostics/transport.js +188 -0
  219. package/dist/src/diagnostics/transport.js.map +1 -0
  220. package/dist/src/diagnostics-bridge.d.ts +2 -1
  221. package/dist/src/diagnostics-bridge.d.ts.map +1 -1
  222. package/dist/src/diagnostics-bridge.js +7 -1
  223. package/dist/src/diagnostics-bridge.js.map +1 -1
  224. package/dist/src/doctor/agora_doctor.d.ts +116 -0
  225. package/dist/src/doctor/agora_doctor.d.ts.map +1 -0
  226. package/dist/src/doctor/agora_doctor.js +685 -0
  227. package/dist/src/doctor/agora_doctor.js.map +1 -0
  228. package/dist/src/doctor/checks.d.ts +28 -0
  229. package/dist/src/doctor/checks.d.ts.map +1 -0
  230. package/dist/src/doctor/checks.js +288 -0
  231. package/dist/src/doctor/checks.js.map +1 -0
  232. package/dist/src/doctor/index.d.ts +9 -0
  233. package/dist/src/doctor/index.d.ts.map +1 -0
  234. package/dist/src/doctor/index.js +16 -0
  235. package/dist/src/doctor/index.js.map +1 -0
  236. package/dist/src/engine.d.ts +55 -9
  237. package/dist/src/engine.d.ts.map +1 -1
  238. package/dist/src/engine.js +333 -84
  239. package/dist/src/engine.js.map +1 -1
  240. package/dist/src/errors.d.ts +9 -0
  241. package/dist/src/errors.d.ts.map +1 -1
  242. package/dist/src/errors.js +13 -0
  243. package/dist/src/errors.js.map +1 -1
  244. package/dist/src/event-trigger-bridge.d.ts +5 -14
  245. package/dist/src/event-trigger-bridge.d.ts.map +1 -1
  246. package/dist/src/event-trigger-bridge.js +11 -99
  247. package/dist/src/event-trigger-bridge.js.map +1 -1
  248. package/dist/src/index.d.ts +8 -5
  249. package/dist/src/index.d.ts.map +1 -1
  250. package/dist/src/index.js +6 -4
  251. package/dist/src/index.js.map +1 -1
  252. package/dist/src/interfaces.d.ts +53 -9
  253. package/dist/src/interfaces.d.ts.map +1 -1
  254. package/dist/src/interfaces.js +8 -0
  255. package/dist/src/interfaces.js.map +1 -1
  256. package/dist/src/origin.js +3 -3
  257. package/dist/src/role_bindings.d.ts +8 -8
  258. package/dist/src/role_bindings.js +8 -8
  259. package/dist/src/run-gateway/interface.d.ts +4 -3
  260. package/dist/src/run-gateway/interface.d.ts.map +1 -1
  261. package/dist/src/run-gateway/proxy-run-gateway.d.ts +4 -2
  262. package/dist/src/run-gateway/proxy-run-gateway.d.ts.map +1 -1
  263. package/dist/src/run-gateway/proxy-run-gateway.js +21 -6
  264. package/dist/src/run-gateway/proxy-run-gateway.js.map +1 -1
  265. package/dist/src/run-gateway/run-request-responder.d.ts +6 -1
  266. package/dist/src/run-gateway/run-request-responder.d.ts.map +1 -1
  267. package/dist/src/run-gateway/run-request-responder.js +30 -3
  268. package/dist/src/run-gateway/run-request-responder.js.map +1 -1
  269. package/dist/src/run-gateway/store-run-gateway.d.ts +4 -4
  270. package/dist/src/run-gateway/store-run-gateway.d.ts.map +1 -1
  271. package/dist/src/run-gateway/store-run-gateway.js +4 -4
  272. package/dist/src/run-gateway/store-run-gateway.js.map +1 -1
  273. package/dist/src/run-gateway/tenant-auth.d.ts +19 -1
  274. package/dist/src/run-gateway/tenant-auth.d.ts.map +1 -1
  275. package/dist/src/run-gateway/tenant-auth.js +133 -0
  276. package/dist/src/run-gateway/tenant-auth.js.map +1 -1
  277. package/dist/src/run-gateway/tenant-scoped-gateway.d.ts +10 -0
  278. package/dist/src/run-gateway/tenant-scoped-gateway.d.ts.map +1 -0
  279. package/dist/src/run-gateway/tenant-scoped-gateway.js +107 -0
  280. package/dist/src/run-gateway/tenant-scoped-gateway.js.map +1 -0
  281. package/dist/src/run-value-facets.d.ts +1 -1
  282. package/dist/src/run-value-facets.d.ts.map +1 -1
  283. package/dist/src/run-value-facets.js +5 -1
  284. package/dist/src/run-value-facets.js.map +1 -1
  285. package/dist/src/scheduler.d.ts.map +1 -1
  286. package/dist/src/scheduler.js +2 -1
  287. package/dist/src/scheduler.js.map +1 -1
  288. package/dist/src/schedules.d.ts +16 -1
  289. package/dist/src/schedules.d.ts.map +1 -1
  290. package/dist/src/schedules.js +29 -4
  291. package/dist/src/schedules.js.map +1 -1
  292. package/dist/src/services/main.d.ts +3 -3
  293. package/dist/src/services/main.js +6 -6
  294. package/dist/src/services/main.js.map +1 -1
  295. package/dist/src/singleton-admission.d.ts.map +1 -1
  296. package/dist/src/singleton-admission.js +2 -0
  297. package/dist/src/singleton-admission.js.map +1 -1
  298. package/dist/src/singleton-gate.d.ts +1 -1
  299. package/dist/src/singleton-gate.d.ts.map +1 -1
  300. package/dist/src/singleton-gate.js +4 -3
  301. package/dist/src/singleton-gate.js.map +1 -1
  302. package/dist/src/sql-schema.d.ts +54 -0
  303. package/dist/src/sql-schema.d.ts.map +1 -0
  304. package/dist/src/sql-schema.js +145 -0
  305. package/dist/src/sql-schema.js.map +1 -0
  306. package/dist/src/stores/factory.d.ts +6 -0
  307. package/dist/src/stores/factory.d.ts.map +1 -1
  308. package/dist/src/stores/factory.js +3 -0
  309. package/dist/src/stores/factory.js.map +1 -1
  310. package/dist/src/stores/lucid-mappers.d.ts +3 -0
  311. package/dist/src/stores/lucid-mappers.d.ts.map +1 -1
  312. package/dist/src/stores/lucid-mappers.js +12 -0
  313. package/dist/src/stores/lucid-mappers.js.map +1 -1
  314. package/dist/src/stores/lucid-pg-hot-path.d.ts +6 -2
  315. package/dist/src/stores/lucid-pg-hot-path.d.ts.map +1 -1
  316. package/dist/src/stores/lucid-pg-hot-path.js +7 -3
  317. package/dist/src/stores/lucid-pg-hot-path.js.map +1 -1
  318. package/dist/src/stores/lucid-schema.d.ts +18 -4
  319. package/dist/src/stores/lucid-schema.d.ts.map +1 -1
  320. package/dist/src/stores/lucid-schema.js +106 -61
  321. package/dist/src/stores/lucid-schema.js.map +1 -1
  322. package/dist/src/stores/lucid.d.ts +42 -2
  323. package/dist/src/stores/lucid.d.ts.map +1 -1
  324. package/dist/src/stores/lucid.js +450 -231
  325. package/dist/src/stores/lucid.js.map +1 -1
  326. package/dist/src/tenancy.d.ts +104 -0
  327. package/dist/src/tenancy.d.ts.map +1 -0
  328. package/dist/src/tenancy.js +91 -0
  329. package/dist/src/tenancy.js.map +1 -0
  330. package/dist/src/testing/in-memory-state-store.d.ts.map +1 -1
  331. package/dist/src/testing/in-memory-state-store.js +9 -3
  332. package/dist/src/testing/in-memory-state-store.js.map +1 -1
  333. package/dist/src/testing-kit/state-store-conformance.d.ts.map +1 -1
  334. package/dist/src/testing-kit/state-store-conformance.js +59 -0
  335. package/dist/src/testing-kit/state-store-conformance.js.map +1 -1
  336. package/dist/src/testing-kit/transport-conformance.d.ts.map +1 -1
  337. package/dist/src/testing-kit/transport-conformance.js +5 -1
  338. package/dist/src/testing-kit/transport-conformance.js.map +1 -1
  339. package/dist/src/transports/bullmq/bullmq-transport.d.ts +1 -1
  340. package/dist/src/transports/bullmq/bullmq-transport.d.ts.map +1 -1
  341. package/dist/src/transports/bullmq/bullmq-transport.js +14 -3
  342. package/dist/src/transports/bullmq/bullmq-transport.js.map +1 -1
  343. package/dist/src/transports/db-schema.d.ts +13 -5
  344. package/dist/src/transports/db-schema.d.ts.map +1 -1
  345. package/dist/src/transports/db-schema.js +52 -27
  346. package/dist/src/transports/db-schema.js.map +1 -1
  347. package/dist/src/transports/db.d.ts +6 -0
  348. package/dist/src/transports/db.d.ts.map +1 -1
  349. package/dist/src/transports/db.js +91 -42
  350. package/dist/src/transports/db.js.map +1 -1
  351. package/dist/src/transports/factory.d.ts +16 -0
  352. package/dist/src/transports/factory.d.ts.map +1 -1
  353. package/dist/src/transports/factory.js +6 -1
  354. package/dist/src/transports/factory.js.map +1 -1
  355. package/dist/src/transports/queue.d.ts +2 -2
  356. package/dist/src/transports/queue.d.ts.map +1 -1
  357. package/dist/src/transports/queue.js +49 -8
  358. package/dist/src/transports/queue.js.map +1 -1
  359. package/dist/src/transports/worker-keys-db.d.ts +5 -0
  360. package/dist/src/transports/worker-keys-db.d.ts.map +1 -1
  361. package/dist/src/transports/worker-keys-db.js +10 -8
  362. package/dist/src/transports/worker-keys-db.js.map +1 -1
  363. package/dist/src/workflow-discovery.d.ts +1 -1
  364. package/dist/src/workflow-discovery.d.ts.map +1 -1
  365. package/dist/src/workflow-discovery.js +4 -7
  366. package/dist/src/workflow-discovery.js.map +1 -1
  367. package/dist/src/workflow-events.d.ts +20 -51
  368. package/dist/src/workflow-events.d.ts.map +1 -1
  369. package/dist/src/workflow-events.js +12 -30
  370. package/dist/src/workflow-events.js.map +1 -1
  371. package/dist/src/workflow-ref.d.ts +1 -1
  372. package/dist/stubs/config/durable_dashboard.stub +9 -29
  373. package/dist/stubs/database/migrations/create_durable_tables.stub +12 -2
  374. package/dist/stubs/database/migrations/create_durable_transport_messages.stub +34 -5
  375. package/dist/stubs/database/migrations/create_durable_transport_tables.stub +30 -8
  376. package/dist/stubs/database/migrations/create_durable_transport_worker_keys.stub +24 -2
  377. package/package.json +25 -7
  378. package/skills/durable-cluster/SKILL.md +43 -23
  379. package/skills/durable-reliability/SKILL.md +13 -7
  380. package/dist/assets/spa/assets/index-70hGzOnT.css +0 -1
  381. package/dist/assets/spa/assets/index-CJjMAUau.js +0 -16
  382. package/dist/assets/spa/assets/index-CJjMAUau.js.map +0 -1
  383. package/dist/commands/retry.d.ts +0 -16
  384. package/dist/commands/retry.d.ts.map +0 -1
  385. package/dist/commands/retry.js +0 -34
  386. package/dist/commands/retry.js.map +0 -1
  387. package/dist/src/dashboard/auth.d.ts +0 -134
  388. package/dist/src/dashboard/auth.d.ts.map +0 -1
  389. package/dist/src/dashboard/auth.js +0 -156
  390. package/dist/src/dashboard/auth.js.map +0 -1
  391. package/dist/src/dashboard/login_page.d.ts +0 -36
  392. package/dist/src/dashboard/login_page.d.ts.map +0 -1
  393. package/dist/src/dashboard/login_page.js +0 -158
  394. package/dist/src/dashboard/login_page.js.map +0 -1
  395. package/dist/src/dashboard/session_cookie.d.ts +0 -45
  396. package/dist/src/dashboard/session_cookie.d.ts.map +0 -1
  397. package/dist/src/dashboard/session_cookie.js +0 -97
  398. package/dist/src/dashboard/session_cookie.js.map +0 -1
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * The built-in "access denied" page a BROWSER sees when the dashboard guard refuses a page
3
- * navigation — the SPA shell, its assets, or (Mode A only) a session-less visit. Before this page
3
+ * navigation — the SPA shell or its assets. Before this page
4
4
  * existed the guard answered every denial with the JSON it answers the API with
5
5
  * (`{ "error": "forbidden" }`), which is the right thing for the SPA's `fetch` calls and the wrong
6
6
  * thing for a human staring at a browser tab.
7
7
  *
8
- * Deliberately a small, dependency-free, hand-authored HTML page (like `login_page.ts`) — NOT part
8
+ * Deliberately a small, dependency-free, hand-authored HTML page — NOT part
9
9
  * of the bundled SPA, so a denial never needs the SPA to load first. It carries NO `<script>` at all,
10
10
  * so a host running a nonce'd `script-src` CSP (the `@adonisjs/shield` default) cannot break it; the
11
11
  * one inline `<style>` takes the request's CSP nonce when the provider hands one over.
@@ -26,9 +26,7 @@ export type AccessDeniedReason =
26
26
  /** Nobody is signed in (a `401`): offer the login page when one exists. */
27
27
  'unauthenticated'
28
28
  /** Somebody is signed in but `authorize` said no (a `403`). */
29
- | 'forbidden'
30
- /** `dashboardAuth` runs in Mode A only and there is no session — the host app must mint one. */
31
- | 'session-required';
29
+ | 'forbidden';
32
30
  /** What the provider knows about the refusal — handed to a custom renderer and to the default page. */
33
31
  export interface AccessDeniedInfo {
34
32
  /** The HTTP status the page is served with. */
@@ -36,7 +34,7 @@ export interface AccessDeniedInfo {
36
34
  reason: AccessDeniedReason;
37
35
  /** The console's mount path (`/durable`; `''` when mounted at the root). */
38
36
  basePath: string;
39
- /** The built-in login page, present only when `dashboardAuth.login` is configured. */
37
+ /** The app's login page, when the console knows one (`accessDenied.loginHref`). */
40
38
  loginHref?: string;
41
39
  /** A developer-facing detail (e.g. a thrown hook's message). Providers set it OUTSIDE production only. */
42
40
  detail?: string;
@@ -58,7 +56,7 @@ export interface AccessDeniedPageOptions {
58
56
  homeHref?: string | false;
59
57
  /** Label of the "Back to app" button. */
60
58
  homeLabel?: string;
61
- /** Where "Sign in" points. Default: the built-in login page when one exists; `false` hides it. */
59
+ /** Where "Sign in" points (your app's login page). Default: none; `false` hides it. */
62
60
  loginHref?: string | false;
63
61
  /** Label of the "Sign in" button. */
64
62
  loginLabel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"access_denied_page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/access_denied_page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,4FAA4F;AAC5F,MAAM,MAAM,kBAAkB;AAC5B,2EAA2E;AACzE,iBAAiB;AACnB,+DAA+D;GAC7D,WAAW;AACb,gGAAgG;GAC9F,kBAAkB,CAAC;AAEvB,uGAAuG;AACvG,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,oBAAoB,CAAC,GAAG,GAAG,OAAO,IAAI,CAChD,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,GAAG,KAEL,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAElF,gFAAgF;AAChF,MAAM,MAAM,kBAAkB,CAAC,GAAG,GAAG,OAAO,IAAI,uBAAuB,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAEpG,kGAAkG;AAClG,eAAO,MAAM,OAAO;aAClB,KAAK,EAAE,SAAS;aAChB,MAAM,EAAE,SAAS;aACjB,WAAW,EAAE,uBAAuB;CAC5B,CAAC;AAmBX,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAyBD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAqLR;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAC/C,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAClD,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,MAAM,OAAO,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
1
+ {"version":3,"file":"access_denied_page.d.ts","sourceRoot":"","sources":["../../../src/dashboard/access_denied_page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,4FAA4F;AAC5F,MAAM,MAAM,kBAAkB;AAC5B,2EAA2E;AACzE,iBAAiB;AACnB,+DAA+D;GAC7D,WAAW,CAAC;AAEhB,uGAAuG;AACvG,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+GAA+G;IAC/G,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1B,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,oBAAoB,CAAC,GAAG,GAAG,OAAO,IAAI,CAChD,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,GAAG,KAEL,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAElF,gFAAgF;AAChF,MAAM,MAAM,kBAAkB,CAAC,GAAG,GAAG,OAAO,IAAI,uBAAuB,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAEpG,kGAAkG;AAClG,eAAO,MAAM,OAAO;aAClB,KAAK,EAAE,SAAS;aAChB,MAAM,EAAE,SAAS;aACjB,WAAW,EAAE,uBAAuB;CAC5B,CAAC;AAcX,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhD;AAyBD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAqLR;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAC/C,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAClD,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,MAAM,OAAO,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB"}
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * The built-in "access denied" page a BROWSER sees when the dashboard guard refuses a page
3
- * navigation — the SPA shell, its assets, or (Mode A only) a session-less visit. Before this page
3
+ * navigation — the SPA shell or its assets. Before this page
4
4
  * existed the guard answered every denial with the JSON it answers the API with
5
5
  * (`{ "error": "forbidden" }`), which is the right thing for the SPA's `fetch` calls and the wrong
6
6
  * thing for a human staring at a browser tab.
7
7
  *
8
- * Deliberately a small, dependency-free, hand-authored HTML page (like `login_page.ts`) — NOT part
8
+ * Deliberately a small, dependency-free, hand-authored HTML page — NOT part
9
9
  * of the bundled SPA, so a denial never needs the SPA to load first. It carries NO `<script>` at all,
10
10
  * so a host running a nonce'd `script-src` CSP (the `@adonisjs/shield` default) cannot break it; the
11
11
  * one inline `<style>` takes the request's CSP nonce when the provider hands one over.
@@ -36,10 +36,6 @@ const DEFAULT_COPY = {
36
36
  title: 'Access denied',
37
37
  message: 'Your account is not allowed to open this console. If that looks wrong, ask an administrator to grant you access.',
38
38
  },
39
- 'session-required': {
40
- title: 'Open this console from your app',
41
- message: 'This console only accepts a session minted by your application. Go back to the app and open the console from there.',
42
- },
43
39
  };
44
40
  /** Escape the five characters that matter inside HTML text and double-quoted attributes. */
45
41
  export function escapeHtml(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"access_denied_page.js","sourceRoot":"","sources":["../../../src/dashboard/access_denied_page.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"access_denied_page.js","sourceRoot":"","sources":["../../../src/dashboard/access_denied_page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { DashboardAuditEntry } from './define_config.js';
2
+ /** Where an audit line goes when the host configured no `audit` sink. */
3
+ export interface AuditLogger {
4
+ info(message: string): void;
5
+ }
6
+ /**
7
+ * Hand one console audit entry to the host's `audit` sink, or log the default
8
+ * `[durable_dashboard] audit actor=… METHOD path` line. Shared by the console routes, the developer
9
+ * tools and the ace commands, so every operator action lands in the same place. Never throws.
10
+ */
11
+ export declare function recordConsoleAudit(sink: ((entry: DashboardAuditEntry) => void) | null | undefined, logger: () => Promise<AuditLogger>, entry: DashboardAuditEntry): void;
12
+ /** The actor an ace command records: `cli:<os user>`, or `cli` when the user cannot be read. */
13
+ export declare function cliActor(): string;
14
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/dashboard/audit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/D,MAAM,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,EAClC,KAAK,EAAE,mBAAmB,GACzB,IAAI,CAgBN;AAED,gGAAgG;AAChG,wBAAgB,QAAQ,IAAI,MAAM,CAOjC"}
@@ -0,0 +1,36 @@
1
+ import { userInfo } from 'node:os';
2
+ /**
3
+ * Hand one console audit entry to the host's `audit` sink, or log the default
4
+ * `[durable_dashboard] audit actor=… METHOD path` line. Shared by the console routes, the developer
5
+ * tools and the ace commands, so every operator action lands in the same place. Never throws.
6
+ */
7
+ export function recordConsoleAudit(sink, logger, entry) {
8
+ try {
9
+ if (sink) {
10
+ // Typed `void`, but an async hook is assignable to it: catch its rejection too.
11
+ const pending = sink(entry);
12
+ if (pending instanceof Promise)
13
+ pending.catch(() => undefined);
14
+ return;
15
+ }
16
+ void logger()
17
+ .then((log) => {
18
+ log.info(`[durable_dashboard] audit actor=${entry.actor} ${entry.method} ${entry.path}`);
19
+ })
20
+ .catch(() => undefined);
21
+ }
22
+ catch {
23
+ /* auditing must never break the action */
24
+ }
25
+ }
26
+ /** The actor an ace command records: `cli:<os user>`, or `cli` when the user cannot be read. */
27
+ export function cliActor() {
28
+ try {
29
+ const name = userInfo().username;
30
+ return name ? `cli:${name}` : 'cli';
31
+ }
32
+ catch {
33
+ return 'cli';
34
+ }
35
+ }
36
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/dashboard/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQnC;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAA+D,EAC/D,MAAkC,EAClC,KAA0B;IAE1B,IAAI,CAAC;QACH,IAAI,IAAI,EAAE,CAAC;YACT,gFAAgF;YAChF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAY,CAAC;YACvC,IAAI,OAAO,YAAY,OAAO;gBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QACD,KAAK,MAAM,EAAE;aACV,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACZ,GAAG,CAAC,IAAI,CAAC,mCAAmC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,QAAQ;IACtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACjC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,98 @@
1
+ import type { HttpContext } from '@adonisjs/core/http';
2
+ /**
3
+ * What a console `authorize` returns. The same shape every `@adonis-agora` console accepts:
4
+ *
5
+ * - `true` / `{ allowed: true }` → the request proceeds;
6
+ * - `false` / `{ allowed: false }` / `{ allowed: false, reason: 'forbidden' }` → `403`;
7
+ * - `{ allowed: false, reason: 'unauthenticated' }` → `401`;
8
+ * - `{ redirectTo: '/login' }` → `302` to that path for a page navigation, `401` JSON for an API call.
9
+ */
10
+ export type ConsoleAuthorizeResult = boolean | {
11
+ allowed: true;
12
+ /**
13
+ * With tenancy on: the tenants (organizations) this viewer may see in the console, or `'*'`
14
+ * for every tenant plus runs with no tenant. Omit for the viewer's own active tenant.
15
+ */
16
+ tenants?: '*' | string[];
17
+ } | {
18
+ allowed: false;
19
+ reason?: 'unauthenticated' | 'forbidden';
20
+ } | {
21
+ redirectTo: string;
22
+ };
23
+ /** A class form, for an authorizer in its own file (`@inject()` works). */
24
+ export interface ConsoleAuthorizer {
25
+ authorize(ctx: HttpContext): ConsoleAuthorizeResult | Promise<ConsoleAuthorizeResult>;
26
+ }
27
+ export type ConsoleAuthorizerClass = new (...args: any[]) => ConsoleAuthorizer;
28
+ /**
29
+ * The console `authorize` option, in three forms: an inline function, an authorizer class, or a
30
+ * lazy import of a module whose default export is an authorizer class.
31
+ */
32
+ export type ConsoleAuthorize = ((ctx: HttpContext) => ConsoleAuthorizeResult | Promise<ConsoleAuthorizeResult>) | ConsoleAuthorizerClass | (() => Promise<{
33
+ default: ConsoleAuthorizerClass;
34
+ }>);
35
+ /** A normalized console decision. A denial always carries a reason (`401` vs `403`). */
36
+ export type ConsoleDecision = {
37
+ allowed: true;
38
+ tenants?: '*' | string[];
39
+ } | {
40
+ allowed: false;
41
+ reason: 'unauthenticated' | 'forbidden';
42
+ /** Set when `authorize` asked for a redirect: page navigations go there (`302`). */
43
+ redirectTo?: string;
44
+ /** Set when `authorize` threw: the denial is a `403`, the error is for logging only. */
45
+ error?: unknown;
46
+ };
47
+ /** A resolved `authorize`: one call per request, never throws. */
48
+ export type ConsoleAuthorizeGate = (ctx: HttpContext) => Promise<ConsoleDecision>;
49
+ /**
50
+ * Collapse an `authorize` result into a {@link ConsoleDecision}. Only `true` or an object with
51
+ * `allowed === true` allows; `{ redirectTo }` is an unauthenticated denial with a redirect target;
52
+ * anything else — `false`, `{ allowed: false }`, a truthy non-boolean, a missing value — is a `403`.
53
+ */
54
+ export declare function normalizeConsoleDecision(result: unknown): ConsoleDecision;
55
+ /**
56
+ * Turn any {@link ConsoleAuthorize} form into a per-request gate:
57
+ *
58
+ * - a class is instantiated through the request's container resolver (so `@inject()` works) and its
59
+ * `authorize(ctx)` is called;
60
+ * - a function is called with `ctx`; when it resolves to a module whose `default` is an authorizer
61
+ * class it was a lazy import — the class is remembered (the import runs once) and used from then on;
62
+ * - a thrown error is a `403`, never an allow.
63
+ */
64
+ export declare function resolveConsoleAuthorize(authorize: unknown): ConsoleAuthorizeGate;
65
+ /** Options for {@link authorizeByToken}. */
66
+ export interface AuthorizeByTokenOptions {
67
+ /** The shared secret callers send as `Authorization: Bearer <token>`. */
68
+ token: string | undefined;
69
+ }
70
+ /**
71
+ * An `authorize` for machine access (scripts, a Prometheus scrape): allows a request whose
72
+ * `Authorization` header is `Bearer <token>`, and answers `{ allowed: false, reason: 'unauthenticated' }`
73
+ * (`401`) otherwise. Only the header is read.
74
+ *
75
+ * ```ts
76
+ * authorize: authorizeByToken({ token: env.get('CONSOLE_TOKEN') }),
77
+ * ```
78
+ *
79
+ * Throws at config time when `token` is empty or undefined.
80
+ */
81
+ export declare function authorizeByToken(options: AuthorizeByTokenOptions): (ctx: HttpContext) => ConsoleAuthorizeResult;
82
+ /**
83
+ * An `authorize` that allows a request when ANY of `authorizers` allows it, tried in order — e.g. a
84
+ * machine token for MCP clients OR a signed-in admin for the browser:
85
+ *
86
+ * ```ts
87
+ * authorize: anyAuthorize(
88
+ * authorizeByToken({ token: env.get('CONSOLE_TOKEN') }),
89
+ * (ctx) => ctx.auth.user?.isAdmin === true,
90
+ * ),
91
+ * ```
92
+ *
93
+ * When none allows: `401` if any of them said "unauthenticated" (redirecting when one asked to),
94
+ * `403` otherwise. A throwing authorizer counts as a `403` (its error is logged like a throwing
95
+ * `authorize`) and the next one is still tried.
96
+ */
97
+ export declare function anyAuthorize(...authorizers: ConsoleAuthorize[]): (ctx: HttpContext) => Promise<ConsoleAuthorizeResult>;
98
+ //# sourceMappingURL=console_authorize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console_authorize.d.ts","sourceRoot":"","sources":["../../../src/dashboard/console_authorize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;GAOG;AACH,MAAM,MAAM,sBAAsB,GAC9B,OAAO,GACP;IACE,OAAO,EAAE,IAAI,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;CAC1B,GACD;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAA;CAAE,GAC5D;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3B,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACvF;AAGD,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,iBAAiB,CAAC;AAE/E;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACxB,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAChF,sBAAsB,GACtB,CAAC,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,sBAAsB,CAAA;CAAE,CAAC,CAAC,CAAC;AAEzD,wFAAwF;AACxF,MAAM,MAAM,eAAe,GACvB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,CAAA;CAAE,GAC3C;IACE,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAAC;IACxC,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEN,kEAAkE;AAClE,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;AAelF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CA0BzE;AAUD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,GAAG,oBAAoB,CA2BhF;AAED,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,yEAAyE;IACzE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,uBAAuB,GAC/B,CAAC,GAAG,EAAE,WAAW,KAAK,sBAAsB,CAa9C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAC1B,GAAG,WAAW,EAAE,gBAAgB,EAAE,GACjC,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAiCvD"}
@@ -0,0 +1,163 @@
1
+ import { createHash, timingSafeEqual } from 'node:crypto';
2
+ function isAuthorizerClass(value) {
3
+ return (typeof value === 'function' &&
4
+ typeof value.prototype?.authorize === 'function');
5
+ }
6
+ function lazyModuleClass(value) {
7
+ if (typeof value !== 'object' || value === null)
8
+ return undefined;
9
+ const candidate = value.default;
10
+ return isAuthorizerClass(candidate) ? candidate : undefined;
11
+ }
12
+ /**
13
+ * Collapse an `authorize` result into a {@link ConsoleDecision}. Only `true` or an object with
14
+ * `allowed === true` allows; `{ redirectTo }` is an unauthenticated denial with a redirect target;
15
+ * anything else — `false`, `{ allowed: false }`, a truthy non-boolean, a missing value — is a `403`.
16
+ */
17
+ export function normalizeConsoleDecision(result) {
18
+ if (result === true)
19
+ return { allowed: true };
20
+ if (typeof result !== 'object' || result === null)
21
+ return { allowed: false, reason: 'forbidden' };
22
+ const record = result;
23
+ if (record.allowed === true) {
24
+ if (record.tenants === '*')
25
+ return { allowed: true, tenants: '*' };
26
+ if (Array.isArray(record.tenants)) {
27
+ return {
28
+ allowed: true,
29
+ tenants: record.tenants.filter((t) => typeof t === 'string' && t !== ''),
30
+ };
31
+ }
32
+ return { allowed: true };
33
+ }
34
+ if (typeof record.redirectTo === 'string' && record.redirectTo !== '') {
35
+ return { allowed: false, reason: 'unauthenticated', redirectTo: record.redirectTo };
36
+ }
37
+ return {
38
+ allowed: false,
39
+ reason: record.reason === 'unauthenticated' ? 'unauthenticated' : 'forbidden',
40
+ };
41
+ }
42
+ async function runAuthorizer(Authorizer, ctx) {
43
+ const instance = await ctx.containerResolver.make(Authorizer);
44
+ return instance.authorize(ctx);
45
+ }
46
+ /**
47
+ * Turn any {@link ConsoleAuthorize} form into a per-request gate:
48
+ *
49
+ * - a class is instantiated through the request's container resolver (so `@inject()` works) and its
50
+ * `authorize(ctx)` is called;
51
+ * - a function is called with `ctx`; when it resolves to a module whose `default` is an authorizer
52
+ * class it was a lazy import — the class is remembered (the import runs once) and used from then on;
53
+ * - a thrown error is a `403`, never an allow.
54
+ */
55
+ export function resolveConsoleAuthorize(authorize) {
56
+ let Authorizer = isAuthorizerClass(authorize)
57
+ ? authorize
58
+ : undefined;
59
+ if (Authorizer === undefined && typeof authorize !== 'function') {
60
+ throw new TypeError('[console] `authorize` must be a function, an authorizer class, or a lazy import of one.');
61
+ }
62
+ const fn = authorize;
63
+ return async (ctx) => {
64
+ try {
65
+ if (Authorizer !== undefined) {
66
+ return normalizeConsoleDecision(await runAuthorizer(Authorizer, ctx));
67
+ }
68
+ const result = await fn(ctx);
69
+ const lazy = lazyModuleClass(result);
70
+ if (lazy !== undefined) {
71
+ Authorizer = lazy;
72
+ return normalizeConsoleDecision(await runAuthorizer(lazy, ctx));
73
+ }
74
+ return normalizeConsoleDecision(result);
75
+ }
76
+ catch (error) {
77
+ return { allowed: false, reason: 'forbidden', error };
78
+ }
79
+ };
80
+ }
81
+ function digest(value) {
82
+ return createHash('sha256').update(value).digest();
83
+ }
84
+ /**
85
+ * An `authorize` for machine access (scripts, a Prometheus scrape): allows a request whose
86
+ * `Authorization` header is `Bearer <token>`, and answers `{ allowed: false, reason: 'unauthenticated' }`
87
+ * (`401`) otherwise. Only the header is read.
88
+ *
89
+ * ```ts
90
+ * authorize: authorizeByToken({ token: env.get('CONSOLE_TOKEN') }),
91
+ * ```
92
+ *
93
+ * Throws at config time when `token` is empty or undefined.
94
+ */
95
+ export function authorizeByToken(options) {
96
+ const token = options?.token;
97
+ if (typeof token !== 'string' || token === '') {
98
+ throw new Error('authorizeByToken: `token` must be a non-empty string');
99
+ }
100
+ // Compare digests: equal length always, so the check leaks neither a match nor the token length.
101
+ const expected = digest(token);
102
+ return (ctx) => {
103
+ const header = ctx.request.header('authorization');
104
+ const match = typeof header === 'string' ? /^Bearer\s+(.+)$/i.exec(header.trim()) : null;
105
+ if (match?.[1] && timingSafeEqual(digest(match[1]), expected))
106
+ return { allowed: true };
107
+ return { allowed: false, reason: 'unauthenticated' };
108
+ };
109
+ }
110
+ /**
111
+ * An `authorize` that allows a request when ANY of `authorizers` allows it, tried in order — e.g. a
112
+ * machine token for MCP clients OR a signed-in admin for the browser:
113
+ *
114
+ * ```ts
115
+ * authorize: anyAuthorize(
116
+ * authorizeByToken({ token: env.get('CONSOLE_TOKEN') }),
117
+ * (ctx) => ctx.auth.user?.isAdmin === true,
118
+ * ),
119
+ * ```
120
+ *
121
+ * When none allows: `401` if any of them said "unauthenticated" (redirecting when one asked to),
122
+ * `403` otherwise. A throwing authorizer counts as a `403` (its error is logged like a throwing
123
+ * `authorize`) and the next one is still tried.
124
+ */
125
+ export function anyAuthorize(...authorizers) {
126
+ if (authorizers.length === 0) {
127
+ throw new Error('anyAuthorize: pass at least one authorize');
128
+ }
129
+ const resolved = authorizers.map((authorize) => resolveConsoleAuthorize(authorize));
130
+ return async (ctx) => {
131
+ let unauthenticated = false;
132
+ let redirectTo;
133
+ let error;
134
+ let threw = false;
135
+ for (const authorize of resolved) {
136
+ const decision = await authorize(ctx);
137
+ if (decision.allowed) {
138
+ return decision.tenants !== undefined
139
+ ? { allowed: true, tenants: decision.tenants }
140
+ : { allowed: true };
141
+ }
142
+ if (decision.error !== undefined && !threw) {
143
+ threw = true;
144
+ error = decision.error;
145
+ }
146
+ if (decision.reason !== 'unauthenticated')
147
+ continue;
148
+ if (decision.redirectTo !== undefined && redirectTo === undefined) {
149
+ redirectTo = decision.redirectTo;
150
+ }
151
+ unauthenticated = true;
152
+ }
153
+ if (redirectTo !== undefined)
154
+ return { redirectTo };
155
+ if (unauthenticated)
156
+ return { allowed: false, reason: 'unauthenticated' };
157
+ // Rethrow an inner authorizer's error so the console still logs it (a throw is a 403).
158
+ if (threw)
159
+ throw error;
160
+ return { allowed: false, reason: 'forbidden' };
161
+ };
162
+ }
163
+ //# sourceMappingURL=console_authorize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console_authorize.js","sourceRoot":"","sources":["../../../src/dashboard/console_authorize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { HttpContext } from '@adonisjs/core/http';
2
+ /** Who is signed in, as the sidebar footer shows it. */
3
+ export interface ConsoleViewer {
4
+ /** Main line: a name or an email. */
5
+ label: string;
6
+ email?: string;
7
+ /** Small caps line under it (`admin`). */
8
+ role?: string;
9
+ }
10
+ /** How the footer signs out: a POST form (with the CSRF token) or a plain link. */
11
+ export type ConsoleSignOut = {
12
+ action: string;
13
+ csrfToken?: string;
14
+ } | {
15
+ href: string;
16
+ };
17
+ /** The `signOut` config option: a POST action path, `{ action }`, `{ href }`, or `false` for none. */
18
+ export type SignOutOption = string | {
19
+ action: string;
20
+ } | {
21
+ href: string;
22
+ } | false;
23
+ /** The `viewer` config hook: return the viewer, or `null`/`undefined` for no user row. */
24
+ export type ViewerHook = (ctx: HttpContext) => ConsoleViewer | null | undefined | Promise<ConsoleViewer | null | undefined>;
25
+ /**
26
+ * A viewer from any user-ish object: `fullName` / `name` / `email` for the label, `email`, and the
27
+ * first of `role` / `roles`. `undefined` when nothing usable is there.
28
+ */
29
+ export declare function viewerFromUser(user: unknown): ConsoleViewer | undefined;
30
+ /**
31
+ * The viewer for this request: the host's `viewer(ctx)` hook when configured (a throw or an empty
32
+ * answer means no user row), else a structural read of `ctx.auth?.user` — only when the request is
33
+ * already authenticated; it never triggers an authentication.
34
+ */
35
+ export declare function resolveViewer(ctx: HttpContext, hook: ViewerHook | null | undefined): Promise<ConsoleViewer | undefined>;
36
+ /** The request's CSRF token when `@adonisjs/shield` (or anything like it) put one on the request. */
37
+ export declare function csrfTokenOf(ctx: HttpContext): string | undefined;
38
+ /**
39
+ * The sign-out the footer offers: the host's `signOut` option when set (`false` = none), else the
40
+ * one an account console (authkit) announced on the `agora.consoles` registry, else none. Only
41
+ * same-origin paths are ever emitted. A POST action carries the request's CSRF token when there is
42
+ * one.
43
+ */
44
+ export declare function resolveSignOut(ctx: HttpContext, configured: SignOutOption | null | undefined, registry: unknown): ConsoleSignOut | undefined;
45
+ //# sourceMappingURL=console_shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console_shell.d.ts","sourceRoot":"","sources":["../../../src/dashboard/console_shell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAevD,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF,sGAAsG;AACtG,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC;AAEnF,0FAA0F;AAC1F,MAAM,MAAM,UAAU,GAAG,CACvB,GAAG,EAAE,WAAW,KACb,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAyBlF;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAQvE;AAaD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAClC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAepC;AAED,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAGhE;AAiBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,aAAa,GAAG,IAAI,GAAG,SAAS,EAC5C,QAAQ,EAAE,OAAO,GAChB,cAAc,GAAG,SAAS,CAW5B"}
@@ -0,0 +1,125 @@
1
+ import { isSameOriginPath } from './console_switcher.js';
2
+ /** A same-origin path with no backslash or control character (what the SPA will follow). */
3
+ function safePath(path) {
4
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: rejecting control characters is the point
5
+ return isSameOriginPath(path) && !path.includes('\\') && !/[\u0000-\u001f\u007f]/.test(path);
6
+ }
7
+ function text(value) {
8
+ if (typeof value === 'string' && value.trim() !== '')
9
+ return value.trim();
10
+ return undefined;
11
+ }
12
+ /** The first role of a user, from `role`, `roles: string[]` or `roles: [{ name }]`. */
13
+ function roleOf(user) {
14
+ const direct = text(user.role);
15
+ if (direct)
16
+ return direct;
17
+ const roles = user.roles;
18
+ if (Array.isArray(roles)) {
19
+ for (const role of roles) {
20
+ const name = text(role) ??
21
+ (typeof role === 'object' && role !== null
22
+ ? text(role.name)
23
+ : undefined);
24
+ if (name)
25
+ return name;
26
+ }
27
+ }
28
+ return undefined;
29
+ }
30
+ /**
31
+ * A viewer from any user-ish object: `fullName` / `name` / `email` for the label, `email`, and the
32
+ * first of `role` / `roles`. `undefined` when nothing usable is there.
33
+ */
34
+ export function viewerFromUser(user) {
35
+ if (typeof user !== 'object' || user === null)
36
+ return undefined;
37
+ const u = user;
38
+ const email = text(u.email);
39
+ const label = text(u.fullName) ?? text(u.name) ?? email;
40
+ if (!label)
41
+ return undefined;
42
+ const role = roleOf(u);
43
+ return { label, ...(email ? { email } : {}), ...(role ? { role } : {}) };
44
+ }
45
+ /** Keep only the fields the SPA renders, as trimmed non-empty strings. */
46
+ function cleanViewer(value) {
47
+ if (typeof value !== 'object' || value === null)
48
+ return undefined;
49
+ const v = value;
50
+ const label = text(v.label);
51
+ if (!label)
52
+ return undefined;
53
+ const email = text(v.email);
54
+ const role = text(v.role);
55
+ return { label, ...(email ? { email } : {}), ...(role ? { role } : {}) };
56
+ }
57
+ /**
58
+ * The viewer for this request: the host's `viewer(ctx)` hook when configured (a throw or an empty
59
+ * answer means no user row), else a structural read of `ctx.auth?.user` — only when the request is
60
+ * already authenticated; it never triggers an authentication.
61
+ */
62
+ export async function resolveViewer(ctx, hook) {
63
+ if (hook) {
64
+ try {
65
+ return cleanViewer(await hook(ctx));
66
+ }
67
+ catch {
68
+ return undefined;
69
+ }
70
+ }
71
+ try {
72
+ const auth = ctx.auth;
73
+ return viewerFromUser(auth?.user);
74
+ }
75
+ catch {
76
+ // Some guards throw on `.user` before authentication; that just means "no viewer".
77
+ return undefined;
78
+ }
79
+ }
80
+ /** The request's CSRF token when `@adonisjs/shield` (or anything like it) put one on the request. */
81
+ export function csrfTokenOf(ctx) {
82
+ const token = ctx.request.csrfToken;
83
+ return typeof token === 'string' && token !== '' ? token : undefined;
84
+ }
85
+ /** What a registry's `account.signOut` (announced by authkit) may look like. */
86
+ function announcedSignOut(registry) {
87
+ if (typeof registry !== 'object' || registry === null)
88
+ return undefined;
89
+ const account = registry.account;
90
+ if (typeof account !== 'object' || account === null)
91
+ return undefined;
92
+ const signOut = account.signOut;
93
+ if (typeof signOut === 'string')
94
+ return signOut;
95
+ if (typeof signOut === 'object' && signOut !== null) {
96
+ const s = signOut;
97
+ if (typeof s.action === 'string')
98
+ return { action: s.action };
99
+ if (typeof s.href === 'string')
100
+ return { href: s.href };
101
+ }
102
+ return undefined;
103
+ }
104
+ /**
105
+ * The sign-out the footer offers: the host's `signOut` option when set (`false` = none), else the
106
+ * one an account console (authkit) announced on the `agora.consoles` registry, else none. Only
107
+ * same-origin paths are ever emitted. A POST action carries the request's CSRF token when there is
108
+ * one.
109
+ */
110
+ export function resolveSignOut(ctx, configured, registry) {
111
+ if (configured === false)
112
+ return undefined;
113
+ const option = configured ?? announcedSignOut(registry);
114
+ if (option === undefined || option === false)
115
+ return undefined;
116
+ if (typeof option === 'object' && 'href' in option) {
117
+ return safePath(option.href) ? { href: option.href } : undefined;
118
+ }
119
+ const action = typeof option === 'string' ? option : option.action;
120
+ if (!safePath(action))
121
+ return undefined;
122
+ const csrfToken = csrfTokenOf(ctx);
123
+ return { action, ...(csrfToken ? { csrfToken } : {}) };
124
+ }
125
+ //# sourceMappingURL=console_shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console_shell.js","sourceRoot":"","sources":["../../../src/dashboard/console_shell.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,4FAA4F;AAC5F,SAAS,QAAQ,CAAC,IAAa;IAC7B,qGAAqG;IACrG,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/F,CAAC;AA4BD,SAAS,IAAI,CAAC,KAAc;IAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,uFAAuF;AACvF,SAAS,MAAM,CAAC,IAA6B;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,CAAC;gBACV,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;oBACxC,CAAC,CAAC,IAAI,CAAE,IAA2B,CAAC,IAAI,CAAC;oBACzC,CAAC,CAAC,SAAS,CAAC,CAAC;YACjB,IAAI,IAAI;gBAAE,OAAO,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,0EAA0E;AAC1E,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,CAAC,GAAG,KAAgC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAgB,EAChB,IAAmC;IAEnC,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC;YACH,OAAO,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAI,GAAgD,CAAC,IAAI,CAAC;QACpE,OAAO,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,mFAAmF;QACnF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,WAAW,CAAC,GAAgB;IAC1C,MAAM,KAAK,GAAI,GAAG,CAAC,OAA8C,CAAC,SAAS,CAAC;IAC5E,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,gFAAgF;AAChF,SAAS,gBAAgB,CAAC,QAAiB;IACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACxE,MAAM,OAAO,GAAI,QAAkC,CAAC,OAAO,CAAC;IAC5D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,OAAO,GAAI,OAAiC,CAAC,OAAO,CAAC;IAC3D,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,MAAM,CAAC,GAAG,OAA+C,CAAC;QAC1D,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9D,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAgB,EAChB,UAA4C,EAC5C,QAAiB;IAEjB,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC/D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACnE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACzD,CAAC"}