@kedem/okdb 1.0.0 → 1.0.3

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 (188) hide show
  1. package/README.md +1 -1
  2. package/bin/okdb.js +1 -1
  3. package/keys/public.pem +3 -0
  4. package/okdb.js +1 -1
  5. package/package.json +2 -2
  6. package/public/admin-app.js +1 -1
  7. package/public/components/admin-route-host.ok.js +1 -1
  8. package/public/components/env-picker.ok.js +1 -1
  9. package/public/components/field-path-input.ok.js +1 -1
  10. package/public/components/geo-map.ok.js +1 -1
  11. package/public/components/ok-cron-input.ok.js +1 -1
  12. package/public/components/ok-dropzone.ok.js +1 -1
  13. package/public/components/ok-js-input.ok.js +1 -1
  14. package/public/components/ok-json-input.ok.js +1 -1
  15. package/public/components/ok-text-monaco-input.ok.js +1 -1
  16. package/public/components/theme-toggle.ok.js +1 -1
  17. package/public/login-app.js +1 -1
  18. package/public/modules/ok.js +1 -1
  19. package/public/sections/api/parts/api-endpoint.ok.js +1 -1
  20. package/public/sections/auth/modals/create-token-modal.ok.js +1 -1
  21. package/public/sections/auth/modals/edit-token-modal.ok.js +1 -1
  22. package/public/sections/auth/modals/perm-info-popover.ok.js +1 -1
  23. package/public/sections/auth/parts/token-detail.ok.js +1 -1
  24. package/public/sections/auth/parts/token-list.ok.js +1 -1
  25. package/public/sections/db/modals/add-item-modal.ok.js +1 -1
  26. package/public/sections/db/modals/create-env-modal.ok.js +1 -1
  27. package/public/sections/db/modals/create-fts-modal.ok.js +1 -1
  28. package/public/sections/db/modals/create-index-modal.ok.js +1 -1
  29. package/public/sections/db/modals/create-pipeline-modal.ok.js +1 -1
  30. package/public/sections/db/modals/demo-env-modal.ok.js +1 -1
  31. package/public/sections/db/modals/remove-env-modal.ok.js +1 -1
  32. package/public/sections/db/modals/schema-edit-modal.ok.js +1 -1
  33. package/public/sections/db/parts/db-overview.ok.js +1 -1
  34. package/public/sections/db/parts/db-pipelines-panel.ok.js +1 -1
  35. package/public/sections/db/parts/edit-row.ok.js +1 -1
  36. package/public/sections/db/parts/tm-timeline.ok.js +1 -1
  37. package/public/sections/db/parts/type-changelog.ok.js +1 -1
  38. package/public/sections/db/parts/type-list.ok.js +1 -1
  39. package/public/sections/db/parts/type-pipelines-tab.ok.js +1 -1
  40. package/public/sections/db/parts/type-schema-tab.ok.js +1 -1
  41. package/public/sections/db/parts/type-viewer.ok.js +1 -1
  42. package/public/sections/db/parts/type-violations-tab.ok.js +1 -1
  43. package/public/sections/embeddings/modals/register-model-modal.ok.js +1 -1
  44. package/public/sections/embeddings/parts/embed-create-panel.ok.js +1 -1
  45. package/public/sections/embeddings/parts/embed-embedder-panel.ok.js +1 -1
  46. package/public/sections/embeddings/parts/embed-engine-declaration-editor.ok.js +1 -1
  47. package/public/sections/embeddings/parts/embed-engine-list.ok.js +1 -1
  48. package/public/sections/embeddings/parts/embed-indexer-panel.ok.js +1 -1
  49. package/public/sections/embeddings/parts/embed-lifecycle-bar.ok.js +1 -1
  50. package/public/sections/embeddings/parts/embed-model-catalog.ok.js +1 -1
  51. package/public/sections/embeddings/parts/embed-overview.ok.js +1 -1
  52. package/public/sections/embeddings/parts/embed-search-panel.ok.js +1 -1
  53. package/public/sections/embeddings/parts/embed-worker-panel.ok.js +1 -1
  54. package/public/sections/embeddings/parts/embeddings-engine-panel.ok.js +1 -1
  55. package/public/sections/embeddings/parts/engines-overview.ok.js +1 -1
  56. package/public/sections/embeddings/parts/pipeline-create-panel.ok.js +1 -1
  57. package/public/sections/engines/engine-panel-shared-style.js +1 -1
  58. package/public/sections/engines/engine-ui-utils.js +1 -1
  59. package/public/sections/engines/modals/engine-modal.ok.js +1 -1
  60. package/public/sections/engines/parts/engine-declaration-editor.ok.js +1 -1
  61. package/public/sections/engines/parts/engine-lifecycle-actions.ok.js +1 -1
  62. package/public/sections/engines/parts/engine-panel-shell.ok.js +1 -1
  63. package/public/sections/engines/parts/engine-resource-card.ok.js +1 -1
  64. package/public/sections/engines/parts/engine-row-item.ok.js +1 -1
  65. package/public/sections/engines/parts/generic-engine-panel.ok.js +1 -1
  66. package/public/sections/files/parts/files-blob-status.ok.js +1 -1
  67. package/public/sections/files/parts/files-collection-list.ok.js +1 -1
  68. package/public/sections/files/parts/files-collection-panel.ok.js +1 -1
  69. package/public/sections/files/parts/files-file-list.ok.js +1 -1
  70. package/public/sections/files/parts/files-overview.ok.js +1 -1
  71. package/public/sections/files/parts/files-path-browser.ok.js +1 -1
  72. package/public/sections/files/parts/files-upload-panel.ok.js +1 -1
  73. package/public/sections/functions/modals/function-modal.ok.js +1 -1
  74. package/public/sections/functions/parts/function-detail.ok.js +1 -1
  75. package/public/sections/functions/parts/function-logs.ok.js +1 -1
  76. package/public/sections/functions/parts/function-runner.ok.js +1 -1
  77. package/public/sections/functions/parts/functions-list.ok.js +1 -1
  78. package/public/sections/license/parts/license-panel.ok.js +1 -1
  79. package/public/sections/queue/modals/create-bucket-modal.ok.js +1 -1
  80. package/public/sections/queue/modals/edit-bucket-modal.ok.js +1 -1
  81. package/public/sections/queue/modals/edit-job-modal.ok.js +1 -1
  82. package/public/sections/queue/modals/enqueue-job-modal.ok.js +1 -1
  83. package/public/sections/queue/modals/job-type-modal.ok.js +1 -1
  84. package/public/sections/queue/parts/ok-job-form.ok.js +1 -1
  85. package/public/sections/queue/parts/queue-buckets.ok.js +1 -1
  86. package/public/sections/queue/parts/queue-job-types.ok.js +1 -1
  87. package/public/sections/queue/parts/queue-jobs.ok.js +1 -1
  88. package/public/sections/queue/parts/queue-types.ok.js +1 -1
  89. package/public/sections/queue/parts/queue-workers.ok.js +1 -1
  90. package/public/sections/sync/parts/sync-node-detail.ok.js +1 -1
  91. package/public/sections/sync/parts/sync-retention.ok.js +1 -1
  92. package/public/sections/sync/parts/sync-topology.ok.js +1 -1
  93. package/public/sections/system/modals/data-ops-modal.ok.js +1 -1
  94. package/public/sections/system/parts/system-api-panel.ok.js +1 -1
  95. package/public/sections/system/parts/system-auth-panel.ok.js +1 -1
  96. package/public/sections/system/parts/system-log-history.ok.js +1 -1
  97. package/public/sections/system/parts/system-log.ok.js +1 -1
  98. package/public/sections/system/parts/system-status.ok.js +1 -1
  99. package/public/sections/system/parts/system-sync-panel.ok.js +1 -1
  100. package/public/sections/views/modals/create-view-modal.ok.js +1 -1
  101. package/public/sections/views/parts/view-detail.ok.js +1 -1
  102. package/public/sections/views/parts/views-list.ok.js +1 -1
  103. package/public/sections/views/parts/views-overview.ok.js +1 -1
  104. package/public/setup-app.js +1 -1
  105. package/public/stores/auth-store.js +1 -1
  106. package/public/stores/events-store.js +1 -1
  107. package/public/stores/functions-store.js +1 -1
  108. package/public/stores/okdb-store.js +1 -1
  109. package/public/stores/theme-store.js +1 -1
  110. package/public/util/permissions.js +1 -1
  111. package/public/util/sift-schema.js +1 -1
  112. package/public/vendor/okjs/ok.esm.min.js +1 -2
  113. package/public/vendor/okjs/toolkit/behavior/async.ok.js +1 -1
  114. package/public/vendor/okjs/toolkit/components/ok-chart.ok.js +1 -1
  115. package/public/vendor/okjs/toolkit/components/ok-doc-viewer.ok.js +1 -1
  116. package/public/vendor/okjs/toolkit/components/ok-marked.ok.js +1 -1
  117. package/public/vendor/okjs/toolkit/components/ok-monaco.ok.js +1 -1
  118. package/public/vendor/okjs/toolkit/core/ok-layer-service.ok.js +1 -1
  119. package/public/vendor/okjs/toolkit/core/ok-layer.ok.js +1 -1
  120. package/public/vendor/okjs/toolkit/core/ok-overlay.ok.js +1 -1
  121. package/public/vendor/okjs/toolkit/core/ok-sandbox.ok.js +1 -1
  122. package/public/vendor/okjs/toolkit/core/transition.ok.js +1 -1
  123. package/public/vendor/okjs/toolkit/core/virtualized.ok.js +1 -1
  124. package/public/vendor/okjs/toolkit/devtools/ok-console-service.ok.js +1 -1
  125. package/public/vendor/okjs/toolkit/devtools/ok-console.ok.js +1 -1
  126. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor-service.ok.js +1 -1
  127. package/public/vendor/okjs/toolkit/devtools/ok-fps-monitor.ok.js +1 -1
  128. package/public/vendor/okjs/toolkit/devtools/ok-inspector-service.ok.js +1 -1
  129. package/public/vendor/okjs/toolkit/devtools/ok-inspector.ok.js +1 -1
  130. package/public/vendor/okjs/toolkit/devtools/ok-js-tree.ok.js +1 -1
  131. package/public/vendor/okjs/toolkit/devtools/ok-timeline-service.ok.js +1 -1
  132. package/public/vendor/okjs/toolkit/devtools/ok-timeline.ok.js +1 -1
  133. package/public/vendor/okjs/toolkit/docs/doc-viewer.ok.js +1 -1
  134. package/public/vendor/okjs/toolkit/editor/ok-live-component.ok.js +1 -1
  135. package/public/vendor/okjs/toolkit/editor/ok-live-example.ok.js +1 -1
  136. package/public/vendor/okjs/toolkit/editor/ok-live-shell.ok.js +1 -1
  137. package/public/vendor/okjs/toolkit/elements/ok-dropdown.ok.js +1 -1
  138. package/public/vendor/okjs/toolkit/elements/ok-icon.ok.js +1 -1
  139. package/public/vendor/okjs/toolkit/elements/ok-select.ok.js +1 -1
  140. package/public/vendor/okjs/toolkit/elements/ok-table.ok.js +1 -1
  141. package/public/vendor/okjs/toolkit/errors/ok-crash-boundary.ok.js +1 -1
  142. package/public/vendor/okjs/toolkit/errors/ok-crash-info.ok.js +1 -1
  143. package/public/vendor/okjs/toolkit/i18n/i18n-editor-examples.ok.js +1 -1
  144. package/public/vendor/okjs/toolkit/i18n/i18n-editor.ok.js +1 -1
  145. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor-tips.ok.js +1 -1
  146. package/public/vendor/okjs/toolkit/i18n/i18n-key-editor.ok.js +1 -1
  147. package/public/vendor/okjs/toolkit/i18n/i18n-service.ok.js +1 -1
  148. package/public/vendor/okjs/toolkit/i18n/ok-i18n.js +1 -1
  149. package/public/vendor/okjs/toolkit/interaction/ok-contextmenu.ok.js +1 -1
  150. package/public/vendor/okjs/toolkit/interaction/ok-dismiss-service.ok.js +1 -1
  151. package/public/vendor/okjs/toolkit/interaction/ok-draggable.ok.js +1 -1
  152. package/public/vendor/okjs/toolkit/interaction/ok-flyover-panel.ok.js +1 -1
  153. package/public/vendor/okjs/toolkit/interaction/ok-flyover.ok.js +1 -1
  154. package/public/vendor/okjs/toolkit/interaction/ok-highlight-service.ok.js +1 -1
  155. package/public/vendor/okjs/toolkit/interaction/ok-highlight.ok.js +1 -1
  156. package/public/vendor/okjs/toolkit/interaction/ok-hotkeys-service.ok.js +1 -1
  157. package/public/vendor/okjs/toolkit/interaction/ok-picker-service.ok.js +1 -1
  158. package/public/vendor/okjs/toolkit/interaction/ok-popout-service.ok.js +1 -1
  159. package/public/vendor/okjs/toolkit/interaction/ok-popout.ok.js +1 -1
  160. package/public/vendor/okjs/toolkit/interaction/ok-portal-service.ok.js +1 -1
  161. package/public/vendor/okjs/toolkit/interaction/ok-submenu.ok.js +1 -1
  162. package/public/vendor/okjs/toolkit/layout/ok-resizer.ok.js +1 -1
  163. package/public/vendor/okjs/toolkit/manifest.js +1 -1
  164. package/public/vendor/okjs/toolkit/modals/ok-modal-service.ok.js +1 -1
  165. package/public/vendor/okjs/toolkit/modals/ok-modal.ok.js +1 -1
  166. package/public/vendor/okjs/toolkit/modals/ok-toast-service.ok.js +1 -1
  167. package/public/vendor/okjs/toolkit/modals/ok-window.ok.js +1 -1
  168. package/public/vendor/okjs/toolkit/navigation/hash-router.ok.js +1 -1
  169. package/public/vendor/okjs/toolkit/navigation/history-router.ok.js +1 -1
  170. package/public/vendor/okjs/toolkit/navigation/router.ok.js +1 -1
  171. package/public/vendor/okjs/toolkit/sync/reactive-sync-service.ok.js +1 -1
  172. package/public/vendor/okjs/toolkit/sync/reactive-sync.js +1 -1
  173. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-button.css.js +1 -1
  174. package/public/vendor/okjs/toolkit/theming/blocks/ok-design-input.css.js +1 -1
  175. package/public/vendor/okjs/toolkit/theming/ok-design-style.js +1 -1
  176. package/public/vendor/okjs/toolkit/theming/ok-design-vars.js +1 -1
  177. package/public/vendor/okjs/toolkit/theming/ok-design.ok.js +1 -1
  178. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-input.ok.js +1 -1
  179. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-service.ok.js +1 -1
  180. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-style.js +1 -1
  181. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-utils.js +1 -1
  182. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-variable.ok.js +1 -1
  183. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor-vm.js +1 -1
  184. package/public/vendor/okjs/toolkit/theming/ok-theme-editor/ok-theme-editor.ok.js +1 -1
  185. package/public/vendor/okjs/toolkit/theming/ok-theme.ok.js +1 -1
  186. package/public/view-models/type-query-vm.js +1 -1
  187. package/public/images/logo.png +0 -0
  188. package/public/images/logo.svg +0 -333
@@ -1 +1 @@
1
- function _0x268e(_0x1c74be,_0x42737e){_0x1c74be=_0x1c74be-0x14a;const _0x178311=_0x1783();let _0x268e95=_0x178311[_0x1c74be];return _0x268e95;}const _0x494219=_0x268e;(function(_0x3931b4,_0x30bc80){const _0x43a73e=_0x268e,_0x183017=_0x3931b4();while(!![]){try{const _0x823819=parseInt(_0x43a73e(0x14e))/0x1*(-parseInt(_0x43a73e(0x17c))/0x2)+-parseInt(_0x43a73e(0x14d))/0x3+parseInt(_0x43a73e(0x175))/0x4+parseInt(_0x43a73e(0x165))/0x5*(-parseInt(_0x43a73e(0x17b))/0x6)+-parseInt(_0x43a73e(0x14a))/0x7*(-parseInt(_0x43a73e(0x173))/0x8)+-parseInt(_0x43a73e(0x181))/0x9+parseInt(_0x43a73e(0x168))/0xa;if(_0x823819===_0x30bc80)break;else _0x183017['push'](_0x183017['shift']());}catch(_0x39fd13){_0x183017['push'](_0x183017['shift']());}}}(_0x1783,0xea7e0));import _0x22d5c2 from'../../../stores/okdb-store.js';import _0x170c6d from'../modals/job-type-modal.ok.js';function _0x1783(){const _0x540464=['queue-job-types\x20load\x20error','11666925kZsnLz','message','Draining','max_concurrency','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:16px;\x20padding:16px\x200;\x22>\x0a\x0a\x20\x20<!--\x20header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:14px;\x20font-weight:600;\x20flex:1;\x22>Registered\x20Job\x20Types</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.6;\x20font-size:11px;\x20padding:2px\x208px;\x22>↻</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22openCreate()\x22\x20style=\x22font-size:12px;\x20padding:4px\x2012px;\x22>+\x20Register\x20type</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20error\x20state\x20-->\x0a\x20\x20<if\x20:=\x22loadError\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:#ef4444;\x20font-size:12px;\x20padding:8px\x2012px;\x20border:1px\x20solid\x20#ef4444;\x20border-radius:6px;\x20background:color-mix(in\x20srgb,\x20#ef4444\x208%,\x20transparent);\x22>\x0a\x20\x20\x20\x20\x20\x20Failed\x20to\x20load\x20job\x20types:\x20{{\x20loadError\x20}}\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20empty\x20state\x20-->\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20!loadError\x20&&\x20types.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:13px;\x20line-height:1.8;\x20padding:32px\x200;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20registered\x20job\x20types.<br>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x22>Register\x20a\x20type\x20to\x20set\x20defaults,\x20control\x20concurrency,\x20and\x20pause/resume\x20claiming.</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20types\x20list\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20<each\x20:of=\x22types\x22\x20let:item=\x22jt\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22jt-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:13px;\x20font-weight:600;\x20flex:1;\x20min-width:0;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22>{{\x20jt.id\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-badge\x22\x20:style=\x22\x27border-color:\x27\x20+\x20statusColor(jt.status)\x20+\x20\x27;\x20color:\x27\x20+\x20statusColor(jt.status)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20statusLabel(jt.status)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.payload_schema\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-badge\x22\x20style=\x22border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x22>schema</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.payload_schema.enforce\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-badge\x22\x20style=\x22border-color:#ef4444;\x20color:#ef4444;\x22>enforced</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20lifecycle\x20actions\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.status\x20!==\x20\x27paused\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x22\x20@click=\x22setStatus(jt,\x20\x27pause\x27)\x22\x20title=\x22Pause\x20—\x20stop\x20workers\x20from\x20claiming\x20new\x20jobs\x22>⏸\x20Pause</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.status\x20===\x20\x27paused\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x20act-btn--accent\x22\x20@click=\x22setStatus(jt,\x20\x27resume\x27)\x22\x20title=\x22Resume\x20normal\x20claiming\x22>▶\x20Resume</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.status\x20!==\x20\x27draining\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x22\x20@click=\x22setStatus(jt,\x20\x27drain\x27)\x22\x20title=\x22Drain\x20—\x20stop\x20new\x20enqueues,\x20let\x20queue\x20empty\x22>⬇\x20Drain</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.status\x20===\x20\x27draining\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x20act-btn--accent\x22\x20@click=\x22setStatus(jt,\x20\x27resume\x27)\x22>▶\x20Resume</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x20act-btn--enqueue\x22\x20@click=\x22openEnqueue(jt)\x22>+\x20Enqueue</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x22\x20@click=\x22openEdit(jt)\x22>Edit</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x20act-btn--danger\x22\x20@click=\x22remove(jt)\x22>Remove</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.55;\x20margin-top:4px;\x20font-family:monospace;\x22>{{\x20formatDefaults(jt)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','concurrency:','<enqueue-job-modal\x20:modal=\x22modal\x22\x20:initial-type=\x22initialType\x22\x20:on-done=\x22onDone\x22\x20/>','Job\x20enqueued','\x20job\x20type','result','color-mix(in\x20srgb,\x20#22c55e\x2080%,\x20transparent)','9938481FzqMZl','ttl:','pri:','4919217uCtRwP','1caKZeI','toast','Active','status','$watch','/queue/job-type/','tries:','var(--okdb-app-fg-muted)','load','bucketOptions','\x20\x20·\x20\x20','<job-type-modal\x20:modal=\x22modal\x22\x20:job-type=\x22jobType\x22\x20:bucket-options=\x22bucketOptions\x22\x20:on-done=\x22onDone\x22\x20/>','modal','json','data','color-mix(in\x20srgb,\x20#f59e0b\x2080%,\x20transparent)','HTTP\x20','Failed\x20to\x20load','error','open','catch','\x22?\x20Existing\x20jobs\x20are\x20unaffected.','types','7679015uCBRPF','shared','ttl','32799550WWglzE','busy','push','loadError','apiBase','retry_delay','$ok','Edit:\x20','queue-job-types','Failed\x20to\x20remove\x20job\x20type','selectedEnv','8lfMZVv','color-mix(in\x20srgb,\x20#3b82f6\x2080%,\x20transparent)','3309280VnysJG','failed','max_tries','delay:','Failed\x20to\x20','DELETE','6rlhlyl','189422cAiQBP','priority','Remove\x20job\x20type\x20\x22','<job-type-modal\x20:modal=\x22modal\x22\x20:job-type=\x22null\x22\x20:bucket-options=\x22bucketOptions\x22\x20:on-done=\x22onDone\x22\x20/>'];_0x1783=function(){return _0x540464;};return _0x1783();}import _0x45b3ba from'../modals/enqueue-job-modal.ok.js';const n={'active':_0x494219(0x150),'paused':'Paused','draining':_0x494219(0x183)},a={'active':_0x494219(0x18b),'paused':_0x494219(0x15d),'draining':_0x494219(0x174)};export default{'tag':_0x494219(0x170),'dependencies':[_0x170c6d,_0x45b3ba],'context':_0x36d5de=>({'busy':!0x1,'loadError':null,'types':[],'bucketOptions':[],async 'load'(){const _0x2c5d5e=_0x494219;this[_0x2c5d5e(0x169)]=!0x0,this[_0x2c5d5e(0x16b)]=null;try{const [_0x5c1bb1,_0x3f539a]=await Promise['all']([fetch(_0x22d5c2[_0x2c5d5e(0x16c)]+'/queue/job-types'),fetch(_0x22d5c2[_0x2c5d5e(0x16c)]+'/queue/buckets')[_0x2c5d5e(0x162)](()=>null)]);if(!_0x5c1bb1['ok']){const _0x4ef038=await _0x5c1bb1['json']()[_0x2c5d5e(0x162)](()=>({}));throw new Error(_0x4ef038?.['error']?.[_0x2c5d5e(0x182)]??_0x4ef038?.['message']??_0x2c5d5e(0x15e)+_0x5c1bb1[_0x2c5d5e(0x151)]);}const _0x5b55c6=await _0x5c1bb1[_0x2c5d5e(0x15b)]();this[_0x2c5d5e(0x164)]=_0x5b55c6?.[_0x2c5d5e(0x18a)]??_0x5b55c6?.[_0x2c5d5e(0x15c)]??[];const _0x2e6d90=_0x3f539a?.['ok']?await _0x3f539a['json']()['catch'](()=>({})):{};this['bucketOptions']=_0x2e6d90?.[_0x2c5d5e(0x18a)]??_0x2e6d90?.[_0x2c5d5e(0x15c)]??[];}catch(_0x1fae9d){console[_0x2c5d5e(0x160)](_0x2c5d5e(0x180),_0x1fae9d),this[_0x2c5d5e(0x16b)]=_0x1fae9d[_0x2c5d5e(0x182)]||_0x2c5d5e(0x15f),this[_0x2c5d5e(0x164)]=[];}finally{this[_0x2c5d5e(0x169)]=!0x1;}},'statusLabel':_0x55dcdf=>n[_0x55dcdf]??_0x55dcdf,'statusColor':_0x12e5d0=>a[_0x12e5d0]??_0x494219(0x155),'formatDefaults'(_0x2dc2b1){const _0x3b60ae=_0x494219,_0x2344f7=_0x2dc2b1['defaults']??{},_0x4d15ab=[];return null!=_0x2344f7[_0x3b60ae(0x177)]&&_0x4d15ab[_0x3b60ae(0x16a)](_0x3b60ae(0x154)+_0x2344f7['max_tries']),null!=_0x2344f7[_0x3b60ae(0x16d)]&&_0x4d15ab[_0x3b60ae(0x16a)](_0x3b60ae(0x178)+_0x2344f7[_0x3b60ae(0x16d)]+'ms'),null!=_0x2344f7['priority']&&_0x4d15ab['push'](_0x3b60ae(0x14c)+_0x2344f7[_0x3b60ae(0x17d)]),null!=_0x2344f7[_0x3b60ae(0x167)]&&_0x4d15ab['push'](_0x3b60ae(0x14b)+_0x2344f7[_0x3b60ae(0x167)]+'ms'),null!=_0x2dc2b1[_0x3b60ae(0x184)]&&_0x4d15ab[_0x3b60ae(0x16a)](_0x3b60ae(0x186)+_0x2dc2b1[_0x3b60ae(0x184)]),_0x4d15ab['join'](_0x3b60ae(0x158))||'—';},'openCreate'(){const _0x1a78a4=_0x494219,_0x25fab2=this;_0x36d5de[_0x1a78a4(0x16e)]['shared']['modal'][_0x1a78a4(0x161)]({'owner':_0x36d5de,'title':'Register\x20Job\x20Type','content':_0x1a78a4(0x17f),'context':_0x54af2c=>({'modal':_0x54af2c,'bucketOptions':_0x25fab2['bucketOptions'],'onDone':()=>_0x25fab2[_0x1a78a4(0x156)]()})});},'openEdit'(_0x4cce0f){const _0x50c19e=_0x494219;_0x36d5de['$ok'][_0x50c19e(0x166)][_0x50c19e(0x15a)]['open']({'owner':_0x36d5de,'title':_0x50c19e(0x16f)+_0x4cce0f['id'],'content':_0x50c19e(0x159),'context':_0x1be5eb=>({'modal':_0x1be5eb,'jobType':_0x4cce0f,'bucketOptions':this[_0x50c19e(0x157)],'onDone':()=>this[_0x50c19e(0x156)]()})});},async 'setStatus'(_0x34a4f6,_0x39db6f){const _0x68f47c=_0x494219;try{if(!(await fetch(_0x22d5c2[_0x68f47c(0x16c)]+_0x68f47c(0x153)+encodeURIComponent(_0x34a4f6['id'])+'/'+_0x39db6f,{'method':'POST'}))['ok'])throw new Error(_0x68f47c(0x176));await this[_0x68f47c(0x156)]();}catch{_0x36d5de[_0x68f47c(0x16e)][_0x68f47c(0x166)]?.[_0x68f47c(0x14f)]?.['error']?.(_0x68f47c(0x179)+_0x39db6f+_0x68f47c(0x189));}},'openEnqueue'(_0x5c76ff){const _0x4db09b=_0x494219;_0x36d5de['$ok'][_0x4db09b(0x166)][_0x4db09b(0x15a)][_0x4db09b(0x161)]({'owner':_0x36d5de,'title':'Enqueue\x20Job','content':_0x4db09b(0x187),'context':_0xd84186=>({'modal':_0xd84186,'initialType':_0x5c76ff['id'],'onDone':()=>_0x36d5de['$ok'][_0x4db09b(0x166)]?.[_0x4db09b(0x14f)]?.['success']?.(_0x4db09b(0x188))})});},async 'remove'(_0x228960){const _0x2c6e6d=_0x494219;if(await _0x36d5de['$ok'][_0x2c6e6d(0x166)][_0x2c6e6d(0x15a)]['confirm'](_0x2c6e6d(0x17e)+_0x228960['id']+_0x2c6e6d(0x163)))try{if(!(await fetch(_0x22d5c2[_0x2c6e6d(0x16c)]+'/queue/job-type/'+encodeURIComponent(_0x228960['id']),{'method':_0x2c6e6d(0x17a)}))['ok'])throw new Error(_0x2c6e6d(0x176));await this[_0x2c6e6d(0x156)]();}catch{_0x36d5de[_0x2c6e6d(0x16e)][_0x2c6e6d(0x166)]?.[_0x2c6e6d(0x14f)]?.[_0x2c6e6d(0x160)]?.(_0x2c6e6d(0x171));}}}),async 'mount'(_0x2a1f81){const _0x772f30=_0x494219;await this[_0x772f30(0x156)](),_0x2a1f81[_0x772f30(0x152)](()=>_0x22d5c2[_0x772f30(0x172)],()=>{const _0x3cfa06=_0x772f30;this[_0x3cfa06(0x164)]=[],this['load']();});},'template':_0x494219(0x185),'style':'.jt-card{border:1px\x20solid\x20var(--okdb-app-border);border-radius:8px;padding:10px\x2014px;background:var(--okdb-app-surface)}.status-badge{font-size:10px;padding:2px\x208px;border-radius:999px;border:1px\x20solid;font-weight:600;letter-spacing:.04em}.act-btn{font-size:11px;padding:2px\x208px;border-radius:5px;border:1px\x20solid\x20var(--okdb-app-border);background:0\x200;cursor:pointer;color:var(--okdb-app-fg-muted)}.act-btn:hover{border-color:var(--okdb-app-fg-muted);color:var(--okdb-app-fg)}.act-btn--accent,.act-btn--enqueue{border-color:color-mix(in\x20srgb,var(--okdb-accent)\x2040%,transparent);color:var(--okdb-accent)}.act-btn--danger:hover{border-color:#ef4444;color:#ef4444}.act-btn--enqueue{border-color:color-mix(in\x20srgb,var(--okdb-accent)\x2030%,transparent)}.act-btn--enqueue:hover{border-color:var(--okdb-accent)}'};
1
+ const _0x5c4f4f=_0x2506;function _0x2506(_0x529897,_0x35850b){_0x529897=_0x529897-0x100;const _0x195a27=_0x195a();let _0x250638=_0x195a27[_0x529897];return _0x250638;}(function(_0x37fb46,_0x16904d){const _0x1d2b40=_0x2506,_0x318050=_0x37fb46();while(!![]){try{const _0x47ab82=parseInt(_0x1d2b40(0x12f))/0x1*(parseInt(_0x1d2b40(0x13a))/0x2)+-parseInt(_0x1d2b40(0x121))/0x3+-parseInt(_0x1d2b40(0x136))/0x4+parseInt(_0x1d2b40(0x10f))/0x5+parseInt(_0x1d2b40(0x13b))/0x6*(parseInt(_0x1d2b40(0x13c))/0x7)+parseInt(_0x1d2b40(0x111))/0x8*(-parseInt(_0x1d2b40(0x12a))/0x9)+parseInt(_0x1d2b40(0x103))/0xa*(parseInt(_0x1d2b40(0x11b))/0xb);if(_0x47ab82===_0x16904d)break;else _0x318050['push'](_0x318050['shift']());}catch(_0x50aa6c){_0x318050['push'](_0x318050['shift']());}}}(_0x195a,0x75818));import _0x590a25 from'../../../stores/okdb-store.js';import _0x17016d from'../modals/job-type-modal.ok.js';import _0x43418f from'../modals/enqueue-job-modal.ok.js';const n={'active':_0x5c4f4f(0x133),'paused':_0x5c4f4f(0x10c),'draining':'Draining'},a={'active':_0x5c4f4f(0x124),'paused':_0x5c4f4f(0x131),'draining':_0x5c4f4f(0x11f)};function _0x195a(){const _0x470aac=['pri:','3489568qkWkks','json','Failed\x20to\x20remove\x20job\x20type','status','$watch','ttl','Register\x20Job\x20Type','tries:','result','busy','11JQDusj','confirm','failed','Remove\x20job\x20type\x20\x22','color-mix(in\x20srgb,\x20#3b82f6\x2080%,\x20transparent)','Failed\x20to\x20load','829398CFQWFo','delay:','priority','color-mix(in\x20srgb,\x20#22c55e\x2080%,\x20transparent)','max_tries','join','Enqueue\x20Job','\x22?\x20Existing\x20jobs\x20are\x20unaffected.','bucketOptions','9eDxDxo','<job-type-modal\x20:modal=\x22modal\x22\x20:job-type=\x22jobType\x22\x20:bucket-options=\x22bucketOptions\x22\x20:on-done=\x22onDone\x22\x20/>','message','$ok','max_concurrency','69NbVRuY','queue-job-types','color-mix(in\x20srgb,\x20#f59e0b\x2080%,\x20transparent)','/queue/buckets','Active','/queue/job-type/','retry_delay','607656vxyQCJ','types','Job\x20enqueued','modal','8898cvvZnA','86676aheVuy','413ZYTfoL','shared','ttl:','selectedEnv','load','open','<enqueue-job-modal\x20:modal=\x22modal\x22\x20:initial-type=\x22initialType\x22\x20:on-done=\x22onDone\x22\x20/>','\x20job\x20type','data','catch','829060EatfAk','concurrency:','\x20\x20·\x20\x20','all','error','queue-job-types\x20load\x20error','.jt-card{border:1px\x20solid\x20var(--okdb-app-border);border-radius:8px;padding:10px\x2014px;background:var(--okdb-app-surface)}.status-badge{font-size:10px;padding:2px\x208px;border-radius:999px;border:1px\x20solid;font-weight:600;letter-spacing:.04em}.act-btn{font-size:11px;padding:2px\x208px;border-radius:5px;border:1px\x20solid\x20var(--okdb-app-border);background:0\x200;cursor:pointer;color:var(--okdb-app-fg-muted)}.act-btn:hover{border-color:var(--okdb-app-fg-muted);color:var(--okdb-app-fg)}.act-btn--accent,.act-btn--enqueue{border-color:color-mix(in\x20srgb,var(--okdb-accent)\x2040%,transparent);color:var(--okdb-accent)}.act-btn--danger:hover{border-color:#ef4444;color:#ef4444}.act-btn--enqueue{border-color:color-mix(in\x20srgb,var(--okdb-accent)\x2030%,transparent)}.act-btn--enqueue:hover{border-color:var(--okdb-accent)}','push','apiBase','Paused','/queue/job-types','toast','518395RTtzGF'];_0x195a=function(){return _0x470aac;};return _0x195a();}export default{'tag':_0x5c4f4f(0x130),'dependencies':[_0x17016d,_0x43418f],'context':_0x454250=>({'busy':!0x1,'loadError':null,'types':[],'bucketOptions':[],async 'load'(){const _0x2be54d=_0x5c4f4f;this[_0x2be54d(0x11a)]=!0x0,this['loadError']=null;try{const [_0x2045fd,_0x79c3ca]=await Promise[_0x2be54d(0x106)]([fetch(_0x590a25[_0x2be54d(0x10b)]+_0x2be54d(0x10d)),fetch(_0x590a25[_0x2be54d(0x10b)]+_0x2be54d(0x132))[_0x2be54d(0x102)](()=>null)]);if(!_0x2045fd['ok']){const _0x462fbb=await _0x2045fd[_0x2be54d(0x112)]()[_0x2be54d(0x102)](()=>({}));throw new Error(_0x462fbb?.[_0x2be54d(0x107)]?.[_0x2be54d(0x12c)]??_0x462fbb?.['message']??'HTTP\x20'+_0x2045fd[_0x2be54d(0x114)]);}const _0x147ab7=await _0x2045fd[_0x2be54d(0x112)]();this[_0x2be54d(0x137)]=_0x147ab7?.[_0x2be54d(0x119)]??_0x147ab7?.[_0x2be54d(0x101)]??[];const _0x54c935=_0x79c3ca?.['ok']?await _0x79c3ca[_0x2be54d(0x112)]()[_0x2be54d(0x102)](()=>({})):{};this[_0x2be54d(0x129)]=_0x54c935?.['result']??_0x54c935?.['data']??[];}catch(_0x350268){console[_0x2be54d(0x107)](_0x2be54d(0x108),_0x350268),this['loadError']=_0x350268[_0x2be54d(0x12c)]||_0x2be54d(0x120),this[_0x2be54d(0x137)]=[];}finally{this[_0x2be54d(0x11a)]=!0x1;}},'statusLabel':_0x4b3bcb=>n[_0x4b3bcb]??_0x4b3bcb,'statusColor':_0x2fc61d=>a[_0x2fc61d]??'var(--okdb-app-fg-muted)','formatDefaults'(_0x420ea0){const _0x28938b=_0x5c4f4f,_0x174d84=_0x420ea0['defaults']??{},_0x5f4cb0=[];return null!=_0x174d84[_0x28938b(0x125)]&&_0x5f4cb0[_0x28938b(0x10a)](_0x28938b(0x118)+_0x174d84[_0x28938b(0x125)]),null!=_0x174d84[_0x28938b(0x135)]&&_0x5f4cb0[_0x28938b(0x10a)](_0x28938b(0x122)+_0x174d84[_0x28938b(0x135)]+'ms'),null!=_0x174d84[_0x28938b(0x123)]&&_0x5f4cb0[_0x28938b(0x10a)](_0x28938b(0x110)+_0x174d84[_0x28938b(0x123)]),null!=_0x174d84['ttl']&&_0x5f4cb0[_0x28938b(0x10a)](_0x28938b(0x13e)+_0x174d84[_0x28938b(0x116)]+'ms'),null!=_0x420ea0[_0x28938b(0x12e)]&&_0x5f4cb0['push'](_0x28938b(0x104)+_0x420ea0['max_concurrency']),_0x5f4cb0[_0x28938b(0x126)](_0x28938b(0x105))||'—';},'openCreate'(){const _0x4c5c8d=_0x5c4f4f,_0x307132=this;_0x454250['$ok'][_0x4c5c8d(0x13d)][_0x4c5c8d(0x139)][_0x4c5c8d(0x141)]({'owner':_0x454250,'title':_0x4c5c8d(0x117),'content':'<job-type-modal\x20:modal=\x22modal\x22\x20:job-type=\x22null\x22\x20:bucket-options=\x22bucketOptions\x22\x20:on-done=\x22onDone\x22\x20/>','context':_0x246b49=>({'modal':_0x246b49,'bucketOptions':_0x307132[_0x4c5c8d(0x129)],'onDone':()=>_0x307132[_0x4c5c8d(0x140)]()})});},'openEdit'(_0x5154a6){const _0x5723a5=_0x5c4f4f;_0x454250[_0x5723a5(0x12d)][_0x5723a5(0x13d)][_0x5723a5(0x139)][_0x5723a5(0x141)]({'owner':_0x454250,'title':'Edit:\x20'+_0x5154a6['id'],'content':_0x5723a5(0x12b),'context':_0x2d78ea=>({'modal':_0x2d78ea,'jobType':_0x5154a6,'bucketOptions':this['bucketOptions'],'onDone':()=>this[_0x5723a5(0x140)]()})});},async 'setStatus'(_0x1c9578,_0x22e5ef){const _0x23a886=_0x5c4f4f;try{if(!(await fetch(_0x590a25['apiBase']+_0x23a886(0x134)+encodeURIComponent(_0x1c9578['id'])+'/'+_0x22e5ef,{'method':'POST'}))['ok'])throw new Error(_0x23a886(0x11d));await this[_0x23a886(0x140)]();}catch{_0x454250[_0x23a886(0x12d)][_0x23a886(0x13d)]?.[_0x23a886(0x10e)]?.['error']?.('Failed\x20to\x20'+_0x22e5ef+_0x23a886(0x100));}},'openEnqueue'(_0x9daa68){const _0x4f3243=_0x5c4f4f;_0x454250[_0x4f3243(0x12d)][_0x4f3243(0x13d)]['modal'][_0x4f3243(0x141)]({'owner':_0x454250,'title':_0x4f3243(0x127),'content':_0x4f3243(0x142),'context':_0x593732=>({'modal':_0x593732,'initialType':_0x9daa68['id'],'onDone':()=>_0x454250['$ok'][_0x4f3243(0x13d)]?.[_0x4f3243(0x10e)]?.['success']?.(_0x4f3243(0x138))})});},async 'remove'(_0xdfe6e5){const _0x4b7990=_0x5c4f4f;if(await _0x454250[_0x4b7990(0x12d)][_0x4b7990(0x13d)]['modal'][_0x4b7990(0x11c)](_0x4b7990(0x11e)+_0xdfe6e5['id']+_0x4b7990(0x128)))try{if(!(await fetch(_0x590a25[_0x4b7990(0x10b)]+_0x4b7990(0x134)+encodeURIComponent(_0xdfe6e5['id']),{'method':'DELETE'}))['ok'])throw new Error(_0x4b7990(0x11d));await this['load']();}catch{_0x454250[_0x4b7990(0x12d)][_0x4b7990(0x13d)]?.['toast']?.[_0x4b7990(0x107)]?.(_0x4b7990(0x113));}}}),async 'mount'(_0x1726d5){const _0x193261=_0x5c4f4f;await this['load'](),_0x1726d5[_0x193261(0x115)](()=>_0x590a25[_0x193261(0x13f)],()=>{const _0x5b60c9=_0x193261;this[_0x5b60c9(0x137)]=[],this[_0x5b60c9(0x140)]();});},'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:16px;\x20padding:16px\x200;\x22>\x0a\x0a\x20\x20<!--\x20header\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22font-size:14px;\x20font-weight:600;\x20flex:1;\x22>Registered\x20Job\x20Types</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.6;\x20font-size:11px;\x20padding:2px\x208px;\x22>↻</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22openCreate()\x22\x20style=\x22font-size:12px;\x20padding:4px\x2012px;\x22>+\x20Register\x20type</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20error\x20state\x20-->\x0a\x20\x20<if\x20:=\x22loadError\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22color:#ef4444;\x20font-size:12px;\x20padding:8px\x2012px;\x20border:1px\x20solid\x20#ef4444;\x20border-radius:6px;\x20background:color-mix(in\x20srgb,\x20#ef4444\x208%,\x20transparent);\x22>\x0a\x20\x20\x20\x20\x20\x20Failed\x20to\x20load\x20job\x20types:\x20{{\x20loadError\x20}}\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20empty\x20state\x20-->\x0a\x20\x20<if\x20:=\x22!busy\x20&&\x20!loadError\x20&&\x20types.length\x20===\x200\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22opacity:.45;\x20font-size:13px;\x20line-height:1.8;\x20padding:32px\x200;\x20text-align:center;\x22>\x0a\x20\x20\x20\x20\x20\x20No\x20registered\x20job\x20types.<br>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:12px;\x22>Register\x20a\x20type\x20to\x20set\x20defaults,\x20control\x20concurrency,\x20and\x20pause/resume\x20claiming.</span>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</if>\x0a\x0a\x20\x20<!--\x20types\x20list\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20<each\x20:of=\x22types\x22\x20let:item=\x22jt\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22jt-card\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:10px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:13px;\x20font-weight:600;\x20flex:1;\x20min-width:0;\x20overflow:hidden;\x20text-overflow:ellipsis;\x20white-space:nowrap;\x22>{{\x20jt.id\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-badge\x22\x20:style=\x22\x27border-color:\x27\x20+\x20statusColor(jt.status)\x20+\x20\x27;\x20color:\x27\x20+\x20statusColor(jt.status)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20statusLabel(jt.status)\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.payload_schema\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-badge\x22\x20style=\x22border-color:var(--okdb-accent);\x20color:var(--okdb-accent);\x22>schema</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.payload_schema.enforce\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-badge\x22\x20style=\x22border-color:#ef4444;\x20color:#ef4444;\x22>enforced</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<!--\x20lifecycle\x20actions\x20-->\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.status\x20!==\x20\x27paused\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x22\x20@click=\x22setStatus(jt,\x20\x27pause\x27)\x22\x20title=\x22Pause\x20—\x20stop\x20workers\x20from\x20claiming\x20new\x20jobs\x22>⏸\x20Pause</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.status\x20===\x20\x27paused\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x20act-btn--accent\x22\x20@click=\x22setStatus(jt,\x20\x27resume\x27)\x22\x20title=\x22Resume\x20normal\x20claiming\x22>▶\x20Resume</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.status\x20!==\x20\x27draining\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x22\x20@click=\x22setStatus(jt,\x20\x27drain\x27)\x22\x20title=\x22Drain\x20—\x20stop\x20new\x20enqueues,\x20let\x20queue\x20empty\x22>⬇\x20Drain</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jt.status\x20===\x20\x27draining\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x20act-btn--accent\x22\x20@click=\x22setStatus(jt,\x20\x27resume\x27)\x22>▶\x20Resume</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x20act-btn--enqueue\x22\x20@click=\x22openEnqueue(jt)\x22>+\x20Enqueue</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x22\x20@click=\x22openEdit(jt)\x22>Edit</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22act-btn\x20act-btn--danger\x22\x20@click=\x22remove(jt)\x22>Remove</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-size:11px;\x20opacity:.55;\x20margin-top:4px;\x20font-family:monospace;\x22>{{\x20formatDefaults(jt)\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</each>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','style':_0x5c4f4f(0x109)};
@@ -1 +1 @@
1
- const _0x221c7d=_0x4cba;(function(_0x2b6bc0,_0x58a169){const _0x3f26ae=_0x4cba,_0x4a96b3=_0x2b6bc0();while(!![]){try{const _0x21cf56=-parseInt(_0x3f26ae(0x1fe))/0x1*(parseInt(_0x3f26ae(0x1cb))/0x2)+parseInt(_0x3f26ae(0x1fa))/0x3+-parseInt(_0x3f26ae(0x218))/0x4+-parseInt(_0x3f26ae(0x233))/0x5+-parseInt(_0x3f26ae(0x203))/0x6*(parseInt(_0x3f26ae(0x1db))/0x7)+-parseInt(_0x3f26ae(0x208))/0x8*(parseInt(_0x3f26ae(0x1f5))/0x9)+parseInt(_0x3f26ae(0x1d2))/0xa;if(_0x21cf56===_0x58a169)break;else _0x4a96b3['push'](_0x4a96b3['shift']());}catch(_0x4286af){_0x4a96b3['push'](_0x4a96b3['shift']());}}}(_0x852a,0x875a6));import _0x515a27 from'@toolkit/elements/ok-icon.ok.js';function _0x852a(){const _0x52cf3b=['Clear\x20failed\x20jobs\x20error:\x20','\x20for\x20type\x20\x22<b>','message','function','bulkBusy','hasPrev','byType','in\x20','/queue/clearFailed','splice','pendingUpdates','modal','data','slice','9DmIjAN','POST','var(--okdb-info)','Retried\x20','/queue/reconcile','1566063gpNDUP','status','asc','isArray','31EKqEgl','Delete\x20all\x20\x22failed\x22\x20jobs','abs','sort','apiBase','1434nUzpHL','busy','_applyFilterAndReload','direction','Cancelled\x20','6324176FuPBRd','indexOf','_unsubs','<enqueue-job-modal\x20:modal=\x22modal\x22\x20:initial-type=\x22initialType\x22\x20:on-done=\x22onDone\x22\x20/>','/queue/clearStuck','applyTypeAttr','set','cursor','Cleared\x20','in\x20a\x20moment',';\x20border-color:','all','success','refresh','selectedEnv','Deleted\x20','529800YXBNxE','Cancel\x20failed','loadStats','queue:enqueued','queue-jobs','</b>\x22','when','error','sortMode','\x20stuck\x20jobs','.pill{display:inline-flex;align-items:center;gap:5px;border:1px\x20solid\x20var(--okdb-app-border);background:var(--okdb-app-surface);padding:4px\x2010px;border-radius:999px;font-size:12px;cursor:pointer;color:var(--okdb-app-fg-muted);transition:border-color\x20.12s,color\x20.12s}.pill:hover{border-color:#3b4754;color:var(--okdb-app-fg)}.pill--on{box-shadow:0\x200\x200\x201px\x20rgba(255,255,255,.07)\x20inset}.pill--p.pill--on{color:var(--okdb-warning);border-color:var(--okdb-warning)}.pill--r.pill--on{color:var(--okdb-info);border-color:var(--okdb-info)}.pill--f.pill--on{color:var(--okdb-danger);border-color:var(--okdb-danger)}.pill--d.pill--on{color:var(--okdb-success);border-color:var(--okdb-success)}.pill-count{font-size:11px;opacity:.65;font-variant-numeric:tabular-nums}.status-badge{display:inline-block;padding:2px\x208px;border-radius:999px;font-size:11px;border:1px\x20solid;white-space:nowrap}','s\x20ago','/queue/retryFailed','queue:reconciled','failed','retry\x20failed','\x20failed\x20jobs','Retry\x20job\x20<code>','queue:retry','application/json','values','/cancel','query','open','Bulk\x20retry\x20failed:\x20','_busy','var(--okdb-success)','89250yxJKuP','_statsTimer','round','HTTP\x20','cancel\x20failed','_nextCursor','Clear\x20done\x20failed:\x20','total','Retry\x20failed:\x20','queue:failed','/retry','json','info','toast','/queue/jobs?','Delete\x20job\x20<code>','deleted','Retry\x20all\x20failed\x20jobs','resetPaging','Delete\x20failed','stats','var(--okdb-danger)','$attr','#9ca3af','load','push','queue:removed','?<br><br>This\x20cannot\x20be\x20undone.','items','$watch','Enqueue\x20Job','/queue/stats','stringify','now','length','7626gXkHHb','_cursors','<edit-job-modal\x20:modal=\x22modal\x22\x20:job-id=\x22jobId\x22\x20:on-done=\x22onDone\x22\x20/>','$ok','confirm','</code>?','/queue/clearDone','20170570slWCtZ','result','loadError','type','stores','/remove','$dispatch','_applySort','okdb','27111OAZMYL','hasNext','_liveTimer','d\x20ago','Stats\x20rebuild\x20failed','Clear\x20all\x20\x22done\x22\x20jobs','_pageIdx','var(--okdb-warning)','shared','/queue/job/','h\x20ago','Delete\x20all\x20stuck\x20(expired-claim)\x20running\x20jobs'];_0x852a=function(){return _0x52cf3b;};return _0x852a();}import _0x202ac2 from'@toolkit/elements/ok-table.ok.js';import _0x2f63f6 from'@toolkit/core/ok-overlay.ok.js';import _0x3f61b2 from'../modals/edit-job-modal.ok.js';import _0x4815a1 from'../modals/enqueue-job-modal.ok.js';import _0x5ede24 from'../../../stores/events-store.js';function _0x4cba(_0x415762,_0x57fb44){_0x415762=_0x415762-0x1ac;const _0x852ae3=_0x852a();let _0x4cba4f=_0x852ae3[_0x415762];return _0x4cba4f;}import _0x4ebce8 from'../../../stores/okdb-store.js';export default{'tag':_0x221c7d(0x21c),'dependencies':[_0x515a27,_0x202ac2,_0x2f63f6,_0x4815a1,_0x3f61b2],'attr':{'type':{}},'context':_0x480025=>({'query':function({apiBase:_0x296583,pageSize:_0x1e59f8=0x32}){const _0x348602=_0x221c7d;return{'busy':!0x1,'values':[],'total':0x0,'hasNext':!0x1,'hasPrev':!0x1,'pageSize':_0x1e59f8,'loadError':null,'type':null,'status':null,'sort':_0x348602(0x21e),'direction':_0x348602(0x1fc),'_cursors':[null],'_pageIdx':0x0,'_nextCursor':null,'resetPaging'(){const _0x4e049f=_0x348602;this['_cursors']=[null],this[_0x4e049f(0x1e1)]=0x0,this['_nextCursor']=null,this[_0x4e049f(0x1dc)]=!0x1,this['hasPrev']=!0x1;},async 'load'(){const _0x1b8a45=_0x348602,_0xea4193=_0x1b8a45(0x1ea)==typeof _0x296583?_0x296583():_0x296583,_0x492f98=this[_0x1b8a45(0x1cc)][this[_0x1b8a45(0x1e1)]];this[_0x1b8a45(0x204)]=!0x0,this[_0x1b8a45(0x1d4)]=null;try{const _0x3ea065=new URLSearchParams({'limit':String(this['pageSize']),'sort':this[_0x1b8a45(0x201)]??'when','direction':this[_0x1b8a45(0x206)]??_0x1b8a45(0x1fc)});this['type']&&_0x3ea065[_0x1b8a45(0x20e)]('type',this['type']),this[_0x1b8a45(0x1fb)]&&_0x3ea065[_0x1b8a45(0x20e)](_0x1b8a45(0x1fb),this['status']),null!=_0x492f98&&_0x3ea065[_0x1b8a45(0x20e)]('cursor',JSON[_0x1b8a45(0x1c8)](_0x492f98));const _0x68ec8f=await fetch(_0xea4193+_0x1b8a45(0x1b6)+_0x3ea065),_0x5d72da=await _0x68ec8f[_0x1b8a45(0x1b3)]();if(!_0x68ec8f['ok'])throw new Error(_0x5d72da?.[_0x1b8a45(0x21f)]?.[_0x1b8a45(0x1e9)]||_0x1b8a45(0x236)+_0x68ec8f[_0x1b8a45(0x1fb)]);const _0x4ac5a1=_0x5d72da[_0x1b8a45(0x1d3)]??_0x5d72da[_0x1b8a45(0x1f3)]??_0x5d72da;this['values']=Array[_0x1b8a45(0x1fd)](_0x4ac5a1['items'])?_0x4ac5a1[_0x1b8a45(0x1c4)]:Array[_0x1b8a45(0x1fd)](_0x4ac5a1)?_0x4ac5a1:[],this[_0x1b8a45(0x1ad)]=_0x4ac5a1[_0x1b8a45(0x20f)]??null,this[_0x1b8a45(0x1dc)]=null!=this[_0x1b8a45(0x1ad)],this['hasPrev']=this[_0x1b8a45(0x1e1)]>0x0;}catch(_0x2db14f){this[_0x1b8a45(0x1d4)]=_0x2db14f?.['message']||String(_0x2db14f),this['values']=[];}finally{this[_0x1b8a45(0x204)]=!0x1;}},async 'nextPage'(){const _0x1475d0=_0x348602;this['hasNext']&&!this['busy']&&(this['_pageIdx']+0x1>=this[_0x1475d0(0x1cc)][_0x1475d0(0x1ca)]&&this['_cursors'][_0x1475d0(0x1c1)](this['_nextCursor']),this[_0x1475d0(0x1e1)]++,await this[_0x1475d0(0x1c0)]());},async 'prevPage'(){const _0x44f07f=_0x348602;this[_0x44f07f(0x1ec)]&&!this[_0x44f07f(0x204)]&&(this['_pageIdx']--,await this['load']());}};}({'apiBase':()=>_0x4ebce8[_0x221c7d(0x202)],'pageSize':0x32}),'type':null,'status':null,'sortMode':_0x221c7d(0x21e),'direction':_0x221c7d(0x1fc),'stats':null,'_statsTimer':null,async 'loadStats'(){const _0xb40af=_0x221c7d;try{const _0x30e49d=await fetch(_0x4ebce8[_0xb40af(0x202)]+_0xb40af(0x1c7));if(_0x30e49d['ok']){const _0x572043=await _0x30e49d[_0xb40af(0x1b3)]();this[_0xb40af(0x1bc)]=_0x572043[_0xb40af(0x1d3)]??_0x572043[_0xb40af(0x1f3)]??null;}}catch{}},'_scheduleStats'(){const _0x43700e=_0x221c7d;clearTimeout(this[_0x43700e(0x234)]),this[_0x43700e(0x234)]=setTimeout(()=>this['loadStats'](),0x190);},'statusCount'(_0x16a21f){const _0x52ca16=_0x221c7d;if(!this[_0x52ca16(0x1bc)])return'';const _0x344714=this[_0x52ca16(0x1d5)];return _0x16a21f?_0x344714?this[_0x52ca16(0x1bc)]['byType']?.[_0x344714]?.['byStatus']?.[_0x16a21f]??0x0:this[_0x52ca16(0x1bc)]['byStatus']?.[_0x16a21f]??0x0:_0x344714?this[_0x52ca16(0x1bc)][_0x52ca16(0x1ed)]?.[_0x344714]?.[_0x52ca16(0x1af)]??0x0:this['stats'][_0x52ca16(0x1af)]??0x0;},'applyTypeAttr'(){const _0x8f4e4=_0x221c7d;var _0x5dc6ca;this['type']=null==(_0x5dc6ca=_0x480025[_0x8f4e4(0x1be)]['type'])||''===_0x5dc6ca?null:String(_0x5dc6ca),this[_0x8f4e4(0x205)]();},'setStatus'(_0x4320c8){const _0x598534=_0x221c7d;this[_0x598534(0x1fb)]=null==_0x4320c8||''===_0x4320c8?null:_0x4320c8,this[_0x598534(0x205)]();},'setSort'(_0x28984a){const _0x5475c5=_0x221c7d;this['sortMode']=_0x28984a,this[_0x5475c5(0x1d9)](),this[_0x5475c5(0x22e)]['resetPaging'](),this[_0x5475c5(0x22e)][_0x5475c5(0x1c0)]();},'toggleDirection'(){const _0x4614a5=_0x221c7d;this[_0x4614a5(0x206)]='asc'===this[_0x4614a5(0x206)]?'desc':_0x4614a5(0x1fc),this[_0x4614a5(0x1d9)](),this['query'][_0x4614a5(0x1ba)](),this['query'][_0x4614a5(0x1c0)]();},'_applySort'(){const _0x33250c=_0x221c7d;this[_0x33250c(0x22e)][_0x33250c(0x201)]=this[_0x33250c(0x220)],this[_0x33250c(0x22e)]['direction']=this[_0x33250c(0x206)];},'_applyFilterAndReload'(){const _0xf754b8=_0x221c7d;this[_0xf754b8(0x22e)][_0xf754b8(0x1d5)]=this[_0xf754b8(0x1d5)],this['query']['status']=this[_0xf754b8(0x1fb)],this['_applySort'](),this[_0xf754b8(0x22e)][_0xf754b8(0x1ba)](),this[_0xf754b8(0x22e)][_0xf754b8(0x1c0)]();},async 'refresh'(){const _0x87630f=_0x221c7d;clearTimeout(this[_0x87630f(0x1dd)]),this[_0x87630f(0x1f1)]=0x0;try{await fetch(_0x4ebce8['apiBase']+_0x87630f(0x1f9),{'method':_0x87630f(0x1f6)});}catch{}await this[_0x87630f(0x22e)][_0x87630f(0x1c0)](),await this[_0x87630f(0x21a)](),_0x480025[_0x87630f(0x1d8)](_0x87630f(0x215));},async 'rebuildStats'(){const _0x4adb3f=_0x221c7d;try{await fetch(_0x4ebce8[_0x4adb3f(0x202)]+'/queue/stats/rebuild',{'method':_0x4adb3f(0x1f6)}),_0x480025[_0x4adb3f(0x1ce)][_0x4adb3f(0x1e3)]?.['toast']?.[_0x4adb3f(0x214)]?.('Stats\x20rebuilt'),await this[_0x4adb3f(0x21a)](),_0x480025[_0x4adb3f(0x1d8)](_0x4adb3f(0x215)),await this[_0x4adb3f(0x22e)][_0x4adb3f(0x1c0)]();}catch{_0x480025['$ok'][_0x4adb3f(0x1e3)]?.[_0x4adb3f(0x1b5)]?.[_0x4adb3f(0x21f)]?.(_0x4adb3f(0x1df));}},async 'openEnqueue'(){const _0x1f270b=_0x221c7d,_0x462c39=this;await _0x480025[_0x1f270b(0x1ce)][_0x1f270b(0x1e3)][_0x1f270b(0x1f2)][_0x1f270b(0x22f)]({'owner':_0x480025,'title':_0x1f270b(0x1c6),'content':_0x1f270b(0x20b),'context':_0x2add1a=>({'modal':_0x2add1a,'initialType':_0x462c39[_0x1f270b(0x1d5)]||'','onDone':async()=>{const _0x4099e3=_0x1f270b;_0x480025[_0x4099e3(0x1ce)][_0x4099e3(0x1e3)]?.[_0x4099e3(0x1b5)]?.['success']?.('Job\x20enqueued'),await _0x462c39[_0x4099e3(0x215)]();}})});},async 'openEditJob'(_0x5739cd){const _0x5eb0ea=_0x221c7d,_0x449b12=this;await _0x480025['$ok'][_0x5eb0ea(0x1e3)]['modal']['open']({'owner':_0x480025,'title':'Edit\x20Job\x20'+_0x5739cd['id']['slice'](0x0,0x8),'content':_0x5eb0ea(0x1cd),'context':_0x3852bf=>({'modal':_0x3852bf,'jobId':_0x5739cd['id'],'onDone':async()=>{const _0x51be1c=_0x5eb0ea;await _0x449b12[_0x51be1c(0x215)]();}})});},async 'deleteJob'(_0x2f3f6b){const _0x49a5a9=_0x221c7d;if(await _0x480025[_0x49a5a9(0x1ce)]['shared']['modal'][_0x49a5a9(0x1cf)](_0x49a5a9(0x1b7)+_0x2f3f6b['id'][_0x49a5a9(0x1f4)](0x0,0x8)+_0x49a5a9(0x1d0))){_0x2f3f6b[_0x49a5a9(0x231)]=!0x0;try{if(!(await fetch(_0x4ebce8[_0x49a5a9(0x202)]+'/queue/job/'+_0x2f3f6b['id']+_0x49a5a9(0x1d7),{'method':_0x49a5a9(0x1f6)}))['ok'])throw new Error('remove\x20failed');const _0x55db62=this[_0x49a5a9(0x22e)][_0x49a5a9(0x22c)][_0x49a5a9(0x209)](_0x2f3f6b);_0x55db62>=0x0&&this['query'][_0x49a5a9(0x22c)][_0x49a5a9(0x1f0)](_0x55db62,0x1),_0x480025[_0x49a5a9(0x1ce)][_0x49a5a9(0x1e3)][_0x49a5a9(0x1b5)]?.[_0x49a5a9(0x1b4)](_0x49a5a9(0x217)+_0x2f3f6b['id']['slice'](0x0,0x8)),_0x480025['$dispatch'](_0x49a5a9(0x215)),this['_scheduleStats']();}catch{_0x480025[_0x49a5a9(0x1ce)]['shared'][_0x49a5a9(0x1b5)]?.[_0x49a5a9(0x21f)](_0x49a5a9(0x1bb));}finally{_0x2f3f6b['_busy']=!0x1;}}},async 'cancelJob'(_0x49c2a3){const _0x1465e2=_0x221c7d;if(await _0x480025['$ok']['shared'][_0x1465e2(0x1f2)][_0x1465e2(0x1cf)]('Cancel\x20job\x20<code>'+_0x49c2a3['id']['slice'](0x0,0x8)+_0x1465e2(0x1d0))){_0x49c2a3[_0x1465e2(0x231)]=!0x0;try{if(!(await fetch(_0x4ebce8[_0x1465e2(0x202)]+'/queue/job/'+_0x49c2a3['id']+_0x1465e2(0x22d),{'method':'POST'}))['ok'])throw new Error(_0x1465e2(0x1ac));_0x480025[_0x1465e2(0x1ce)]['shared'][_0x1465e2(0x1b5)]?.['info'](_0x1465e2(0x207)+_0x49c2a3['id']['slice'](0x0,0x8)),await this[_0x1465e2(0x215)]();}catch{_0x480025[_0x1465e2(0x1ce)]['shared'][_0x1465e2(0x1b5)]?.[_0x1465e2(0x21f)](_0x1465e2(0x219));}finally{_0x49c2a3[_0x1465e2(0x231)]=!0x1;}}},async 'retryJob'(_0x34bc47){const _0x4c4f66=_0x221c7d;if(await _0x480025['$ok']['shared'][_0x4c4f66(0x1f2)][_0x4c4f66(0x1cf)](_0x4c4f66(0x229)+_0x34bc47['id'][_0x4c4f66(0x1f4)](0x0,0x8)+_0x4c4f66(0x1d0))){_0x34bc47['_busy']=!0x0;try{const _0x2ec6e4=await fetch(_0x4ebce8['apiBase']+_0x4c4f66(0x1e4)+_0x34bc47['id']+_0x4c4f66(0x1b2),{'method':_0x4c4f66(0x1f6)}),_0x21c291=await _0x2ec6e4['json']();if(!_0x2ec6e4['ok'])throw new Error(_0x21c291?.[_0x4c4f66(0x21f)]?.['message']||_0x4c4f66(0x227));_0x480025['$ok']['shared'][_0x4c4f66(0x1b5)]?.[_0x4c4f66(0x214)]('Retried\x20'+_0x34bc47['id'][_0x4c4f66(0x1f4)](0x0,0x8)),await this[_0x4c4f66(0x215)]();}catch(_0x484683){_0x480025[_0x4c4f66(0x1ce)]['shared'][_0x4c4f66(0x1b5)]?.['error'](_0x4c4f66(0x1b0)+(_0x484683?.[_0x4c4f66(0x1e9)]||_0x484683));}finally{_0x34bc47[_0x4c4f66(0x231)]=!0x1;}}},'bulkBusy':!0x1,async 'retryAllFailed'(){const _0x1e0fc1=_0x221c7d;if(await _0x480025[_0x1e0fc1(0x1ce)][_0x1e0fc1(0x1e3)]['modal'][_0x1e0fc1(0x1cf)](_0x1e0fc1(0x1b9)+(this[_0x1e0fc1(0x1d5)]?_0x1e0fc1(0x1e8)+this[_0x1e0fc1(0x1d5)]+_0x1e0fc1(0x21d):'')+'?')){this[_0x1e0fc1(0x1eb)]=!0x0;try{const _0x4a4fef={'limit':0x1388};this['type']&&(_0x4a4fef['type']=this[_0x1e0fc1(0x1d5)]);const _0x8572b=await fetch(_0x4ebce8[_0x1e0fc1(0x202)]+_0x1e0fc1(0x224),{'method':_0x1e0fc1(0x1f6),'headers':{'Content-Type':'application/json'},'body':JSON['stringify'](_0x4a4fef)}),_0x36166e=await _0x8572b[_0x1e0fc1(0x1b3)]();if(!_0x8572b['ok'])throw new Error(_0x36166e?.[_0x1e0fc1(0x21f)]?.[_0x1e0fc1(0x1e9)]||_0x1e0fc1(0x226));_0x480025[_0x1e0fc1(0x1ce)][_0x1e0fc1(0x1e3)]?.[_0x1e0fc1(0x1b5)]?.[_0x1e0fc1(0x214)]?.(_0x1e0fc1(0x1f8)+_0x36166e['data']['retried']+_0x1e0fc1(0x228)),await this['refresh']();}catch(_0x10c5bc){_0x480025[_0x1e0fc1(0x1ce)][_0x1e0fc1(0x1e3)]?.['toast']?.[_0x1e0fc1(0x21f)]?.(_0x1e0fc1(0x230)+(_0x10c5bc?.['message']||_0x10c5bc));}finally{this['bulkBusy']=!0x1;}}},async 'deleteAllDone'(){const _0x585919=_0x221c7d;if(await _0x480025[_0x585919(0x1ce)]['shared']['modal']['confirm'](_0x585919(0x1e0)+(this['type']?'\x20for\x20type\x20\x22<b>'+this[_0x585919(0x1d5)]+_0x585919(0x21d):'')+'?<br><br>This\x20cannot\x20be\x20undone.')){this[_0x585919(0x1eb)]=!0x0;try{const _0x13f1f7={'limit':0xc350};this[_0x585919(0x1d5)]&&(_0x13f1f7[_0x585919(0x1d5)]=this[_0x585919(0x1d5)]);const _0x2001c8=await fetch(_0x4ebce8[_0x585919(0x202)]+_0x585919(0x1d1),{'method':_0x585919(0x1f6),'headers':{'Content-Type':_0x585919(0x22b)},'body':JSON[_0x585919(0x1c8)](_0x13f1f7)}),_0x477ceb=await _0x2001c8[_0x585919(0x1b3)]();if(!_0x2001c8['ok'])throw new Error(_0x477ceb?.[_0x585919(0x21f)]?.['message']||'failed');_0x480025[_0x585919(0x1ce)][_0x585919(0x1e3)]?.['toast']?.[_0x585919(0x1b4)]?.(_0x585919(0x210)+_0x477ceb[_0x585919(0x1f3)][_0x585919(0x1b8)]+'\x20done\x20jobs'),await this[_0x585919(0x215)]();}catch(_0x240c75){_0x480025['$ok']['shared']?.[_0x585919(0x1b5)]?.['error']?.(_0x585919(0x1ae)+(_0x240c75?.['message']||_0x240c75));}finally{this['bulkBusy']=!0x1;}}},async 'deleteAllFailed'(){const _0x323ee8=_0x221c7d;if(await _0x480025[_0x323ee8(0x1ce)]['shared'][_0x323ee8(0x1f2)][_0x323ee8(0x1cf)](_0x323ee8(0x1ff)+(this[_0x323ee8(0x1d5)]?'\x20for\x20type\x20\x22<b>'+this['type']+_0x323ee8(0x21d):'')+_0x323ee8(0x1c3))){this[_0x323ee8(0x1eb)]=!0x0;try{const _0x1718c5={'limit':0xc350};this[_0x323ee8(0x1d5)]&&(_0x1718c5[_0x323ee8(0x1d5)]=this[_0x323ee8(0x1d5)]);const _0x19a26d=await fetch(_0x4ebce8['apiBase']+_0x323ee8(0x1ef),{'method':_0x323ee8(0x1f6),'headers':{'Content-Type':_0x323ee8(0x22b)},'body':JSON[_0x323ee8(0x1c8)](_0x1718c5)}),_0x48477e=await _0x19a26d[_0x323ee8(0x1b3)]();if(!_0x19a26d['ok'])throw new Error(_0x48477e?.[_0x323ee8(0x21f)]?.[_0x323ee8(0x1e9)]||_0x323ee8(0x226));_0x480025[_0x323ee8(0x1ce)][_0x323ee8(0x1e3)]?.[_0x323ee8(0x1b5)]?.[_0x323ee8(0x1b4)]?.(_0x323ee8(0x210)+_0x48477e[_0x323ee8(0x1f3)]['deleted']+_0x323ee8(0x228)),await this[_0x323ee8(0x215)]();}catch(_0x3413ab){_0x480025['$ok'][_0x323ee8(0x1e3)]?.['toast']?.[_0x323ee8(0x21f)]?.(_0x323ee8(0x1e7)+(_0x3413ab?.['message']||_0x3413ab));}finally{this[_0x323ee8(0x1eb)]=!0x1;}}},async 'clearStuck'(){const _0xd714ce=_0x221c7d;if(await _0x480025[_0xd714ce(0x1ce)][_0xd714ce(0x1e3)]['modal'][_0xd714ce(0x1cf)](_0xd714ce(0x1e6)+(this[_0xd714ce(0x1d5)]?_0xd714ce(0x1e8)+this[_0xd714ce(0x1d5)]+_0xd714ce(0x21d):'')+'?<br><br>Stuck\x20jobs\x20are\x20running\x20jobs\x20whose\x20TTL\x20has\x20expired.\x20They\x20will\x20be\x20permanently\x20deleted,\x20not\x20re-queued.')){this[_0xd714ce(0x1eb)]=!0x0;try{const _0x9f7588={'limit':0xc350};this[_0xd714ce(0x1d5)]&&(_0x9f7588[_0xd714ce(0x1d5)]=this[_0xd714ce(0x1d5)]);const _0x44ddd2=await fetch(_0x4ebce8[_0xd714ce(0x202)]+_0xd714ce(0x20c),{'method':_0xd714ce(0x1f6),'headers':{'Content-Type':_0xd714ce(0x22b)},'body':JSON[_0xd714ce(0x1c8)](_0x9f7588)}),_0x3e3a24=await _0x44ddd2['json']();if(!_0x44ddd2['ok'])throw new Error(_0x3e3a24?.[_0xd714ce(0x21f)]?.['message']||_0xd714ce(0x226));_0x480025['$ok']['shared']?.[_0xd714ce(0x1b5)]?.[_0xd714ce(0x1b4)]?.('Cleared\x20'+_0x3e3a24['data'][_0xd714ce(0x1b8)]+_0xd714ce(0x221)),await this[_0xd714ce(0x215)]();}catch(_0x4be654){_0x480025[_0xd714ce(0x1ce)]['shared']?.[_0xd714ce(0x1b5)]?.[_0xd714ce(0x21f)]?.('Clear\x20stuck\x20failed:\x20'+(_0x4be654?.[_0xd714ce(0x1e9)]||_0x4be654));}finally{this['bulkBusy']=!0x1;}}},'isStatusOn'(_0x3a6dc2){const _0x2ac0a7=_0x221c7d;return(this[_0x2ac0a7(0x1fb)]??null)===(_0x3a6dc2??null);},'statusBadgeStyle'(_0x2600e4){const _0x1f1399=_0x221c7d,_0x26ad09={'pending':_0x1f1399(0x1e2),'running':_0x1f1399(0x1f7),'done':_0x1f1399(0x232),'failed':_0x1f1399(0x1bd)}[_0x2600e4]||_0x1f1399(0x1bf);return'color:'+_0x26ad09+_0x1f1399(0x212)+_0x26ad09+';';},'formatWhen'(_0x1c2252){const _0x42a97d=_0x221c7d;if(!_0x1c2252)return'—';const _0x3f4f65=_0x1c2252-Date[_0x42a97d(0x1c9)](),_0xf9f829=Math[_0x42a97d(0x200)](_0x3f4f65),_0x813632=Math['round'](_0xf9f829/0x3e8);if(_0x813632<0x5)return _0x3f4f65<=0x0?'now':_0x42a97d(0x211);if(_0x813632<0x3c)return _0x3f4f65<0x0?_0x813632+_0x42a97d(0x223):_0x42a97d(0x1ee)+_0x813632+'s';const _0x2f430c=Math['round'](_0x813632/0x3c);if(_0x2f430c<0x3c)return _0x3f4f65<0x0?_0x2f430c+'m\x20ago':'in\x20'+_0x2f430c+'m';const _0x5a588c=Math[_0x42a97d(0x235)](_0x2f430c/0x3c);if(_0x5a588c<0x18)return _0x3f4f65<0x0?_0x5a588c+_0x42a97d(0x1e5):_0x42a97d(0x1ee)+_0x5a588c+'h';const _0x4507ed=Math['round'](_0x5a588c/0x18);return _0x3f4f65<0x0?_0x4507ed+_0x42a97d(0x1de):_0x42a97d(0x1ee)+_0x4507ed+'d';},'shortId':_0x1e3040=>(_0x1e3040||'')['slice'](0x0,0x8),'_unsubs':[],'_liveTimer':null,'pendingUpdates':0x0,'_scheduleLiveReload'(){const _0x7bf9d8=_0x221c7d;this[_0x7bf9d8(0x1f1)]++,clearTimeout(this[_0x7bf9d8(0x1dd)]),this[_0x7bf9d8(0x1dd)]=setTimeout(async()=>{const _0x382694=_0x7bf9d8;await this[_0x382694(0x22e)][_0x382694(0x1c0)](),await this[_0x382694(0x21a)](),_0x480025[_0x382694(0x1d8)](_0x382694(0x215)),this[_0x382694(0x1f1)]=0x0;},0xbb8);}}),async 'init'(_0x52837f){const _0x3df35e=_0x221c7d;this[_0x3df35e(0x20d)](),_0x52837f[_0x3df35e(0x1c5)](()=>_0x52837f[_0x3df35e(0x1be)][_0x3df35e(0x1d5)],()=>this[_0x3df35e(0x20d)]()),_0x52837f[_0x3df35e(0x1c5)](()=>_0x52837f[_0x3df35e(0x1ce)][_0x3df35e(0x1d6)][_0x3df35e(0x1da)][_0x3df35e(0x216)],()=>{const _0x1f9775=_0x3df35e;this[_0x1f9775(0x1bc)]=null,this[_0x1f9775(0x22e)][_0x1f9775(0x1ba)](),Promise[_0x1f9775(0x213)]([this[_0x1f9775(0x22e)][_0x1f9775(0x1c0)](),this[_0x1f9775(0x21a)]()]);}),await Promise[_0x3df35e(0x213)]([this[_0x3df35e(0x22e)]['load'](),this[_0x3df35e(0x21a)]()]);},'mount'(){const _0x199967=_0x221c7d,_0x3c37c4=()=>this['_scheduleLiveReload']();this['_unsubs']=[_0x5ede24['on'](_0x199967(0x21b),_0x3c37c4),_0x5ede24['on']('queue:done',_0x3c37c4),_0x5ede24['on'](_0x199967(0x1b1),_0x3c37c4),_0x5ede24['on'](_0x199967(0x22a),_0x3c37c4),_0x5ede24['on'](_0x199967(0x1c2),_0x3c37c4),_0x5ede24['on'](_0x199967(0x225),_0x3c37c4)];},'unmount'(){const _0x4de986=_0x221c7d;clearTimeout(this['_liveTimer']),clearTimeout(this[_0x4de986(0x234)]);for(const _0x1ffb3b of this[_0x4de986(0x20a)])_0x1ffb3b();this[_0x4de986(0x20a)]=[];},'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20height:100%;\x20min-height:0;\x20gap:10px;\x22>\x0a\x0a\x20\x20<!--\x20──\x20Row\x201:\x20Status\x20filters\x20+\x20Enqueue\x20──\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(null)\x22\x20\x20\x20\x20\x20\x20:class=\x22isStatusOn(null)\x20\x20\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x27\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27pill\x27\x22>All<span\x20class=\x22pill-count\x22>{{\x20statusCount(null)\x20}}</span></button>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(\x27pending\x27)\x22\x20:class=\x22isStatusOn(\x27pending\x27)\x20?\x20\x27pill\x20pill--on\x20pill--p\x27\x20\x20\x20:\x20\x27pill\x20pill--p\x27\x22>Pending<span\x20class=\x22pill-count\x22>{{\x20statusCount(\x27pending\x27)\x20}}</span></button>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(\x27running\x27)\x22\x20:class=\x22isStatusOn(\x27running\x27)\x20?\x20\x27pill\x20pill--on\x20pill--r\x27\x20\x20\x20:\x20\x27pill\x20pill--r\x27\x22>Running<span\x20class=\x22pill-count\x22>{{\x20statusCount(\x27running\x27)\x20}}</span></button>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(\x27failed\x27)\x22\x20\x20:class=\x22isStatusOn(\x27failed\x27)\x20\x20?\x20\x27pill\x20pill--on\x20pill--f\x27\x20\x20\x20:\x20\x27pill\x20pill--f\x27\x22>Failed<span\x20\x20class=\x22pill-count\x22>{{\x20statusCount(\x27failed\x27)\x20}}</span></button>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(\x27done\x27)\x22\x20\x20\x20\x20:class=\x22isStatusOn(\x27done\x27)\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x20pill--d\x27\x20\x20\x20:\x20\x27pill\x20pill--d\x27\x22>Done<span\x20\x20\x20\x20class=\x22pill-count\x22>{{\x20statusCount(\x27done\x27)\x20}}</span></button>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x22></div>\x0a\x0a\x20\x20\x20\x20<select\x20@change=\x22setSort($el.value)\x22\x20:value=\x22sortMode\x22\x20style=\x22font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<option\x20value=\x22when\x22>Sort:\x20When</option>\x0a\x20\x20\x20\x20\x20\x20<option\x20value=\x22priority\x22>Sort:\x20Priority</option>\x0a\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20<button\x20@click=\x22toggleDirection\x22\x20style=\x22font-size:12px;\x20min-width:32px;\x22\x20title=\x22Toggle\x20sort\x20direction\x22>\x0a\x20\x20\x20\x20\x20\x20{{\x20direction\x20===\x20\x27asc\x27\x20?\x20\x27▲\x27\x20:\x20\x27▼\x27\x20}}\x0a\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20<button\x20@click=\x22openEnqueue\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2013%,\x20transparent);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x20font-weight:600;\x20padding:4px\x2014px;\x20font-size:12px;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20+\x20Enqueue\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Row\x202:\x20Bulk\x20actions\x20──\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x20align-items:center;\x20flex-wrap:wrap;\x20padding:5px\x200;\x20border-top:1px\x20solid\x20var(--okdb-app-surface-2);\x20border-bottom:1px\x20solid\x20var(--okdb-app-surface-2);\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22retryAllFailed()\x22\x20:disabled=\x22bulkBusy\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20color:var(--okdb-warning);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-warning)\x2020%,\x20transparent);\x20background:transparent;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Reset\x20all\x20failed\x20jobs\x20back\x20to\x20pending\x22>\x0a\x20\x20\x20\x20\x20\x20↺\x20Retry\x20Failed\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<div\x20style=\x22width:1px;\x20height:16px;\x20background:var(--okdb-app-border);\x22></div>\x0a\x20\x20\x20\x20<button\x20@click=\x22deleteAllDone()\x22\x20:disabled=\x22bulkBusy\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20color:var(--okdb-success);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2020%,\x20transparent);\x20background:transparent;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Delete\x20all\x20done\x20jobs\x20in\x20one\x20index\x20pass\x22>\x0a\x20\x20\x20\x20\x20\x20✕\x20Clear\x20Done\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22deleteAllFailed()\x22\x20:disabled=\x22bulkBusy\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20color:var(--okdb-danger);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20background:transparent;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Permanently\x20delete\x20all\x20failed\x20jobs\x22>\x0a\x20\x20\x20\x20\x20\x20✕\x20Clear\x20Failed\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22clearStuck()\x22\x20:disabled=\x22bulkBusy\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-app-fg-muted)\x2020%,\x20transparent);\x20background:transparent;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Delete\x20running\x20jobs\x20whose\x20claim\x20TTL\x20has\x20expired\x20(permanently,\x20not\x20re-queued)\x22>\x0a\x20\x20\x20\x20\x20\x20✕\x20Clear\x20Stuck\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<div\x20style=\x22width:1px;\x20height:16px;\x20background:var(--okdb-app-border);\x22></div>\x0a\x20\x20\x20\x20<button\x20@click=\x22rebuildStats\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20opacity:.4;\x20background:transparent;\x20border-color:transparent;\x20padding:3px\x208px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Full\x20scan\x20rebuild\x20of\x20stats\x20counters\x22>\x0a\x20\x20\x20\x20\x20\x20Rebuild\x20Stats\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<if\x20:=\x22pendingUpdates\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-warning);\x20opacity:.8;\x20margin-left:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20⟳\x20{{\x20pendingUpdates\x20}}\x20pending\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Table\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20position:relative;\x20flex:1;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20<if\x20:=\x22query.busy\x22>\x0a\x20\x20\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:32px;height:32px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22query.loadError\x20&&\x20!query.busy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20padding:12px\x2014px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2033%,\x20transparent);\x20border-radius:8px;\x20margin-bottom:8px;\x20font-size:13px;\x20display:flex;\x20align-items:center;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x22>{{\x20query.loadError\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22query.load()\x22\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-danger)\x2033%,\x20transparent);\x20padding:3px\x2010px;\x22>Retry</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<ok-table\x20:data=\x22query.values\x22\x20no-scroll\x20style=\x22flex:1;\x20min-height:0;\x20overflow:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20<columns>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x2280px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Status</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-badge\x22\x20:style=\x22statusBadgeStyle(row.status)\x22>{{\x20row.status\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x221fr\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Type\x20+\x20Metadata</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>{{\x20row.type\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:4px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.tags\x20&&\x20row.tags.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:inline-block;\x20font-size:11px;\x20padding:1px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:3px;\x20opacity:.7;\x22>{{\x20row.tags.join(\x27,\x20\x27)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.progress\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:inline-block;\x20font-size:11px;\x20padding:1px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:3px;\x20opacity:.7;\x22>{{\x20row.progress\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.cron\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:inline-block;\x20font-size:11px;\x20padding:1px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:3px;\x20opacity:.7;\x20color:var(--okdb-indigo);\x22>cron:\x20{{\x20row.cron\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.idempotency_key\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:inline-block;\x20font-size:11px;\x20padding:1px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:3px;\x20opacity:.7;\x20color:#34d399;\x22>key:\x20{{\x20row.idempotency_key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22130px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>When</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20formatWhen(row.when)\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x2270px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Tries</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22row.tries\x20>=\x20row.max_tries\x20&&\x20row.max_tries\x20>\x200\x20?\x20\x27color:var(--okdb-danger);\x27\x20:\x20\x27\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20row.tries\x20}}\x20/\x20{{\x20row.max_tries\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22180px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Actions</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openEditJob(row)\x22\x20:disabled=\x22row._busy\x22\x20style=\x22font-size:11px;\x22>Edit</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryJob(row)\x22\x20\x20:disabled=\x22row._busy\x22\x20style=\x22font-size:11px;\x22>Retry</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.status\x20===\x20\x27pending\x27\x20||\x20row.status\x20===\x20\x27running\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22cancelJob(row)\x22\x20:disabled=\x22row._busy\x22\x20style=\x22font-size:11px;\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22deleteJob(row)\x22\x20:disabled=\x22row._busy\x22\x20style=\x22color:#ff6c6b;\x20font-size:11px;\x22>Delete</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20</columns>\x0a\x0a\x20\x20\x20\x20\x20\x20<expanded\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:10px;\x20font-size:12px;\x20display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.error_stack\x20||\x20row.status_message\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.status_message\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22white-space:pre-wrap;\x20opacity:.9;\x20margin-bottom:6px;\x22>{{\x20row.status_message\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.error_stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22white-space:pre-wrap;\x20opacity:.85;\x20max-height:220px;\x20overflow:auto;\x20background:var(--okdb-app-bg-deep);\x20padding:8px;\x20border-radius:4px;\x22>{{\x20row.error_stack\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-wrap:wrap;\x20gap:12px;\x20opacity:.8;\x20font-size:11px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>ID:\x20<b>{{\x20row.id\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Status\x20code:\x20<b>{{\x20row.status_code\x20||\x20\x27—\x27\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Max\x20tries:\x20<b>{{\x20row.max_tries\x20??\x20\x27—\x27\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Retry\x20delay:\x20<b>{{\x20row.retry_delay\x20??\x200\x20}}ms</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Backoff:\x20<b>{{\x20row.backoff_multiplier\x20??\x201\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Priority:\x20<b>{{\x20row.priority\x20??\x200\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:=\x22row.bucket\x22\x20style=\x22display:inline;\x22>Bucket:\x20<b>{{\x20row.bucket\x20||\x20\x27—\x27\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Claim\x20expires:\x20<b>{{\x20formatWhen(row.claim_expires)\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<details\x20style=\x22margin-top:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<summary\x20style=\x22cursor:pointer;\x20opacity:.8;\x20font-size:11px;\x22>Raw\x20job</summary>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22white-space:pre-wrap;\x20opacity:.85;\x20max-height:260px;\x20overflow:auto;\x20margin-top:4px;\x20background:var(--okdb-app-bg-deep);\x20padding:8px;\x20border-radius:4px;\x20font-size:10px;\x22>{{\x20row\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</details>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</expanded>\x0a\x20\x20\x20\x20</ok-table>\x0a\x0a\x20\x20\x20\x20<!--\x20Pagination\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22ok-pager\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22query.prevPage()\x22\x20:disabled=\x22!query.hasPrev\x20||\x20query.busy\x22>‹\x20Prev</button>\x0a\x20\x20\x20\x20\x20\x20<span>{{\x20statusCount(status)\x20}}\x20total\x20·\x20{{\x20query.pageSize\x20}}/page</span>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22query.nextPage()\x22\x20:disabled=\x22!query.hasNext\x20||\x20query.busy\x22>Next\x20›</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','style':_0x221c7d(0x222)};
1
+ const _0x5ee753=_0x71a9;(function(_0x401920,_0x3814ca){const _0x54eed6=_0x71a9,_0x42940a=_0x401920();while(!![]){try{const _0x2567e5=-parseInt(_0x54eed6(0x9e))/0x1*(-parseInt(_0x54eed6(0x10e))/0x2)+parseInt(_0x54eed6(0xeb))/0x3*(-parseInt(_0x54eed6(0xa4))/0x4)+-parseInt(_0x54eed6(0xb4))/0x5*(-parseInt(_0x54eed6(0xe4))/0x6)+-parseInt(_0x54eed6(0x9d))/0x7*(-parseInt(_0x54eed6(0xc8))/0x8)+-parseInt(_0x54eed6(0xbb))/0x9+parseInt(_0x54eed6(0x109))/0xa*(parseInt(_0x54eed6(0xf9))/0xb)+-parseInt(_0x54eed6(0xf8))/0xc*(-parseInt(_0x54eed6(0xc2))/0xd);if(_0x2567e5===_0x3814ca)break;else _0x42940a['push'](_0x42940a['shift']());}catch(_0x314459){_0x42940a['push'](_0x42940a['shift']());}}}(_0x5c98,0x3b0b9));import _0x2d21db from'@toolkit/elements/ok-icon.ok.js';import _0x1d4b79 from'@toolkit/elements/ok-table.ok.js';function _0x5c98(){const _0x36b057=['3400794IZCdOU','stringify','direction','queue:reconciled','splice','POST','Retried\x20','2301nJsbLI','/queue/clearStuck','loadError','_nextCursor',';\x20border-color:','deleted','3485264nyuqnb','json','$ok','h\x20ago','?<br><br>This\x20cannot\x20be\x20undone.','application/json','_cursors','_statsTimer','Stats\x20rebuilt','?<br><br>Stuck\x20jobs\x20are\x20running\x20jobs\x20whose\x20TTL\x20has\x20expired.\x20They\x20will\x20be\x20permanently\x20deleted,\x20not\x20re-queued.','data','retried','/queue/clearFailed','pendingUpdates','_scheduleStats','error','round','_applySort','_busy','Cancel\x20job\x20<code>','/remove','status','\x20failed\x20jobs','queue:removed','/queue/stats/rebuild','\x20done\x20jobs','</b>\x22','\x20for\x20type\x20\x22<b>','18iCHEgo','_scheduleLiveReload','bulkBusy','/queue/stats','modal','/retry','</code>?','9579OjjczK','success','indexOf','toast','hasNext','when','function','queue:enqueued','shared','_applyFilterAndReload','asc','all','selectedEnv','11712hRTyUN','110jZvqPw','Delete\x20failed','Cancelled\x20','Deleted\x20','resetPaging','loadStats','length','_pageIdx','sortMode','var(--okdb-warning)','failed','apiBase','Retry\x20job\x20<code>','/queue/reconcile','type','result','14870XOoOsy','.pill{display:inline-flex;align-items:center;gap:5px;border:1px\x20solid\x20var(--okdb-app-border);background:var(--okdb-app-surface);padding:4px\x2010px;border-radius:999px;font-size:12px;cursor:pointer;color:var(--okdb-app-fg-muted);transition:border-color\x20.12s,color\x20.12s}.pill:hover{border-color:#3b4754;color:var(--okdb-app-fg)}.pill--on{box-shadow:0\x200\x200\x201px\x20rgba(255,255,255,.07)\x20inset}.pill--p.pill--on{color:var(--okdb-warning);border-color:var(--okdb-warning)}.pill--r.pill--on{color:var(--okdb-info);border-color:var(--okdb-info)}.pill--f.pill--on{color:var(--okdb-danger);border-color:var(--okdb-danger)}.pill--d.pill--on{color:var(--okdb-success);border-color:var(--okdb-success)}.pill-count{font-size:11px;opacity:.65;font-variant-numeric:tabular-nums}.status-badge{display:inline-block;padding:2px\x208px;border-radius:999px;font-size:11px;border:1px\x20solid;white-space:nowrap}','m\x20ago','busy','HTTP\x20','4126dVkVOQ','_liveTimer','sort','slice','var(--okdb-info)','retry\x20failed','/queue/job/','load','query','okdb','info','abs','queue:failed','isArray','Job\x20enqueued','Edit\x20Job\x20','byType','remove\x20failed','7EJhOIt','32GKGRkq','/cancel','$attr','values','hasPrev','\x20stuck\x20jobs','296XcrvGE','Cleared\x20','cursor','desc','open','/queue/clearDone','var(--okdb-danger)','stats','$dispatch','items','in\x20','$watch','Enqueue\x20Job','Clear\x20done\x20failed:\x20','total','refresh','277835IIYDFB','set','byStatus','confirm','message','applyTypeAttr','now'];_0x5c98=function(){return _0x36b057;};return _0x5c98();}import _0x24e586 from'@toolkit/core/ok-overlay.ok.js';import _0x172e96 from'../modals/edit-job-modal.ok.js';function _0x71a9(_0x157fd2,_0x270101){_0x157fd2=_0x157fd2-0x93;const _0x5c9823=_0x5c98();let _0x71a9eb=_0x5c9823[_0x157fd2];return _0x71a9eb;}import _0x49ac0e from'../modals/enqueue-job-modal.ok.js';import _0x10b37b from'../../../stores/events-store.js';import _0x581285 from'../../../stores/okdb-store.js';export default{'tag':'queue-jobs','dependencies':[_0x2d21db,_0x1d4b79,_0x24e586,_0x49ac0e,_0x172e96],'attr':{'type':{}},'context':_0x4235d6=>({'query':function({apiBase:_0x2fca95,pageSize:_0xb13b2c=0x32}){const _0x5b6e18=_0x71a9;return{'busy':!0x1,'values':[],'total':0x0,'hasNext':!0x1,'hasPrev':!0x1,'pageSize':_0xb13b2c,'loadError':null,'type':null,'status':null,'sort':_0x5b6e18(0xf0),'direction':_0x5b6e18(0xf5),'_cursors':[null],'_pageIdx':0x0,'_nextCursor':null,'resetPaging'(){const _0x41d192=_0x5b6e18;this[_0x41d192(0xce)]=[null],this[_0x41d192(0x100)]=0x0,this[_0x41d192(0xc5)]=null,this['hasNext']=!0x1,this[_0x41d192(0xa2)]=!0x1;},async 'load'(){const _0x38d380=_0x5b6e18,_0x48dca2=_0x38d380(0xf1)==typeof _0x2fca95?_0x2fca95():_0x2fca95,_0x37b83d=this[_0x38d380(0xce)][this[_0x38d380(0x100)]];this[_0x38d380(0x10c)]=!0x0,this[_0x38d380(0xc4)]=null;try{const _0x3b88f9=new URLSearchParams({'limit':String(this['pageSize']),'sort':this[_0x38d380(0x110)]??_0x38d380(0xf0),'direction':this[_0x38d380(0xbd)]??_0x38d380(0xf5)});this['type']&&_0x3b88f9[_0x38d380(0xb5)](_0x38d380(0x107),this['type']),this[_0x38d380(0xdd)]&&_0x3b88f9[_0x38d380(0xb5)]('status',this[_0x38d380(0xdd)]),null!=_0x37b83d&&_0x3b88f9[_0x38d380(0xb5)](_0x38d380(0xa6),JSON[_0x38d380(0xbc)](_0x37b83d));const _0x595529=await fetch(_0x48dca2+'/queue/jobs?'+_0x3b88f9),_0x352582=await _0x595529['json']();if(!_0x595529['ok'])throw new Error(_0x352582?.[_0x38d380(0xd7)]?.[_0x38d380(0xb8)]||_0x38d380(0x10d)+_0x595529[_0x38d380(0xdd)]);const _0x56be1b=_0x352582[_0x38d380(0x108)]??_0x352582[_0x38d380(0xd2)]??_0x352582;this[_0x38d380(0xa1)]=Array[_0x38d380(0x98)](_0x56be1b[_0x38d380(0xad)])?_0x56be1b[_0x38d380(0xad)]:Array[_0x38d380(0x98)](_0x56be1b)?_0x56be1b:[],this['_nextCursor']=_0x56be1b[_0x38d380(0xa6)]??null,this[_0x38d380(0xef)]=null!=this[_0x38d380(0xc5)],this[_0x38d380(0xa2)]=this[_0x38d380(0x100)]>0x0;}catch(_0x219330){this[_0x38d380(0xc4)]=_0x219330?.[_0x38d380(0xb8)]||String(_0x219330),this[_0x38d380(0xa1)]=[];}finally{this[_0x38d380(0x10c)]=!0x1;}},async 'nextPage'(){const _0x2ca8fb=_0x5b6e18;this[_0x2ca8fb(0xef)]&&!this['busy']&&(this[_0x2ca8fb(0x100)]+0x1>=this[_0x2ca8fb(0xce)][_0x2ca8fb(0xff)]&&this['_cursors']['push'](this[_0x2ca8fb(0xc5)]),this['_pageIdx']++,await this['load']());},async 'prevPage'(){const _0x4d4c5b=_0x5b6e18;this[_0x4d4c5b(0xa2)]&&!this[_0x4d4c5b(0x10c)]&&(this[_0x4d4c5b(0x100)]--,await this[_0x4d4c5b(0x115)]());}};}({'apiBase':()=>_0x581285['apiBase'],'pageSize':0x32}),'type':null,'status':null,'sortMode':_0x5ee753(0xf0),'direction':_0x5ee753(0xf5),'stats':null,'_statsTimer':null,async 'loadStats'(){const _0x3cd6fd=_0x5ee753;try{const _0x293f65=await fetch(_0x581285[_0x3cd6fd(0x104)]+_0x3cd6fd(0xe7));if(_0x293f65['ok']){const _0x5b0aa1=await _0x293f65[_0x3cd6fd(0xc9)]();this[_0x3cd6fd(0xab)]=_0x5b0aa1['result']??_0x5b0aa1['data']??null;}}catch{}},'_scheduleStats'(){const _0x4790bb=_0x5ee753;clearTimeout(this[_0x4790bb(0xcf)]),this['_statsTimer']=setTimeout(()=>this['loadStats'](),0x190);},'statusCount'(_0x1cc08e){const _0x51b91f=_0x5ee753;if(!this['stats'])return'';const _0x30002d=this[_0x51b91f(0x107)];return _0x1cc08e?_0x30002d?this[_0x51b91f(0xab)][_0x51b91f(0x9b)]?.[_0x30002d]?.[_0x51b91f(0xb6)]?.[_0x1cc08e]??0x0:this[_0x51b91f(0xab)]['byStatus']?.[_0x1cc08e]??0x0:_0x30002d?this[_0x51b91f(0xab)][_0x51b91f(0x9b)]?.[_0x30002d]?.['total']??0x0:this[_0x51b91f(0xab)][_0x51b91f(0xb2)]??0x0;},'applyTypeAttr'(){const _0x5bd03e=_0x5ee753;var _0x5c9904;this[_0x5bd03e(0x107)]=null==(_0x5c9904=_0x4235d6[_0x5bd03e(0xa0)]['type'])||''===_0x5c9904?null:String(_0x5c9904),this[_0x5bd03e(0xf4)]();},'setStatus'(_0x54df7b){const _0x2b07e2=_0x5ee753;this[_0x2b07e2(0xdd)]=null==_0x54df7b||''===_0x54df7b?null:_0x54df7b,this[_0x2b07e2(0xf4)]();},'setSort'(_0x511f97){const _0x18d341=_0x5ee753;this[_0x18d341(0x101)]=_0x511f97,this[_0x18d341(0xd9)](),this[_0x18d341(0x93)]['resetPaging'](),this[_0x18d341(0x93)]['load']();},'toggleDirection'(){const _0x8e18dc=_0x5ee753;this[_0x8e18dc(0xbd)]=_0x8e18dc(0xf5)===this[_0x8e18dc(0xbd)]?_0x8e18dc(0xa7):_0x8e18dc(0xf5),this[_0x8e18dc(0xd9)](),this['query'][_0x8e18dc(0xfd)](),this[_0x8e18dc(0x93)]['load']();},'_applySort'(){const _0x6000fd=_0x5ee753;this[_0x6000fd(0x93)]['sort']=this[_0x6000fd(0x101)],this[_0x6000fd(0x93)][_0x6000fd(0xbd)]=this[_0x6000fd(0xbd)];},'_applyFilterAndReload'(){const _0x1d7c7a=_0x5ee753;this[_0x1d7c7a(0x93)][_0x1d7c7a(0x107)]=this['type'],this[_0x1d7c7a(0x93)]['status']=this[_0x1d7c7a(0xdd)],this[_0x1d7c7a(0xd9)](),this['query']['resetPaging'](),this[_0x1d7c7a(0x93)]['load']();},async 'refresh'(){const _0x2f4ca0=_0x5ee753;clearTimeout(this[_0x2f4ca0(0x10f)]),this[_0x2f4ca0(0xd5)]=0x0;try{await fetch(_0x581285[_0x2f4ca0(0x104)]+_0x2f4ca0(0x106),{'method':'POST'});}catch{}await this['query'][_0x2f4ca0(0x115)](),await this[_0x2f4ca0(0xfe)](),_0x4235d6['$dispatch'](_0x2f4ca0(0xb3));},async 'rebuildStats'(){const _0x5207c7=_0x5ee753;try{await fetch(_0x581285[_0x5207c7(0x104)]+_0x5207c7(0xe0),{'method':_0x5207c7(0xc0)}),_0x4235d6['$ok']['shared']?.[_0x5207c7(0xee)]?.[_0x5207c7(0xec)]?.(_0x5207c7(0xd0)),await this['loadStats'](),_0x4235d6[_0x5207c7(0xac)](_0x5207c7(0xb3)),await this[_0x5207c7(0x93)][_0x5207c7(0x115)]();}catch{_0x4235d6[_0x5207c7(0xca)][_0x5207c7(0xf3)]?.[_0x5207c7(0xee)]?.[_0x5207c7(0xd7)]?.('Stats\x20rebuild\x20failed');}},async 'openEnqueue'(){const _0x437c76=_0x5ee753,_0x3dd134=this;await _0x4235d6['$ok'][_0x437c76(0xf3)]['modal'][_0x437c76(0xa8)]({'owner':_0x4235d6,'title':_0x437c76(0xb0),'content':'<enqueue-job-modal\x20:modal=\x22modal\x22\x20:initial-type=\x22initialType\x22\x20:on-done=\x22onDone\x22\x20/>','context':_0x55f1af=>({'modal':_0x55f1af,'initialType':_0x3dd134['type']||'','onDone':async()=>{const _0xbc1060=_0x437c76;_0x4235d6[_0xbc1060(0xca)][_0xbc1060(0xf3)]?.[_0xbc1060(0xee)]?.[_0xbc1060(0xec)]?.(_0xbc1060(0x99)),await _0x3dd134['refresh']();}})});},async 'openEditJob'(_0x260cda){const _0x2b5103=_0x5ee753,_0x3c130c=this;await _0x4235d6[_0x2b5103(0xca)][_0x2b5103(0xf3)][_0x2b5103(0xe8)][_0x2b5103(0xa8)]({'owner':_0x4235d6,'title':_0x2b5103(0x9a)+_0x260cda['id'][_0x2b5103(0x111)](0x0,0x8),'content':'<edit-job-modal\x20:modal=\x22modal\x22\x20:job-id=\x22jobId\x22\x20:on-done=\x22onDone\x22\x20/>','context':_0x43a473=>({'modal':_0x43a473,'jobId':_0x260cda['id'],'onDone':async()=>{await _0x3c130c['refresh']();}})});},async 'deleteJob'(_0x3633ce){const _0x32abd9=_0x5ee753;if(await _0x4235d6[_0x32abd9(0xca)]['shared'][_0x32abd9(0xe8)][_0x32abd9(0xb7)]('Delete\x20job\x20<code>'+_0x3633ce['id'][_0x32abd9(0x111)](0x0,0x8)+_0x32abd9(0xea))){_0x3633ce['_busy']=!0x0;try{if(!(await fetch(_0x581285[_0x32abd9(0x104)]+_0x32abd9(0x114)+_0x3633ce['id']+_0x32abd9(0xdc),{'method':'POST'}))['ok'])throw new Error(_0x32abd9(0x9c));const _0x1a9a9f=this['query'][_0x32abd9(0xa1)][_0x32abd9(0xed)](_0x3633ce);_0x1a9a9f>=0x0&&this[_0x32abd9(0x93)][_0x32abd9(0xa1)][_0x32abd9(0xbf)](_0x1a9a9f,0x1),_0x4235d6[_0x32abd9(0xca)][_0x32abd9(0xf3)][_0x32abd9(0xee)]?.[_0x32abd9(0x95)](_0x32abd9(0xfc)+_0x3633ce['id']['slice'](0x0,0x8)),_0x4235d6[_0x32abd9(0xac)](_0x32abd9(0xb3)),this[_0x32abd9(0xd6)]();}catch{_0x4235d6['$ok'][_0x32abd9(0xf3)][_0x32abd9(0xee)]?.[_0x32abd9(0xd7)](_0x32abd9(0xfa));}finally{_0x3633ce[_0x32abd9(0xda)]=!0x1;}}},async 'cancelJob'(_0x559b1a){const _0xbb21ab=_0x5ee753;if(await _0x4235d6[_0xbb21ab(0xca)][_0xbb21ab(0xf3)]['modal'][_0xbb21ab(0xb7)](_0xbb21ab(0xdb)+_0x559b1a['id'][_0xbb21ab(0x111)](0x0,0x8)+_0xbb21ab(0xea))){_0x559b1a['_busy']=!0x0;try{if(!(await fetch(_0x581285[_0xbb21ab(0x104)]+_0xbb21ab(0x114)+_0x559b1a['id']+_0xbb21ab(0x9f),{'method':_0xbb21ab(0xc0)}))['ok'])throw new Error('cancel\x20failed');_0x4235d6['$ok'][_0xbb21ab(0xf3)][_0xbb21ab(0xee)]?.[_0xbb21ab(0x95)](_0xbb21ab(0xfb)+_0x559b1a['id']['slice'](0x0,0x8)),await this[_0xbb21ab(0xb3)]();}catch{_0x4235d6[_0xbb21ab(0xca)]['shared'][_0xbb21ab(0xee)]?.[_0xbb21ab(0xd7)]('Cancel\x20failed');}finally{_0x559b1a[_0xbb21ab(0xda)]=!0x1;}}},async 'retryJob'(_0x275cb3){const _0x4de0c5=_0x5ee753;if(await _0x4235d6[_0x4de0c5(0xca)]['shared'][_0x4de0c5(0xe8)][_0x4de0c5(0xb7)](_0x4de0c5(0x105)+_0x275cb3['id'][_0x4de0c5(0x111)](0x0,0x8)+_0x4de0c5(0xea))){_0x275cb3[_0x4de0c5(0xda)]=!0x0;try{const _0x259712=await fetch(_0x581285[_0x4de0c5(0x104)]+_0x4de0c5(0x114)+_0x275cb3['id']+_0x4de0c5(0xe9),{'method':'POST'}),_0x312606=await _0x259712['json']();if(!_0x259712['ok'])throw new Error(_0x312606?.['error']?.[_0x4de0c5(0xb8)]||_0x4de0c5(0x113));_0x4235d6[_0x4de0c5(0xca)][_0x4de0c5(0xf3)][_0x4de0c5(0xee)]?.['success'](_0x4de0c5(0xc1)+_0x275cb3['id'][_0x4de0c5(0x111)](0x0,0x8)),await this['refresh']();}catch(_0x3e39ab){_0x4235d6[_0x4de0c5(0xca)]['shared'][_0x4de0c5(0xee)]?.['error']('Retry\x20failed:\x20'+(_0x3e39ab?.[_0x4de0c5(0xb8)]||_0x3e39ab));}finally{_0x275cb3['_busy']=!0x1;}}},'bulkBusy':!0x1,async 'retryAllFailed'(){const _0x586904=_0x5ee753;if(await _0x4235d6[_0x586904(0xca)][_0x586904(0xf3)]['modal'][_0x586904(0xb7)]('Retry\x20all\x20failed\x20jobs'+(this['type']?'\x20for\x20type\x20\x22<b>'+this['type']+'</b>\x22':'')+'?')){this[_0x586904(0xe6)]=!0x0;try{const _0x344908={'limit':0x1388};this[_0x586904(0x107)]&&(_0x344908[_0x586904(0x107)]=this[_0x586904(0x107)]);const _0x2c6a9e=await fetch(_0x581285['apiBase']+'/queue/retryFailed',{'method':_0x586904(0xc0),'headers':{'Content-Type':'application/json'},'body':JSON['stringify'](_0x344908)}),_0x338912=await _0x2c6a9e['json']();if(!_0x2c6a9e['ok'])throw new Error(_0x338912?.['error']?.['message']||'failed');_0x4235d6[_0x586904(0xca)]['shared']?.[_0x586904(0xee)]?.[_0x586904(0xec)]?.(_0x586904(0xc1)+_0x338912[_0x586904(0xd2)][_0x586904(0xd3)]+_0x586904(0xde)),await this['refresh']();}catch(_0x4d4b7b){_0x4235d6[_0x586904(0xca)]['shared']?.[_0x586904(0xee)]?.[_0x586904(0xd7)]?.('Bulk\x20retry\x20failed:\x20'+(_0x4d4b7b?.[_0x586904(0xb8)]||_0x4d4b7b));}finally{this[_0x586904(0xe6)]=!0x1;}}},async 'deleteAllDone'(){const _0x5bc9e5=_0x5ee753;if(await _0x4235d6['$ok'][_0x5bc9e5(0xf3)][_0x5bc9e5(0xe8)]['confirm']('Clear\x20all\x20\x22done\x22\x20jobs'+(this[_0x5bc9e5(0x107)]?_0x5bc9e5(0xe3)+this[_0x5bc9e5(0x107)]+_0x5bc9e5(0xe2):'')+_0x5bc9e5(0xcc))){this[_0x5bc9e5(0xe6)]=!0x0;try{const _0x556cf3={'limit':0xc350};this['type']&&(_0x556cf3[_0x5bc9e5(0x107)]=this[_0x5bc9e5(0x107)]);const _0x2893a1=await fetch(_0x581285[_0x5bc9e5(0x104)]+_0x5bc9e5(0xa9),{'method':_0x5bc9e5(0xc0),'headers':{'Content-Type':'application/json'},'body':JSON[_0x5bc9e5(0xbc)](_0x556cf3)}),_0x1a070d=await _0x2893a1[_0x5bc9e5(0xc9)]();if(!_0x2893a1['ok'])throw new Error(_0x1a070d?.[_0x5bc9e5(0xd7)]?.['message']||'failed');_0x4235d6[_0x5bc9e5(0xca)][_0x5bc9e5(0xf3)]?.[_0x5bc9e5(0xee)]?.[_0x5bc9e5(0x95)]?.(_0x5bc9e5(0xa5)+_0x1a070d[_0x5bc9e5(0xd2)][_0x5bc9e5(0xc7)]+_0x5bc9e5(0xe1)),await this[_0x5bc9e5(0xb3)]();}catch(_0x4c012a){_0x4235d6['$ok'][_0x5bc9e5(0xf3)]?.[_0x5bc9e5(0xee)]?.[_0x5bc9e5(0xd7)]?.(_0x5bc9e5(0xb1)+(_0x4c012a?.[_0x5bc9e5(0xb8)]||_0x4c012a));}finally{this[_0x5bc9e5(0xe6)]=!0x1;}}},async 'deleteAllFailed'(){const _0x34fa47=_0x5ee753;if(await _0x4235d6[_0x34fa47(0xca)][_0x34fa47(0xf3)]['modal'][_0x34fa47(0xb7)]('Delete\x20all\x20\x22failed\x22\x20jobs'+(this[_0x34fa47(0x107)]?_0x34fa47(0xe3)+this[_0x34fa47(0x107)]+_0x34fa47(0xe2):'')+_0x34fa47(0xcc))){this['bulkBusy']=!0x0;try{const _0x5a0cd7={'limit':0xc350};this[_0x34fa47(0x107)]&&(_0x5a0cd7[_0x34fa47(0x107)]=this['type']);const _0x41e582=await fetch(_0x581285['apiBase']+_0x34fa47(0xd4),{'method':'POST','headers':{'Content-Type':_0x34fa47(0xcd)},'body':JSON['stringify'](_0x5a0cd7)}),_0x29e8c1=await _0x41e582[_0x34fa47(0xc9)]();if(!_0x41e582['ok'])throw new Error(_0x29e8c1?.[_0x34fa47(0xd7)]?.['message']||_0x34fa47(0x103));_0x4235d6[_0x34fa47(0xca)][_0x34fa47(0xf3)]?.[_0x34fa47(0xee)]?.['info']?.(_0x34fa47(0xa5)+_0x29e8c1['data'][_0x34fa47(0xc7)]+_0x34fa47(0xde)),await this['refresh']();}catch(_0x2593aa){_0x4235d6['$ok'][_0x34fa47(0xf3)]?.[_0x34fa47(0xee)]?.[_0x34fa47(0xd7)]?.('Clear\x20failed\x20jobs\x20error:\x20'+(_0x2593aa?.[_0x34fa47(0xb8)]||_0x2593aa));}finally{this[_0x34fa47(0xe6)]=!0x1;}}},async 'clearStuck'(){const _0x43ad94=_0x5ee753;if(await _0x4235d6[_0x43ad94(0xca)][_0x43ad94(0xf3)]['modal']['confirm']('Delete\x20all\x20stuck\x20(expired-claim)\x20running\x20jobs'+(this[_0x43ad94(0x107)]?'\x20for\x20type\x20\x22<b>'+this[_0x43ad94(0x107)]+_0x43ad94(0xe2):'')+_0x43ad94(0xd1))){this[_0x43ad94(0xe6)]=!0x0;try{const _0xf09033={'limit':0xc350};this[_0x43ad94(0x107)]&&(_0xf09033['type']=this[_0x43ad94(0x107)]);const _0x57b4b2=await fetch(_0x581285[_0x43ad94(0x104)]+_0x43ad94(0xc3),{'method':_0x43ad94(0xc0),'headers':{'Content-Type':'application/json'},'body':JSON[_0x43ad94(0xbc)](_0xf09033)}),_0x308888=await _0x57b4b2['json']();if(!_0x57b4b2['ok'])throw new Error(_0x308888?.[_0x43ad94(0xd7)]?.['message']||_0x43ad94(0x103));_0x4235d6[_0x43ad94(0xca)][_0x43ad94(0xf3)]?.[_0x43ad94(0xee)]?.[_0x43ad94(0x95)]?.(_0x43ad94(0xa5)+_0x308888['data'][_0x43ad94(0xc7)]+_0x43ad94(0xa3)),await this[_0x43ad94(0xb3)]();}catch(_0x15afa4){_0x4235d6['$ok'][_0x43ad94(0xf3)]?.[_0x43ad94(0xee)]?.[_0x43ad94(0xd7)]?.('Clear\x20stuck\x20failed:\x20'+(_0x15afa4?.[_0x43ad94(0xb8)]||_0x15afa4));}finally{this[_0x43ad94(0xe6)]=!0x1;}}},'isStatusOn'(_0x2ada47){const _0x17a0db=_0x5ee753;return(this[_0x17a0db(0xdd)]??null)===(_0x2ada47??null);},'statusBadgeStyle'(_0x209f23){const _0xae68ec=_0x5ee753,_0x311261={'pending':_0xae68ec(0x102),'running':_0xae68ec(0x112),'done':'var(--okdb-success)','failed':_0xae68ec(0xaa)}[_0x209f23]||'#9ca3af';return'color:'+_0x311261+_0xae68ec(0xc6)+_0x311261+';';},'formatWhen'(_0x457de8){const _0x2e60ca=_0x5ee753;if(!_0x457de8)return'—';const _0x3ac338=_0x457de8-Date[_0x2e60ca(0xba)](),_0x5ca477=Math[_0x2e60ca(0x96)](_0x3ac338),_0x61e4b0=Math[_0x2e60ca(0xd8)](_0x5ca477/0x3e8);if(_0x61e4b0<0x5)return _0x3ac338<=0x0?_0x2e60ca(0xba):'in\x20a\x20moment';if(_0x61e4b0<0x3c)return _0x3ac338<0x0?_0x61e4b0+'s\x20ago':_0x2e60ca(0xae)+_0x61e4b0+'s';const _0x4e5a7e=Math[_0x2e60ca(0xd8)](_0x61e4b0/0x3c);if(_0x4e5a7e<0x3c)return _0x3ac338<0x0?_0x4e5a7e+_0x2e60ca(0x10b):_0x2e60ca(0xae)+_0x4e5a7e+'m';const _0x1d0944=Math[_0x2e60ca(0xd8)](_0x4e5a7e/0x3c);if(_0x1d0944<0x18)return _0x3ac338<0x0?_0x1d0944+_0x2e60ca(0xcb):_0x2e60ca(0xae)+_0x1d0944+'h';const _0x41342e=Math[_0x2e60ca(0xd8)](_0x1d0944/0x18);return _0x3ac338<0x0?_0x41342e+'d\x20ago':'in\x20'+_0x41342e+'d';},'shortId':_0x55df60=>(_0x55df60||'')[_0x5ee753(0x111)](0x0,0x8),'_unsubs':[],'_liveTimer':null,'pendingUpdates':0x0,'_scheduleLiveReload'(){const _0x15c3fe=_0x5ee753;this[_0x15c3fe(0xd5)]++,clearTimeout(this[_0x15c3fe(0x10f)]),this[_0x15c3fe(0x10f)]=setTimeout(async()=>{const _0x312e6a=_0x15c3fe;await this[_0x312e6a(0x93)][_0x312e6a(0x115)](),await this[_0x312e6a(0xfe)](),_0x4235d6[_0x312e6a(0xac)](_0x312e6a(0xb3)),this[_0x312e6a(0xd5)]=0x0;},0xbb8);}}),async 'init'(_0x3b5bcb){const _0x4abefe=_0x5ee753;this[_0x4abefe(0xb9)](),_0x3b5bcb[_0x4abefe(0xaf)](()=>_0x3b5bcb[_0x4abefe(0xa0)][_0x4abefe(0x107)],()=>this[_0x4abefe(0xb9)]()),_0x3b5bcb[_0x4abefe(0xaf)](()=>_0x3b5bcb['$ok']['stores'][_0x4abefe(0x94)][_0x4abefe(0xf7)],()=>{const _0x3460e1=_0x4abefe;this[_0x3460e1(0xab)]=null,this[_0x3460e1(0x93)][_0x3460e1(0xfd)](),Promise[_0x3460e1(0xf6)]([this[_0x3460e1(0x93)][_0x3460e1(0x115)](),this[_0x3460e1(0xfe)]()]);}),await Promise[_0x4abefe(0xf6)]([this[_0x4abefe(0x93)][_0x4abefe(0x115)](),this[_0x4abefe(0xfe)]()]);},'mount'(){const _0xa9cec3=_0x5ee753,_0x291506=()=>this[_0xa9cec3(0xe5)]();this['_unsubs']=[_0x10b37b['on'](_0xa9cec3(0xf2),_0x291506),_0x10b37b['on']('queue:done',_0x291506),_0x10b37b['on'](_0xa9cec3(0x97),_0x291506),_0x10b37b['on']('queue:retry',_0x291506),_0x10b37b['on'](_0xa9cec3(0xdf),_0x291506),_0x10b37b['on'](_0xa9cec3(0xbe),_0x291506)];},'unmount'(){const _0x12c981=_0x5ee753;clearTimeout(this['_liveTimer']),clearTimeout(this[_0x12c981(0xcf)]);for(const _0x11b52a of this['_unsubs'])_0x11b52a();this['_unsubs']=[];},'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20height:100%;\x20min-height:0;\x20gap:10px;\x22>\x0a\x0a\x20\x20<!--\x20──\x20Row\x201:\x20Status\x20filters\x20+\x20Enqueue\x20──\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x20align-items:center;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(null)\x22\x20\x20\x20\x20\x20\x20:class=\x22isStatusOn(null)\x20\x20\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x27\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20:\x20\x27pill\x27\x22>All<span\x20class=\x22pill-count\x22>{{\x20statusCount(null)\x20}}</span></button>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(\x27pending\x27)\x22\x20:class=\x22isStatusOn(\x27pending\x27)\x20?\x20\x27pill\x20pill--on\x20pill--p\x27\x20\x20\x20:\x20\x27pill\x20pill--p\x27\x22>Pending<span\x20class=\x22pill-count\x22>{{\x20statusCount(\x27pending\x27)\x20}}</span></button>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(\x27running\x27)\x22\x20:class=\x22isStatusOn(\x27running\x27)\x20?\x20\x27pill\x20pill--on\x20pill--r\x27\x20\x20\x20:\x20\x27pill\x20pill--r\x27\x22>Running<span\x20class=\x22pill-count\x22>{{\x20statusCount(\x27running\x27)\x20}}</span></button>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(\x27failed\x27)\x22\x20\x20:class=\x22isStatusOn(\x27failed\x27)\x20\x20?\x20\x27pill\x20pill--on\x20pill--f\x27\x20\x20\x20:\x20\x27pill\x20pill--f\x27\x22>Failed<span\x20\x20class=\x22pill-count\x22>{{\x20statusCount(\x27failed\x27)\x20}}</span></button>\x0a\x20\x20\x20\x20<button\x20@click=\x22setStatus(\x27done\x27)\x22\x20\x20\x20\x20:class=\x22isStatusOn(\x27done\x27)\x20\x20\x20\x20?\x20\x27pill\x20pill--on\x20pill--d\x27\x20\x20\x20:\x20\x27pill\x20pill--d\x27\x22>Done<span\x20\x20\x20\x20class=\x22pill-count\x22>{{\x20statusCount(\x27done\x27)\x20}}</span></button>\x0a\x0a\x20\x20\x20\x20<div\x20style=\x22flex:1;\x22></div>\x0a\x0a\x20\x20\x20\x20<select\x20@change=\x22setSort($el.value)\x22\x20:value=\x22sortMode\x22\x20style=\x22font-size:12px;\x22>\x0a\x20\x20\x20\x20\x20\x20<option\x20value=\x22when\x22>Sort:\x20When</option>\x0a\x20\x20\x20\x20\x20\x20<option\x20value=\x22priority\x22>Sort:\x20Priority</option>\x0a\x20\x20\x20\x20</select>\x0a\x20\x20\x20\x20<button\x20@click=\x22toggleDirection\x22\x20style=\x22font-size:12px;\x20min-width:32px;\x22\x20title=\x22Toggle\x20sort\x20direction\x22>\x0a\x20\x20\x20\x20\x20\x20{{\x20direction\x20===\x20\x27asc\x27\x20?\x20\x27▲\x27\x20:\x20\x27▼\x27\x20}}\x0a\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20<button\x20@click=\x22openEnqueue\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2013%,\x20transparent);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-accent)\x2033%,\x20transparent);\x20color:var(--okdb-accent);\x20font-weight:600;\x20padding:4px\x2014px;\x20font-size:12px;\x20white-space:nowrap;\x22>\x0a\x20\x20\x20\x20\x20\x20+\x20Enqueue\x0a\x20\x20\x20\x20</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20──\x20Row\x202:\x20Bulk\x20actions\x20──\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20gap:6px;\x20align-items:center;\x20flex-wrap:wrap;\x20padding:5px\x200;\x20border-top:1px\x20solid\x20var(--okdb-app-surface-2);\x20border-bottom:1px\x20solid\x20var(--okdb-app-surface-2);\x22>\x0a\x20\x20\x20\x20<button\x20@click=\x22retryAllFailed()\x22\x20:disabled=\x22bulkBusy\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20color:var(--okdb-warning);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-warning)\x2020%,\x20transparent);\x20background:transparent;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Reset\x20all\x20failed\x20jobs\x20back\x20to\x20pending\x22>\x0a\x20\x20\x20\x20\x20\x20↺\x20Retry\x20Failed\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<div\x20style=\x22width:1px;\x20height:16px;\x20background:var(--okdb-app-border);\x22></div>\x0a\x20\x20\x20\x20<button\x20@click=\x22deleteAllDone()\x22\x20:disabled=\x22bulkBusy\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20color:var(--okdb-success);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-success)\x2020%,\x20transparent);\x20background:transparent;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Delete\x20all\x20done\x20jobs\x20in\x20one\x20index\x20pass\x22>\x0a\x20\x20\x20\x20\x20\x20✕\x20Clear\x20Done\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22deleteAllFailed()\x22\x20:disabled=\x22bulkBusy\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20color:var(--okdb-danger);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-danger)\x2020%,\x20transparent);\x20background:transparent;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Permanently\x20delete\x20all\x20failed\x20jobs\x22>\x0a\x20\x20\x20\x20\x20\x20✕\x20Clear\x20Failed\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<button\x20@click=\x22clearStuck()\x22\x20:disabled=\x22bulkBusy\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:12px;\x20color:var(--okdb-app-fg-muted);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-app-fg-muted)\x2020%,\x20transparent);\x20background:transparent;\x20padding:3px\x2010px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Delete\x20running\x20jobs\x20whose\x20claim\x20TTL\x20has\x20expired\x20(permanently,\x20not\x20re-queued)\x22>\x0a\x20\x20\x20\x20\x20\x20✕\x20Clear\x20Stuck\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<div\x20style=\x22width:1px;\x20height:16px;\x20background:var(--okdb-app-border);\x22></div>\x0a\x20\x20\x20\x20<button\x20@click=\x22rebuildStats\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22font-size:11px;\x20opacity:.4;\x20background:transparent;\x20border-color:transparent;\x20padding:3px\x208px;\x22\x0a\x20\x20\x20\x20\x20\x20title=\x22Full\x20scan\x20rebuild\x20of\x20stats\x20counters\x22>\x0a\x20\x20\x20\x20\x20\x20Rebuild\x20Stats\x0a\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20<if\x20:=\x22pendingUpdates\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:11px;\x20color:var(--okdb-warning);\x20opacity:.8;\x20margin-left:4px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20⟳\x20{{\x20pendingUpdates\x20}}\x20pending\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Table\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20position:relative;\x20flex:1;\x20min-height:0;\x22>\x0a\x20\x20\x20\x20<if\x20:=\x22query.busy\x22>\x0a\x20\x20\x20\x20\x20\x20<ok-overlay>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22loader-center\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ok-icon\x20name=\x22loader\x22\x20class=\x22spin\x22\x20style=\x22width:32px;height:32px;\x22></ok-icon>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</ok-overlay>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22query.loadError\x20&&\x20!query.busy\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22color:var(--okdb-danger);\x20padding:12px\x2014px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-danger)\x2033%,\x20transparent);\x20border-radius:8px;\x20margin-bottom:8px;\x20font-size:13px;\x20display:flex;\x20align-items:center;\x20gap:10px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22flex:1;\x22>{{\x20query.loadError\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22query.load()\x22\x20style=\x22font-size:11px;\x20color:var(--okdb-danger);\x20border-color:color-mix(in\x20srgb,\x20var(--okdb-danger)\x2033%,\x20transparent);\x20padding:3px\x2010px;\x22>Retry</button>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x0a\x20\x20\x20\x20<ok-table\x20:data=\x22query.values\x22\x20no-scroll\x20style=\x22flex:1;\x20min-height:0;\x20overflow:auto;\x22>\x0a\x20\x20\x20\x20\x20\x20<columns>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x2280px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Status</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-badge\x22\x20:style=\x22statusBadgeStyle(row.status)\x22>{{\x20row.status\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x221fr\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Type\x20+\x20Metadata</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:2px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>{{\x20row.type\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20gap:4px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.tags\x20&&\x20row.tags.length\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:inline-block;\x20font-size:11px;\x20padding:1px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:3px;\x20opacity:.7;\x22>{{\x20row.tags.join(\x27,\x20\x27)\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.progress\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:inline-block;\x20font-size:11px;\x20padding:1px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:3px;\x20opacity:.7;\x22>{{\x20row.progress\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.cron\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:inline-block;\x20font-size:11px;\x20padding:1px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:3px;\x20opacity:.7;\x20color:var(--okdb-indigo);\x22>cron:\x20{{\x20row.cron\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.idempotency_key\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:inline-block;\x20font-size:11px;\x20padding:1px\x206px;\x20background:var(--okdb-app-bg-deep);\x20border-radius:3px;\x20opacity:.7;\x20color:#34d399;\x22>key:\x20{{\x20row.idempotency_key\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22130px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>When</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>{{\x20formatWhen(row.when)\x20}}</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x2270px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Tries</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22row.tries\x20>=\x20row.max_tries\x20&&\x20row.max_tries\x20>\x200\x20?\x20\x27color:var(--okdb-danger);\x27\x20:\x20\x27\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20{{\x20row.tries\x20}}\x20/\x20{{\x20row.max_tries\x20}}\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<column\x20width=\x22180px\x22\x20no-resize>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<header>Actions</header>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<cell\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22openEditJob(row)\x22\x20:disabled=\x22row._busy\x22\x20style=\x22font-size:11px;\x22>Edit</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22retryJob(row)\x22\x20\x20:disabled=\x22row._busy\x22\x20style=\x22font-size:11px;\x22>Retry</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.status\x20===\x20\x27pending\x27\x20||\x20row.status\x20===\x20\x27running\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22cancelJob(row)\x22\x20:disabled=\x22row._busy\x22\x20style=\x22font-size:11px;\x22>Cancel</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20@click=\x22deleteJob(row)\x22\x20:disabled=\x22row._busy\x22\x20style=\x22color:#ff6c6b;\x20font-size:11px;\x22>Delete</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</cell>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</column>\x0a\x20\x20\x20\x20\x20\x20</columns>\x0a\x0a\x20\x20\x20\x20\x20\x20<expanded\x20let:row>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22padding:10px;\x20font-size:12px;\x20display:flex;\x20flex-direction:column;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.error_stack\x20||\x20row.status_message\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.status_message\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22white-space:pre-wrap;\x20opacity:.9;\x20margin-bottom:6px;\x22>{{\x20row.status_message\x20}}</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22row.error_stack\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22white-space:pre-wrap;\x20opacity:.85;\x20max-height:220px;\x20overflow:auto;\x20background:var(--okdb-app-bg-deep);\x20padding:8px;\x20border-radius:4px;\x22>{{\x20row.error_stack\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20flex-wrap:wrap;\x20gap:12px;\x20opacity:.8;\x20font-size:11px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>ID:\x20<b>{{\x20row.id\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Status\x20code:\x20<b>{{\x20row.status_code\x20||\x20\x27—\x27\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Max\x20tries:\x20<b>{{\x20row.max_tries\x20??\x20\x27—\x27\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Retry\x20delay:\x20<b>{{\x20row.retry_delay\x20??\x200\x20}}ms</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Backoff:\x20<b>{{\x20row.backoff_multiplier\x20??\x201\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Priority:\x20<b>{{\x20row.priority\x20??\x200\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:=\x22row.bucket\x22\x20style=\x22display:inline;\x22>Bucket:\x20<b>{{\x20row.bucket\x20||\x20\x27—\x27\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>Claim\x20expires:\x20<b>{{\x20formatWhen(row.claim_expires)\x20}}</b></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<details\x20style=\x22margin-top:6px;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<summary\x20style=\x22cursor:pointer;\x20opacity:.8;\x20font-size:11px;\x22>Raw\x20job</summary>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<pre\x20style=\x22white-space:pre-wrap;\x20opacity:.85;\x20max-height:260px;\x20overflow:auto;\x20margin-top:4px;\x20background:var(--okdb-app-bg-deep);\x20padding:8px;\x20border-radius:4px;\x20font-size:10px;\x22>{{\x20row\x20}}</pre>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</details>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</expanded>\x0a\x20\x20\x20\x20</ok-table>\x0a\x0a\x20\x20\x20\x20<!--\x20Pagination\x20-->\x0a\x20\x20\x20\x20<div\x20class=\x22ok-pager\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22query.prevPage()\x22\x20:disabled=\x22!query.hasPrev\x20||\x20query.busy\x22>‹\x20Prev</button>\x0a\x20\x20\x20\x20\x20\x20<span>{{\x20statusCount(status)\x20}}\x20total\x20·\x20{{\x20query.pageSize\x20}}/page</span>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22query.nextPage()\x22\x20:disabled=\x22!query.hasNext\x20||\x20query.busy\x22>Next\x20›</button>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','style':_0x5ee753(0x10a)};
@@ -1 +1 @@
1
- function _0x48ba(){const _0x4e2390=['queue-types','stats\x20failed','queue:reconciled','values','4505335vWtBjy','engine:started','808552pMsufa','_unsubs','error','toLowerCase','_scheduleLoad','queue:removed','1208882tUFxFG','includes','$attr','/engines?type=queue-worker','_reloadTimer','total','reduce','1NwOxRB','selectedType','.type-row{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px\x208px;border-radius:5px;font-size:12px;border:1px\x20solid\x20transparent;background:0\x200;cursor:pointer;width:100%;color:var(--okdb-app-fg-muted);transition:background\x20.12s,border-color\x20.12s,color\x20.12s}.type-row--on,.type-row:hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border);color:var(--okdb-app-fg)}.type-row--on{border-color:var(--okdb-accent);color:var(--okdb-app-fg-strong)}.worker-chip{display:inline-flex;align-items:center;gap:4px;padding:1px\x206px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-accent)\x2020%,transparent);color:var(--okdb-accent);background:color-mix(in\x20srgb,var(--okdb-accent)\x205%,transparent);font-size:10px;flex-shrink:0}','push','/queue/job-types','2255553UKtdTb','15749810ZaLryB','engine:stopped','typesData','busy','loadFromStats','types\x20failed','selectedEnv','byType','workerCounts','queue:enqueued','result','fromEntries','localeCompare','registeredTypes','engine:error','selectedtype','240289QbtTwG','sort','length','load','engine:uninstalled','queue:failed','type','filterText','queue-types\x20load\x20error','$dispatch','174gXbYmF','filter','apiBase','/queue/types','queue-types\x20stats\x20fallback\x20error','$watch','types','data','json','find','9jbTzGh','map','job_type','keys','catch','#f59e0b','some','all','/queue/stats','1343504aplqBD','isArray','#3b82f6','\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:8px;\x20min-height:0;\x22>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:12px;\x20opacity:.7;\x20text-transform:uppercase;\x20letter-spacing:.05em;\x22>Types</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22totalWorkers()\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x20border-radius:999px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x22>⚙\x20{{\x20totalWorkers()\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.6;\x20font-size:11px;\x20padding:2px\x206px;\x22>↻</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20:value=\x22filterText\x22\x0a\x20\x20\x20\x20\x20\x20@input=\x22filterText\x20=\x20$event.target.value\x22\x0a\x20\x20\x20\x20\x20\x20placeholder=\x22Filter\x20types…\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20min-width:0;\x20padding:6px\x208px;\x20border-radius:6px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20background:var(--okdb-app-bg-deep);\x20color:var(--okdb-app-fg-strong);\x20font-size:12px;\x22\x0a\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20<if\x20:=\x22filterText\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clearFilter()\x22\x20style=\x22opacity:.7;\x20font-size:11px;\x20padding:5px\x207px;\x22>✕</button>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Types\x20list\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:3px;\x20overflow:auto;\x20min-height:0;\x20padding-right:4px;\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20@click=\x22selectType(null)\x22\x0a\x20\x20\x20\x20\x20\x20:class=\x22selectedType\x20==\x20null\x20?\x20\x27type-row\x20type-row--on\x27\x20:\x20\x27type-row\x27\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20min-width:0;\x20flex:1;\x20text-align:left;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22white-space:nowrap;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22>All\x20types</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22totalWorkers()\x20>\x200\x22><span\x20class=\x22worker-chip\x22>⚙\x20{{\x20totalWorkers()\x20}}</span></if>\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.55;\x20font-size:11px;\x22>{{\x20totalFor(null)\x20}}</span>\x0a\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20<each\x20:of=\x22types\x22\x20let:item=\x22item\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22selectType(item.type)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22selectedType\x20===\x20item.type\x20?\x20\x27type-row\x20type-row--on\x27\x20:\x20\x27type-row\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20min-width:0;\x20flex:1;\x20text-align:left;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jtStatusColor(item.type)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27width:6px;height:6px;border-radius:50%;background:\x27\x20+\x20jtStatusColor(item.type)\x20+\x20\x27;flex-shrink:0;\x27\x22\x20:title=\x22jtStatus(item.type)\x22></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22white-space:nowrap;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22>{{\x20item.type\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.workerCount\x20>\x200\x22><span\x20class=\x22worker-chip\x22>⚙\x20{{\x20item.workerCount\x20}}</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.55;\x20font-size:11px;\x22>{{\x20item.total\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22!busy\x20&&\x20types.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:12px;\x20padding:6px\x208px;\x20line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20filterText\x20?\x20\x27No\x20types\x20match\x20this\x20filter.\x27\x20:\x20\x27No\x20queued\x20job\x20types\x20in\x20this\x20environment.\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','_mergeRegisteredTypes'];_0x48ba=function(){return _0x4e2390;};return _0x48ba();}const _0x525295=_0x32cb;(function(_0x485ece,_0x5da81a){const _0x5754c8=_0x32cb,_0x15feea=_0x485ece();while(!![]){try{const _0x365425=parseInt(_0x5754c8(0x11a))/0x1*(-parseInt(_0x5754c8(0x113))/0x2)+parseInt(_0x5754c8(0x11f))/0x3+parseInt(_0x5754c8(0x10d))/0x4+parseInt(_0x5754c8(0x10b))/0x5+-parseInt(_0x5754c8(0x13a))/0x6*(-parseInt(_0x5754c8(0x130))/0x7)+parseInt(_0x5754c8(0x102))/0x8*(-parseInt(_0x5754c8(0x144))/0x9)+-parseInt(_0x5754c8(0x120))/0xa;if(_0x365425===_0x5da81a)break;else _0x15feea['push'](_0x15feea['shift']());}catch(_0xee3b2f){_0x15feea['push'](_0x15feea['shift']());}}}(_0x48ba,0x7ad8b));import _0x592aa9 from'../../../stores/events-store.js';function _0x32cb(_0x4949e0,_0x5a1824){_0x4949e0=_0x4949e0-0x100;const _0x48ba49=_0x48ba();let _0x32cb43=_0x48ba49[_0x4949e0];return _0x32cb43;}import _0x4f23ce from'../../../stores/okdb-store.js';const s={'paused':_0x525295(0x149),'draining':_0x525295(0x104)};export default{'tag':_0x525295(0x107),'attr':{'selectedtype':{}},'context':_0x1422a4=>({'busy':!0x1,'total':0x0,'typesData':[],'workerCounts':{},'registeredTypes':{},'filterText':'','_unsubs':[],'_reloadTimer':null,'selectedType':null,async 'load'(){const _0x4b7da2=_0x525295;this[_0x4b7da2(0x123)]=!0x0;try{const [_0x2f9759,_0x246ff0,_0x2b1a91]=await Promise[_0x4b7da2(0x100)]([fetch(_0x4f23ce['apiBase']+_0x4b7da2(0x13d)),fetch(_0x4f23ce[_0x4b7da2(0x13c)]+_0x4b7da2(0x116))['catch'](()=>null),fetch(_0x4f23ce[_0x4b7da2(0x13c)]+_0x4b7da2(0x11e))[_0x4b7da2(0x148)](()=>null)]);if(!_0x2f9759['ok'])throw new Error(_0x4b7da2(0x125));const _0x5eb207=await _0x2f9759['json'](),_0x10407a=_0x5eb207?.[_0x4b7da2(0x12a)]??_0x5eb207?.['data']??null,_0x4621b0=_0x246ff0?.['ok']?await _0x246ff0[_0x4b7da2(0x142)]()[_0x4b7da2(0x148)](()=>({})):null,_0x2c5852=_0x4621b0?.['result']??_0x4621b0?.[_0x4b7da2(0x141)]??[],_0xd2d618={};for(const _0x130157 of _0x2c5852){const _0xab9af9=_0x130157?.['config']?.[_0x4b7da2(0x146)];_0xab9af9&&(_0xd2d618[_0xab9af9]=(_0xd2d618[_0xab9af9]??0x0)+0x1);}if(this[_0x4b7da2(0x128)]=_0xd2d618,_0x2b1a91?.['ok']){const _0x840b88=await _0x2b1a91[_0x4b7da2(0x142)]()[_0x4b7da2(0x148)](()=>({})),_0x453a29=_0x840b88?.[_0x4b7da2(0x12a)]??[];this['registeredTypes']=Object[_0x4b7da2(0x12b)](_0x453a29['map'](_0x495d0e=>[_0x495d0e['id'],_0x495d0e]));}this[_0x4b7da2(0x118)]=_0x10407a?.[_0x4b7da2(0x118)]??0x0,this['typesData']=Array[_0x4b7da2(0x103)](_0x10407a?.[_0x4b7da2(0x140)])?_0x10407a[_0x4b7da2(0x140)]['slice']()[_0x4b7da2(0x131)]((_0x4677b7,_0x1394ac)=>String(_0x4677b7?.[_0x4b7da2(0x136)]||'')[_0x4b7da2(0x12c)](String(_0x1394ac?.[_0x4b7da2(0x136)]||'')))['map'](_0x28bcd9=>({..._0x28bcd9,'workerCount':_0xd2d618[_0x28bcd9?.[_0x4b7da2(0x136)]]??0x0})):[],this[_0x4b7da2(0x122)][_0x4b7da2(0x132)]||await this[_0x4b7da2(0x124)](),this['_mergeRegisteredTypes'](),this['selectedType']&&!this['typesData'][_0x4b7da2(0x14a)](_0x22a5ad=>_0x22a5ad?.[_0x4b7da2(0x136)]===this[_0x4b7da2(0x11b)])&&(this['selectedType']=null,_0x1422a4['$dispatch']('type',null));}catch(_0x5330cd){console[_0x4b7da2(0x10f)](_0x4b7da2(0x138),_0x5330cd),await this['loadFromStats'](),this[_0x4b7da2(0x106)]();}finally{this[_0x4b7da2(0x123)]=!0x1;}},'_mergeRegisteredTypes'(){const _0x574714=_0x525295,_0x194029=new Set(this[_0x574714(0x122)][_0x574714(0x145)](_0x5be03b=>_0x5be03b?.['type']));for(const _0x38bee2 of Object[_0x574714(0x147)](this[_0x574714(0x12d)]))_0x194029['has'](_0x38bee2)||this[_0x574714(0x122)][_0x574714(0x11d)]({'type':_0x38bee2,'total':0x0,'byStatus':{},'workerCount':this[_0x574714(0x128)][_0x38bee2]??0x0});this['typesData'][_0x574714(0x131)]((_0x2da0db,_0x262dea)=>String(_0x2da0db?.['type']||'')[_0x574714(0x12c)](String(_0x262dea?.['type']||'')));},async 'loadFromStats'(){const _0x404faa=_0x525295;try{const _0x36f61b=await fetch(_0x4f23ce[_0x404faa(0x13c)]+_0x404faa(0x101));if(!_0x36f61b['ok'])throw new Error(_0x404faa(0x108));const _0xeea7b0=await _0x36f61b[_0x404faa(0x142)](),_0x397143=_0xeea7b0?.[_0x404faa(0x12a)]??_0xeea7b0?.[_0x404faa(0x141)]??null,_0x3e6cbd=_0x397143?.[_0x404faa(0x127)]||{};this[_0x404faa(0x118)]=_0x397143?.[_0x404faa(0x118)]??0x0,this[_0x404faa(0x122)]=Object[_0x404faa(0x147)](_0x3e6cbd)[_0x404faa(0x131)]((_0x4bf8cc,_0x14f165)=>_0x4bf8cc[_0x404faa(0x12c)](_0x14f165))['map'](_0x1aba89=>({'type':_0x1aba89,'total':_0x3e6cbd[_0x1aba89]?.['total']??0x0,'byStatus':_0x3e6cbd[_0x1aba89]?.['byStatus']||{},'workerCount':this[_0x404faa(0x128)]?.[_0x1aba89]??0x0}));}catch(_0x511626){console[_0x404faa(0x10f)](_0x404faa(0x13e),_0x511626),this[_0x404faa(0x118)]=0x0,this[_0x404faa(0x122)]=[];}},get 'types'(){const _0x18d8aa=_0x525295,_0x4b29fc=(this[_0x18d8aa(0x137)]||'')['trim']()[_0x18d8aa(0x110)]();return _0x4b29fc?this['typesData'][_0x18d8aa(0x13b)](_0x1b08df=>String(_0x1b08df?.[_0x18d8aa(0x136)]||'')[_0x18d8aa(0x110)]()[_0x18d8aa(0x114)](_0x4b29fc)):this[_0x18d8aa(0x122)];},'totalFor'(_0x3a05e6){const _0x14fa6a=_0x525295;return _0x3a05e6?this[_0x14fa6a(0x122)][_0x14fa6a(0x143)](_0x1148d9=>_0x1148d9?.[_0x14fa6a(0x136)]===_0x3a05e6)?.[_0x14fa6a(0x118)]??0x0:this[_0x14fa6a(0x118)];},'totalWorkers'(){const _0x46b8cb=_0x525295;return Object[_0x46b8cb(0x10a)](this[_0x46b8cb(0x128)]||{})[_0x46b8cb(0x119)]((_0x4d9688,_0x177379)=>_0x4d9688+Number(_0x177379||0x0),0x0);},'jtStatus'(_0x4e1643){const _0xd78de1=_0x525295;return this[_0xd78de1(0x12d)][_0x4e1643]?.['status']??null;},'jtStatusColor'(_0x28f8f0){return s[this['jtStatus'](_0x28f8f0)]??null;},'selectType'(_0x110f3a){const _0x3dfc4b=_0x525295;this['selectedType']=_0x110f3a??null,_0x1422a4[_0x3dfc4b(0x139)](_0x3dfc4b(0x136),this[_0x3dfc4b(0x11b)]);},async 'refresh'(){const _0x5286a3=_0x525295;await this[_0x5286a3(0x133)]();},'clearFilter'(){const _0x1b46e7=_0x525295;this[_0x1b46e7(0x137)]='';},'_scheduleLoad'(){const _0x381a5c=_0x525295;clearTimeout(this[_0x381a5c(0x117)]),this[_0x381a5c(0x117)]=setTimeout(()=>this[_0x381a5c(0x133)](),0x190);}}),async 'mount'(_0xfde8c6){const _0x3601d1=_0x525295;await this['load'](),this[_0x3601d1(0x11b)]=_0xfde8c6['$attr'][_0x3601d1(0x12f)]??null;const _0x13ca70=()=>this[_0x3601d1(0x111)]();this[_0x3601d1(0x10e)]=[_0x592aa9['on'](_0x3601d1(0x129),_0x13ca70),_0x592aa9['on']('queue:done',_0x13ca70),_0x592aa9['on'](_0x3601d1(0x135),_0x13ca70),_0x592aa9['on']('queue:retry',_0x13ca70),_0x592aa9['on'](_0x3601d1(0x112),_0x13ca70),_0x592aa9['on'](_0x3601d1(0x109),_0x13ca70),_0x592aa9['on'](_0x3601d1(0x10c),_0x13ca70),_0x592aa9['on'](_0x3601d1(0x121),_0x13ca70),_0x592aa9['on'](_0x3601d1(0x12e),_0x13ca70),_0x592aa9['on'](_0x3601d1(0x134),_0x13ca70)],_0xfde8c6[_0x3601d1(0x13f)](()=>_0x4f23ce[_0x3601d1(0x126)],()=>{const _0xabdb4c=_0x3601d1;this[_0xabdb4c(0x118)]=0x0,this['typesData']=[],this['filterText']='',this[_0xabdb4c(0x11b)]=null,_0xfde8c6[_0xabdb4c(0x139)]('type',null),this[_0xabdb4c(0x133)]();}),_0xfde8c6['$watch'](()=>_0xfde8c6[_0x3601d1(0x115)][_0x3601d1(0x12f)],_0x396054=>{const _0x25e692=_0x3601d1;this[_0x25e692(0x11b)]=_0x396054??null;});},'unmount'(){const _0x4627e0=_0x525295;clearTimeout(this[_0x4627e0(0x117)]);for(const _0x31c0df of this['_unsubs'])_0x31c0df();this[_0x4627e0(0x10e)]=[];},'template':_0x525295(0x105),'style':_0x525295(0x11c)};
1
+ const _0x3daca6=_0x364e;(function(_0x51fe1c,_0x5cde71){const _0x537d19=_0x364e,_0x5bdc84=_0x51fe1c();while(!![]){try{const _0x65f0cc=parseInt(_0x537d19(0xcb))/0x1*(-parseInt(_0x537d19(0xe5))/0x2)+parseInt(_0x537d19(0xf4))/0x3+-parseInt(_0x537d19(0xf7))/0x4+-parseInt(_0x537d19(0x10c))/0x5*(-parseInt(_0x537d19(0x10d))/0x6)+parseInt(_0x537d19(0xe8))/0x7*(-parseInt(_0x537d19(0xe7))/0x8)+parseInt(_0x537d19(0xce))/0x9*(-parseInt(_0x537d19(0xf9))/0xa)+parseInt(_0x537d19(0xe2))/0xb*(parseInt(_0x537d19(0xd9))/0xc);if(_0x65f0cc===_0x5cde71)break;else _0x5bdc84['push'](_0x5bdc84['shift']());}catch(_0x1236f0){_0x5bdc84['push'](_0x5bdc84['shift']());}}}(_0x8fa9,0xb6999));function _0x364e(_0x5175df,_0x51fef8){_0x5175df=_0x5175df-0xc1;const _0x8fa906=_0x8fa9();let _0x364e01=_0x8fa906[_0x5175df];return _0x364e01;}import _0x204853 from'../../../stores/events-store.js';import _0x535c46 from'../../../stores/okdb-store.js';const s={'paused':_0x3daca6(0xe3),'draining':_0x3daca6(0xcf)};function _0x8fa9(){const _0x548bd2=['_reloadTimer','total','1250kZpDEp','queue-types\x20stats\x20fallback\x20error','.type-row{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px\x208px;border-radius:5px;font-size:12px;border:1px\x20solid\x20transparent;background:0\x200;cursor:pointer;width:100%;color:var(--okdb-app-fg-muted);transition:background\x20.12s,border-color\x20.12s,color\x20.12s}.type-row--on,.type-row:hover{background:var(--okdb-app-surface);border-color:var(--okdb-app-border);color:var(--okdb-app-fg)}.type-row--on{border-color:var(--okdb-accent);color:var(--okdb-app-fg-strong)}.worker-chip{display:inline-flex;align-items:center;gap:4px;padding:1px\x206px;border-radius:999px;border:1px\x20solid\x20color-mix(in\x20srgb,var(--okdb-accent)\x2020%,transparent);color:var(--okdb-accent);background:color-mix(in\x20srgb,var(--okdb-accent)\x205%,transparent);font-size:10px;flex-shrink:0}','18vSDZUp','#3b82f6','queue-types\x20load\x20error','selectedType','queue-types','queue:reconciled','engine:uninstalled','job_type','loadFromStats','$attr','find','4672884BWGBvV','filterText','localeCompare','typesData','registeredTypes','load','catch','engine:stopped','keys','66WJUDmH','#f59e0b','queue:done','1890hNQGmY','queue:failed','2791408jrxFiz','7PWJCEd','type','/queue/types','byType','types\x20failed','map','byStatus','workerCounts','apiBase','/queue/stats','values','result','1245084yiJwGs','has','json','2291044AMeRWN','isArray','2614120eGqBLp','queue:retry','/queue/job-types','_unsubs','selectedtype','reduce','all','busy','sort','queue:removed','trim','engine:error','toLowerCase','engine:started','fromEntries','includes','$dispatch','selectedEnv','$watch','10YqnsMp','1866660pEPhWU','error','some','slice','length','data','filter','status','_mergeRegisteredTypes'];_0x8fa9=function(){return _0x548bd2;};return _0x8fa9();}export default{'tag':_0x3daca6(0xd2),'attr':{'selectedtype':{}},'context':_0x409ce8=>({'busy':!0x1,'total':0x0,'typesData':[],'workerCounts':{},'registeredTypes':{},'filterText':'','_unsubs':[],'_reloadTimer':null,'selectedType':null,async 'load'(){const _0x4fc10f=_0x3daca6;this[_0x4fc10f(0x100)]=!0x0;try{const [_0x301db2,_0x2d3fe6,_0x1a72bd]=await Promise[_0x4fc10f(0xff)]([fetch(_0x535c46[_0x4fc10f(0xf0)]+_0x4fc10f(0xea)),fetch(_0x535c46[_0x4fc10f(0xf0)]+'/engines?type=queue-worker')[_0x4fc10f(0xdf)](()=>null),fetch(_0x535c46['apiBase']+_0x4fc10f(0xfb))['catch'](()=>null)]);if(!_0x301db2['ok'])throw new Error(_0x4fc10f(0xec));const _0x1c32f9=await _0x301db2[_0x4fc10f(0xf6)](),_0x298676=_0x1c32f9?.[_0x4fc10f(0xf3)]??_0x1c32f9?.[_0x4fc10f(0xc5)]??null,_0x59ccc2=_0x2d3fe6?.['ok']?await _0x2d3fe6[_0x4fc10f(0xf6)]()[_0x4fc10f(0xdf)](()=>({})):null,_0x44484f=_0x59ccc2?.[_0x4fc10f(0xf3)]??_0x59ccc2?.[_0x4fc10f(0xc5)]??[],_0x23b60d={};for(const _0xf6e2e3 of _0x44484f){const _0x2b3d89=_0xf6e2e3?.['config']?.[_0x4fc10f(0xd5)];_0x2b3d89&&(_0x23b60d[_0x2b3d89]=(_0x23b60d[_0x2b3d89]??0x0)+0x1);}if(this[_0x4fc10f(0xef)]=_0x23b60d,_0x1a72bd?.['ok']){const _0x337a4e=await _0x1a72bd[_0x4fc10f(0xf6)]()[_0x4fc10f(0xdf)](()=>({})),_0x9c0109=_0x337a4e?.[_0x4fc10f(0xf3)]??[];this['registeredTypes']=Object[_0x4fc10f(0x107)](_0x9c0109[_0x4fc10f(0xed)](_0x21ae42=>[_0x21ae42['id'],_0x21ae42]));}this[_0x4fc10f(0xca)]=_0x298676?.['total']??0x0,this[_0x4fc10f(0xdc)]=Array[_0x4fc10f(0xf8)](_0x298676?.['types'])?_0x298676['types'][_0x4fc10f(0xc3)]()[_0x4fc10f(0x101)]((_0x44b394,_0x37537d)=>String(_0x44b394?.['type']||'')[_0x4fc10f(0xdb)](String(_0x37537d?.['type']||'')))[_0x4fc10f(0xed)](_0x21b94d=>({..._0x21b94d,'workerCount':_0x23b60d[_0x21b94d?.[_0x4fc10f(0xe9)]]??0x0})):[],this['typesData'][_0x4fc10f(0xc4)]||await this['loadFromStats'](),this[_0x4fc10f(0xc8)](),this[_0x4fc10f(0xd1)]&&!this[_0x4fc10f(0xdc)][_0x4fc10f(0xc2)](_0x483938=>_0x483938?.['type']===this[_0x4fc10f(0xd1)])&&(this[_0x4fc10f(0xd1)]=null,_0x409ce8[_0x4fc10f(0x109)](_0x4fc10f(0xe9),null));}catch(_0x30ff1d){console[_0x4fc10f(0xc1)](_0x4fc10f(0xd0),_0x30ff1d),await this[_0x4fc10f(0xd6)](),this[_0x4fc10f(0xc8)]();}finally{this[_0x4fc10f(0x100)]=!0x1;}},'_mergeRegisteredTypes'(){const _0x2c75fa=_0x3daca6,_0x46089c=new Set(this[_0x2c75fa(0xdc)][_0x2c75fa(0xed)](_0x1be666=>_0x1be666?.['type']));for(const _0x380c0c of Object[_0x2c75fa(0xe1)](this['registeredTypes']))_0x46089c[_0x2c75fa(0xf5)](_0x380c0c)||this['typesData']['push']({'type':_0x380c0c,'total':0x0,'byStatus':{},'workerCount':this[_0x2c75fa(0xef)][_0x380c0c]??0x0});this['typesData'][_0x2c75fa(0x101)]((_0x4174fa,_0x8783aa)=>String(_0x4174fa?.['type']||'')[_0x2c75fa(0xdb)](String(_0x8783aa?.[_0x2c75fa(0xe9)]||'')));},async 'loadFromStats'(){const _0x430665=_0x3daca6;try{const _0x2d8305=await fetch(_0x535c46[_0x430665(0xf0)]+_0x430665(0xf1));if(!_0x2d8305['ok'])throw new Error('stats\x20failed');const _0x100846=await _0x2d8305['json'](),_0x507e00=_0x100846?.[_0x430665(0xf3)]??_0x100846?.[_0x430665(0xc5)]??null,_0x2772ab=_0x507e00?.[_0x430665(0xeb)]||{};this[_0x430665(0xca)]=_0x507e00?.[_0x430665(0xca)]??0x0,this[_0x430665(0xdc)]=Object['keys'](_0x2772ab)['sort']((_0x1bada5,_0x3aff57)=>_0x1bada5[_0x430665(0xdb)](_0x3aff57))[_0x430665(0xed)](_0x5947b9=>({'type':_0x5947b9,'total':_0x2772ab[_0x5947b9]?.[_0x430665(0xca)]??0x0,'byStatus':_0x2772ab[_0x5947b9]?.[_0x430665(0xee)]||{},'workerCount':this[_0x430665(0xef)]?.[_0x5947b9]??0x0}));}catch(_0x282ca8){console[_0x430665(0xc1)](_0x430665(0xcc),_0x282ca8),this['total']=0x0,this[_0x430665(0xdc)]=[];}},get 'types'(){const _0x1b5a5e=_0x3daca6,_0x2f0e0b=(this[_0x1b5a5e(0xda)]||'')[_0x1b5a5e(0x103)]()[_0x1b5a5e(0x105)]();return _0x2f0e0b?this['typesData'][_0x1b5a5e(0xc6)](_0x5f0c64=>String(_0x5f0c64?.[_0x1b5a5e(0xe9)]||'')['toLowerCase']()[_0x1b5a5e(0x108)](_0x2f0e0b)):this['typesData'];},'totalFor'(_0x1ce82f){const _0x404805=_0x3daca6;return _0x1ce82f?this[_0x404805(0xdc)][_0x404805(0xd8)](_0x11284d=>_0x11284d?.[_0x404805(0xe9)]===_0x1ce82f)?.[_0x404805(0xca)]??0x0:this[_0x404805(0xca)];},'totalWorkers'(){const _0x4e8fbe=_0x3daca6;return Object[_0x4e8fbe(0xf2)](this[_0x4e8fbe(0xef)]||{})[_0x4e8fbe(0xfe)]((_0x3a4493,_0x313096)=>_0x3a4493+Number(_0x313096||0x0),0x0);},'jtStatus'(_0x143380){const _0x267128=_0x3daca6;return this[_0x267128(0xdd)][_0x143380]?.[_0x267128(0xc7)]??null;},'jtStatusColor'(_0x4f2c47){return s[this['jtStatus'](_0x4f2c47)]??null;},'selectType'(_0x2bd6ff){const _0x5eea46=_0x3daca6;this['selectedType']=_0x2bd6ff??null,_0x409ce8[_0x5eea46(0x109)](_0x5eea46(0xe9),this[_0x5eea46(0xd1)]);},async 'refresh'(){const _0x454d84=_0x3daca6;await this[_0x454d84(0xde)]();},'clearFilter'(){this['filterText']='';},'_scheduleLoad'(){const _0x5ec09b=_0x3daca6;clearTimeout(this[_0x5ec09b(0xc9)]),this[_0x5ec09b(0xc9)]=setTimeout(()=>this['load'](),0x190);}}),async 'mount'(_0x54045d){const _0x4fc83e=_0x3daca6;await this['load'](),this['selectedType']=_0x54045d[_0x4fc83e(0xd7)]['selectedtype']??null;const _0x4ec557=()=>this['_scheduleLoad']();this['_unsubs']=[_0x204853['on']('queue:enqueued',_0x4ec557),_0x204853['on'](_0x4fc83e(0xe4),_0x4ec557),_0x204853['on'](_0x4fc83e(0xe6),_0x4ec557),_0x204853['on'](_0x4fc83e(0xfa),_0x4ec557),_0x204853['on'](_0x4fc83e(0x102),_0x4ec557),_0x204853['on'](_0x4fc83e(0xd3),_0x4ec557),_0x204853['on'](_0x4fc83e(0x106),_0x4ec557),_0x204853['on'](_0x4fc83e(0xe0),_0x4ec557),_0x204853['on'](_0x4fc83e(0x104),_0x4ec557),_0x204853['on'](_0x4fc83e(0xd4),_0x4ec557)],_0x54045d['$watch'](()=>_0x535c46[_0x4fc83e(0x10a)],()=>{const _0x3c0a31=_0x4fc83e;this[_0x3c0a31(0xca)]=0x0,this[_0x3c0a31(0xdc)]=[],this[_0x3c0a31(0xda)]='',this['selectedType']=null,_0x54045d[_0x3c0a31(0x109)](_0x3c0a31(0xe9),null),this['load']();}),_0x54045d[_0x4fc83e(0x10b)](()=>_0x54045d[_0x4fc83e(0xd7)][_0x4fc83e(0xfd)],_0x27bf3e=>{const _0x2d9c6b=_0x4fc83e;this[_0x2d9c6b(0xd1)]=_0x27bf3e??null;});},'unmount'(){const _0x52a6c7=_0x3daca6;clearTimeout(this['_reloadTimer']);for(const _0x109727 of this[_0x52a6c7(0xfc)])_0x109727();this[_0x52a6c7(0xfc)]=[];},'template':'\x0a<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:8px;\x20min-height:0;\x22>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20justify-content:space-between;\x20gap:8px;\x22>\x0a\x20\x20\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20flex-wrap:wrap;\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22font-weight:600;\x20font-size:12px;\x20opacity:.7;\x20text-transform:uppercase;\x20letter-spacing:.05em;\x22>Types</div>\x0a\x20\x20\x20\x20\x20\x20<if\x20:=\x22totalWorkers()\x20>\x200\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22font-size:10px;\x20padding:1px\x206px;\x20border-radius:999px;\x20border:1px\x20solid\x20color-mix(in\x20srgb,\x20var(--okdb-accent)\x2027%,\x20transparent);\x20color:var(--okdb-accent);\x20background:color-mix(in\x20srgb,\x20var(--okdb-accent)\x207%,\x20transparent);\x22>⚙\x20{{\x20totalWorkers()\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<button\x20@click=\x22load\x22\x20:disabled=\x22busy\x22\x20style=\x22opacity:.6;\x20font-size:11px;\x20padding:2px\x206px;\x22>↻</button>\x0a\x20\x20</div>\x0a\x0a\x20\x20<div\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x22>\x0a\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20:value=\x22filterText\x22\x0a\x20\x20\x20\x20\x20\x20@input=\x22filterText\x20=\x20$event.target.value\x22\x0a\x20\x20\x20\x20\x20\x20placeholder=\x22Filter\x20types…\x22\x0a\x20\x20\x20\x20\x20\x20style=\x22width:100%;\x20min-width:0;\x20padding:6px\x208px;\x20border-radius:6px;\x20border:1px\x20solid\x20var(--okdb-app-border);\x20background:var(--okdb-app-bg-deep);\x20color:var(--okdb-app-fg-strong);\x20font-size:12px;\x22\x0a\x20\x20\x20\x20/>\x0a\x20\x20\x20\x20<if\x20:=\x22filterText\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x20@click=\x22clearFilter()\x22\x20style=\x22opacity:.7;\x20font-size:11px;\x20padding:5px\x207px;\x22>✕</button>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a\x20\x20<!--\x20Types\x20list\x20-->\x0a\x20\x20<div\x20style=\x22display:flex;\x20flex-direction:column;\x20gap:3px;\x20overflow:auto;\x20min-height:0;\x20padding-right:4px;\x22>\x0a\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20@click=\x22selectType(null)\x22\x0a\x20\x20\x20\x20\x20\x20:class=\x22selectedType\x20==\x20null\x20?\x20\x27type-row\x20type-row--on\x27\x20:\x20\x27type-row\x27\x22>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20min-width:0;\x20flex:1;\x20text-align:left;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22white-space:nowrap;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22>All\x20types</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22totalWorkers()\x20>\x200\x22><span\x20class=\x22worker-chip\x22>⚙\x20{{\x20totalWorkers()\x20}}</span></if>\x0a\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.55;\x20font-size:11px;\x22>{{\x20totalFor(null)\x20}}</span>\x0a\x20\x20\x20\x20</button>\x0a\x0a\x20\x20\x20\x20<each\x20:of=\x22types\x22\x20let:item=\x22item\x22>\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20@click=\x22selectType(item.type)\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20:class=\x22selectedType\x20===\x20item.type\x20?\x20\x27type-row\x20type-row--on\x27\x20:\x20\x27type-row\x27\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22display:flex;\x20align-items:center;\x20gap:6px;\x20min-width:0;\x20flex:1;\x20text-align:left;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22jtStatusColor(item.type)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20:style=\x22\x27width:6px;height:6px;border-radius:50%;background:\x27\x20+\x20jtStatusColor(item.type)\x20+\x20\x27;flex-shrink:0;\x27\x22\x20:title=\x22jtStatus(item.type)\x22></span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22white-space:nowrap;\x20overflow:hidden;\x20text-overflow:ellipsis;\x22>{{\x20item.type\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<if\x20:=\x22item.workerCount\x20>\x200\x22><span\x20class=\x22worker-chip\x22>⚙\x20{{\x20item.workerCount\x20}}</span></if>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20style=\x22opacity:.55;\x20font-size:11px;\x22>{{\x20item.total\x20}}</span>\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20</each>\x0a\x0a\x20\x20\x20\x20<if\x20:=\x22!busy\x20&&\x20types.length\x20===\x200\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20style=\x22opacity:.5;\x20font-size:12px;\x20padding:6px\x208px;\x20line-height:1.5;\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20{{\x20filterText\x20?\x20\x27No\x20types\x20match\x20this\x20filter.\x27\x20:\x20\x27No\x20queued\x20job\x20types\x20in\x20this\x20environment.\x27\x20}}\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</if>\x0a\x20\x20</div>\x0a\x0a</div>\x0a','style':_0x3daca6(0xcd)};