@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,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod request/response schemas for `routes/schema-import/`
|
|
3
|
+
* (09-generated-app.md §8.2 source mode c, M5-T01).
|
|
4
|
+
*
|
|
5
|
+
* The request mirrors the `@adminium/schema-import` contract
|
|
6
|
+
* `parseSchemaFile(content, { format? }) → { model, format, warnings }`;
|
|
7
|
+
* `format` additionally accepts the wizard-friendly aliases `sql`/`json`.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { importFormatSchema } from '@adminium/engine';
|
|
11
|
+
/** Wizard aliases → canonical engine `ImportFormat` values. */
|
|
12
|
+
export declare const FORMAT_ALIASES: Record<string, z.infer<typeof importFormatSchema>>;
|
|
13
|
+
export declare const parseRequestFormat: z.ZodPipe<z.ZodUnion<readonly [z.ZodEnum<{
|
|
14
|
+
"sql-ddl": "sql-ddl";
|
|
15
|
+
prisma: "prisma";
|
|
16
|
+
drizzle: "drizzle";
|
|
17
|
+
typeorm: "typeorm";
|
|
18
|
+
sequelize: "sequelize";
|
|
19
|
+
rails: "rails";
|
|
20
|
+
django: "django";
|
|
21
|
+
"json-ir": "json-ir";
|
|
22
|
+
}>, z.ZodEnum<{
|
|
23
|
+
json: "json";
|
|
24
|
+
sql: "sql";
|
|
25
|
+
}>]>, z.ZodTransform<"sql-ddl" | "prisma" | "drizzle" | "typeorm" | "sequelize" | "rails" | "django" | "json-ir", "sql-ddl" | "prisma" | "drizzle" | "typeorm" | "sequelize" | "rails" | "django" | "json-ir" | "json" | "sql">>;
|
|
26
|
+
export declare const schemaImportParseBody: z.ZodObject<{
|
|
27
|
+
format: z.ZodOptional<z.ZodPipe<z.ZodUnion<readonly [z.ZodEnum<{
|
|
28
|
+
"sql-ddl": "sql-ddl";
|
|
29
|
+
prisma: "prisma";
|
|
30
|
+
drizzle: "drizzle";
|
|
31
|
+
typeorm: "typeorm";
|
|
32
|
+
sequelize: "sequelize";
|
|
33
|
+
rails: "rails";
|
|
34
|
+
django: "django";
|
|
35
|
+
"json-ir": "json-ir";
|
|
36
|
+
}>, z.ZodEnum<{
|
|
37
|
+
json: "json";
|
|
38
|
+
sql: "sql";
|
|
39
|
+
}>]>, z.ZodTransform<"sql-ddl" | "prisma" | "drizzle" | "typeorm" | "sequelize" | "rails" | "django" | "json-ir", "sql-ddl" | "prisma" | "drizzle" | "typeorm" | "sequelize" | "rails" | "django" | "json-ir" | "json" | "sql">>>;
|
|
40
|
+
content: z.ZodString;
|
|
41
|
+
fileName: z.ZodOptional<z.ZodString>;
|
|
42
|
+
}, z.core.$strip>;
|
|
43
|
+
export type SchemaImportParseBody = z.infer<typeof schemaImportParseBody>;
|
|
44
|
+
export declare const schemaImportParseReply: z.ZodObject<{
|
|
45
|
+
model: z.ZodUnknown;
|
|
46
|
+
format: z.ZodEnum<{
|
|
47
|
+
"sql-ddl": "sql-ddl";
|
|
48
|
+
prisma: "prisma";
|
|
49
|
+
drizzle: "drizzle";
|
|
50
|
+
typeorm: "typeorm";
|
|
51
|
+
sequelize: "sequelize";
|
|
52
|
+
rails: "rails";
|
|
53
|
+
django: "django";
|
|
54
|
+
"json-ir": "json-ir";
|
|
55
|
+
}>;
|
|
56
|
+
warnings: z.ZodArray<z.ZodString>;
|
|
57
|
+
summary: z.ZodObject<{
|
|
58
|
+
tables: z.ZodNumber;
|
|
59
|
+
columns: z.ZodNumber;
|
|
60
|
+
relations: z.ZodNumber;
|
|
61
|
+
enums: z.ZodNumber;
|
|
62
|
+
}, z.core.$strip>;
|
|
63
|
+
}, z.core.$strip>;
|
|
64
|
+
export type SchemaImportParseReply = z.infer<typeof schemaImportParseReply>;
|
|
65
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/routes/schema-import/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,+DAA+D;AAC/D,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAG7E,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;gOAEgE,CAAC;AAEhG,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;iBAOhC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;iBAYjC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod request/response schemas for `routes/schema-import/`
|
|
3
|
+
* (09-generated-app.md §8.2 source mode c, M5-T01).
|
|
4
|
+
*
|
|
5
|
+
* The request mirrors the `@adminium/schema-import` contract
|
|
6
|
+
* `parseSchemaFile(content, { format? }) → { model, format, warnings }`;
|
|
7
|
+
* `format` additionally accepts the wizard-friendly aliases `sql`/`json`.
|
|
8
|
+
*/
|
|
9
|
+
import { z } from 'zod';
|
|
10
|
+
import { importFormatSchema } from '@adminium/engine';
|
|
11
|
+
/** Wizard aliases → canonical engine `ImportFormat` values. */
|
|
12
|
+
export const FORMAT_ALIASES = {
|
|
13
|
+
sql: 'sql-ddl',
|
|
14
|
+
json: 'json-ir',
|
|
15
|
+
};
|
|
16
|
+
export const parseRequestFormat = z
|
|
17
|
+
.union([importFormatSchema, z.enum(['sql', 'json'])])
|
|
18
|
+
.transform((value) => FORMAT_ALIASES[value] ?? value);
|
|
19
|
+
export const schemaImportParseBody = z.object({
|
|
20
|
+
/** Omit to sniff from the content / file name. */
|
|
21
|
+
format: parseRequestFormat.optional(),
|
|
22
|
+
/** Raw schema file text (2 MB body cap comes from the server default). */
|
|
23
|
+
content: z.string().min(1),
|
|
24
|
+
/** Original file name — improves sniffing and the model name. */
|
|
25
|
+
fileName: z.string().min(1).max(255).optional(),
|
|
26
|
+
});
|
|
27
|
+
export const schemaImportParseReply = z.object({
|
|
28
|
+
/** Engine `DatabaseModel` (validated by `parseDatabaseModel` before reply). */
|
|
29
|
+
model: z.unknown(),
|
|
30
|
+
format: importFormatSchema,
|
|
31
|
+
warnings: z.array(z.string()),
|
|
32
|
+
/** Preview counts for the wizard's schema-file card. */
|
|
33
|
+
summary: z.object({
|
|
34
|
+
tables: z.number().int().nonnegative(),
|
|
35
|
+
columns: z.number().int().nonnegative(),
|
|
36
|
+
relations: z.number().int().nonnegative(),
|
|
37
|
+
enums: z.number().int().nonnegative(),
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/routes/schema-import/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAuD;IAChF,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,KAAK,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;KACpD,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,IAAK,KAA4C,CAAC,CAAC;AAEhG,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,kDAAkD;IAClD,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACrC,0EAA0E;IAC1E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,iEAAiE;IACjE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,+EAA+E;IAC/E,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;IAClB,MAAM,EAAE,kBAAkB;IAC1B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7B,wDAAwD;IACxD,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global search (`routes/search/`, 08-server-api.md §2.9, M4-T06 — the ⌘K
|
|
3
|
+
* palette's server half):
|
|
4
|
+
*
|
|
5
|
+
* GET /api/v1/search?q=&types=&connectionId=&tables=&limit=
|
|
6
|
+
*
|
|
7
|
+
* Two group kinds in v1. The §2.9 meta-entity groups (users, files,
|
|
8
|
+
* automations, views) are a KNOWN, tracked pre-v1 gap: their features have
|
|
9
|
+
* shipped, but the Kysely-over-meta-store search groups (with the
|
|
10
|
+
* system:users:read-style RBAC filters) have not been built yet — adding them
|
|
11
|
+
* means new SEARCH_TYPES entries plus per-group schemas here and in the
|
|
12
|
+
* palette client:
|
|
13
|
+
*
|
|
14
|
+
* - `page`: enabled nav rows matched by TITLE, filtered by the SAME
|
|
15
|
+
* `page:<id>:view` grant the bootstrap nav applies (09 §2.1) — search can
|
|
16
|
+
* never surface a page the sidebar would hide.
|
|
17
|
+
* - `record`: one group per searchable table the caller holds
|
|
18
|
+
* `table:<conn>:<table>:read` on. A table is searched only when an enabled,
|
|
19
|
+
* view-permitted page renders it (its envelope `source.table`) — that page's
|
|
20
|
+
* slug is what makes a hit navigable (`/p/:slug/r/:recordId`). Matching is
|
|
21
|
+
* the crud quick-search compiler (`compileQuickSearch` → dialect-aware
|
|
22
|
+
* ILIKE: postgres `ILIKE`, mysql/sqlite `LOWER(...) LIKE LOWER(...)`), so
|
|
23
|
+
* identifiers are snapshot strings and values bind as parameters (§7 item 1).
|
|
24
|
+
*
|
|
25
|
+
* PII (§5.3): the search context pins `canReadPii: false` for EVERY caller —
|
|
26
|
+
* masked columns neither match nor surface as labels, even for callers who
|
|
27
|
+
* hold the unmask grant, because labels outlive the request (the palette's
|
|
28
|
+
* localStorage Recent list). Labels come from the classifier's displayColumn
|
|
29
|
+
* (engine `classifyTable`) when it is a clean text column, else the first
|
|
30
|
+
* unmasked text column, else the PK label.
|
|
31
|
+
*
|
|
32
|
+
* Budgets (§2.9): per-table searches run in parallel with a 2 s per-table
|
|
33
|
+
* timeout inside a 5 s total budget; a timed-out (or failing) table degrades
|
|
34
|
+
* to `{ partial: true }` on its group instead of failing the request.
|
|
35
|
+
*/
|
|
36
|
+
import type { FastifyPluginAsyncZod } from 'fastify-type-provider-zod';
|
|
37
|
+
import { type MetaDb } from '@adminium/meta';
|
|
38
|
+
import type { ConnectionManager } from '../../connections/manager.js';
|
|
39
|
+
import type { ResolvedTable, SnapshotView } from '../../crud/identifiers.js';
|
|
40
|
+
import type { Row } from '../../crud/mask.js';
|
|
41
|
+
export declare const SEARCH_PER_TABLE_TIMEOUT_MS = 2000;
|
|
42
|
+
export declare const SEARCH_TOTAL_BUDGET_MS = 5000;
|
|
43
|
+
/** At most this many tables are searched per request (deterministic prefix). */
|
|
44
|
+
export declare const SEARCH_MAX_TABLES = 20;
|
|
45
|
+
/** Total record-hit cap across all groups (limit per table × table cap trim). */
|
|
46
|
+
export declare const SEARCH_MAX_TOTAL_HITS = 50;
|
|
47
|
+
export interface SearchRoutesDeps {
|
|
48
|
+
manager: ConnectionManager;
|
|
49
|
+
meta: MetaDb;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The label column for record hits: classifier displayColumn when it is a
|
|
53
|
+
* readable (text-ish, unmasked, non-secret) column, else the first such
|
|
54
|
+
* column, else null (→ PK label). Masked columns NEVER label a hit (§5.3).
|
|
55
|
+
*/
|
|
56
|
+
export declare function labelColumnFor(view: SnapshotView, table: ResolvedTable): string | null;
|
|
57
|
+
/** Number of columns a hit's §2.9 context string draws from. */
|
|
58
|
+
export declare const CONTEXT_COLUMN_CAP = 2;
|
|
59
|
+
/**
|
|
60
|
+
* The columns a record hit's `context` string draws from (§2.9 "record hits
|
|
61
|
+
* show row context", e.g. `budget £150,000 · status active`): the first
|
|
62
|
+
* `CONTEXT_COLUMN_CAP` readable text/number columns beyond the label and the
|
|
63
|
+
* PK. Masked/secret columns never appear — the same §5.3 rule that governs
|
|
64
|
+
* matching and labels, because context strings outlive the request in the
|
|
65
|
+
* palette's Recent list too.
|
|
66
|
+
*/
|
|
67
|
+
export declare function contextColumnsFor(table: ResolvedTable, labelColumn: string | null): string[];
|
|
68
|
+
/** `col1 v1 · col2 v2` over the non-empty context values of one row. */
|
|
69
|
+
export declare function contextStringFor(row: Row, columns: readonly string[]): string | undefined;
|
|
70
|
+
export declare function searchRoutes(deps: SearchRoutesDeps): FastifyPluginAsyncZod;
|
|
71
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/search/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAuB,KAAK,MAAM,EAAa,MAAM,gBAAgB,CAAC;AAI7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAY9C,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AACjD,eAAO,MAAM,sBAAsB,OAAQ,CAAC;AAC5C,gFAAgF;AAChF,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AA0BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAatF;AAED,gEAAgE;AAChE,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAkBpC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,CAU5F;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAUzF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,qBAAqB,CAyO1E"}
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global search (`routes/search/`, 08-server-api.md §2.9, M4-T06 — the ⌘K
|
|
3
|
+
* palette's server half):
|
|
4
|
+
*
|
|
5
|
+
* GET /api/v1/search?q=&types=&connectionId=&tables=&limit=
|
|
6
|
+
*
|
|
7
|
+
* Two group kinds in v1. The §2.9 meta-entity groups (users, files,
|
|
8
|
+
* automations, views) are a KNOWN, tracked pre-v1 gap: their features have
|
|
9
|
+
* shipped, but the Kysely-over-meta-store search groups (with the
|
|
10
|
+
* system:users:read-style RBAC filters) have not been built yet — adding them
|
|
11
|
+
* means new SEARCH_TYPES entries plus per-group schemas here and in the
|
|
12
|
+
* palette client:
|
|
13
|
+
*
|
|
14
|
+
* - `page`: enabled nav rows matched by TITLE, filtered by the SAME
|
|
15
|
+
* `page:<id>:view` grant the bootstrap nav applies (09 §2.1) — search can
|
|
16
|
+
* never surface a page the sidebar would hide.
|
|
17
|
+
* - `record`: one group per searchable table the caller holds
|
|
18
|
+
* `table:<conn>:<table>:read` on. A table is searched only when an enabled,
|
|
19
|
+
* view-permitted page renders it (its envelope `source.table`) — that page's
|
|
20
|
+
* slug is what makes a hit navigable (`/p/:slug/r/:recordId`). Matching is
|
|
21
|
+
* the crud quick-search compiler (`compileQuickSearch` → dialect-aware
|
|
22
|
+
* ILIKE: postgres `ILIKE`, mysql/sqlite `LOWER(...) LIKE LOWER(...)`), so
|
|
23
|
+
* identifiers are snapshot strings and values bind as parameters (§7 item 1).
|
|
24
|
+
*
|
|
25
|
+
* PII (§5.3): the search context pins `canReadPii: false` for EVERY caller —
|
|
26
|
+
* masked columns neither match nor surface as labels, even for callers who
|
|
27
|
+
* hold the unmask grant, because labels outlive the request (the palette's
|
|
28
|
+
* localStorage Recent list). Labels come from the classifier's displayColumn
|
|
29
|
+
* (engine `classifyTable`) when it is a clean text column, else the first
|
|
30
|
+
* unmasked text column, else the PK label.
|
|
31
|
+
*
|
|
32
|
+
* Budgets (§2.9): per-table searches run in parallel with a 2 s per-table
|
|
33
|
+
* timeout inside a 5 s total budget; a timed-out (or failing) table degrades
|
|
34
|
+
* to `{ partial: true }` on its group instead of failing the request.
|
|
35
|
+
*/
|
|
36
|
+
import { pagesRepo, readBool } from '@adminium/meta';
|
|
37
|
+
import { classifyTable } from '@adminium/engine';
|
|
38
|
+
import { UnauthorizedError } from '../../errors.js';
|
|
39
|
+
import { compileQuickSearch } from '../../crud/filters.js';
|
|
40
|
+
import { pkLabel } from '../../crud/records.js';
|
|
41
|
+
import { loadSnapshotView } from '../../data-io/snapshot-view.js';
|
|
42
|
+
import { SEARCH_LIMIT_DEFAULT, searchQuery, searchReply, } from './schema.js';
|
|
43
|
+
export const SEARCH_PER_TABLE_TIMEOUT_MS = 2_000;
|
|
44
|
+
export const SEARCH_TOTAL_BUDGET_MS = 5_000;
|
|
45
|
+
/** At most this many tables are searched per request (deterministic prefix). */
|
|
46
|
+
export const SEARCH_MAX_TABLES = 20;
|
|
47
|
+
/** Total record-hit cap across all groups (limit per table × table cap trim). */
|
|
48
|
+
export const SEARCH_MAX_TOTAL_HITS = 50;
|
|
49
|
+
const TIMEOUT = Symbol('search-timeout');
|
|
50
|
+
async function withTimeout(promise, ms) {
|
|
51
|
+
let timer;
|
|
52
|
+
try {
|
|
53
|
+
return await Promise.race([
|
|
54
|
+
promise,
|
|
55
|
+
new Promise((resolve) => {
|
|
56
|
+
timer = setTimeout(() => resolve(TIMEOUT), Math.max(0, ms));
|
|
57
|
+
}),
|
|
58
|
+
]);
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
clearTimeout(timer);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The label column for record hits: classifier displayColumn when it is a
|
|
66
|
+
* readable (text-ish, unmasked, non-secret) column, else the first such
|
|
67
|
+
* column, else null (→ PK label). Masked columns NEVER label a hit (§5.3).
|
|
68
|
+
*/
|
|
69
|
+
export function labelColumnFor(view, table) {
|
|
70
|
+
const usable = (name) => {
|
|
71
|
+
const column = table.columns.get(name);
|
|
72
|
+
return column !== undefined && column.textish && !column.secret && !column.masked;
|
|
73
|
+
};
|
|
74
|
+
const classified = classifyTable(view.model, table.table);
|
|
75
|
+
if (classified.displayColumn !== null && usable(classified.displayColumn)) {
|
|
76
|
+
return classified.displayColumn;
|
|
77
|
+
}
|
|
78
|
+
return [...table.columns.values()].find((c) => usable(c.name))?.name ?? null;
|
|
79
|
+
}
|
|
80
|
+
/** Number of columns a hit's §2.9 context string draws from. */
|
|
81
|
+
export const CONTEXT_COLUMN_CAP = 2;
|
|
82
|
+
/** Each context value is clipped so one long text column can't flood the palette row. */
|
|
83
|
+
const CONTEXT_VALUE_MAX = 40;
|
|
84
|
+
/** Scalar logical types beyond text that read well in a context string. */
|
|
85
|
+
const CONTEXT_SCALAR_TYPES = new Set([
|
|
86
|
+
'integer',
|
|
87
|
+
'bigint',
|
|
88
|
+
'decimal',
|
|
89
|
+
'float',
|
|
90
|
+
'boolean',
|
|
91
|
+
'date',
|
|
92
|
+
'time',
|
|
93
|
+
'timestamp',
|
|
94
|
+
'timestamptz',
|
|
95
|
+
'enum',
|
|
96
|
+
]);
|
|
97
|
+
/**
|
|
98
|
+
* The columns a record hit's `context` string draws from (§2.9 "record hits
|
|
99
|
+
* show row context", e.g. `budget £150,000 · status active`): the first
|
|
100
|
+
* `CONTEXT_COLUMN_CAP` readable text/number columns beyond the label and the
|
|
101
|
+
* PK. Masked/secret columns never appear — the same §5.3 rule that governs
|
|
102
|
+
* matching and labels, because context strings outlive the request in the
|
|
103
|
+
* palette's Recent list too.
|
|
104
|
+
*/
|
|
105
|
+
export function contextColumnsFor(table, labelColumn) {
|
|
106
|
+
const out = [];
|
|
107
|
+
for (const column of table.columns.values()) {
|
|
108
|
+
if (out.length >= CONTEXT_COLUMN_CAP)
|
|
109
|
+
break;
|
|
110
|
+
if (column.name === labelColumn || column.isPrimaryKey)
|
|
111
|
+
continue;
|
|
112
|
+
if (column.masked || column.secret)
|
|
113
|
+
continue;
|
|
114
|
+
if (!column.textish && !CONTEXT_SCALAR_TYPES.has(column.logicalType))
|
|
115
|
+
continue;
|
|
116
|
+
out.push(column.name);
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
/** `col1 v1 · col2 v2` over the non-empty context values of one row. */
|
|
121
|
+
export function contextStringFor(row, columns) {
|
|
122
|
+
const parts = [];
|
|
123
|
+
for (const name of columns) {
|
|
124
|
+
const raw = row[name];
|
|
125
|
+
if (raw === null || raw === undefined)
|
|
126
|
+
continue;
|
|
127
|
+
const value = String(raw).replace(/\s+/g, ' ').trim();
|
|
128
|
+
if (value.length === 0)
|
|
129
|
+
continue;
|
|
130
|
+
parts.push(`${name} ${value.length > CONTEXT_VALUE_MAX ? `${value.slice(0, CONTEXT_VALUE_MAX - 1)}…` : value}`);
|
|
131
|
+
}
|
|
132
|
+
return parts.length === 0 ? undefined : parts.join(' · ');
|
|
133
|
+
}
|
|
134
|
+
export function searchRoutes(deps) {
|
|
135
|
+
const { manager, meta } = deps;
|
|
136
|
+
const pages = pagesRepo(meta);
|
|
137
|
+
return async (app) => {
|
|
138
|
+
/** `page:<id>:view` / `table:...:read`, tolerant of rbac-less harnesses. */
|
|
139
|
+
function can(request, permission) {
|
|
140
|
+
if (typeof request.can !== 'function')
|
|
141
|
+
return Promise.resolve(true);
|
|
142
|
+
return request.can(permission);
|
|
143
|
+
}
|
|
144
|
+
/** The envelope's `source.table`, when the page renders one table. */
|
|
145
|
+
function sourceTableOf(page) {
|
|
146
|
+
if (typeof page.config !== 'object' || page.config === null)
|
|
147
|
+
return null;
|
|
148
|
+
const source = page.config['source'];
|
|
149
|
+
if (typeof source !== 'object' || source === null)
|
|
150
|
+
return null;
|
|
151
|
+
const table = source['table'];
|
|
152
|
+
return typeof table === 'string' && table.length > 0 ? table : null;
|
|
153
|
+
}
|
|
154
|
+
app.get('/search', {
|
|
155
|
+
// §6 row 5: 60/min — each request fans out parallel per-table ILIKE
|
|
156
|
+
// queries, so it gets its own bucket (limits live in RATE_BUCKETS).
|
|
157
|
+
config: { rateLimitBucket: 'search' },
|
|
158
|
+
schema: { querystring: searchQuery, response: { 200: searchReply } },
|
|
159
|
+
}, async (request) => {
|
|
160
|
+
// Session or API-key principal required (401, same rule as bootstrap).
|
|
161
|
+
if ((request.user ?? null) === null && (request.apiKeyPrincipal ?? null) === null) {
|
|
162
|
+
throw new UnauthorizedError('UNAUTHENTICATED');
|
|
163
|
+
}
|
|
164
|
+
const q = request.query.q.trim();
|
|
165
|
+
// Zod enforces ≥ 2 raw chars; re-check after trimming (§2.9).
|
|
166
|
+
if (q.length < 2)
|
|
167
|
+
return { data: { groups: [] } };
|
|
168
|
+
const qLower = q.toLowerCase();
|
|
169
|
+
const limit = request.query.limit ?? SEARCH_LIMIT_DEFAULT;
|
|
170
|
+
const typeFilter = request.query.types === undefined
|
|
171
|
+
? null
|
|
172
|
+
: new Set(request.query.types.split(',').map((t) => t.trim()));
|
|
173
|
+
const wants = (type) => typeFilter === null || typeFilter.has(type);
|
|
174
|
+
const tableFilter = request.query.tables === undefined
|
|
175
|
+
? null
|
|
176
|
+
: new Set(request.query.tables.split(',').map((t) => t.trim()));
|
|
177
|
+
const groups = [];
|
|
178
|
+
const startedAt = Date.now();
|
|
179
|
+
// --- pages group (nav rows by title, view-filtered) -------------------
|
|
180
|
+
if (wants('page')) {
|
|
181
|
+
const navRows = [...(await pages.navRows())].sort((a, b) => a.title.localeCompare(b.title) || a.slug.localeCompare(b.slug));
|
|
182
|
+
const hits = [];
|
|
183
|
+
for (const row of navRows) {
|
|
184
|
+
if (hits.length >= limit)
|
|
185
|
+
break;
|
|
186
|
+
if (!readBool(row.isEnabled))
|
|
187
|
+
continue;
|
|
188
|
+
if (!row.title.toLowerCase().includes(qLower))
|
|
189
|
+
continue;
|
|
190
|
+
if (!(await can(request, `page:${row.id}:view`)))
|
|
191
|
+
continue;
|
|
192
|
+
hits.push({ pageId: row.id, slug: row.slug, title: row.title, icon: row.icon });
|
|
193
|
+
}
|
|
194
|
+
groups.push({ type: 'page', count: hits.length, hits });
|
|
195
|
+
}
|
|
196
|
+
// --- record groups (per readable, page-backed, searchable table) ------
|
|
197
|
+
if (wants('record')) {
|
|
198
|
+
const candidates = await collectCandidates(request);
|
|
199
|
+
const settled = await Promise.all(candidates.map(async (candidate) => {
|
|
200
|
+
const budgetLeft = SEARCH_TOTAL_BUDGET_MS - (Date.now() - startedAt);
|
|
201
|
+
const timeoutMs = Math.min(SEARCH_PER_TABLE_TIMEOUT_MS, budgetLeft);
|
|
202
|
+
try {
|
|
203
|
+
const result = await withTimeout(searchTable(candidate), timeoutMs);
|
|
204
|
+
if (result !== TIMEOUT)
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
request.log.warn({ err: error, table: candidate.table.id }, 'search: per-table query failed — degrading to partial');
|
|
209
|
+
}
|
|
210
|
+
// Timed out / failed: degraded group, not a failed request (§2.9).
|
|
211
|
+
return {
|
|
212
|
+
type: 'record',
|
|
213
|
+
connectionId: candidate.connectionId,
|
|
214
|
+
table: candidate.table.id,
|
|
215
|
+
pageSlug: candidate.pageSlug,
|
|
216
|
+
count: 0,
|
|
217
|
+
partial: true,
|
|
218
|
+
hits: [],
|
|
219
|
+
};
|
|
220
|
+
}));
|
|
221
|
+
let total = 0;
|
|
222
|
+
for (const group of settled) {
|
|
223
|
+
if (group === null)
|
|
224
|
+
continue;
|
|
225
|
+
if (group.hits.length === 0 && group.partial !== true)
|
|
226
|
+
continue; // omit empty
|
|
227
|
+
if (total >= SEARCH_MAX_TOTAL_HITS)
|
|
228
|
+
break; // total cap, deterministic prefix
|
|
229
|
+
groups.push(group);
|
|
230
|
+
total += group.hits.length;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return { data: { groups } };
|
|
234
|
+
/**
|
|
235
|
+
* Deterministic candidate prefix: connections in create order, then
|
|
236
|
+
* that connection's pages in nav order; the first page rendering a
|
|
237
|
+
* table wins its slug (page-crud pages first, so the record route is
|
|
238
|
+
* the canonical target when both a crud page and e.g. a board exist).
|
|
239
|
+
*/
|
|
240
|
+
async function collectCandidates(req) {
|
|
241
|
+
const connectionRows = await meta.db
|
|
242
|
+
.selectFrom('adminium_connections')
|
|
243
|
+
.select(['id'])
|
|
244
|
+
.orderBy('createdAt', 'asc')
|
|
245
|
+
.orderBy('id', 'asc')
|
|
246
|
+
.execute();
|
|
247
|
+
const connectionIds = connectionRows
|
|
248
|
+
.map((row) => row.id)
|
|
249
|
+
.filter((id) => request.query.connectionId === undefined || id === request.query.connectionId);
|
|
250
|
+
const out = [];
|
|
251
|
+
for (const connectionId of connectionIds) {
|
|
252
|
+
if (out.length >= SEARCH_MAX_TABLES)
|
|
253
|
+
break;
|
|
254
|
+
const pageRows = (await pages.listForConnection(connectionId)).filter((page) => page.isEnabled && sourceTableOf(page) !== null);
|
|
255
|
+
// page-crud first — its `/p/:slug/r/:recordId` route is the target.
|
|
256
|
+
pageRows.sort((a, b) => Number(b.type === 'page-crud') - Number(a.type === 'page-crud'));
|
|
257
|
+
const pageByTable = new Map();
|
|
258
|
+
for (const page of pageRows) {
|
|
259
|
+
const tableId = sourceTableOf(page);
|
|
260
|
+
if (!pageByTable.has(tableId))
|
|
261
|
+
pageByTable.set(tableId, page);
|
|
262
|
+
}
|
|
263
|
+
if (pageByTable.size === 0)
|
|
264
|
+
continue;
|
|
265
|
+
let view;
|
|
266
|
+
try {
|
|
267
|
+
view = await loadSnapshotView(meta, connectionId);
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
continue; // no snapshot — nothing searchable on this connection
|
|
271
|
+
}
|
|
272
|
+
for (const [tableId, page] of pageByTable) {
|
|
273
|
+
if (out.length >= SEARCH_MAX_TABLES)
|
|
274
|
+
break;
|
|
275
|
+
if (tableFilter !== null && !tableFilter.has(tableId))
|
|
276
|
+
continue;
|
|
277
|
+
let table;
|
|
278
|
+
try {
|
|
279
|
+
table = view.table(tableId);
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
continue; // stale page vs. re-introspected snapshot
|
|
283
|
+
}
|
|
284
|
+
// Record hits need a navigable record route → a PK (§2.7.2).
|
|
285
|
+
if (table.primaryKey.length === 0)
|
|
286
|
+
continue;
|
|
287
|
+
// Searchable = at least one unmasked text column (§2.9 + §5.3).
|
|
288
|
+
const searchable = [...table.columns.values()].some((c) => c.textish && !c.secret && !c.masked);
|
|
289
|
+
if (!searchable)
|
|
290
|
+
continue;
|
|
291
|
+
// RBAC: the same table-read grant the data routes enforce (§5.2),
|
|
292
|
+
// plus the page-view grant so a hit never navigates into a 403.
|
|
293
|
+
if (!(await can(req, `table:${connectionId}:${table.id}:read`)))
|
|
294
|
+
continue;
|
|
295
|
+
if (!(await can(req, `page:${page.id}:view`)))
|
|
296
|
+
continue;
|
|
297
|
+
out.push({ connectionId, view, table, pageSlug: page.slug });
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return out;
|
|
301
|
+
}
|
|
302
|
+
/** One table's hits via the dialect-aware quick-search compiler. */
|
|
303
|
+
async function searchTable(candidate) {
|
|
304
|
+
const { connectionId, view, table, pageSlug } = candidate;
|
|
305
|
+
const { db, dialect } = await manager.data(connectionId);
|
|
306
|
+
// canReadPii pinned false: masked columns never match nor surface.
|
|
307
|
+
const ctx = {
|
|
308
|
+
view,
|
|
309
|
+
table,
|
|
310
|
+
canReadPii: false,
|
|
311
|
+
dynamic: db.dynamic,
|
|
312
|
+
dialect,
|
|
313
|
+
};
|
|
314
|
+
const labelColumn = labelColumnFor(view, table);
|
|
315
|
+
const contextColumns = contextColumnsFor(table, labelColumn);
|
|
316
|
+
const selectNames = new Set(table.primaryKey);
|
|
317
|
+
if (labelColumn !== null)
|
|
318
|
+
selectNames.add(labelColumn);
|
|
319
|
+
for (const name of contextColumns)
|
|
320
|
+
selectNames.add(name);
|
|
321
|
+
let qb = db
|
|
322
|
+
.selectFrom(table.id)
|
|
323
|
+
.select([...selectNames].map((name) => db.dynamic.ref(name)));
|
|
324
|
+
qb = qb.where((eb) => {
|
|
325
|
+
const match = compileQuickSearch(eb, ctx, q);
|
|
326
|
+
return match ?? eb(eb.val(1), '=', 0);
|
|
327
|
+
});
|
|
328
|
+
for (const pk of table.primaryKey)
|
|
329
|
+
qb = qb.orderBy(db.dynamic.ref(pk), 'asc');
|
|
330
|
+
const rows = (await qb.limit(limit).execute());
|
|
331
|
+
if (rows.length === 0)
|
|
332
|
+
return null;
|
|
333
|
+
const hits = rows.map((row) => {
|
|
334
|
+
const pk = Object.fromEntries(table.primaryKey.map((name) => [name, row[name]]));
|
|
335
|
+
const raw = labelColumn === null ? null : row[labelColumn];
|
|
336
|
+
const label = raw === null || raw === undefined || String(raw).length === 0
|
|
337
|
+
? pkLabel(table, pk)
|
|
338
|
+
: String(raw);
|
|
339
|
+
const context = contextStringFor(row, contextColumns);
|
|
340
|
+
return {
|
|
341
|
+
connectionId,
|
|
342
|
+
table: table.id,
|
|
343
|
+
recordId: pkLabel(table, pk),
|
|
344
|
+
label,
|
|
345
|
+
...(context === undefined ? {} : { context }),
|
|
346
|
+
pageSlug,
|
|
347
|
+
};
|
|
348
|
+
});
|
|
349
|
+
return {
|
|
350
|
+
type: 'record',
|
|
351
|
+
connectionId,
|
|
352
|
+
table: table.id,
|
|
353
|
+
pageSlug,
|
|
354
|
+
count: hits.length,
|
|
355
|
+
hits,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/search/index.ts"],"names":[],"mappings":"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"}
|