@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
package/dist/start.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process entrypoint: loadEnv → buildServer → listen, with graceful shutdown
|
|
3
|
+
* on SIGTERM/SIGINT (01-architecture.md §8.1 — the fuller boot sequence gains
|
|
4
|
+
* meta connect/migrations/backup gates in wave 2).
|
|
5
|
+
*/
|
|
6
|
+
import { type AdminiumServer } from './app.js';
|
|
7
|
+
export interface StartOptions {
|
|
8
|
+
/** Injectable for tests; defaults to the real `process`. */
|
|
9
|
+
proc?: Pick<NodeJS.Process, 'once' | 'exit'> | undefined;
|
|
10
|
+
}
|
|
11
|
+
export declare function start(opts?: StartOptions): Promise<AdminiumServer>;
|
|
12
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAG5D,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC;CAC1D;AAED,wBAAsB,KAAK,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAuB5E"}
|
package/dist/start.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process entrypoint: loadEnv → buildServer → listen, with graceful shutdown
|
|
3
|
+
* on SIGTERM/SIGINT (01-architecture.md §8.1 — the fuller boot sequence gains
|
|
4
|
+
* meta connect/migrations/backup gates in wave 2).
|
|
5
|
+
*/
|
|
6
|
+
import { buildServer } from './app.js';
|
|
7
|
+
import { loadEnv } from './config/env.js';
|
|
8
|
+
export async function start(opts = {}) {
|
|
9
|
+
const proc = opts.proc ?? process;
|
|
10
|
+
const env = loadEnv();
|
|
11
|
+
const app = await buildServer({ env });
|
|
12
|
+
let closing = false;
|
|
13
|
+
const shutdown = (signal) => {
|
|
14
|
+
if (closing)
|
|
15
|
+
return;
|
|
16
|
+
closing = true;
|
|
17
|
+
app.log.info({ signal }, 'shutting down');
|
|
18
|
+
app.close().then(() => proc.exit(0), (error) => {
|
|
19
|
+
app.log.error({ err: error }, 'error during shutdown');
|
|
20
|
+
proc.exit(1);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
proc.once('SIGTERM', () => shutdown('SIGTERM'));
|
|
24
|
+
proc.once('SIGINT', () => shutdown('SIGINT'));
|
|
25
|
+
await app.listen({ port: env.PORT, host: env.HOST });
|
|
26
|
+
return app;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAO1C,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB,EAAE;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC;IAClC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAEvC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,QAAQ,GAAG,CAAC,MAAsB,EAAQ,EAAE;QAChD,IAAI,OAAO;YAAE,OAAO;QACpB,OAAO,GAAG,IAAI,CAAC;QACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC;QAC1C,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CACd,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAClB,CAAC,KAAc,EAAE,EAAE;YACjB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The telemetry payload (M10-T04) — the EXACT and complete document a
|
|
3
|
+
* consenting instance ever sends. Documented here because "what is sent" is a
|
|
4
|
+
* promise, not an implementation detail: the first-run consent screen renders
|
|
5
|
+
* this same list (dashboard `TelemetryConsent`), and `telemetry-payload.test.ts`
|
|
6
|
+
* pins the key set so the shape cannot drift without a failing test.
|
|
7
|
+
*
|
|
8
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
9
|
+
* WHAT IS SENT (all of it):
|
|
10
|
+
* schemaVersion 1 — envelope version
|
|
11
|
+
* instanceId random UUIDv4 — seeded at bootstrap
|
|
12
|
+
* (`system.instanceId`); not
|
|
13
|
+
* derived from any host, user,
|
|
14
|
+
* network or database identity,
|
|
15
|
+
* so it cannot be reversed into
|
|
16
|
+
* one. Reset it and the instance
|
|
17
|
+
* is a new anonymous instance.
|
|
18
|
+
* version e.g. "0.5.0" — the running Adminium build
|
|
19
|
+
* metaEngine postgres|mysql|sqlite — meta-store ENGINE TYPE only
|
|
20
|
+
* sourceEngines ["postgres","sqlite"] — distinct connected ENGINE
|
|
21
|
+
* TYPES, deduped + sorted. A
|
|
22
|
+
* closed vocabulary; never a
|
|
23
|
+
* count, name, host or DSN.
|
|
24
|
+
* sentAt epoch ms
|
|
25
|
+
*
|
|
26
|
+
* WHAT IS NEVER SENT — no schema content (no table/column/enum names), no row
|
|
27
|
+
* data, no connection strings/hosts/credentials, no user identities (emails,
|
|
28
|
+
* names, ids), no page/widget configs, no LLM run contents or prompts. The BYO
|
|
29
|
+
* promise in 06-llm-assist.md §9 — that BYO runs are never reported — holds
|
|
30
|
+
* because nothing about any LLM run has a field to travel in: the payload is
|
|
31
|
+
* built from a fixed allow-list below, never by spreading a wider object.
|
|
32
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
33
|
+
*/
|
|
34
|
+
/** Meta/source engine identifiers (07-meta-store.md); a closed vocabulary. */
|
|
35
|
+
export declare const TELEMETRY_ENGINES: readonly ["postgres", "mysql", "sqlite"];
|
|
36
|
+
export type TelemetryEngine = (typeof TELEMETRY_ENGINES)[number];
|
|
37
|
+
export interface TelemetryPayload {
|
|
38
|
+
schemaVersion: 1;
|
|
39
|
+
instanceId: string;
|
|
40
|
+
version: string;
|
|
41
|
+
metaEngine: TelemetryEngine;
|
|
42
|
+
sourceEngines: TelemetryEngine[];
|
|
43
|
+
sentAt: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The complete key set of {@link TelemetryPayload}. The builder emits exactly
|
|
47
|
+
* these and the test asserts equality both ways, so adding a field to the
|
|
48
|
+
* interface without deciding it is safe to disclose fails CI.
|
|
49
|
+
*/
|
|
50
|
+
export declare const TELEMETRY_PAYLOAD_KEYS: readonly string[];
|
|
51
|
+
export interface TelemetryPayloadInput {
|
|
52
|
+
instanceId: string;
|
|
53
|
+
version: string;
|
|
54
|
+
metaEngine: TelemetryEngine;
|
|
55
|
+
/** Raw engine strings off `adminium_connections.engine`; filtered below. */
|
|
56
|
+
sourceEngines: readonly string[];
|
|
57
|
+
sentAt: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Builds the payload by NAMING every field (never by spreading input), so an
|
|
61
|
+
* unrelated object growing a sensitive field can never widen what is sent.
|
|
62
|
+
* Unknown engine strings are dropped rather than passed through — the wire
|
|
63
|
+
* vocabulary stays closed even if a future adapter registers a new id.
|
|
64
|
+
*/
|
|
65
|
+
export declare function buildTelemetryPayload(input: TelemetryPayloadInput): TelemetryPayload;
|
|
66
|
+
//# sourceMappingURL=payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/telemetry/payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,0CAA2C,CAAC;AAC1E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;IAC5B,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAOnD,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;IAC5B,4EAA4E;IAC5E,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAUpF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The telemetry payload (M10-T04) — the EXACT and complete document a
|
|
3
|
+
* consenting instance ever sends. Documented here because "what is sent" is a
|
|
4
|
+
* promise, not an implementation detail: the first-run consent screen renders
|
|
5
|
+
* this same list (dashboard `TelemetryConsent`), and `telemetry-payload.test.ts`
|
|
6
|
+
* pins the key set so the shape cannot drift without a failing test.
|
|
7
|
+
*
|
|
8
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
9
|
+
* WHAT IS SENT (all of it):
|
|
10
|
+
* schemaVersion 1 — envelope version
|
|
11
|
+
* instanceId random UUIDv4 — seeded at bootstrap
|
|
12
|
+
* (`system.instanceId`); not
|
|
13
|
+
* derived from any host, user,
|
|
14
|
+
* network or database identity,
|
|
15
|
+
* so it cannot be reversed into
|
|
16
|
+
* one. Reset it and the instance
|
|
17
|
+
* is a new anonymous instance.
|
|
18
|
+
* version e.g. "0.5.0" — the running Adminium build
|
|
19
|
+
* metaEngine postgres|mysql|sqlite — meta-store ENGINE TYPE only
|
|
20
|
+
* sourceEngines ["postgres","sqlite"] — distinct connected ENGINE
|
|
21
|
+
* TYPES, deduped + sorted. A
|
|
22
|
+
* closed vocabulary; never a
|
|
23
|
+
* count, name, host or DSN.
|
|
24
|
+
* sentAt epoch ms
|
|
25
|
+
*
|
|
26
|
+
* WHAT IS NEVER SENT — no schema content (no table/column/enum names), no row
|
|
27
|
+
* data, no connection strings/hosts/credentials, no user identities (emails,
|
|
28
|
+
* names, ids), no page/widget configs, no LLM run contents or prompts. The BYO
|
|
29
|
+
* promise in 06-llm-assist.md §9 — that BYO runs are never reported — holds
|
|
30
|
+
* because nothing about any LLM run has a field to travel in: the payload is
|
|
31
|
+
* built from a fixed allow-list below, never by spreading a wider object.
|
|
32
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
33
|
+
*/
|
|
34
|
+
/** Meta/source engine identifiers (07-meta-store.md); a closed vocabulary. */
|
|
35
|
+
export const TELEMETRY_ENGINES = ['postgres', 'mysql', 'sqlite'];
|
|
36
|
+
/**
|
|
37
|
+
* The complete key set of {@link TelemetryPayload}. The builder emits exactly
|
|
38
|
+
* these and the test asserts equality both ways, so adding a field to the
|
|
39
|
+
* interface without deciding it is safe to disclose fails CI.
|
|
40
|
+
*/
|
|
41
|
+
export const TELEMETRY_PAYLOAD_KEYS = [
|
|
42
|
+
'schemaVersion',
|
|
43
|
+
'instanceId',
|
|
44
|
+
'version',
|
|
45
|
+
'metaEngine',
|
|
46
|
+
'sourceEngines',
|
|
47
|
+
'sentAt',
|
|
48
|
+
];
|
|
49
|
+
function isTelemetryEngine(value) {
|
|
50
|
+
return TELEMETRY_ENGINES.includes(value);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Builds the payload by NAMING every field (never by spreading input), so an
|
|
54
|
+
* unrelated object growing a sensitive field can never widen what is sent.
|
|
55
|
+
* Unknown engine strings are dropped rather than passed through — the wire
|
|
56
|
+
* vocabulary stays closed even if a future adapter registers a new id.
|
|
57
|
+
*/
|
|
58
|
+
export function buildTelemetryPayload(input) {
|
|
59
|
+
const sourceEngines = [...new Set(input.sourceEngines.filter(isTelemetryEngine))].sort();
|
|
60
|
+
return {
|
|
61
|
+
schemaVersion: 1,
|
|
62
|
+
instanceId: input.instanceId,
|
|
63
|
+
version: input.version,
|
|
64
|
+
metaEngine: input.metaEngine,
|
|
65
|
+
sourceEngines,
|
|
66
|
+
sentAt: input.sentAt,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/telemetry/payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAY1E;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAsB;IACvD,eAAe;IACf,YAAY;IACZ,SAAS;IACT,YAAY;IACZ,eAAe;IACf,QAAQ;CACT,CAAC;AAWF,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAQ,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA4B;IAChE,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzF,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,aAAa;QACb,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry client (M10-T04). OPT-IN: `telemetry.enabled` defaults to `false`
|
|
3
|
+
* in the settings registry, so a fresh install reports nothing until someone
|
|
4
|
+
* answers "yes" on the first-run consent screen (v0.5 exit criterion:
|
|
5
|
+
* "Telemetry is opt-in (off by default)"). `ADMINIUM_TELEMETRY`, when set,
|
|
6
|
+
* overrides that answer in both directions — see {@link TelemetryServiceDeps.envOverride}.
|
|
7
|
+
*
|
|
8
|
+
* It is CONSTRUCTED in `../compose.ts`, the composition root, and reported on
|
|
9
|
+
* the croner scheduler that every other periodic job uses. (For a while it was
|
|
10
|
+
* constructed nowhere but tests: the consent screen wrote a setting no code
|
|
11
|
+
* read, so "Share anonymous usage data → yes" promised a behavior the build did
|
|
12
|
+
* not implement. That failed safe, but a consent screen that does nothing is
|
|
13
|
+
* still a lie.)
|
|
14
|
+
*
|
|
15
|
+
* The load-bearing property, asserted by `telemetry-network-isolation.test.ts`
|
|
16
|
+
* with all outbound network disabled: when telemetry is off, `report()` makes
|
|
17
|
+
* ZERO network calls. That is why the enabled check comes first and returns
|
|
18
|
+
* before the payload is even built — there is no code path from a disabled
|
|
19
|
+
* instance to `fetch`. See ./payload.ts for exactly what a consenting instance
|
|
20
|
+
* sends (and what it never sends).
|
|
21
|
+
*/
|
|
22
|
+
import { type MetaDb } from '@adminium/meta';
|
|
23
|
+
import { type TelemetryPayload } from './payload.js';
|
|
24
|
+
/** Where consenting instances report. Overridable for tests/self-host mirrors. */
|
|
25
|
+
export declare const TELEMETRY_ENDPOINT = "https://telemetry.adminium.dev/v1/ping";
|
|
26
|
+
export type TelemetryReport = {
|
|
27
|
+
sent: false;
|
|
28
|
+
reason: 'disabled' | 'no-instance-id' | 'failed';
|
|
29
|
+
} | {
|
|
30
|
+
sent: true;
|
|
31
|
+
payload: TelemetryPayload;
|
|
32
|
+
};
|
|
33
|
+
export interface TelemetryServiceDeps {
|
|
34
|
+
meta: MetaDb;
|
|
35
|
+
/** The running build (apps/server package.json). */
|
|
36
|
+
version: string;
|
|
37
|
+
endpoint?: string | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* `ADMINIUM_TELEMETRY`, tri-state. Set ⇒ the ENVIRONMENT WINS OUTRIGHT over
|
|
40
|
+
* the stored consent, in both directions (01 §7.2 "environment always wins");
|
|
41
|
+
* `undefined` (unset) ⇒ the `telemetry.enabled` setting decides, which is the
|
|
42
|
+
* normal self-host case.
|
|
43
|
+
*
|
|
44
|
+
* The variable was documented as the kill-switch and read by nothing: an org
|
|
45
|
+
* that set `ADMINIUM_TELEMETRY=off` to enforce a no-phone-home policy had no
|
|
46
|
+
* protection at all once any user answered "yes" on the first-run consent
|
|
47
|
+
* screen. Since the operator who controls the process environment outranks the
|
|
48
|
+
* person clicking through the wizard, `off` is now a real veto.
|
|
49
|
+
*/
|
|
50
|
+
envOverride?: boolean | undefined;
|
|
51
|
+
/** Injected so tests can observe calls; defaults to the global fetch. */
|
|
52
|
+
fetchImpl?: typeof globalThis.fetch | undefined;
|
|
53
|
+
now?: (() => number) | undefined;
|
|
54
|
+
}
|
|
55
|
+
export interface TelemetryService {
|
|
56
|
+
/** The single gate: `ADMINIUM_TELEMETRY` if set, else `telemetry.enabled`. No network. */
|
|
57
|
+
isEnabled(): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* The exact document `report()` would send, for the About/consent screens to
|
|
60
|
+
* show ("here is what leaves this instance"). `null` when disabled.
|
|
61
|
+
*/
|
|
62
|
+
preview(): Promise<TelemetryPayload | null>;
|
|
63
|
+
/** No-op returning `{ sent: false, reason: 'disabled' }` when opted out. */
|
|
64
|
+
report(): Promise<TelemetryReport>;
|
|
65
|
+
}
|
|
66
|
+
export declare function createTelemetryService(deps: TelemetryServiceDeps): TelemetryService;
|
|
67
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/telemetry/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAA+C,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAElG,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,2CAA2C,CAAC;AAE3E,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,QAAQ,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAE9C,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;IAChD,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC5C,4EAA4E;IAC5E,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;CACpC;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,oBAAoB,GAAG,gBAAgB,CA6EnF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry client (M10-T04). OPT-IN: `telemetry.enabled` defaults to `false`
|
|
3
|
+
* in the settings registry, so a fresh install reports nothing until someone
|
|
4
|
+
* answers "yes" on the first-run consent screen (v0.5 exit criterion:
|
|
5
|
+
* "Telemetry is opt-in (off by default)"). `ADMINIUM_TELEMETRY`, when set,
|
|
6
|
+
* overrides that answer in both directions — see {@link TelemetryServiceDeps.envOverride}.
|
|
7
|
+
*
|
|
8
|
+
* It is CONSTRUCTED in `../compose.ts`, the composition root, and reported on
|
|
9
|
+
* the croner scheduler that every other periodic job uses. (For a while it was
|
|
10
|
+
* constructed nowhere but tests: the consent screen wrote a setting no code
|
|
11
|
+
* read, so "Share anonymous usage data → yes" promised a behavior the build did
|
|
12
|
+
* not implement. That failed safe, but a consent screen that does nothing is
|
|
13
|
+
* still a lie.)
|
|
14
|
+
*
|
|
15
|
+
* The load-bearing property, asserted by `telemetry-network-isolation.test.ts`
|
|
16
|
+
* with all outbound network disabled: when telemetry is off, `report()` makes
|
|
17
|
+
* ZERO network calls. That is why the enabled check comes first and returns
|
|
18
|
+
* before the payload is even built — there is no code path from a disabled
|
|
19
|
+
* instance to `fetch`. See ./payload.ts for exactly what a consenting instance
|
|
20
|
+
* sends (and what it never sends).
|
|
21
|
+
*/
|
|
22
|
+
import { settingsRepo } from '@adminium/meta';
|
|
23
|
+
import { buildTelemetryPayload } from './payload.js';
|
|
24
|
+
/** Where consenting instances report. Overridable for tests/self-host mirrors. */
|
|
25
|
+
export const TELEMETRY_ENDPOINT = 'https://telemetry.adminium.dev/v1/ping';
|
|
26
|
+
export function createTelemetryService(deps) {
|
|
27
|
+
const { meta, version } = deps;
|
|
28
|
+
const endpoint = deps.endpoint ?? TELEMETRY_ENDPOINT;
|
|
29
|
+
const now = deps.now ?? (() => Date.now());
|
|
30
|
+
const settings = settingsRepo(meta);
|
|
31
|
+
async function isEnabled() {
|
|
32
|
+
// The env veto is checked FIRST and short-circuits the settings read, so an
|
|
33
|
+
// `ADMINIUM_TELEMETRY=off` instance does not even touch the meta store to
|
|
34
|
+
// decide — and, more importantly, cannot reach `fetch` by any path.
|
|
35
|
+
if (deps.envOverride !== undefined)
|
|
36
|
+
return deps.envOverride;
|
|
37
|
+
return settings.get('telemetry.enabled');
|
|
38
|
+
}
|
|
39
|
+
async function build() {
|
|
40
|
+
// `settings.get` can THROW rather than return, so this is not a redundant
|
|
41
|
+
// null-check wrapper: on a Postgres meta store, reading any string-valued
|
|
42
|
+
// setting currently raises a SyntaxError (`repos/util.ts` readJson
|
|
43
|
+
// JSON.parses a jsonb value pg has already decoded — a pre-existing
|
|
44
|
+
// cross-engine bug, not this module's). `system.instanceId` is
|
|
45
|
+
// string-valued, so an opted-in Postgres instance would hit it. Telemetry
|
|
46
|
+
// is never load-bearing: it degrades to "nothing to report" rather than
|
|
47
|
+
// turning a background report into an unhandled rejection.
|
|
48
|
+
let instanceId;
|
|
49
|
+
try {
|
|
50
|
+
instanceId = await settings.get('system.instanceId');
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
if (instanceId === null)
|
|
56
|
+
return null; // never bootstrapped — nothing to say
|
|
57
|
+
// `engine` ONLY — deliberately not `connectionsRepo`, which would hand us
|
|
58
|
+
// a DsnCrypto and rows carrying encrypted DSNs. Selecting the single
|
|
59
|
+
// column makes it structurally impossible for connection material to reach
|
|
60
|
+
// the payload builder, rather than merely unlikely (07 §3.13).
|
|
61
|
+
const rows = await meta.db.selectFrom('adminium_connections').select('engine').execute();
|
|
62
|
+
return buildTelemetryPayload({
|
|
63
|
+
instanceId,
|
|
64
|
+
version,
|
|
65
|
+
metaEngine: meta.dialect,
|
|
66
|
+
sourceEngines: rows.map((row) => row.engine),
|
|
67
|
+
sentAt: now(),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
isEnabled,
|
|
72
|
+
async preview() {
|
|
73
|
+
if (!(await isEnabled()))
|
|
74
|
+
return null;
|
|
75
|
+
return build();
|
|
76
|
+
},
|
|
77
|
+
async report() {
|
|
78
|
+
// FIRST, and before anything can touch the network: opted out ⇒ return.
|
|
79
|
+
if (!(await isEnabled()))
|
|
80
|
+
return { sent: false, reason: 'disabled' };
|
|
81
|
+
const payload = await build();
|
|
82
|
+
if (payload === null)
|
|
83
|
+
return { sent: false, reason: 'no-instance-id' };
|
|
84
|
+
const doFetch = deps.fetchImpl ?? globalThis.fetch;
|
|
85
|
+
try {
|
|
86
|
+
const response = await doFetch(endpoint, {
|
|
87
|
+
method: 'POST',
|
|
88
|
+
headers: { 'content-type': 'application/json' },
|
|
89
|
+
body: JSON.stringify(payload),
|
|
90
|
+
});
|
|
91
|
+
if (!response.ok)
|
|
92
|
+
return { sent: false, reason: 'failed' };
|
|
93
|
+
return { sent: true, payload };
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Telemetry is never load-bearing: an unreachable endpoint must not
|
|
97
|
+
// surface to the operator or fail a request.
|
|
98
|
+
return { sent: false, reason: 'failed' };
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/telemetry/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-host update-available check (M10-T04): compares the running build
|
|
3
|
+
* against the latest public release so a self-hoster learns a security fix
|
|
4
|
+
* exists without subscribing to anything.
|
|
5
|
+
*
|
|
6
|
+
* GATING — the deliberate choice, per the track brief ("gate the check behind
|
|
7
|
+
* the telemetry/update preference so an opted-out instance makes no outbound
|
|
8
|
+
* call; state your choice and make it testable"):
|
|
9
|
+
*
|
|
10
|
+
* The check is gated on its OWN setting, `updates.checkEnabled`, which is
|
|
11
|
+
* default-false — NOT on `telemetry.enabled`.
|
|
12
|
+
*
|
|
13
|
+
* Why its own key rather than reusing the telemetry answer: the two disclose
|
|
14
|
+
* different things and deserve different answers. Telemetry pushes a document
|
|
15
|
+
* about the instance; an update check pulls a version list but still discloses
|
|
16
|
+
* the instance's IP + `User-Agent` version to whoever serves it. An operator
|
|
17
|
+
* who declines telemetry may still want security notices, and one who accepts
|
|
18
|
+
* telemetry has not thereby agreed to a periodic beacon. Both default OFF, both
|
|
19
|
+
* are asked on the same first-run consent screen, and both are editable later.
|
|
20
|
+
*
|
|
21
|
+
* When the setting is false, `check()` returns `{ status: 'disabled' }` before
|
|
22
|
+
* touching `fetch` — `telemetry-network-isolation.test.ts` asserts that with
|
|
23
|
+
* all outbound network disabled. Requests carry NO instance id and no payload:
|
|
24
|
+
* an update check is a plain GET, so it is not a telemetry channel in disguise.
|
|
25
|
+
*/
|
|
26
|
+
import { type MetaDb } from '@adminium/meta';
|
|
27
|
+
/**
|
|
28
|
+
* The public release feed for the AGPL repo (01-architecture.md §9).
|
|
29
|
+
*
|
|
30
|
+
* `MoSofi/Adminium` is where the source and the releases actually live; the
|
|
31
|
+
* `adminium/adminium` slug is an unrelated third party's repository, and
|
|
32
|
+
* polling it would either 404 or report a stranger's tags as our updates.
|
|
33
|
+
*/
|
|
34
|
+
export declare const UPDATE_FEED_URL = "https://api.github.com/repos/MoSofi/Adminium/releases/latest";
|
|
35
|
+
export declare const RELEASES_PAGE_URL = "https://github.com/MoSofi/Adminium/releases";
|
|
36
|
+
/** Don't re-check more than once an hour, however often About is opened. */
|
|
37
|
+
export declare const UPDATE_CACHE_TTL_MS = 3600000;
|
|
38
|
+
export type UpdateCheckResult =
|
|
39
|
+
/** Opted out — no outbound call was made. */
|
|
40
|
+
{
|
|
41
|
+
status: 'disabled';
|
|
42
|
+
} | {
|
|
43
|
+
status: 'current';
|
|
44
|
+
current: string;
|
|
45
|
+
} | {
|
|
46
|
+
status: 'update-available';
|
|
47
|
+
current: string;
|
|
48
|
+
latest: string;
|
|
49
|
+
url: string;
|
|
50
|
+
}
|
|
51
|
+
/** Feed unreachable/unparseable — never surfaced as an error to the user. */
|
|
52
|
+
| {
|
|
53
|
+
status: 'unknown';
|
|
54
|
+
current: string;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Compares `major.minor.patch`, ignoring a leading `v` and any
|
|
58
|
+
* prerelease/build suffix. Returns <0, 0, >0 (a vs b). A prerelease of X is
|
|
59
|
+
* treated AS X: `0.5.0-rc.1` never reports "0.5.0 available", which would be a
|
|
60
|
+
* false alarm on the release it already is.
|
|
61
|
+
*/
|
|
62
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
63
|
+
export interface UpdateCheckDeps {
|
|
64
|
+
meta: MetaDb;
|
|
65
|
+
/** The running build (apps/server package.json). */
|
|
66
|
+
version: string;
|
|
67
|
+
feedUrl?: string | undefined;
|
|
68
|
+
releasesUrl?: string | undefined;
|
|
69
|
+
fetchImpl?: typeof globalThis.fetch | undefined;
|
|
70
|
+
now?: (() => number) | undefined;
|
|
71
|
+
cacheTtlMs?: number | undefined;
|
|
72
|
+
}
|
|
73
|
+
export interface UpdateCheckService {
|
|
74
|
+
/** Reads `updates.checkEnabled`; no network. */
|
|
75
|
+
isEnabled(): Promise<boolean>;
|
|
76
|
+
check(): Promise<UpdateCheckResult>;
|
|
77
|
+
}
|
|
78
|
+
export declare function createUpdateCheckService(deps: UpdateCheckDeps): UpdateCheckService;
|
|
79
|
+
//# sourceMappingURL=update-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/telemetry/update-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,iEAAiE,CAAC;AAC9F,eAAO,MAAM,iBAAiB,gDAAgD,CAAC;AAE/E,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,UAAY,CAAC;AAE7C,MAAM,MAAM,iBAAiB;AAC3B,6CAA6C;AAC3C;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACtB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE;AAC9E,6EAA6E;GAC3E;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAS5D;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;IAChD,GAAG,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,gDAAgD;IAChD,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACrC;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,eAAe,GAAG,kBAAkB,CAoDlF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-host update-available check (M10-T04): compares the running build
|
|
3
|
+
* against the latest public release so a self-hoster learns a security fix
|
|
4
|
+
* exists without subscribing to anything.
|
|
5
|
+
*
|
|
6
|
+
* GATING — the deliberate choice, per the track brief ("gate the check behind
|
|
7
|
+
* the telemetry/update preference so an opted-out instance makes no outbound
|
|
8
|
+
* call; state your choice and make it testable"):
|
|
9
|
+
*
|
|
10
|
+
* The check is gated on its OWN setting, `updates.checkEnabled`, which is
|
|
11
|
+
* default-false — NOT on `telemetry.enabled`.
|
|
12
|
+
*
|
|
13
|
+
* Why its own key rather than reusing the telemetry answer: the two disclose
|
|
14
|
+
* different things and deserve different answers. Telemetry pushes a document
|
|
15
|
+
* about the instance; an update check pulls a version list but still discloses
|
|
16
|
+
* the instance's IP + `User-Agent` version to whoever serves it. An operator
|
|
17
|
+
* who declines telemetry may still want security notices, and one who accepts
|
|
18
|
+
* telemetry has not thereby agreed to a periodic beacon. Both default OFF, both
|
|
19
|
+
* are asked on the same first-run consent screen, and both are editable later.
|
|
20
|
+
*
|
|
21
|
+
* When the setting is false, `check()` returns `{ status: 'disabled' }` before
|
|
22
|
+
* touching `fetch` — `telemetry-network-isolation.test.ts` asserts that with
|
|
23
|
+
* all outbound network disabled. Requests carry NO instance id and no payload:
|
|
24
|
+
* an update check is a plain GET, so it is not a telemetry channel in disguise.
|
|
25
|
+
*/
|
|
26
|
+
import { settingsRepo } from '@adminium/meta';
|
|
27
|
+
/**
|
|
28
|
+
* The public release feed for the AGPL repo (01-architecture.md §9).
|
|
29
|
+
*
|
|
30
|
+
* `MoSofi/Adminium` is where the source and the releases actually live; the
|
|
31
|
+
* `adminium/adminium` slug is an unrelated third party's repository, and
|
|
32
|
+
* polling it would either 404 or report a stranger's tags as our updates.
|
|
33
|
+
*/
|
|
34
|
+
export const UPDATE_FEED_URL = 'https://api.github.com/repos/MoSofi/Adminium/releases/latest';
|
|
35
|
+
export const RELEASES_PAGE_URL = 'https://github.com/MoSofi/Adminium/releases';
|
|
36
|
+
/** Don't re-check more than once an hour, however often About is opened. */
|
|
37
|
+
export const UPDATE_CACHE_TTL_MS = 3_600_000;
|
|
38
|
+
/**
|
|
39
|
+
* Compares `major.minor.patch`, ignoring a leading `v` and any
|
|
40
|
+
* prerelease/build suffix. Returns <0, 0, >0 (a vs b). A prerelease of X is
|
|
41
|
+
* treated AS X: `0.5.0-rc.1` never reports "0.5.0 available", which would be a
|
|
42
|
+
* false alarm on the release it already is.
|
|
43
|
+
*/
|
|
44
|
+
export function compareVersions(a, b) {
|
|
45
|
+
const parse = (v) => {
|
|
46
|
+
const core = v.trim().replace(/^v/, '').split(/[-+]/)[0] ?? '';
|
|
47
|
+
const parts = core.split('.').map((n) => Number.parseInt(n, 10));
|
|
48
|
+
return [parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0].map((n) => (Number.isNaN(n) ? 0 : n));
|
|
49
|
+
};
|
|
50
|
+
const [aMajor, aMinor, aPatch] = parse(a);
|
|
51
|
+
const [bMajor, bMinor, bPatch] = parse(b);
|
|
52
|
+
return aMajor - bMajor || aMinor - bMinor || aPatch - bPatch;
|
|
53
|
+
}
|
|
54
|
+
export function createUpdateCheckService(deps) {
|
|
55
|
+
const { meta, version } = deps;
|
|
56
|
+
const feedUrl = deps.feedUrl ?? UPDATE_FEED_URL;
|
|
57
|
+
const releasesUrl = deps.releasesUrl ?? RELEASES_PAGE_URL;
|
|
58
|
+
const now = deps.now ?? (() => Date.now());
|
|
59
|
+
const cacheTtlMs = deps.cacheTtlMs ?? UPDATE_CACHE_TTL_MS;
|
|
60
|
+
const settings = settingsRepo(meta);
|
|
61
|
+
let cache = null;
|
|
62
|
+
async function isEnabled() {
|
|
63
|
+
return settings.get('updates.checkEnabled');
|
|
64
|
+
}
|
|
65
|
+
async function fetchLatest() {
|
|
66
|
+
const doFetch = deps.fetchImpl ?? globalThis.fetch;
|
|
67
|
+
try {
|
|
68
|
+
const response = await doFetch(feedUrl, {
|
|
69
|
+
method: 'GET',
|
|
70
|
+
headers: { accept: 'application/json' },
|
|
71
|
+
});
|
|
72
|
+
if (!response.ok)
|
|
73
|
+
return null;
|
|
74
|
+
const body = await response.json();
|
|
75
|
+
const tag = body?.tag_name;
|
|
76
|
+
return typeof tag === 'string' && tag.length > 0 ? tag : null;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
isEnabled,
|
|
84
|
+
async check() {
|
|
85
|
+
// FIRST: opted out ⇒ no fetch, no cache read, nothing.
|
|
86
|
+
if (!(await isEnabled()))
|
|
87
|
+
return { status: 'disabled' };
|
|
88
|
+
if (cache !== null && now() - cache.at < cacheTtlMs)
|
|
89
|
+
return cache.result;
|
|
90
|
+
const latest = await fetchLatest();
|
|
91
|
+
const result = latest === null
|
|
92
|
+
? { status: 'unknown', current: version }
|
|
93
|
+
: compareVersions(latest, version) > 0
|
|
94
|
+
? { status: 'update-available', current: version, latest: latest.replace(/^v/, ''), url: releasesUrl }
|
|
95
|
+
: { status: 'current', current: version };
|
|
96
|
+
// Don't cache a transient failure — the next open should retry.
|
|
97
|
+
if (result.status !== 'unknown')
|
|
98
|
+
cache = { at: now(), result };
|
|
99
|
+
return result;
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/telemetry/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const APP_VERSION: string;
|
|
2
|
+
/**
|
|
3
|
+
* The name this CLI is published under on npm — the ONE place it is written
|
|
4
|
+
* down, so nothing in the tree can drift onto a name we do not own.
|
|
5
|
+
*
|
|
6
|
+
* It is scoped and it does not match the workspace name: the unscoped npm name
|
|
7
|
+
* `adminium` belongs to an unrelated third party, and so does the `@adminium`
|
|
8
|
+
* scope, so `scripts/release/publish-npm.mjs` rewrites `@adminium/server` to
|
|
9
|
+
* `@<NPM_SCOPE>/adminium` (default scope `adminiumjs`) at publish time. The
|
|
10
|
+
* installed binary is still called `adminium`; only the install spec is scoped.
|
|
11
|
+
* Keep this in sync with that script's `mappedName()` if `NPM_SCOPE` changes.
|
|
12
|
+
*/
|
|
13
|
+
export declare const NPM_PACKAGE_NAME = "@adminiumjs/adminium";
|
|
14
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,WAAW,EAAE,MAAoB,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,yBAAyB,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
/**
|
|
3
|
+
* App version read from apps/server/package.json at module load. The relative
|
|
4
|
+
* hop works from both `src/` (vitest/tsx) and `dist/` (compiled) because both
|
|
5
|
+
* sit one level below the package root.
|
|
6
|
+
*/
|
|
7
|
+
const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
|
|
8
|
+
export const APP_VERSION = pkg.version;
|
|
9
|
+
/**
|
|
10
|
+
* The name this CLI is published under on npm — the ONE place it is written
|
|
11
|
+
* down, so nothing in the tree can drift onto a name we do not own.
|
|
12
|
+
*
|
|
13
|
+
* It is scoped and it does not match the workspace name: the unscoped npm name
|
|
14
|
+
* `adminium` belongs to an unrelated third party, and so does the `@adminium`
|
|
15
|
+
* scope, so `scripts/release/publish-npm.mjs` rewrites `@adminium/server` to
|
|
16
|
+
* `@<NPM_SCOPE>/adminium` (default scope `adminiumjs`) at publish time. The
|
|
17
|
+
* installed binary is still called `adminium`; only the install spec is scoped.
|
|
18
|
+
* Keep this in sync with that script's `mappedName()` if `NPM_SCOPE` changes.
|
|
19
|
+
*/
|
|
20
|
+
export const NPM_PACKAGE_NAME = '@adminiumjs/adminium';
|
|
21
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;GAIG;AACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAEvF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAW,GAAG,CAAC,OAAO,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC"}
|