@adminiumjs/adminium 0.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +94 -0
- package/dashboard/assets/DeltaPill-dxlsGh-1.js +2 -0
- package/dashboard/assets/DeltaPill-dxlsGh-1.js.map +1 -0
- package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js +2 -0
- package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js.map +1 -0
- package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js +2 -0
- package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js.map +1 -0
- package/dashboard/assets/RemapEditor-z3vRY12e.js +2 -0
- package/dashboard/assets/RemapEditor-z3vRY12e.js.map +1 -0
- package/dashboard/assets/ReviewScreen-COkLQ3T7.js +2 -0
- package/dashboard/assets/ReviewScreen-COkLQ3T7.js.map +1 -0
- package/dashboard/assets/Sparkline-Cvwo368J.js +2 -0
- package/dashboard/assets/Sparkline-Cvwo368J.js.map +1 -0
- package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js +2 -0
- package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js.map +1 -0
- package/dashboard/assets/arc-CPxb74pf.js +2 -0
- package/dashboard/assets/arc-CPxb74pf.js.map +1 -0
- package/dashboard/assets/bars-ranking-components-9Asn_0gR.js +2 -0
- package/dashboard/assets/bars-ranking-components-9Asn_0gR.js.map +1 -0
- package/dashboard/assets/blocks-track-components-BST-NjK2.js +2 -0
- package/dashboard/assets/blocks-track-components-BST-NjK2.js.map +1 -0
- package/dashboard/assets/calendar-track-components-RgNtGtZR.js +2 -0
- package/dashboard/assets/calendar-track-components-RgNtGtZR.js.map +1 -0
- package/dashboard/assets/chrome-track-components-ClNsentC.js +2 -0
- package/dashboard/assets/chrome-track-components-ClNsentC.js.map +1 -0
- package/dashboard/assets/common-BY1j__bD.js +2 -0
- package/dashboard/assets/common-BY1j__bD.js.map +1 -0
- package/dashboard/assets/common-BdlXKpcB.js +2 -0
- package/dashboard/assets/common-BdlXKpcB.js.map +1 -0
- package/dashboard/assets/common-BqqhgMgB.js +2 -0
- package/dashboard/assets/common-BqqhgMgB.js.map +1 -0
- package/dashboard/assets/common-BribWmIo.js +2 -0
- package/dashboard/assets/common-BribWmIo.js.map +1 -0
- package/dashboard/assets/common-Cmf0_lKV.js +2 -0
- package/dashboard/assets/common-Cmf0_lKV.js.map +1 -0
- package/dashboard/assets/common-i0r48qY9.js +2 -0
- package/dashboard/assets/common-i0r48qY9.js.map +1 -0
- package/dashboard/assets/common-x8cfkwpc.js +2 -0
- package/dashboard/assets/common-x8cfkwpc.js.map +1 -0
- package/dashboard/assets/communication-track-components-CNLZXOH_.js +2 -0
- package/dashboard/assets/communication-track-components-CNLZXOH_.js.map +1 -0
- package/dashboard/assets/components-Bp5cFm2d.js +2 -0
- package/dashboard/assets/components-Bp5cFm2d.js.map +1 -0
- package/dashboard/assets/components-C4-O3_gD.js +2 -0
- package/dashboard/assets/components-C4-O3_gD.js.map +1 -0
- package/dashboard/assets/domain-ops-track-components-BPa41AU7.js +2 -0
- package/dashboard/assets/domain-ops-track-components-BPa41AU7.js.map +1 -0
- package/dashboard/assets/domain-track-components-CQ1i1X1t.js +2 -0
- package/dashboard/assets/domain-track-components-CQ1i1X1t.js.map +1 -0
- package/dashboard/assets/errors-BHUWiAQ3.js +2 -0
- package/dashboard/assets/errors-BHUWiAQ3.js.map +1 -0
- package/dashboard/assets/errors-BbyKweDG.js +2 -0
- package/dashboard/assets/errors-BbyKweDG.js.map +1 -0
- package/dashboard/assets/errors-CMQ6JC31.js +2 -0
- package/dashboard/assets/errors-CMQ6JC31.js.map +1 -0
- package/dashboard/assets/errors-D3nVgTmf.js +2 -0
- package/dashboard/assets/errors-D3nVgTmf.js.map +1 -0
- package/dashboard/assets/errors-IqJSoANC.js +2 -0
- package/dashboard/assets/errors-IqJSoANC.js.map +1 -0
- package/dashboard/assets/errors-gmIkO9F6.js +2 -0
- package/dashboard/assets/errors-gmIkO9F6.js.map +1 -0
- package/dashboard/assets/errors-vFk058Vh.js +2 -0
- package/dashboard/assets/errors-vFk058Vh.js.map +1 -0
- package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js +2 -0
- package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js.map +1 -0
- package/dashboard/assets/format-Lx4cQ8k-.js +2 -0
- package/dashboard/assets/format-Lx4cQ8k-.js.map +1 -0
- package/dashboard/assets/forms-track-components-Bc2Hoxdh.js +2 -0
- package/dashboard/assets/forms-track-components-Bc2Hoxdh.js.map +1 -0
- package/dashboard/assets/generated-1EfWhCMA.js +2 -0
- package/dashboard/assets/generated-1EfWhCMA.js.map +1 -0
- package/dashboard/assets/generated-BB3ZMxvx.js +2 -0
- package/dashboard/assets/generated-BB3ZMxvx.js.map +1 -0
- package/dashboard/assets/generated-C0JVNBRX.js +2 -0
- package/dashboard/assets/generated-C0JVNBRX.js.map +1 -0
- package/dashboard/assets/generated-C1W48_-3.js +2 -0
- package/dashboard/assets/generated-C1W48_-3.js.map +1 -0
- package/dashboard/assets/generated-CluiB_xY.js +2 -0
- package/dashboard/assets/generated-CluiB_xY.js.map +1 -0
- package/dashboard/assets/generated-DDGtlf-4.js +2 -0
- package/dashboard/assets/generated-DDGtlf-4.js.map +1 -0
- package/dashboard/assets/generated-DPCHvNto.js +2 -0
- package/dashboard/assets/generated-DPCHvNto.js.map +1 -0
- package/dashboard/assets/geo-track-components-Ct4-MSRw.js +3 -0
- package/dashboard/assets/geo-track-components-Ct4-MSRw.js.map +1 -0
- package/dashboard/assets/ibm-plex-sans-arabic-arabic-400-normal-CyU-ddYS.woff2 +0 -0
- package/dashboard/assets/ibm-plex-sans-arabic-arabic-500-normal-C4MQITzh.woff2 +0 -0
- package/dashboard/assets/ibm-plex-sans-arabic-arabic-600-normal-0pRdybE_.woff2 +0 -0
- package/dashboard/assets/ibm-plex-sans-arabic-arabic-700-normal-DrtBj6UE.woff2 +0 -0
- package/dashboard/assets/index-DPi4cduu.css +1 -0
- package/dashboard/assets/index-PB1II0WV.js +137 -0
- package/dashboard/assets/index-PB1II0WV.js.map +1 -0
- package/dashboard/assets/jetbrains-mono-latin-ext-wght-italic-BrDczivE.woff2 +0 -0
- package/dashboard/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/dashboard/assets/jetbrains-mono-latin-wght-italic-B2M6KQje.woff2 +0 -0
- package/dashboard/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/dashboard/assets/leaflet-CIGW-MKW.css +1 -0
- package/dashboard/assets/leaflet-src-D12shr04.js +2 -0
- package/dashboard/assets/leaflet-src-D12shr04.js.map +1 -0
- package/dashboard/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2 +0 -0
- package/dashboard/assets/manrope-latin-wght-normal-DHIcAJRg.woff2 +0 -0
- package/dashboard/assets/media-track-components-CpeII-tT.js +2 -0
- package/dashboard/assets/media-track-components-CpeII-tT.js.map +1 -0
- package/dashboard/assets/scales-e0tkfEy1.js +2 -0
- package/dashboard/assets/scales-e0tkfEy1.js.map +1 -0
- package/dashboard/assets/sparkline-2JUGDrMW.js +2 -0
- package/dashboard/assets/sparkline-2JUGDrMW.js.map +1 -0
- package/dashboard/assets/stats-BNgXz5BD.js +2 -0
- package/dashboard/assets/stats-BNgXz5BD.js.map +1 -0
- package/dashboard/assets/studio-B7hMOwAF.js +2 -0
- package/dashboard/assets/studio-B7hMOwAF.js.map +1 -0
- package/dashboard/assets/studio-BN_9xHY3.js +2 -0
- package/dashboard/assets/studio-BN_9xHY3.js.map +1 -0
- package/dashboard/assets/studio-Cn2MObe8.js +2 -0
- package/dashboard/assets/studio-Cn2MObe8.js.map +1 -0
- package/dashboard/assets/studio-DZEZCCkw.js +2 -0
- package/dashboard/assets/studio-DZEZCCkw.js.map +1 -0
- package/dashboard/assets/studio-DzatTvLl.js +2 -0
- package/dashboard/assets/studio-DzatTvLl.js.map +1 -0
- package/dashboard/assets/studio-cBlD8x90.js +2 -0
- package/dashboard/assets/studio-cBlD8x90.js.map +1 -0
- package/dashboard/assets/studio-cglZPbJK.js +2 -0
- package/dashboard/assets/studio-cglZPbJK.js.map +1 -0
- package/dashboard/assets/system-track-components-GTYYpnfB.js +2 -0
- package/dashboard/assets/system-track-components-GTYYpnfB.js.map +1 -0
- package/dashboard/assets/tables-tail-components-DiA5GeHB.js +2 -0
- package/dashboard/assets/tables-tail-components-DiA5GeHB.js.map +1 -0
- package/dashboard/assets/tables-track-f-components-CVNPd7rq.js +2 -0
- package/dashboard/assets/tables-track-f-components-CVNPd7rq.js.map +1 -0
- package/dashboard/assets/time-flow-components-nKsaryry.js +2 -0
- package/dashboard/assets/time-flow-components-nKsaryry.js.map +1 -0
- package/dashboard/assets/ui-B-kZetor.js +2 -0
- package/dashboard/assets/ui-B-kZetor.js.map +1 -0
- package/dashboard/assets/ui-BEStJ5Pw.js +2 -0
- package/dashboard/assets/ui-BEStJ5Pw.js.map +1 -0
- package/dashboard/assets/ui-BS5_eDN4.js +2 -0
- package/dashboard/assets/ui-BS5_eDN4.js.map +1 -0
- package/dashboard/assets/ui-BZ0EyxRH.js +2 -0
- package/dashboard/assets/ui-BZ0EyxRH.js.map +1 -0
- package/dashboard/assets/ui-BloJDdt6.js +2 -0
- package/dashboard/assets/ui-BloJDdt6.js.map +1 -0
- package/dashboard/assets/ui-CpdrplJH.js +2 -0
- package/dashboard/assets/ui-CpdrplJH.js.map +1 -0
- package/dashboard/assets/ui-YJfT644k.js +2 -0
- package/dashboard/assets/ui-YJfT644k.js.map +1 -0
- package/dashboard/assets/widgets-uDqZWw4A.js +2 -0
- package/dashboard/assets/widgets-uDqZWw4A.js.map +1 -0
- package/dashboard/index.html +41 -0
- package/dist/app.d.ts +48 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +250 -0
- package/dist/app.js.map +1 -0
- package/dist/auth/audit.d.ts +22 -0
- package/dist/auth/audit.d.ts.map +1 -0
- package/dist/auth/audit.js +17 -0
- package/dist/auth/audit.js.map +1 -0
- package/dist/auth/desktop-session.d.ts +53 -0
- package/dist/auth/desktop-session.d.ts.map +1 -0
- package/dist/auth/desktop-session.js +111 -0
- package/dist/auth/desktop-session.js.map +1 -0
- package/dist/auth/passwords.d.ts +17 -0
- package/dist/auth/passwords.d.ts.map +1 -0
- package/dist/auth/passwords.js +40 -0
- package/dist/auth/passwords.js.map +1 -0
- package/dist/auth/sessions.d.ts +77 -0
- package/dist/auth/sessions.d.ts.map +1 -0
- package/dist/auth/sessions.js +137 -0
- package/dist/auth/sessions.js.map +1 -0
- package/dist/auth/totp.d.ts +30 -0
- package/dist/auth/totp.d.ts.map +1 -0
- package/dist/auth/totp.js +97 -0
- package/dist/auth/totp.js.map +1 -0
- package/dist/backup/backup-service.d.ts +157 -0
- package/dist/backup/backup-service.d.ts.map +1 -0
- package/dist/backup/backup-service.js +354 -0
- package/dist/backup/backup-service.js.map +1 -0
- package/dist/backup/format.d.ts +300 -0
- package/dist/backup/format.d.ts.map +1 -0
- package/dist/backup/format.js +304 -0
- package/dist/backup/format.js.map +1 -0
- package/dist/backup/notify.d.ts +55 -0
- package/dist/backup/notify.d.ts.map +1 -0
- package/dist/backup/notify.js +60 -0
- package/dist/backup/notify.js.map +1 -0
- package/dist/backup/snapshot.d.ts +78 -0
- package/dist/backup/snapshot.d.ts.map +1 -0
- package/dist/backup/snapshot.js +142 -0
- package/dist/backup/snapshot.js.map +1 -0
- package/dist/capabilities/catalog.d.ts +33 -0
- package/dist/capabilities/catalog.d.ts.map +1 -0
- package/dist/capabilities/catalog.js +32 -0
- package/dist/capabilities/catalog.js.map +1 -0
- package/dist/capabilities/grants.d.ts +44 -0
- package/dist/capabilities/grants.d.ts.map +1 -0
- package/dist/capabilities/grants.js +65 -0
- package/dist/capabilities/grants.js.map +1 -0
- package/dist/cli/allowlist.d.ts +46 -0
- package/dist/cli/allowlist.d.ts.map +1 -0
- package/dist/cli/allowlist.js +99 -0
- package/dist/cli/allowlist.js.map +1 -0
- package/dist/cli/args.d.ts +63 -0
- package/dist/cli/args.d.ts.map +1 -0
- package/dist/cli/args.js +92 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/command.d.ts +32 -0
- package/dist/cli/command.d.ts.map +1 -0
- package/dist/cli/command.js +64 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/commands/apply-llm-response.d.ts +32 -0
- package/dist/cli/commands/apply-llm-response.d.ts.map +1 -0
- package/dist/cli/commands/apply-llm-response.js +209 -0
- package/dist/cli/commands/apply-llm-response.js.map +1 -0
- package/dist/cli/commands/export-zip.d.ts +17 -0
- package/dist/cli/commands/export-zip.d.ts.map +1 -0
- package/dist/cli/commands/export-zip.js +111 -0
- package/dist/cli/commands/export-zip.js.map +1 -0
- package/dist/cli/commands/generate-prompt.d.ts +29 -0
- package/dist/cli/commands/generate-prompt.d.ts.map +1 -0
- package/dist/cli/commands/generate-prompt.js +154 -0
- package/dist/cli/commands/generate-prompt.js.map +1 -0
- package/dist/cli/commands/import-zip.d.ts +13 -0
- package/dist/cli/commands/import-zip.d.ts.map +1 -0
- package/dist/cli/commands/import-zip.js +95 -0
- package/dist/cli/commands/import-zip.js.map +1 -0
- package/dist/cli/commands/init.d.ts +47 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +372 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/introspect.d.ts +11 -0
- package/dist/cli/commands/introspect.d.ts.map +1 -0
- package/dist/cli/commands/introspect.js +100 -0
- package/dist/cli/commands/introspect.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +11 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +80 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/start.d.ts +22 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +101 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/exit.d.ts +37 -0
- package/dist/cli/exit.d.ts.map +1 -0
- package/dist/cli/exit.js +39 -0
- package/dist/cli/exit.js.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +17 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/io.d.ts +49 -0
- package/dist/cli/io.d.ts.map +1 -0
- package/dist/cli/io.js +77 -0
- package/dist/cli/io.js.map +1 -0
- package/dist/cli/run.d.ts +35 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +139 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/runtime.d.ts +116 -0
- package/dist/cli/runtime.d.ts.map +1 -0
- package/dist/cli/runtime.js +181 -0
- package/dist/cli/runtime.js.map +1 -0
- package/dist/cli/static-root.d.ts +42 -0
- package/dist/cli/static-root.d.ts.map +1 -0
- package/dist/cli/static-root.js +58 -0
- package/dist/cli/static-root.js.map +1 -0
- package/dist/compose.d.ts +135 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/compose.js +383 -0
- package/dist/compose.js.map +1 -0
- package/dist/config/bootstrap.d.ts +33 -0
- package/dist/config/bootstrap.d.ts.map +1 -0
- package/dist/config/bootstrap.js +81 -0
- package/dist/config/bootstrap.js.map +1 -0
- package/dist/config/env.d.ts +95 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +236 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/secrets.d.ts +24 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +74 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/connections/crypto.d.ts +9 -0
- package/dist/connections/crypto.d.ts.map +1 -0
- package/dist/connections/crypto.js +16 -0
- package/dist/connections/crypto.js.map +1 -0
- package/dist/connections/dsn.d.ts +42 -0
- package/dist/connections/dsn.d.ts.map +1 -0
- package/dist/connections/dsn.js +131 -0
- package/dist/connections/dsn.js.map +1 -0
- package/dist/connections/effective-schema.d.ts +65 -0
- package/dist/connections/effective-schema.d.ts.map +1 -0
- package/dist/connections/effective-schema.js +249 -0
- package/dist/connections/effective-schema.js.map +1 -0
- package/dist/connections/introspect.d.ts +52 -0
- package/dist/connections/introspect.d.ts.map +1 -0
- package/dist/connections/introspect.js +111 -0
- package/dist/connections/introspect.js.map +1 -0
- package/dist/connections/manager.d.ts +97 -0
- package/dist/connections/manager.d.ts.map +1 -0
- package/dist/connections/manager.js +224 -0
- package/dist/connections/manager.js.map +1 -0
- package/dist/connections/register-adapters.d.ts +42 -0
- package/dist/connections/register-adapters.d.ts.map +1 -0
- package/dist/connections/register-adapters.js +92 -0
- package/dist/connections/register-adapters.js.map +1 -0
- package/dist/crud/filters.d.ts +57 -0
- package/dist/crud/filters.d.ts.map +1 -0
- package/dist/crud/filters.js +177 -0
- package/dist/crud/filters.js.map +1 -0
- package/dist/crud/identifiers.d.ts +58 -0
- package/dist/crud/identifiers.d.ts.map +1 -0
- package/dist/crud/identifiers.js +99 -0
- package/dist/crud/identifiers.js.map +1 -0
- package/dist/crud/list.d.ts +51 -0
- package/dist/crud/list.d.ts.map +1 -0
- package/dist/crud/list.js +126 -0
- package/dist/crud/list.js.map +1 -0
- package/dist/crud/mask.d.ts +23 -0
- package/dist/crud/mask.d.ts.map +1 -0
- package/dist/crud/mask.js +41 -0
- package/dist/crud/mask.js.map +1 -0
- package/dist/crud/records.d.ts +33 -0
- package/dist/crud/records.d.ts.map +1 -0
- package/dist/crud/records.js +126 -0
- package/dist/crud/records.js.map +1 -0
- package/dist/crud/undo.d.ts +55 -0
- package/dist/crud/undo.d.ts.map +1 -0
- package/dist/crud/undo.js +74 -0
- package/dist/crud/undo.js.map +1 -0
- package/dist/data-io/coerce.d.ts +28 -0
- package/dist/data-io/coerce.d.ts.map +1 -0
- package/dist/data-io/coerce.js +123 -0
- package/dist/data-io/coerce.js.map +1 -0
- package/dist/data-io/csv.d.ts +38 -0
- package/dist/data-io/csv.d.ts.map +1 -0
- package/dist/data-io/csv.js +138 -0
- package/dist/data-io/csv.js.map +1 -0
- package/dist/data-io/snapshot-view.d.ts +10 -0
- package/dist/data-io/snapshot-view.d.ts.map +1 -0
- package/dist/data-io/snapshot-view.js +19 -0
- package/dist/data-io/snapshot-view.js.map +1 -0
- package/dist/desktop/demo-seed.d.ts +23 -0
- package/dist/desktop/demo-seed.d.ts.map +1 -0
- package/dist/desktop/demo-seed.js +28 -0
- package/dist/desktop/demo-seed.js.map +1 -0
- package/dist/desktop/lan-share.d.ts +94 -0
- package/dist/desktop/lan-share.d.ts.map +1 -0
- package/dist/desktop/lan-share.js +150 -0
- package/dist/desktop/lan-share.js.map +1 -0
- package/dist/errors.d.ts +72 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +82 -0
- package/dist/errors.js.map +1 -0
- package/dist/export/bundle.d.ts +235 -0
- package/dist/export/bundle.d.ts.map +1 -0
- package/dist/export/bundle.js +172 -0
- package/dist/export/bundle.js.map +1 -0
- package/dist/export/import-service.d.ts +99 -0
- package/dist/export/import-service.d.ts.map +1 -0
- package/dist/export/import-service.js +515 -0
- package/dist/export/import-service.js.map +1 -0
- package/dist/export/readme.d.ts +25 -0
- package/dist/export/readme.d.ts.map +1 -0
- package/dist/export/readme.js +154 -0
- package/dist/export/readme.js.map +1 -0
- package/dist/export/redaction.d.ts +118 -0
- package/dist/export/redaction.d.ts.map +1 -0
- package/dist/export/redaction.js +233 -0
- package/dist/export/redaction.js.map +1 -0
- package/dist/export/zip-service.d.ts +66 -0
- package/dist/export/zip-service.d.ts.map +1 -0
- package/dist/export/zip-service.js +306 -0
- package/dist/export/zip-service.js.map +1 -0
- package/dist/files/storage.d.ts +50 -0
- package/dist/files/storage.d.ts.map +1 -0
- package/dist/files/storage.js +100 -0
- package/dist/files/storage.js.map +1 -0
- package/dist/generate/materialize-llm.d.ts +45 -0
- package/dist/generate/materialize-llm.d.ts.map +1 -0
- package/dist/generate/materialize-llm.js +167 -0
- package/dist/generate/materialize-llm.js.map +1 -0
- package/dist/generate/run.d.ts +48 -0
- package/dist/generate/run.d.ts.map +1 -0
- package/dist/generate/run.js +123 -0
- package/dist/generate/run.js.map +1 -0
- package/dist/index.d.ts +89 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/export-run.d.ts +38 -0
- package/dist/jobs/export-run.d.ts.map +1 -0
- package/dist/jobs/export-run.js +172 -0
- package/dist/jobs/export-run.js.map +1 -0
- package/dist/jobs/import-run.d.ts +43 -0
- package/dist/jobs/import-run.d.ts.map +1 -0
- package/dist/jobs/import-run.js +290 -0
- package/dist/jobs/import-run.js.map +1 -0
- package/dist/jobs/llm-run.d.ts +73 -0
- package/dist/jobs/llm-run.d.ts.map +1 -0
- package/dist/jobs/llm-run.js +225 -0
- package/dist/jobs/llm-run.js.map +1 -0
- package/dist/jobs/register.d.ts +90 -0
- package/dist/jobs/register.d.ts.map +1 -0
- package/dist/jobs/register.js +121 -0
- package/dist/jobs/register.js.map +1 -0
- package/dist/jobs/registry.d.ts +74 -0
- package/dist/jobs/registry.d.ts.map +1 -0
- package/dist/jobs/registry.js +78 -0
- package/dist/jobs/registry.js.map +1 -0
- package/dist/jobs/report-run.d.ts +64 -0
- package/dist/jobs/report-run.d.ts.map +1 -0
- package/dist/jobs/report-run.js +221 -0
- package/dist/jobs/report-run.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +72 -0
- package/dist/jobs/scheduler.d.ts.map +1 -0
- package/dist/jobs/scheduler.js +121 -0
- package/dist/jobs/scheduler.js.map +1 -0
- package/dist/jobs/worker.d.ts +110 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/jobs/worker.js +282 -0
- package/dist/jobs/worker.js.map +1 -0
- package/dist/llm/apply-service.d.ts +150 -0
- package/dist/llm/apply-service.d.ts.map +1 -0
- package/dist/llm/apply-service.js +463 -0
- package/dist/llm/apply-service.js.map +1 -0
- package/dist/llm/apply-undo-store.d.ts +50 -0
- package/dist/llm/apply-undo-store.d.ts.map +1 -0
- package/dist/llm/apply-undo-store.js +60 -0
- package/dist/llm/apply-undo-store.js.map +1 -0
- package/dist/llm/direct-runner.d.ts +146 -0
- package/dist/llm/direct-runner.d.ts.map +1 -0
- package/dist/llm/direct-runner.js +204 -0
- package/dist/llm/direct-runner.js.map +1 -0
- package/dist/llm/prompt-service.d.ts +90 -0
- package/dist/llm/prompt-service.d.ts.map +1 -0
- package/dist/llm/prompt-service.js +93 -0
- package/dist/llm/prompt-service.js.map +1 -0
- package/dist/llm/provider-resolver.d.ts +25 -0
- package/dist/llm/provider-resolver.d.ts.map +1 -0
- package/dist/llm/provider-resolver.js +81 -0
- package/dist/llm/provider-resolver.js.map +1 -0
- package/dist/llm/run-service.d.ts +215 -0
- package/dist/llm/run-service.d.ts.map +1 -0
- package/dist/llm/run-service.js +343 -0
- package/dist/llm/run-service.js.map +1 -0
- package/dist/llm/stats-collector.d.ts +40 -0
- package/dist/llm/stats-collector.d.ts.map +1 -0
- package/dist/llm/stats-collector.js +74 -0
- package/dist/llm/stats-collector.js.map +1 -0
- package/dist/log-scrub.d.ts +58 -0
- package/dist/log-scrub.d.ts.map +1 -0
- package/dist/log-scrub.js +103 -0
- package/dist/log-scrub.js.map +1 -0
- package/dist/meta/store.d.ts +96 -0
- package/dist/meta/store.d.ts.map +1 -0
- package/dist/meta/store.js +192 -0
- package/dist/meta/store.js.map +1 -0
- package/dist/notifications/notify.d.ts +43 -0
- package/dist/notifications/notify.d.ts.map +1 -0
- package/dist/notifications/notify.js +42 -0
- package/dist/notifications/notify.js.map +1 -0
- package/dist/plugins/auth.d.ts +42 -0
- package/dist/plugins/auth.d.ts.map +1 -0
- package/dist/plugins/auth.js +84 -0
- package/dist/plugins/auth.js.map +1 -0
- package/dist/plugins/core.d.ts +48 -0
- package/dist/plugins/core.d.ts.map +1 -0
- package/dist/plugins/core.js +248 -0
- package/dist/plugins/core.js.map +1 -0
- package/dist/plugins/rbac.d.ts +54 -0
- package/dist/plugins/rbac.d.ts.map +1 -0
- package/dist/plugins/rbac.js +103 -0
- package/dist/plugins/rbac.js.map +1 -0
- package/dist/plugins/static.d.ts +12 -0
- package/dist/plugins/static.d.ts.map +1 -0
- package/dist/plugins/static.js +36 -0
- package/dist/plugins/static.js.map +1 -0
- package/dist/rbac/api-keys.d.ts +30 -0
- package/dist/rbac/api-keys.d.ts.map +1 -0
- package/dist/rbac/api-keys.js +41 -0
- package/dist/rbac/api-keys.js.map +1 -0
- package/dist/rbac/index.d.ts +6 -0
- package/dist/rbac/index.d.ts.map +1 -0
- package/dist/rbac/index.js +6 -0
- package/dist/rbac/index.js.map +1 -0
- package/dist/rbac/permissions.d.ts +107 -0
- package/dist/rbac/permissions.d.ts.map +1 -0
- package/dist/rbac/permissions.js +250 -0
- package/dist/rbac/permissions.js.map +1 -0
- package/dist/rbac/principal.d.ts +33 -0
- package/dist/rbac/principal.d.ts.map +1 -0
- package/dist/rbac/principal.js +31 -0
- package/dist/rbac/principal.js.map +1 -0
- package/dist/rbac/resolver.d.ts +26 -0
- package/dist/rbac/resolver.d.ts.map +1 -0
- package/dist/rbac/resolver.js +46 -0
- package/dist/rbac/resolver.js.map +1 -0
- package/dist/realtime/hub.d.ts +90 -0
- package/dist/realtime/hub.d.ts.map +1 -0
- package/dist/realtime/hub.js +146 -0
- package/dist/realtime/hub.js.map +1 -0
- package/dist/realtime/sse.d.ts +35 -0
- package/dist/realtime/sse.d.ts.map +1 -0
- package/dist/realtime/sse.js +88 -0
- package/dist/realtime/sse.js.map +1 -0
- package/dist/realtime/ws.d.ts +38 -0
- package/dist/realtime/ws.d.ts.map +1 -0
- package/dist/realtime/ws.js +124 -0
- package/dist/realtime/ws.js.map +1 -0
- package/dist/reports/schedule.d.ts +14 -0
- package/dist/reports/schedule.d.ts.map +1 -0
- package/dist/reports/schedule.js +63 -0
- package/dist/reports/schedule.js.map +1 -0
- package/dist/routes/about/index.d.ts +39 -0
- package/dist/routes/about/index.d.ts.map +1 -0
- package/dist/routes/about/index.js +73 -0
- package/dist/routes/about/index.js.map +1 -0
- package/dist/routes/about/schema.d.ts +50 -0
- package/dist/routes/about/schema.d.ts.map +1 -0
- package/dist/routes/about/schema.js +53 -0
- package/dist/routes/about/schema.js.map +1 -0
- package/dist/routes/api-keys/index.d.ts +11 -0
- package/dist/routes/api-keys/index.d.ts.map +1 -0
- package/dist/routes/api-keys/index.js +79 -0
- package/dist/routes/api-keys/index.js.map +1 -0
- package/dist/routes/api-keys/schema.d.ts +62 -0
- package/dist/routes/api-keys/schema.d.ts.map +1 -0
- package/dist/routes/api-keys/schema.js +37 -0
- package/dist/routes/api-keys/schema.js.map +1 -0
- package/dist/routes/audit/index.d.ts +11 -0
- package/dist/routes/audit/index.d.ts.map +1 -0
- package/dist/routes/audit/index.js +107 -0
- package/dist/routes/audit/index.js.map +1 -0
- package/dist/routes/audit/schema.d.ts +129 -0
- package/dist/routes/audit/schema.d.ts.map +1 -0
- package/dist/routes/audit/schema.js +43 -0
- package/dist/routes/audit/schema.js.map +1 -0
- package/dist/routes/auth/desktop-session.d.ts +48 -0
- package/dist/routes/auth/desktop-session.d.ts.map +1 -0
- package/dist/routes/auth/desktop-session.js +132 -0
- package/dist/routes/auth/desktop-session.js.map +1 -0
- package/dist/routes/auth/handlers.d.ts +21 -0
- package/dist/routes/auth/handlers.d.ts.map +1 -0
- package/dist/routes/auth/handlers.js +256 -0
- package/dist/routes/auth/handlers.js.map +1 -0
- package/dist/routes/auth/index.d.ts +27 -0
- package/dist/routes/auth/index.d.ts.map +1 -0
- package/dist/routes/auth/index.js +67 -0
- package/dist/routes/auth/index.js.map +1 -0
- package/dist/routes/auth/schema.d.ts +129 -0
- package/dist/routes/auth/schema.d.ts.map +1 -0
- package/dist/routes/auth/schema.js +84 -0
- package/dist/routes/auth/schema.js.map +1 -0
- package/dist/routes/bootstrap/handlers.d.ts +34 -0
- package/dist/routes/bootstrap/handlers.d.ts.map +1 -0
- package/dist/routes/bootstrap/handlers.js +96 -0
- package/dist/routes/bootstrap/handlers.js.map +1 -0
- package/dist/routes/bootstrap/index.d.ts +9 -0
- package/dist/routes/bootstrap/index.d.ts.map +1 -0
- package/dist/routes/bootstrap/index.js +16 -0
- package/dist/routes/bootstrap/index.js.map +1 -0
- package/dist/routes/bootstrap/schema.d.ts +177 -0
- package/dist/routes/bootstrap/schema.d.ts.map +1 -0
- package/dist/routes/bootstrap/schema.js +55 -0
- package/dist/routes/bootstrap/schema.js.map +1 -0
- package/dist/routes/connections/index.d.ts +21 -0
- package/dist/routes/connections/index.d.ts.map +1 -0
- package/dist/routes/connections/index.js +260 -0
- package/dist/routes/connections/index.js.map +1 -0
- package/dist/routes/connections/schema.d.ts +161 -0
- package/dist/routes/connections/schema.d.ts.map +1 -0
- package/dist/routes/connections/schema.js +91 -0
- package/dist/routes/connections/schema.js.map +1 -0
- package/dist/routes/data/index.d.ts +46 -0
- package/dist/routes/data/index.d.ts.map +1 -0
- package/dist/routes/data/index.js +508 -0
- package/dist/routes/data/index.js.map +1 -0
- package/dist/routes/data/schema.d.ts +128 -0
- package/dist/routes/data/schema.d.ts.map +1 -0
- package/dist/routes/data/schema.js +83 -0
- package/dist/routes/data/schema.js.map +1 -0
- package/dist/routes/desktop/index.d.ts +61 -0
- package/dist/routes/desktop/index.d.ts.map +1 -0
- package/dist/routes/desktop/index.js +91 -0
- package/dist/routes/desktop/index.js.map +1 -0
- package/dist/routes/desktop/schema.d.ts +71 -0
- package/dist/routes/desktop/schema.d.ts.map +1 -0
- package/dist/routes/desktop/schema.js +58 -0
- package/dist/routes/desktop/schema.js.map +1 -0
- package/dist/routes/desktop-capabilities/index.d.ts +9 -0
- package/dist/routes/desktop-capabilities/index.d.ts.map +1 -0
- package/dist/routes/desktop-capabilities/index.js +62 -0
- package/dist/routes/desktop-capabilities/index.js.map +1 -0
- package/dist/routes/desktop-capabilities/schema.d.ts +46 -0
- package/dist/routes/desktop-capabilities/schema.d.ts.map +1 -0
- package/dist/routes/desktop-capabilities/schema.js +30 -0
- package/dist/routes/desktop-capabilities/schema.js.map +1 -0
- package/dist/routes/desktop-demo/handlers.d.ts +94 -0
- package/dist/routes/desktop-demo/handlers.d.ts.map +1 -0
- package/dist/routes/desktop-demo/handlers.js +182 -0
- package/dist/routes/desktop-demo/handlers.js.map +1 -0
- package/dist/routes/desktop-demo/index.d.ts +39 -0
- package/dist/routes/desktop-demo/index.d.ts.map +1 -0
- package/dist/routes/desktop-demo/index.js +73 -0
- package/dist/routes/desktop-demo/index.js.map +1 -0
- package/dist/routes/desktop-demo/schema.d.ts +17 -0
- package/dist/routes/desktop-demo/schema.d.ts.map +1 -0
- package/dist/routes/desktop-demo/schema.js +30 -0
- package/dist/routes/desktop-demo/schema.js.map +1 -0
- package/dist/routes/desktop-lan/index.d.ts +54 -0
- package/dist/routes/desktop-lan/index.d.ts.map +1 -0
- package/dist/routes/desktop-lan/index.js +33 -0
- package/dist/routes/desktop-lan/index.js.map +1 -0
- package/dist/routes/desktop-lan/schema.d.ts +24 -0
- package/dist/routes/desktop-lan/schema.d.ts.map +1 -0
- package/dist/routes/desktop-lan/schema.js +40 -0
- package/dist/routes/desktop-lan/schema.js.map +1 -0
- package/dist/routes/desktop-local-db/handlers.d.ts +92 -0
- package/dist/routes/desktop-local-db/handlers.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/handlers.js +300 -0
- package/dist/routes/desktop-local-db/handlers.js.map +1 -0
- package/dist/routes/desktop-local-db/index.d.ts +39 -0
- package/dist/routes/desktop-local-db/index.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/index.js +83 -0
- package/dist/routes/desktop-local-db/index.js.map +1 -0
- package/dist/routes/desktop-local-db/placeholder.d.ts +75 -0
- package/dist/routes/desktop-local-db/placeholder.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/placeholder.js +420 -0
- package/dist/routes/desktop-local-db/placeholder.js.map +1 -0
- package/dist/routes/desktop-local-db/schema.d.ts +50 -0
- package/dist/routes/desktop-local-db/schema.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/schema.js +71 -0
- package/dist/routes/desktop-local-db/schema.js.map +1 -0
- package/dist/routes/desktop-local-db/sqlite-ddl.d.ts +104 -0
- package/dist/routes/desktop-local-db/sqlite-ddl.d.ts.map +1 -0
- package/dist/routes/desktop-local-db/sqlite-ddl.js +419 -0
- package/dist/routes/desktop-local-db/sqlite-ddl.js.map +1 -0
- package/dist/routes/email-templates/index.d.ts +7 -0
- package/dist/routes/email-templates/index.d.ts.map +1 -0
- package/dist/routes/email-templates/index.js +70 -0
- package/dist/routes/email-templates/index.js.map +1 -0
- package/dist/routes/email-templates/schema.d.ts +54 -0
- package/dist/routes/email-templates/schema.d.ts.map +1 -0
- package/dist/routes/email-templates/schema.js +35 -0
- package/dist/routes/email-templates/schema.js.map +1 -0
- package/dist/routes/exports/index.d.ts +19 -0
- package/dist/routes/exports/index.d.ts.map +1 -0
- package/dist/routes/exports/index.js +145 -0
- package/dist/routes/exports/index.js.map +1 -0
- package/dist/routes/exports/schema.d.ts +183 -0
- package/dist/routes/exports/schema.d.ts.map +1 -0
- package/dist/routes/exports/schema.js +37 -0
- package/dist/routes/exports/schema.js.map +1 -0
- package/dist/routes/generate/index.d.ts +23 -0
- package/dist/routes/generate/index.d.ts.map +1 -0
- package/dist/routes/generate/index.js +80 -0
- package/dist/routes/generate/index.js.map +1 -0
- package/dist/routes/generate/schema.d.ts +43 -0
- package/dist/routes/generate/schema.d.ts.map +1 -0
- package/dist/routes/generate/schema.js +37 -0
- package/dist/routes/generate/schema.js.map +1 -0
- package/dist/routes/imports/index.d.ts +21 -0
- package/dist/routes/imports/index.d.ts.map +1 -0
- package/dist/routes/imports/index.js +288 -0
- package/dist/routes/imports/index.js.map +1 -0
- package/dist/routes/imports/schema.d.ts +292 -0
- package/dist/routes/imports/schema.d.ts.map +1 -0
- package/dist/routes/imports/schema.js +78 -0
- package/dist/routes/imports/schema.js.map +1 -0
- package/dist/routes/index.d.ts +11 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +8 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/jobs/index.d.ts +29 -0
- package/dist/routes/jobs/index.d.ts.map +1 -0
- package/dist/routes/jobs/index.js +175 -0
- package/dist/routes/jobs/index.js.map +1 -0
- package/dist/routes/jobs/schema.d.ts +170 -0
- package/dist/routes/jobs/schema.d.ts.map +1 -0
- package/dist/routes/jobs/schema.js +57 -0
- package/dist/routes/jobs/schema.js.map +1 -0
- package/dist/routes/llm/config-service.d.ts +48 -0
- package/dist/routes/llm/config-service.d.ts.map +1 -0
- package/dist/routes/llm/config-service.js +102 -0
- package/dist/routes/llm/config-service.js.map +1 -0
- package/dist/routes/llm/index.d.ts +69 -0
- package/dist/routes/llm/index.d.ts.map +1 -0
- package/dist/routes/llm/index.js +412 -0
- package/dist/routes/llm/index.js.map +1 -0
- package/dist/routes/llm/schema.d.ts +605 -0
- package/dist/routes/llm/schema.d.ts.map +1 -0
- package/dist/routes/llm/schema.js +238 -0
- package/dist/routes/llm/schema.js.map +1 -0
- package/dist/routes/me/handlers.d.ts +14 -0
- package/dist/routes/me/handlers.d.ts.map +1 -0
- package/dist/routes/me/handlers.js +88 -0
- package/dist/routes/me/handlers.js.map +1 -0
- package/dist/routes/me/index.d.ts +8 -0
- package/dist/routes/me/index.d.ts.map +1 -0
- package/dist/routes/me/index.js +17 -0
- package/dist/routes/me/index.js.map +1 -0
- package/dist/routes/me/schema.d.ts +270 -0
- package/dist/routes/me/schema.d.ts.map +1 -0
- package/dist/routes/me/schema.js +59 -0
- package/dist/routes/me/schema.js.map +1 -0
- package/dist/routes/me-views/index.d.ts +23 -0
- package/dist/routes/me-views/index.d.ts.map +1 -0
- package/dist/routes/me-views/index.js +76 -0
- package/dist/routes/me-views/index.js.map +1 -0
- package/dist/routes/me-views/schema.d.ts +44 -0
- package/dist/routes/me-views/schema.d.ts.map +1 -0
- package/dist/routes/me-views/schema.js +13 -0
- package/dist/routes/me-views/schema.js.map +1 -0
- package/dist/routes/notifications/index.d.ts +19 -0
- package/dist/routes/notifications/index.d.ts.map +1 -0
- package/dist/routes/notifications/index.js +123 -0
- package/dist/routes/notifications/index.js.map +1 -0
- package/dist/routes/notifications/schema.d.ts +122 -0
- package/dist/routes/notifications/schema.d.ts.map +1 -0
- package/dist/routes/notifications/schema.js +83 -0
- package/dist/routes/notifications/schema.js.map +1 -0
- package/dist/routes/onboarding/derive.d.ts +41 -0
- package/dist/routes/onboarding/derive.d.ts.map +1 -0
- package/dist/routes/onboarding/derive.js +30 -0
- package/dist/routes/onboarding/derive.js.map +1 -0
- package/dist/routes/onboarding/index.d.ts +26 -0
- package/dist/routes/onboarding/index.d.ts.map +1 -0
- package/dist/routes/onboarding/index.js +95 -0
- package/dist/routes/onboarding/index.js.map +1 -0
- package/dist/routes/onboarding/schema.d.ts +22 -0
- package/dist/routes/onboarding/schema.d.ts.map +1 -0
- package/dist/routes/onboarding/schema.js +22 -0
- package/dist/routes/onboarding/schema.js.map +1 -0
- package/dist/routes/pages/index.d.ts +26 -0
- package/dist/routes/pages/index.d.ts.map +1 -0
- package/dist/routes/pages/index.js +119 -0
- package/dist/routes/pages/index.js.map +1 -0
- package/dist/routes/pages/layout-schema.d.ts +19 -0
- package/dist/routes/pages/layout-schema.d.ts.map +1 -0
- package/dist/routes/pages/layout-schema.js +19 -0
- package/dist/routes/pages/layout-schema.js.map +1 -0
- package/dist/routes/pages/schema.d.ts +52 -0
- package/dist/routes/pages/schema.d.ts.map +1 -0
- package/dist/routes/pages/schema.js +35 -0
- package/dist/routes/pages/schema.js.map +1 -0
- package/dist/routes/roles/index.d.ts +17 -0
- package/dist/routes/roles/index.d.ts.map +1 -0
- package/dist/routes/roles/index.js +255 -0
- package/dist/routes/roles/index.js.map +1 -0
- package/dist/routes/roles/schema.d.ts +94 -0
- package/dist/routes/roles/schema.d.ts.map +1 -0
- package/dist/routes/roles/schema.js +57 -0
- package/dist/routes/roles/schema.js.map +1 -0
- package/dist/routes/scheduled-reports/index.d.ts +15 -0
- package/dist/routes/scheduled-reports/index.d.ts.map +1 -0
- package/dist/routes/scheduled-reports/index.js +195 -0
- package/dist/routes/scheduled-reports/index.js.map +1 -0
- package/dist/routes/scheduled-reports/schema.d.ts +154 -0
- package/dist/routes/scheduled-reports/schema.d.ts.map +1 -0
- package/dist/routes/scheduled-reports/schema.js +49 -0
- package/dist/routes/scheduled-reports/schema.js.map +1 -0
- package/dist/routes/schema/index.d.ts +24 -0
- package/dist/routes/schema/index.d.ts.map +1 -0
- package/dist/routes/schema/index.js +224 -0
- package/dist/routes/schema/index.js.map +1 -0
- package/dist/routes/schema/schema.d.ts +92 -0
- package/dist/routes/schema/schema.d.ts.map +1 -0
- package/dist/routes/schema/schema.js +64 -0
- package/dist/routes/schema/schema.js.map +1 -0
- package/dist/routes/schema-import/fallback-parser.d.ts +35 -0
- package/dist/routes/schema-import/fallback-parser.d.ts.map +1 -0
- package/dist/routes/schema-import/fallback-parser.js +349 -0
- package/dist/routes/schema-import/fallback-parser.js.map +1 -0
- package/dist/routes/schema-import/index.d.ts +43 -0
- package/dist/routes/schema-import/index.d.ts.map +1 -0
- package/dist/routes/schema-import/index.js +167 -0
- package/dist/routes/schema-import/index.js.map +1 -0
- package/dist/routes/schema-import/schema.d.ts +65 -0
- package/dist/routes/schema-import/schema.d.ts.map +1 -0
- package/dist/routes/schema-import/schema.js +40 -0
- package/dist/routes/schema-import/schema.js.map +1 -0
- package/dist/routes/search/index.d.ts +71 -0
- package/dist/routes/search/index.d.ts.map +1 -0
- package/dist/routes/search/index.js +361 -0
- package/dist/routes/search/index.js.map +1 -0
- package/dist/routes/search/schema.d.ts +125 -0
- package/dist/routes/search/schema.d.ts.map +1 -0
- package/dist/routes/search/schema.js +70 -0
- package/dist/routes/search/schema.js.map +1 -0
- package/dist/routes/settings/index.d.ts +24 -0
- package/dist/routes/settings/index.d.ts.map +1 -0
- package/dist/routes/settings/index.js +164 -0
- package/dist/routes/settings/index.js.map +1 -0
- package/dist/routes/settings/schema.d.ts +110 -0
- package/dist/routes/settings/schema.d.ts.map +1 -0
- package/dist/routes/settings/schema.js +71 -0
- package/dist/routes/settings/schema.js.map +1 -0
- package/dist/routes/setup/index.d.ts +29 -0
- package/dist/routes/setup/index.d.ts.map +1 -0
- package/dist/routes/setup/index.js +68 -0
- package/dist/routes/setup/index.js.map +1 -0
- package/dist/routes/setup/schema.d.ts +61 -0
- package/dist/routes/setup/schema.d.ts.map +1 -0
- package/dist/routes/setup/schema.js +47 -0
- package/dist/routes/setup/schema.js.map +1 -0
- package/dist/routes/system/handlers.d.ts +63 -0
- package/dist/routes/system/handlers.d.ts.map +1 -0
- package/dist/routes/system/handlers.js +121 -0
- package/dist/routes/system/handlers.js.map +1 -0
- package/dist/routes/system/index.d.ts +34 -0
- package/dist/routes/system/index.d.ts.map +1 -0
- package/dist/routes/system/index.js +18 -0
- package/dist/routes/system/index.js.map +1 -0
- package/dist/routes/system/schema.d.ts +93 -0
- package/dist/routes/system/schema.d.ts.map +1 -0
- package/dist/routes/system/schema.js +109 -0
- package/dist/routes/system/schema.js.map +1 -0
- package/dist/routes/views/index.d.ts +21 -0
- package/dist/routes/views/index.d.ts.map +1 -0
- package/dist/routes/views/index.js +155 -0
- package/dist/routes/views/index.js.map +1 -0
- package/dist/routes/views/schema.d.ts +127 -0
- package/dist/routes/views/schema.d.ts.map +1 -0
- package/dist/routes/views/schema.js +56 -0
- package/dist/routes/views/schema.js.map +1 -0
- package/dist/routes/widget-data/index.d.ts +29 -0
- package/dist/routes/widget-data/index.d.ts.map +1 -0
- package/dist/routes/widget-data/index.js +152 -0
- package/dist/routes/widget-data/index.js.map +1 -0
- package/dist/routes/widget-data/schema.d.ts +252 -0
- package/dist/routes/widget-data/schema.d.ts.map +1 -0
- package/dist/routes/widget-data/schema.js +44 -0
- package/dist/routes/widget-data/schema.js.map +1 -0
- package/dist/setup/service.d.ts +63 -0
- package/dist/setup/service.d.ts.map +1 -0
- package/dist/setup/service.js +103 -0
- package/dist/setup/service.js.map +1 -0
- package/dist/start.d.ts +12 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +28 -0
- package/dist/start.js.map +1 -0
- package/dist/telemetry/payload.d.ts +66 -0
- package/dist/telemetry/payload.d.ts.map +1 -0
- package/dist/telemetry/payload.js +69 -0
- package/dist/telemetry/payload.js.map +1 -0
- package/dist/telemetry/service.d.ts +67 -0
- package/dist/telemetry/service.d.ts.map +1 -0
- package/dist/telemetry/service.js +103 -0
- package/dist/telemetry/service.js.map +1 -0
- package/dist/telemetry/update-check.d.ts +79 -0
- package/dist/telemetry/update-check.d.ts.map +1 -0
- package/dist/telemetry/update-check.js +103 -0
- package/dist/telemetry/update-check.js.map +1 -0
- package/dist/version.d.ts +14 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +21 -0
- package/dist/version.js.map +1 -0
- package/dist/widget-data/cache.d.ts +35 -0
- package/dist/widget-data/cache.d.ts.map +1 -0
- package/dist/widget-data/cache.js +67 -0
- package/dist/widget-data/cache.js.map +1 -0
- package/dist/widget-data/compiler.d.ts +107 -0
- package/dist/widget-data/compiler.d.ts.map +1 -0
- package/dist/widget-data/compiler.js +362 -0
- package/dist/widget-data/compiler.js.map +1 -0
- package/dist/widget-data/shapers.d.ts +75 -0
- package/dist/widget-data/shapers.d.ts.map +1 -0
- package/dist/widget-data/shapers.js +128 -0
- package/dist/widget-data/shapers.js.map +1 -0
- package/dist/widget-data/stream-publisher.d.ts +42 -0
- package/dist/widget-data/stream-publisher.d.ts.map +1 -0
- package/dist/widget-data/stream-publisher.js +34 -0
- package/dist/widget-data/stream-publisher.js.map +1 -0
- package/package.json +79 -0
- package/vocabulary/llm-allowlist.json +76 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `report-run` job handler (M7 reports track; 07-meta-store.md §3.24,
|
|
3
|
+
* 09-generated-app.md §5.4).
|
|
4
|
+
*
|
|
5
|
+
* LOCKED v1 SEMANTICS: a run resolves the report's page, produces a **CSV
|
|
6
|
+
* data snapshot THROUGH the M7-T07 export pipeline** (the export-run handler
|
|
7
|
+
* is invoked in-process via the shared registry — reuse, not a fork), stamps
|
|
8
|
+
* `last_run_at`/`next_run_at`, and delivers an in-app notification linking
|
|
9
|
+
* page + export. The stored `format` stays `pdf | png` (§3.24 vocabulary):
|
|
10
|
+
* that is the user's rendering INTENT, preserved for the release where a
|
|
11
|
+
* renderer exists; the UI labels delivery "Data snapshot (PDF/PNG rendering
|
|
12
|
+
* arrives in a later release)".
|
|
13
|
+
*
|
|
14
|
+
* Grants: the snapshot always runs MASKED (`unmasked: false`). An export
|
|
15
|
+
* request captures the caller's live PII capability at request time; a
|
|
16
|
+
* scheduled run has no request to capture from, and replaying a capability
|
|
17
|
+
* the creator held at schedule time could outlive a revocation — masked is
|
|
18
|
+
* the only honest default. The same revocation logic applies to ROW data:
|
|
19
|
+
* every run re-resolves the creator's live permission set and requires the
|
|
20
|
+
* `table:<conn>:<table>:export` grant before creating the export row (this
|
|
21
|
+
* path bypasses POST /exports, the only other place that grant is checked).
|
|
22
|
+
*
|
|
23
|
+
* Failures advance the schedule (recordRun still fires) so a misconfigured
|
|
24
|
+
* report never hot-loops the queue, and the creator is TOLD via a
|
|
25
|
+
* `report.failed` notification instead of a silent skip.
|
|
26
|
+
*/
|
|
27
|
+
import { type Job, type MetaDb } from '@adminium/meta';
|
|
28
|
+
import type { EnqueueJobInput } from '@adminium/meta';
|
|
29
|
+
import { z } from 'zod';
|
|
30
|
+
import { type NotificationPublisher } from '../notifications/notify.js';
|
|
31
|
+
import type { JobRegistry } from './registry.js';
|
|
32
|
+
export declare const REPORT_RUN_KIND = "report-run";
|
|
33
|
+
export declare const reportRunPayloadSchema: z.ZodObject<{
|
|
34
|
+
reportId: z.ZodString;
|
|
35
|
+
userId: z.ZodOptional<z.ZodString>;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
export type ReportRunPayload = z.infer<typeof reportRunPayloadSchema>;
|
|
38
|
+
/** Notification kinds this handler produces (stable localization keys). */
|
|
39
|
+
export declare const REPORT_READY_KIND = "report.ready";
|
|
40
|
+
export declare const REPORT_FAILED_KIND = "report.failed";
|
|
41
|
+
/** compose.ts poll-schedule identity (jobs.scheduler.registerSchedule). */
|
|
42
|
+
export declare const SCHEDULED_REPORTS_POLL_NAME = "scheduled-reports-poll";
|
|
43
|
+
export declare const SCHEDULED_REPORTS_POLL_CRON = "* * * * *";
|
|
44
|
+
export interface ReportRunDeps {
|
|
45
|
+
meta: MetaDb;
|
|
46
|
+
/**
|
|
47
|
+
* The SAME registry the export-run handler is registered on — report-run
|
|
48
|
+
* drives the export pipeline through it (`registry.get(EXPORT_RUN_KIND)`),
|
|
49
|
+
* so the two handlers can never drift apart on snapshot semantics.
|
|
50
|
+
*/
|
|
51
|
+
registry: JobRegistry;
|
|
52
|
+
/** `app.realtime` — notifications fan out on `notifications:<userId>`. */
|
|
53
|
+
hub?: NotificationPublisher | undefined;
|
|
54
|
+
now?: (() => number) | undefined;
|
|
55
|
+
}
|
|
56
|
+
export declare function registerReportRunHandler(registry: JobRegistry, deps: ReportRunDeps): void;
|
|
57
|
+
/**
|
|
58
|
+
* The compose.ts poll body (scheduler → queue seam): enqueue one `report-run`
|
|
59
|
+
* per due report. The `dedupeKey` carries the due stamp, so a poll tick that
|
|
60
|
+
* fires while the previous run of the SAME occurrence is still queued/running
|
|
61
|
+
* collapses into it, while the next occurrence gets a fresh key.
|
|
62
|
+
*/
|
|
63
|
+
export declare function enqueueDueReports(meta: MetaDb, enqueue: (input: EnqueueJobInput) => Promise<Job>, at?: number): Promise<Job | null>;
|
|
64
|
+
//# sourceMappingURL=report-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-run.d.ts","sourceRoot":"","sources":["../../src/jobs/report-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAgD,KAAK,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAU,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAGhF,OAAO,KAAK,EAAqB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEpE,eAAO,MAAM,eAAe,eAAe,CAAC;AAE5C,eAAO,MAAM,sBAAsB;;;iBAIjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,2EAA2E;AAC3E,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAChD,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAElD,2EAA2E;AAC3E,eAAO,MAAM,2BAA2B,2BAA2B,CAAC;AACpE,eAAO,MAAM,2BAA2B,cAAc,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,EAAE,WAAW,CAAC;IACtB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACxC,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CAClC;AAOD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAKzF;AAoKD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,GAAG,CAAC,EACjD,EAAE,GAAE,MAAmB,GACtB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAcrB"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `report-run` job handler (M7 reports track; 07-meta-store.md §3.24,
|
|
3
|
+
* 09-generated-app.md §5.4).
|
|
4
|
+
*
|
|
5
|
+
* LOCKED v1 SEMANTICS: a run resolves the report's page, produces a **CSV
|
|
6
|
+
* data snapshot THROUGH the M7-T07 export pipeline** (the export-run handler
|
|
7
|
+
* is invoked in-process via the shared registry — reuse, not a fork), stamps
|
|
8
|
+
* `last_run_at`/`next_run_at`, and delivers an in-app notification linking
|
|
9
|
+
* page + export. The stored `format` stays `pdf | png` (§3.24 vocabulary):
|
|
10
|
+
* that is the user's rendering INTENT, preserved for the release where a
|
|
11
|
+
* renderer exists; the UI labels delivery "Data snapshot (PDF/PNG rendering
|
|
12
|
+
* arrives in a later release)".
|
|
13
|
+
*
|
|
14
|
+
* Grants: the snapshot always runs MASKED (`unmasked: false`). An export
|
|
15
|
+
* request captures the caller's live PII capability at request time; a
|
|
16
|
+
* scheduled run has no request to capture from, and replaying a capability
|
|
17
|
+
* the creator held at schedule time could outlive a revocation — masked is
|
|
18
|
+
* the only honest default. The same revocation logic applies to ROW data:
|
|
19
|
+
* every run re-resolves the creator's live permission set and requires the
|
|
20
|
+
* `table:<conn>:<table>:export` grant before creating the export row (this
|
|
21
|
+
* path bypasses POST /exports, the only other place that grant is checked).
|
|
22
|
+
*
|
|
23
|
+
* Failures advance the schedule (recordRun still fires) so a misconfigured
|
|
24
|
+
* report never hot-loops the queue, and the creator is TOLD via a
|
|
25
|
+
* `report.failed` notification instead of a silent skip.
|
|
26
|
+
*/
|
|
27
|
+
import { exportsRepo, pagesRepo, scheduledReportsRepo } from '@adminium/meta';
|
|
28
|
+
import { z } from 'zod';
|
|
29
|
+
import { loadSnapshotView } from '../data-io/snapshot-view.js';
|
|
30
|
+
import { nextRunAtOf } from '../reports/schedule.js';
|
|
31
|
+
import { notify } from '../notifications/notify.js';
|
|
32
|
+
import { permissionSetAllows, resolvePermissionSet } from '../rbac/resolver.js';
|
|
33
|
+
import { EXPORT_RUN_KIND, exportRunPayloadSchema } from './export-run.js';
|
|
34
|
+
export const REPORT_RUN_KIND = 'report-run';
|
|
35
|
+
export const reportRunPayloadSchema = z.object({
|
|
36
|
+
reportId: z.string().min(1),
|
|
37
|
+
/** Owner convention (routes/jobs): the report's creator. */
|
|
38
|
+
userId: z.string().optional(),
|
|
39
|
+
});
|
|
40
|
+
/** Notification kinds this handler produces (stable localization keys). */
|
|
41
|
+
export const REPORT_READY_KIND = 'report.ready';
|
|
42
|
+
export const REPORT_FAILED_KIND = 'report.failed';
|
|
43
|
+
/** compose.ts poll-schedule identity (jobs.scheduler.registerSchedule). */
|
|
44
|
+
export const SCHEDULED_REPORTS_POLL_NAME = 'scheduled-reports-poll';
|
|
45
|
+
export const SCHEDULED_REPORTS_POLL_CRON = '* * * * *';
|
|
46
|
+
/** The page-envelope slice a report needs (01-architecture.md §6.1). */
|
|
47
|
+
const envelopeSourceSchema = z.object({
|
|
48
|
+
source: z.object({ connectionId: z.string().nullable(), table: z.string().nullable() }),
|
|
49
|
+
});
|
|
50
|
+
export function registerReportRunHandler(registry, deps) {
|
|
51
|
+
const now = deps.now ?? Date.now;
|
|
52
|
+
registry.registerJobHandler(REPORT_RUN_KIND, reportRunPayloadSchema, async (payload, ctx) => {
|
|
53
|
+
return executeReportRun(payload, ctx, deps, now);
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
async function executeReportRun(payload, ctx, deps, now) {
|
|
57
|
+
const reports = scheduledReportsRepo(deps.meta);
|
|
58
|
+
const report = await reports.findById(payload.reportId);
|
|
59
|
+
if (report === null) {
|
|
60
|
+
ctx.log('report-run: report not found, skipping', { reportId: payload.reportId });
|
|
61
|
+
return { reportId: payload.reportId, exportId: null };
|
|
62
|
+
}
|
|
63
|
+
if (!report.enabled) {
|
|
64
|
+
ctx.log('report-run: report disabled, skipping', { reportId: report.id });
|
|
65
|
+
return { reportId: report.id, exportId: null };
|
|
66
|
+
}
|
|
67
|
+
/** Stamp the run + park the next occurrence — fires on EVERY outcome. */
|
|
68
|
+
const finishRun = async () => {
|
|
69
|
+
const at = now();
|
|
70
|
+
await reports.recordRun(report.id, { lastRunAt: at, nextRunAt: nextRunAtOf(report.schedule, at) });
|
|
71
|
+
};
|
|
72
|
+
const fail = async (reason) => {
|
|
73
|
+
ctx.log('report-run: failed', { reportId: report.id, reason });
|
|
74
|
+
// Schedule advance FIRST: it must never depend on notification delivery —
|
|
75
|
+
// a lost notification is recoverable, a per-minute re-run loop is not.
|
|
76
|
+
await finishRun();
|
|
77
|
+
if (report.createdBy !== null) {
|
|
78
|
+
try {
|
|
79
|
+
await notify(deps.meta, {
|
|
80
|
+
userId: report.createdBy,
|
|
81
|
+
kind: REPORT_FAILED_KIND,
|
|
82
|
+
title: `Report failed: ${report.name}`,
|
|
83
|
+
body: reason,
|
|
84
|
+
entity: { reportId: report.id, pageId: report.pageId, reason },
|
|
85
|
+
actionUrl: '/reports',
|
|
86
|
+
}, { hub: deps.hub, at: now() });
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
ctx.log('report-run: failed-notification delivery failed', {
|
|
90
|
+
reportId: report.id,
|
|
91
|
+
error: error instanceof Error ? error.message : String(error),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return { reportId: report.id, exportId: null };
|
|
96
|
+
};
|
|
97
|
+
const page = await pagesRepo(deps.meta).findById(report.pageId);
|
|
98
|
+
if (page === null)
|
|
99
|
+
return fail('The report’s page no longer exists.');
|
|
100
|
+
const parsed = envelopeSourceSchema.safeParse(page.config);
|
|
101
|
+
const source = parsed.success ? parsed.data.source : null;
|
|
102
|
+
if (source === null || source.connectionId === null || source.table === null) {
|
|
103
|
+
return fail('The report’s page has no table source to snapshot.');
|
|
104
|
+
}
|
|
105
|
+
if (report.createdBy === null) {
|
|
106
|
+
// adminium_exports.requested_by is NOT NULL — without a creator there is
|
|
107
|
+
// no principal to own the artifact (or receive the notification).
|
|
108
|
+
return fail('The report has no owner to run as (its creator was deleted).');
|
|
109
|
+
}
|
|
110
|
+
// LIVE grant re-check (wave-2 audit): scheduling requires only
|
|
111
|
+
// `system:reports:manage`, and the export row below is created OUTSIDE the
|
|
112
|
+
// POST /exports route — the only place `table:<conn>:<table>:export` is
|
|
113
|
+
// otherwise enforced. The creator must STILL hold the export grant at run
|
|
114
|
+
// time, so a revoked creator stops receiving snapshots (the doc-comment's
|
|
115
|
+
// revocation concern, applied to row data, not just PII).
|
|
116
|
+
let resolvedTableId;
|
|
117
|
+
try {
|
|
118
|
+
const view = await loadSnapshotView(deps.meta, source.connectionId);
|
|
119
|
+
resolvedTableId = view.table(source.table).id;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return fail('The report’s table no longer exists in the schema snapshot.');
|
|
123
|
+
}
|
|
124
|
+
const exportPermission = `table:${source.connectionId}:${resolvedTableId}:export`;
|
|
125
|
+
const creatorSet = await resolvePermissionSet(deps.meta, {
|
|
126
|
+
kind: 'user',
|
|
127
|
+
id: report.createdBy,
|
|
128
|
+
label: report.createdBy,
|
|
129
|
+
});
|
|
130
|
+
if (!permissionSetAllows(creatorSet, exportPermission)) {
|
|
131
|
+
return fail('You no longer have export access to this report’s table.');
|
|
132
|
+
}
|
|
133
|
+
const exportEntry = deps.registry.get(EXPORT_RUN_KIND);
|
|
134
|
+
if (exportEntry === undefined) {
|
|
135
|
+
// Registration bug, not a data problem — surface it as a job failure.
|
|
136
|
+
throw new Error('report-run: the export-run handler is not registered on this registry');
|
|
137
|
+
}
|
|
138
|
+
ctx.progress(10, { step: 'snapshot', message: `Snapshotting ${source.table}` });
|
|
139
|
+
const exportRow = await exportsRepo(deps.meta).create({
|
|
140
|
+
connectionId: source.connectionId,
|
|
141
|
+
requestedBy: report.createdBy,
|
|
142
|
+
source: { kind: 'table', table: source.table },
|
|
143
|
+
format: 'csv',
|
|
144
|
+
});
|
|
145
|
+
try {
|
|
146
|
+
const exportPayload = exportRunPayloadSchema.parse({
|
|
147
|
+
exportId: exportRow.id,
|
|
148
|
+
userId: report.createdBy,
|
|
149
|
+
unmasked: false,
|
|
150
|
+
});
|
|
151
|
+
await exportEntry.run(exportPayload, ctx);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
// export-run absorbs deterministic failures itself (marks the row); a
|
|
155
|
+
// throw here is unexpected — mark our side and advance the schedule.
|
|
156
|
+
return fail(error instanceof Error ? error.message : String(error));
|
|
157
|
+
}
|
|
158
|
+
const finished = await exportsRepo(deps.meta).findById(exportRow.id);
|
|
159
|
+
if (finished === null || finished.status !== 'ready') {
|
|
160
|
+
return fail(finished?.error ?? `Snapshot export ended ${finished?.status ?? 'missing'}.`);
|
|
161
|
+
}
|
|
162
|
+
// Advance the schedule BEFORE the ready-notification: a notify/hub throw
|
|
163
|
+
// with `next_run_at` still in the past would re-run the whole snapshot on
|
|
164
|
+
// every poll tick — one fresh export artifact per minute (wave-2 audit).
|
|
165
|
+
await finishRun();
|
|
166
|
+
try {
|
|
167
|
+
await notify(deps.meta, {
|
|
168
|
+
userId: report.createdBy,
|
|
169
|
+
kind: REPORT_READY_KIND,
|
|
170
|
+
title: `Report ready: ${report.name}`,
|
|
171
|
+
body: `${String(finished.rowCount ?? 0)} rows · CSV data snapshot`,
|
|
172
|
+
entity: {
|
|
173
|
+
reportId: report.id,
|
|
174
|
+
reportName: report.name,
|
|
175
|
+
pageId: report.pageId,
|
|
176
|
+
pageSlug: page.slug,
|
|
177
|
+
pageTitle: page.title,
|
|
178
|
+
exportId: finished.id,
|
|
179
|
+
rowCount: finished.rowCount,
|
|
180
|
+
// The stored intent vs. what this build delivers — the client copy
|
|
181
|
+
// explains the degradation (§8.2), it is never hidden.
|
|
182
|
+
requestedFormat: report.format,
|
|
183
|
+
delivered: 'csv-snapshot',
|
|
184
|
+
},
|
|
185
|
+
actionUrl: '/exports',
|
|
186
|
+
}, { hub: deps.hub, at: now() });
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
// The export is ready and listed under /exports — a lost notification is
|
|
190
|
+
// recoverable there and must not fail (and re-loop) the run.
|
|
191
|
+
ctx.log('report-run: ready-notification delivery failed', {
|
|
192
|
+
reportId: report.id,
|
|
193
|
+
error: error instanceof Error ? error.message : String(error),
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
ctx.progress(100, { step: 'done', message: `Report ${report.name} ready` });
|
|
197
|
+
ctx.log('report-run: ready', { reportId: report.id, exportId: finished.id });
|
|
198
|
+
return { reportId: report.id, exportId: finished.id };
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* The compose.ts poll body (scheduler → queue seam): enqueue one `report-run`
|
|
202
|
+
* per due report. The `dedupeKey` carries the due stamp, so a poll tick that
|
|
203
|
+
* fires while the previous run of the SAME occurrence is still queued/running
|
|
204
|
+
* collapses into it, while the next occurrence gets a fresh key.
|
|
205
|
+
*/
|
|
206
|
+
export async function enqueueDueReports(meta, enqueue, at = Date.now()) {
|
|
207
|
+
const due = await scheduledReportsRepo(meta).listDue(at);
|
|
208
|
+
let last = null;
|
|
209
|
+
for (const report of due) {
|
|
210
|
+
last = await enqueue({
|
|
211
|
+
kind: REPORT_RUN_KIND,
|
|
212
|
+
payload: {
|
|
213
|
+
reportId: report.id,
|
|
214
|
+
...(report.createdBy === null ? {} : { userId: report.createdBy }),
|
|
215
|
+
},
|
|
216
|
+
dedupeKey: `report-run:${report.id}:${String(report.nextRunAt ?? at)}`,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return last;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=report-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report-run.js","sourceRoot":"","sources":["../../src/jobs/report-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAyB,MAAM,gBAAgB,CAAC;AAErG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAA8B,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAG1E,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,4DAA4D;IAC5D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAGH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAChD,MAAM,CAAC,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAElD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,WAAW,CAAC;AAevD,wEAAwE;AACxE,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;CACxF,CAAC,CAAC;AAEH,MAAM,UAAU,wBAAwB,CAAC,QAAqB,EAAE,IAAmB;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,QAAQ,CAAC,kBAAkB,CAAC,eAAe,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAC1F,OAAO,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAAyB,EACzB,GAAsB,EACtB,IAAmB,EACnB,GAAiB;IAEjB,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,GAAG,CAAC,GAAG,CAAC,wCAAwC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,GAAG,CAAC,GAAG,CAAC,uCAAuC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IAED,yEAAyE;IACzE,MAAM,SAAS,GAAG,KAAK,IAAmB,EAAE;QAC1C,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACrG,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,EAAE,MAAc,EAA0D,EAAE;QAC5F,GAAG,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/D,0EAA0E;QAC1E,uEAAuE;QACvE,MAAM,SAAS,EAAE,CAAC;QAClB,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,MAAM,CACV,IAAI,CAAC,IAAI,EACT;oBACE,MAAM,EAAE,MAAM,CAAC,SAAS;oBACxB,IAAI,EAAE,kBAAkB;oBACxB,KAAK,EAAE,kBAAkB,MAAM,CAAC,IAAI,EAAE;oBACtC,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE;oBAC9D,SAAS,EAAE,UAAU;iBACtB,EACD,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAC7B,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,GAAG,CAAC,iDAAiD,EAAE;oBACzD,QAAQ,EAAE,MAAM,CAAC,EAAE;oBACnB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC7E,OAAO,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC9B,yEAAyE;QACzE,kEAAkE;QAClE,OAAO,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAC9E,CAAC;IAED,+DAA+D;IAC/D,2EAA2E;IAC3E,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,0DAA0D;IAC1D,IAAI,eAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACpE,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,gBAAgB,GAAG,SAAS,MAAM,CAAC,YAAY,IAAI,eAAe,SAAS,CAAC;IAClF,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE;QACvD,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,MAAM,CAAC,SAAS;QACpB,KAAK,EAAE,MAAM,CAAC,SAAS;KACxB,CAAC,CAAC;IACH,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACvD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,sEAAsE;QACtE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IAED,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACpD,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,WAAW,EAAE,MAAM,CAAC,SAAS;QAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;QAC9C,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,sBAAsB,CAAC,KAAK,CAAC;YACjD,QAAQ,EAAE,SAAS,CAAC,EAAE;YACtB,MAAM,EAAE,MAAM,CAAC,SAAS;YACxB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,MAAM,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sEAAsE;QACtE,qEAAqE;QACrE,OAAO,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,yBAAyB,QAAQ,EAAE,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC;IAC5F,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,SAAS,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,MAAM,CACV,IAAI,CAAC,IAAI,EACT;YACE,MAAM,EAAE,MAAM,CAAC,SAAS;YACxB,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE,iBAAiB,MAAM,CAAC,IAAI,EAAE;YACrC,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC,2BAA2B;YAClE,MAAM,EAAE;gBACN,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,SAAS,EAAE,IAAI,CAAC,KAAK;gBACrB,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,mEAAmE;gBACnE,uDAAuD;gBACvD,eAAe,EAAE,MAAM,CAAC,MAAM;gBAC9B,SAAS,EAAE,cAAc;aAC1B;YACD,SAAS,EAAE,UAAU;SACtB,EACD,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAC7B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yEAAyE;QACzE,6DAA6D;QAC7D,GAAG,CAAC,GAAG,CAAC,gDAAgD,EAAE;YACxD,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IACD,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC5E,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAY,EACZ,OAAiD,EACjD,KAAa,IAAI,CAAC,GAAG,EAAE;IAEvB,MAAM,GAAG,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,GAAe,IAAI,CAAC;IAC5B,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,GAAG,MAAM,OAAO,CAAC;YACnB,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE;gBACP,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;aACnE;YACD,SAAS,EAAE,cAAc,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Croner-based schedule registry (08-server-api.md §2 jobs plugin, BRIEF §3:
|
|
3
|
+
* croner + no Redis; M2-T07). Each named schedule fires an enqueue function;
|
|
4
|
+
* a no-overlap guard skips the tick when the previously enqueued job is
|
|
5
|
+
* still pending/running, and optional jitter de-synchronizes fleets.
|
|
6
|
+
*
|
|
7
|
+
* Timezone is fixed to UTC for now — it becomes settings-driven
|
|
8
|
+
* (`adminium_settings`) in a later wave (10-i18n-theming.md).
|
|
9
|
+
*/
|
|
10
|
+
import type { Job } from '@adminium/meta';
|
|
11
|
+
import type { WorkerLogger } from './worker.js';
|
|
12
|
+
/** Default scheduler timezone until settings wiring lands. */
|
|
13
|
+
export declare const SCHEDULER_TIMEZONE = "UTC";
|
|
14
|
+
/** Enqueue callback: returns the created job (or null/void when skipped). */
|
|
15
|
+
export type ScheduleEnqueue = () => Promise<{
|
|
16
|
+
id: string;
|
|
17
|
+
} | null | undefined | void>;
|
|
18
|
+
export interface RegisterScheduleOptions {
|
|
19
|
+
/** Random 0..jitterMs delay before enqueueing; default scheduler-wide value. */
|
|
20
|
+
jitterMs?: number | undefined;
|
|
21
|
+
}
|
|
22
|
+
export type ScheduleTriggerResult = {
|
|
23
|
+
status: 'enqueued';
|
|
24
|
+
jobId: string | null;
|
|
25
|
+
} | {
|
|
26
|
+
status: 'skipped-overlap';
|
|
27
|
+
jobId: string;
|
|
28
|
+
} | {
|
|
29
|
+
status: 'skipped-inflight';
|
|
30
|
+
};
|
|
31
|
+
export interface JobSchedulerOptions {
|
|
32
|
+
/** Status lookup for the no-overlap guard (`jobsRepo` satisfies it). */
|
|
33
|
+
jobs: {
|
|
34
|
+
findById(id: string): Promise<Job | null>;
|
|
35
|
+
};
|
|
36
|
+
/** IANA zone for cron evaluation; default UTC (settings-driven later). */
|
|
37
|
+
timezone?: string | undefined;
|
|
38
|
+
/** Default jitter applied to every schedule; default 0. */
|
|
39
|
+
defaultJitterMs?: number | undefined;
|
|
40
|
+
logger?: WorkerLogger | undefined;
|
|
41
|
+
/** Injectable randomness for deterministic jitter tests. */
|
|
42
|
+
random?: (() => number) | undefined;
|
|
43
|
+
}
|
|
44
|
+
export declare class JobScheduler {
|
|
45
|
+
private readonly jobs;
|
|
46
|
+
private readonly timezone;
|
|
47
|
+
private readonly defaultJitterMs;
|
|
48
|
+
private readonly logger;
|
|
49
|
+
private readonly random;
|
|
50
|
+
private readonly schedules;
|
|
51
|
+
private started;
|
|
52
|
+
constructor(opts: JobSchedulerOptions);
|
|
53
|
+
/**
|
|
54
|
+
* Register a named cron schedule. The Cron instance is created immediately
|
|
55
|
+
* (invalid expressions throw here) but stays paused until `start()`.
|
|
56
|
+
*/
|
|
57
|
+
registerSchedule(name: string, cronExpr: string, enqueue: ScheduleEnqueue, opts?: RegisterScheduleOptions): void;
|
|
58
|
+
/** Resume all schedules; schedules registered later start immediately. */
|
|
59
|
+
start(): void;
|
|
60
|
+
/** Stop every cron; safe to call repeatedly. */
|
|
61
|
+
stop(): void;
|
|
62
|
+
names(): string[];
|
|
63
|
+
/** Next run time of a schedule, or null when stopped/unknown. */
|
|
64
|
+
nextRun(name: string): Date | null;
|
|
65
|
+
/**
|
|
66
|
+
* The guarded fire path — called by cron ticks and directly by tests.
|
|
67
|
+
* Skips when the previous enqueued job is still pending/running (no
|
|
68
|
+
* overlap) or when a previous tick's enqueue has not returned yet.
|
|
69
|
+
*/
|
|
70
|
+
trigger(name: string): Promise<ScheduleTriggerResult>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/jobs/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,8DAA8D;AAC9D,eAAO,MAAM,kBAAkB,QAAQ,CAAC;AAExC,6EAA6E;AAC7E,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AAEtF,MAAM,WAAW,uBAAuB;IACtC,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC5C;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAEnC,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;KAAE,CAAC;IACpD,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAClC,4DAA4D;IAC5D,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CACrC;AAgBD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,mBAAmB;IAQrC;;;OAGG;IACH,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,uBAA4B,GACjC,IAAI;IAmCP,0EAA0E;IAC1E,KAAK,IAAI,IAAI;IAKb,gDAAgD;IAChD,IAAI,IAAI,IAAI;IAKZ,KAAK,IAAI,MAAM,EAAE;IAIjB,iEAAiE;IACjE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIlC;;;;OAIG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;CA6B5D"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Croner-based schedule registry (08-server-api.md §2 jobs plugin, BRIEF §3:
|
|
3
|
+
* croner + no Redis; M2-T07). Each named schedule fires an enqueue function;
|
|
4
|
+
* a no-overlap guard skips the tick when the previously enqueued job is
|
|
5
|
+
* still pending/running, and optional jitter de-synchronizes fleets.
|
|
6
|
+
*
|
|
7
|
+
* Timezone is fixed to UTC for now — it becomes settings-driven
|
|
8
|
+
* (`adminium_settings`) in a later wave (10-i18n-theming.md).
|
|
9
|
+
*/
|
|
10
|
+
import { Cron } from 'croner';
|
|
11
|
+
/** Default scheduler timezone until settings wiring lands. */
|
|
12
|
+
export const SCHEDULER_TIMEZONE = 'UTC';
|
|
13
|
+
const noopLogger = { info() { }, warn() { }, error() { } };
|
|
14
|
+
export class JobScheduler {
|
|
15
|
+
jobs;
|
|
16
|
+
timezone;
|
|
17
|
+
defaultJitterMs;
|
|
18
|
+
logger;
|
|
19
|
+
random;
|
|
20
|
+
schedules = new Map();
|
|
21
|
+
started = false;
|
|
22
|
+
constructor(opts) {
|
|
23
|
+
this.jobs = opts.jobs;
|
|
24
|
+
this.timezone = opts.timezone ?? SCHEDULER_TIMEZONE;
|
|
25
|
+
this.defaultJitterMs = opts.defaultJitterMs ?? 0;
|
|
26
|
+
this.logger = opts.logger ?? noopLogger;
|
|
27
|
+
this.random = opts.random ?? Math.random;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Register a named cron schedule. The Cron instance is created immediately
|
|
31
|
+
* (invalid expressions throw here) but stays paused until `start()`.
|
|
32
|
+
*/
|
|
33
|
+
registerSchedule(name, cronExpr, enqueue, opts = {}) {
|
|
34
|
+
if (this.schedules.has(name)) {
|
|
35
|
+
throw new Error(`schedule "${name}" is already registered`);
|
|
36
|
+
}
|
|
37
|
+
const cron = new Cron(cronExpr, {
|
|
38
|
+
name,
|
|
39
|
+
paused: true,
|
|
40
|
+
timezone: this.timezone,
|
|
41
|
+
// croner's own overlap guard for the callback itself; the job-status
|
|
42
|
+
// guard in trigger() covers the enqueued job's lifetime.
|
|
43
|
+
protect: true,
|
|
44
|
+
catch: (err) => {
|
|
45
|
+
this.logger.error({ schedule: name, err }, 'schedule tick failed');
|
|
46
|
+
},
|
|
47
|
+
}, () => {
|
|
48
|
+
void this.trigger(name).catch((err) => {
|
|
49
|
+
this.logger.error({ schedule: name, err }, 'schedule trigger failed');
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
this.schedules.set(name, {
|
|
53
|
+
name,
|
|
54
|
+
cronExpr,
|
|
55
|
+
enqueue,
|
|
56
|
+
jitterMs: opts.jitterMs ?? this.defaultJitterMs,
|
|
57
|
+
cron,
|
|
58
|
+
inFlight: false,
|
|
59
|
+
lastJobId: null,
|
|
60
|
+
});
|
|
61
|
+
if (this.started)
|
|
62
|
+
cron.resume();
|
|
63
|
+
}
|
|
64
|
+
/** Resume all schedules; schedules registered later start immediately. */
|
|
65
|
+
start() {
|
|
66
|
+
this.started = true;
|
|
67
|
+
for (const entry of this.schedules.values())
|
|
68
|
+
entry.cron.resume();
|
|
69
|
+
}
|
|
70
|
+
/** Stop every cron; safe to call repeatedly. */
|
|
71
|
+
stop() {
|
|
72
|
+
this.started = false;
|
|
73
|
+
for (const entry of this.schedules.values())
|
|
74
|
+
entry.cron.stop();
|
|
75
|
+
}
|
|
76
|
+
names() {
|
|
77
|
+
return [...this.schedules.keys()];
|
|
78
|
+
}
|
|
79
|
+
/** Next run time of a schedule, or null when stopped/unknown. */
|
|
80
|
+
nextRun(name) {
|
|
81
|
+
return this.schedules.get(name)?.cron.nextRun() ?? null;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The guarded fire path — called by cron ticks and directly by tests.
|
|
85
|
+
* Skips when the previous enqueued job is still pending/running (no
|
|
86
|
+
* overlap) or when a previous tick's enqueue has not returned yet.
|
|
87
|
+
*/
|
|
88
|
+
async trigger(name) {
|
|
89
|
+
const entry = this.schedules.get(name);
|
|
90
|
+
if (entry === undefined)
|
|
91
|
+
throw new Error(`unknown schedule "${name}"`);
|
|
92
|
+
if (entry.inFlight)
|
|
93
|
+
return { status: 'skipped-inflight' };
|
|
94
|
+
if (entry.lastJobId !== null) {
|
|
95
|
+
const previous = await this.jobs.findById(entry.lastJobId);
|
|
96
|
+
if (previous !== null && (previous.status === 'pending' || previous.status === 'running')) {
|
|
97
|
+
this.logger.info({ schedule: name, jobId: entry.lastJobId, status: previous.status }, 'schedule tick skipped — previous job still active');
|
|
98
|
+
return { status: 'skipped-overlap', jobId: entry.lastJobId };
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
entry.inFlight = true;
|
|
102
|
+
try {
|
|
103
|
+
if (entry.jitterMs > 0) {
|
|
104
|
+
await sleep(Math.floor(this.random() * entry.jitterMs));
|
|
105
|
+
}
|
|
106
|
+
const job = await entry.enqueue();
|
|
107
|
+
entry.lastJobId = job?.id ?? null;
|
|
108
|
+
return { status: 'enqueued', jobId: entry.lastJobId };
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
entry.inFlight = false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function sleep(ms) {
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
const timer = setTimeout(resolve, ms);
|
|
118
|
+
timer.unref?.();
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/jobs/scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-process polling worker over `adminium_jobs` (01-architecture.md §5
|
|
3
|
+
* background path, 07-meta-store.md §3.12, M2-T07).
|
|
4
|
+
*
|
|
5
|
+
* Loop: claim via the portable UPDATE guard (`jobsRepo.claim`) → parse the
|
|
6
|
+
* payload against the registered handler's schema → run the handler with a
|
|
7
|
+
* progress/log/cancel context → `complete` or `fail` with exponential backoff
|
|
8
|
+
* (base 30 s, doubling, capped at 1 h) until `maxAttempts`, after which the
|
|
9
|
+
* row lands in terminal `failed` (the dead-letter state). One failing job
|
|
10
|
+
* never kills the process (08-server-api.md §6.10); `stop()` drains in-flight
|
|
11
|
+
* jobs before resolving (graceful shutdown).
|
|
12
|
+
*
|
|
13
|
+
* Progress is kept in-memory (`getProgress`) and published on `jobs:<jobId>`
|
|
14
|
+
* — the meta schema has no progress column in wave 0001, and the worker runs
|
|
15
|
+
* in-process with the API (01 §5), so route reads stay consistent.
|
|
16
|
+
*/
|
|
17
|
+
import { type MetaDb } from '@adminium/meta';
|
|
18
|
+
import type { RealtimeHub } from '../realtime/hub.js';
|
|
19
|
+
import type { JobProgress, JobRegistry } from './registry.js';
|
|
20
|
+
/** Backoff ceiling: no retry waits longer than an hour. */
|
|
21
|
+
export declare const JOB_BACKOFF_MAX_MS = 3600000;
|
|
22
|
+
/** Default number of jobs executing concurrently in one worker. */
|
|
23
|
+
export declare const JOB_WORKER_CONCURRENCY = 2;
|
|
24
|
+
/** Default idle delay between claim polls. */
|
|
25
|
+
export declare const JOB_POLL_INTERVAL_MS = 1000;
|
|
26
|
+
/** Minimal structured logger (satisfied by `app.log` / pino). */
|
|
27
|
+
export interface WorkerLogger {
|
|
28
|
+
info(obj: Record<string, unknown>, msg?: string): void;
|
|
29
|
+
warn(obj: Record<string, unknown>, msg?: string): void;
|
|
30
|
+
error(obj: Record<string, unknown>, msg?: string): void;
|
|
31
|
+
}
|
|
32
|
+
export interface JobWorkerOptions {
|
|
33
|
+
meta: MetaDb;
|
|
34
|
+
registry: JobRegistry;
|
|
35
|
+
hub: RealtimeHub;
|
|
36
|
+
/** Parallel job slots; default {@link JOB_WORKER_CONCURRENCY}. */
|
|
37
|
+
concurrency?: number | undefined;
|
|
38
|
+
/** Idle poll delay; default {@link JOB_POLL_INTERVAL_MS}. */
|
|
39
|
+
pollIntervalMs?: number | undefined;
|
|
40
|
+
/** `<hostname>:<pid>` per §3.12 unless overridden (tests). */
|
|
41
|
+
workerId?: string | undefined;
|
|
42
|
+
/** First-retry delay; default 30 s (§3.12 / repo constant). */
|
|
43
|
+
backoffBaseMs?: number | undefined;
|
|
44
|
+
/** Retry-delay ceiling; default 1 h. */
|
|
45
|
+
backoffMaxMs?: number | undefined;
|
|
46
|
+
/** Clock, injectable for deterministic backoff tests. */
|
|
47
|
+
now?: (() => number) | undefined;
|
|
48
|
+
logger?: WorkerLogger | undefined;
|
|
49
|
+
}
|
|
50
|
+
/** Channel name for a job's realtime events. */
|
|
51
|
+
export declare function jobChannel(jobId: string): string;
|
|
52
|
+
export declare class JobWorker {
|
|
53
|
+
private readonly meta;
|
|
54
|
+
private readonly jobs;
|
|
55
|
+
private readonly registry;
|
|
56
|
+
private readonly hub;
|
|
57
|
+
private readonly concurrency;
|
|
58
|
+
private readonly pollIntervalMs;
|
|
59
|
+
private readonly backoffBaseMs;
|
|
60
|
+
private readonly backoffMaxMs;
|
|
61
|
+
private readonly now;
|
|
62
|
+
private readonly logger;
|
|
63
|
+
readonly workerId: string;
|
|
64
|
+
private readonly running;
|
|
65
|
+
private readonly progressByJob;
|
|
66
|
+
private stopped;
|
|
67
|
+
private pollTimer;
|
|
68
|
+
constructor(opts: JobWorkerOptions);
|
|
69
|
+
/** Jobs currently executing in this worker. */
|
|
70
|
+
get activeCount(): number;
|
|
71
|
+
/** Last reported progress for a job known to this process, else `null`. */
|
|
72
|
+
getProgress(jobId: string): JobProgress | null;
|
|
73
|
+
/**
|
|
74
|
+
* Cooperative cancel (08 §2.17): aborts the run's signal if this worker is
|
|
75
|
+
* executing the job. Returns whether a running job was signalled.
|
|
76
|
+
*/
|
|
77
|
+
requestCancel(jobId: string): boolean;
|
|
78
|
+
/** Start the poll loop; idempotent. */
|
|
79
|
+
start(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Graceful drain: stop claiming, wait up to `drainTimeoutMs` for in-flight
|
|
82
|
+
* jobs, then abort stragglers and wait for them to settle.
|
|
83
|
+
*/
|
|
84
|
+
stop(opts?: {
|
|
85
|
+
drainTimeoutMs?: number;
|
|
86
|
+
}): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Deterministic single pass (tests/manual ticks): claims due jobs up to the
|
|
89
|
+
* concurrency limit and resolves when all of them finished. Returns how
|
|
90
|
+
* many jobs this call executed.
|
|
91
|
+
*/
|
|
92
|
+
runOnce(): Promise<number>;
|
|
93
|
+
private schedulePoll;
|
|
94
|
+
private poll;
|
|
95
|
+
/** Registers the job as running and executes it; never rejects. */
|
|
96
|
+
private launch;
|
|
97
|
+
private execute;
|
|
98
|
+
/** Retry with capped exponential backoff, or dead-letter at maxAttempts. */
|
|
99
|
+
private handleFailure;
|
|
100
|
+
/**
|
|
101
|
+
* Terminal `cancelled` for a job this worker was running (repo `cancel`
|
|
102
|
+
* only covers pending rows). Guarded on our own lock so a reclaimed stale
|
|
103
|
+
* job is never clobbered.
|
|
104
|
+
*/
|
|
105
|
+
private markCancelled;
|
|
106
|
+
private reportProgress;
|
|
107
|
+
/** Insertion-ordered map as a tiny LRU: oldest snapshots fall off first. */
|
|
108
|
+
private setProgress;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/jobs/worker.ts"],"names":[],"mappings":"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"}
|