cursedbelt 0.0.0
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/README.md +80 -0
- package/dist/client/convertRequest.d.ts +15 -0
- package/dist/client/convertRequest.d.ts.map +1 -0
- package/dist/client/convertRequest.js +94 -0
- package/dist/client/convertRequest.js.map +1 -0
- package/dist/client/ctgrConfig.d.ts +3 -0
- package/dist/client/ctgrConfig.d.ts.map +1 -0
- package/dist/client/ctgrConfig.js +32 -0
- package/dist/client/ctgrConfig.js.map +1 -0
- package/dist/client/ctgrGuard.d.ts +2 -0
- package/dist/client/ctgrGuard.d.ts.map +1 -0
- package/dist/client/ctgrGuard.js +71 -0
- package/dist/client/ctgrGuard.js.map +1 -0
- package/dist/client/index.d.ts +5 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +12 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/ws.d.ts +37 -0
- package/dist/client/ws.d.ts.map +1 -0
- package/dist/client/ws.js +43 -0
- package/dist/client/ws.js.map +1 -0
- package/dist/core/color.d.ts +15 -0
- package/dist/core/color.d.ts.map +1 -0
- package/dist/core/color.js +33 -0
- package/dist/core/color.js.map +1 -0
- package/dist/core/csv.d.ts +65 -0
- package/dist/core/csv.d.ts.map +1 -0
- package/dist/core/csv.js +55 -0
- package/dist/core/csv.js.map +1 -0
- package/dist/core/ctgr.d.ts +6 -0
- package/dist/core/ctgr.d.ts.map +1 -0
- package/dist/core/ctgr.js +58 -0
- package/dist/core/ctgr.js.map +1 -0
- package/dist/core/layout/aggregate.d.ts +8 -0
- package/dist/core/layout/aggregate.d.ts.map +1 -0
- package/dist/core/layout/aggregate.js +77 -0
- package/dist/core/layout/aggregate.js.map +1 -0
- package/dist/core/layout/field.d.ts +14 -0
- package/dist/core/layout/field.d.ts.map +1 -0
- package/dist/core/layout/field.js +2 -0
- package/dist/core/layout/field.js.map +1 -0
- package/dist/core/layout/grid.d.ts +7 -0
- package/dist/core/layout/grid.d.ts.map +1 -0
- package/dist/core/layout/grid.js +152 -0
- package/dist/core/layout/grid.js.map +1 -0
- package/dist/core/layout/index.d.ts +10 -0
- package/dist/core/layout/index.d.ts.map +1 -0
- package/dist/core/layout/index.js +18 -0
- package/dist/core/layout/index.js.map +1 -0
- package/dist/core/layout/migrate.d.ts +4 -0
- package/dist/core/layout/migrate.d.ts.map +1 -0
- package/dist/core/layout/migrate.js +170 -0
- package/dist/core/layout/migrate.js.map +1 -0
- package/dist/core/layout/resolve.d.ts +23 -0
- package/dist/core/layout/resolve.d.ts.map +1 -0
- package/dist/core/layout/resolve.js +27 -0
- package/dist/core/layout/resolve.js.map +1 -0
- package/dist/core/layout/treeOps.d.ts +11 -0
- package/dist/core/layout/treeOps.d.ts.map +1 -0
- package/dist/core/layout/treeOps.js +68 -0
- package/dist/core/layout/treeOps.js.map +1 -0
- package/dist/core/layout/types.d.ts +97 -0
- package/dist/core/layout/types.d.ts.map +1 -0
- package/dist/core/layout/types.js +21 -0
- package/dist/core/layout/types.js.map +1 -0
- package/dist/core/layout/undoHistory.d.ts +34 -0
- package/dist/core/layout/undoHistory.d.ts.map +1 -0
- package/dist/core/layout/undoHistory.js +53 -0
- package/dist/core/layout/undoHistory.js.map +1 -0
- package/dist/core/layout/version.d.ts +8 -0
- package/dist/core/layout/version.d.ts.map +1 -0
- package/dist/core/layout/version.js +8 -0
- package/dist/core/layout/version.js.map +1 -0
- package/dist/core/media/bgRemoval.d.ts +28 -0
- package/dist/core/media/bgRemoval.d.ts.map +1 -0
- package/dist/core/media/bgRemoval.js +102 -0
- package/dist/core/media/bgRemoval.js.map +1 -0
- package/dist/core/media/format.d.ts +21 -0
- package/dist/core/media/format.d.ts.map +1 -0
- package/dist/core/media/format.js +55 -0
- package/dist/core/media/format.js.map +1 -0
- package/dist/core/media/index.d.ts +8 -0
- package/dist/core/media/index.d.ts.map +1 -0
- package/dist/core/media/index.js +11 -0
- package/dist/core/media/index.js.map +1 -0
- package/dist/core/media/mediaItem.d.ts +16 -0
- package/dist/core/media/mediaItem.d.ts.map +1 -0
- package/dist/core/media/mediaItem.js +35 -0
- package/dist/core/media/mediaItem.js.map +1 -0
- package/dist/core/media/segment.d.ts +80 -0
- package/dist/core/media/segment.d.ts.map +1 -0
- package/dist/core/media/segment.js +248 -0
- package/dist/core/media/segment.js.map +1 -0
- package/dist/core/media/trim.d.ts +29 -0
- package/dist/core/media/trim.d.ts.map +1 -0
- package/dist/core/media/trim.js +58 -0
- package/dist/core/media/trim.js.map +1 -0
- package/dist/core/media/types.d.ts +94 -0
- package/dist/core/media/types.d.ts.map +1 -0
- package/dist/core/media/types.js +12 -0
- package/dist/core/media/types.js.map +1 -0
- package/dist/core/media/validate.d.ts +10 -0
- package/dist/core/media/validate.d.ts.map +1 -0
- package/dist/core/media/validate.js +122 -0
- package/dist/core/media/validate.js.map +1 -0
- package/dist/core/navigation/breadcrumbCompat.d.ts +25 -0
- package/dist/core/navigation/breadcrumbCompat.d.ts.map +1 -0
- package/dist/core/navigation/breadcrumbCompat.js +22 -0
- package/dist/core/navigation/breadcrumbCompat.js.map +1 -0
- package/dist/core/navigation/coverageTest.d.ts +25 -0
- package/dist/core/navigation/coverageTest.d.ts.map +1 -0
- package/dist/core/navigation/coverageTest.js +49 -0
- package/dist/core/navigation/coverageTest.js.map +1 -0
- package/dist/core/navigation/index.d.ts +7 -0
- package/dist/core/navigation/index.d.ts.map +1 -0
- package/dist/core/navigation/index.js +11 -0
- package/dist/core/navigation/index.js.map +1 -0
- package/dist/core/navigation/migrateNavPreferences.d.ts +54 -0
- package/dist/core/navigation/migrateNavPreferences.d.ts.map +1 -0
- package/dist/core/navigation/migrateNavPreferences.js +64 -0
- package/dist/core/navigation/migrateNavPreferences.js.map +1 -0
- package/dist/core/navigation/navigationModel.d.ts +93 -0
- package/dist/core/navigation/navigationModel.d.ts.map +1 -0
- package/dist/core/navigation/navigationModel.js +15 -0
- package/dist/core/navigation/navigationModel.js.map +1 -0
- package/dist/core/navigation/navigationSelectors.d.ts +64 -0
- package/dist/core/navigation/navigationSelectors.d.ts.map +1 -0
- package/dist/core/navigation/navigationSelectors.js +163 -0
- package/dist/core/navigation/navigationSelectors.js.map +1 -0
- package/dist/core/navigation/searchCatalogue.d.ts +24 -0
- package/dist/core/navigation/searchCatalogue.d.ts.map +1 -0
- package/dist/core/navigation/searchCatalogue.js +77 -0
- package/dist/core/navigation/searchCatalogue.js.map +1 -0
- package/dist/core/palette/ShortcutRegistry.d.ts +34 -0
- package/dist/core/palette/ShortcutRegistry.d.ts.map +1 -0
- package/dist/core/palette/ShortcutRegistry.js +53 -0
- package/dist/core/palette/ShortcutRegistry.js.map +1 -0
- package/dist/core/palette/fuzzyRank.d.ts +19 -0
- package/dist/core/palette/fuzzyRank.d.ts.map +1 -0
- package/dist/core/palette/fuzzyRank.js +74 -0
- package/dist/core/palette/fuzzyRank.js.map +1 -0
- package/dist/core/palette/hotkeys.d.ts +29 -0
- package/dist/core/palette/hotkeys.d.ts.map +1 -0
- package/dist/core/palette/hotkeys.js +119 -0
- package/dist/core/palette/hotkeys.js.map +1 -0
- package/dist/core/palette/index.d.ts +4 -0
- package/dist/core/palette/index.d.ts.map +1 -0
- package/dist/core/palette/index.js +9 -0
- package/dist/core/palette/index.js.map +1 -0
- package/dist/core/uiScale/index.d.ts +9 -0
- package/dist/core/uiScale/index.d.ts.map +1 -0
- package/dist/core/uiScale/index.js +9 -0
- package/dist/core/uiScale/index.js.map +1 -0
- package/dist/core/uiScale/scale.d.ts +37 -0
- package/dist/core/uiScale/scale.d.ts.map +1 -0
- package/dist/core/uiScale/scale.js +48 -0
- package/dist/core/uiScale/scale.js.map +1 -0
- package/dist/core/uiScale/uiScaleStore.d.ts +48 -0
- package/dist/core/uiScale/uiScaleStore.d.ts.map +1 -0
- package/dist/core/uiScale/uiScaleStore.js +64 -0
- package/dist/core/uiScale/uiScaleStore.js.map +1 -0
- package/dist/ctgr/base64url.d.ts +9 -0
- package/dist/ctgr/base64url.d.ts.map +1 -0
- package/dist/ctgr/base64url.js +40 -0
- package/dist/ctgr/base64url.js.map +1 -0
- package/dist/ctgr/chunkStore.d.ts +25 -0
- package/dist/ctgr/chunkStore.d.ts.map +1 -0
- package/dist/ctgr/chunkStore.js +126 -0
- package/dist/ctgr/chunkStore.js.map +1 -0
- package/dist/ctgr/codec.d.ts +45 -0
- package/dist/ctgr/codec.d.ts.map +1 -0
- package/dist/ctgr/codec.js +154 -0
- package/dist/ctgr/codec.js.map +1 -0
- package/dist/ctgr/compress.d.ts +3 -0
- package/dist/ctgr/compress.d.ts.map +1 -0
- package/dist/ctgr/compress.js +21 -0
- package/dist/ctgr/compress.js.map +1 -0
- package/dist/ctgr/crc32.d.ts +3 -0
- package/dist/ctgr/crc32.d.ts.map +1 -0
- package/dist/ctgr/crc32.js +24 -0
- package/dist/ctgr/crc32.js.map +1 -0
- package/dist/ctgr/digest.d.ts +2 -0
- package/dist/ctgr/digest.d.ts.map +1 -0
- package/dist/ctgr/digest.js +16 -0
- package/dist/ctgr/digest.js.map +1 -0
- package/dist/ctgr/index.d.ts +9 -0
- package/dist/ctgr/index.d.ts.map +1 -0
- package/dist/ctgr/index.js +14 -0
- package/dist/ctgr/index.js.map +1 -0
- package/dist/ctgr/types.d.ts +65 -0
- package/dist/ctgr/types.d.ts.map +1 -0
- package/dist/ctgr/types.js +22 -0
- package/dist/ctgr/types.js.map +1 -0
- package/dist/ctgr/v0compat.d.ts +28 -0
- package/dist/ctgr/v0compat.d.ts.map +1 -0
- package/dist/ctgr/v0compat.js +129 -0
- package/dist/ctgr/v0compat.js.map +1 -0
- package/dist/data/env/index.d.ts +75 -0
- package/dist/data/env/index.d.ts.map +1 -0
- package/dist/data/env/index.js +149 -0
- package/dist/data/env/index.js.map +1 -0
- package/dist/data/json/index.d.ts +61 -0
- package/dist/data/json/index.d.ts.map +1 -0
- package/dist/data/json/index.js +488 -0
- package/dist/data/json/index.js.map +1 -0
- package/dist/game/core/DisposeRegistry.d.ts +42 -0
- package/dist/game/core/DisposeRegistry.d.ts.map +1 -0
- package/dist/game/core/DisposeRegistry.js +67 -0
- package/dist/game/core/DisposeRegistry.js.map +1 -0
- package/dist/game/core/drawBudget.d.ts +26 -0
- package/dist/game/core/drawBudget.d.ts.map +1 -0
- package/dist/game/core/drawBudget.js +55 -0
- package/dist/game/core/drawBudget.js.map +1 -0
- package/dist/game/core/fixedTimestep.d.ts +38 -0
- package/dist/game/core/fixedTimestep.d.ts.map +1 -0
- package/dist/game/core/fixedTimestep.js +47 -0
- package/dist/game/core/fixedTimestep.js.map +1 -0
- package/dist/game/core/index.d.ts +9 -0
- package/dist/game/core/index.d.ts.map +1 -0
- package/dist/game/core/index.js +8 -0
- package/dist/game/core/index.js.map +1 -0
- package/dist/game/core/inputCollector.d.ts +82 -0
- package/dist/game/core/inputCollector.d.ts.map +1 -0
- package/dist/game/core/inputCollector.js +176 -0
- package/dist/game/core/inputCollector.js.map +1 -0
- package/dist/game/core/resizeCanvas.d.ts +19 -0
- package/dist/game/core/resizeCanvas.d.ts.map +1 -0
- package/dist/game/core/resizeCanvas.js +29 -0
- package/dist/game/core/resizeCanvas.js.map +1 -0
- package/dist/game/react/index.d.ts +3 -0
- package/dist/game/react/index.d.ts.map +1 -0
- package/dist/game/react/index.js +5 -0
- package/dist/game/react/index.js.map +1 -0
- package/dist/game/react/useGameEngine.d.ts +64 -0
- package/dist/game/react/useGameEngine.d.ts.map +1 -0
- package/dist/game/react/useGameEngine.js +77 -0
- package/dist/game/react/useGameEngine.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/ops/test-report/types.d.ts +81 -0
- package/dist/ops/test-report/types.d.ts.map +1 -0
- package/dist/ops/test-report/types.js +13 -0
- package/dist/ops/test-report/types.js.map +1 -0
- package/dist/react/Toast.d.ts +5 -0
- package/dist/react/Toast.d.ts.map +1 -0
- package/dist/react/Toast.js +33 -0
- package/dist/react/Toast.js.map +1 -0
- package/dist/react/charts/AreaChart.d.ts +27 -0
- package/dist/react/charts/AreaChart.d.ts.map +1 -0
- package/dist/react/charts/AreaChart.js +19 -0
- package/dist/react/charts/AreaChart.js.map +1 -0
- package/dist/react/charts/BarChart.d.ts +27 -0
- package/dist/react/charts/BarChart.d.ts.map +1 -0
- package/dist/react/charts/BarChart.js +20 -0
- package/dist/react/charts/BarChart.js.map +1 -0
- package/dist/react/charts/CategoryBars.d.ts +17 -0
- package/dist/react/charts/CategoryBars.d.ts.map +1 -0
- package/dist/react/charts/CategoryBars.js +28 -0
- package/dist/react/charts/CategoryBars.js.map +1 -0
- package/dist/react/charts/CategoryDonut.d.ts +16 -0
- package/dist/react/charts/CategoryDonut.d.ts.map +1 -0
- package/dist/react/charts/CategoryDonut.js +17 -0
- package/dist/react/charts/CategoryDonut.js.map +1 -0
- package/dist/react/charts/ChartFrame.d.ts +19 -0
- package/dist/react/charts/ChartFrame.d.ts.map +1 -0
- package/dist/react/charts/ChartFrame.js +17 -0
- package/dist/react/charts/ChartFrame.js.map +1 -0
- package/dist/react/charts/ChartLegend.d.ts +19 -0
- package/dist/react/charts/ChartLegend.d.ts.map +1 -0
- package/dist/react/charts/ChartLegend.js +11 -0
- package/dist/react/charts/ChartLegend.js.map +1 -0
- package/dist/react/charts/ChartTooltip.d.ts +35 -0
- package/dist/react/charts/ChartTooltip.d.ts.map +1 -0
- package/dist/react/charts/ChartTooltip.js +26 -0
- package/dist/react/charts/ChartTooltip.js.map +1 -0
- package/dist/react/charts/DivergingBars.d.ts +16 -0
- package/dist/react/charts/DivergingBars.d.ts.map +1 -0
- package/dist/react/charts/DivergingBars.js +14 -0
- package/dist/react/charts/DivergingBars.js.map +1 -0
- package/dist/react/charts/DonutChart.d.ts +10 -0
- package/dist/react/charts/DonutChart.d.ts.map +1 -0
- package/dist/react/charts/DonutChart.js +16 -0
- package/dist/react/charts/DonutChart.js.map +1 -0
- package/dist/react/charts/LabeledSeriesChart.d.ts +25 -0
- package/dist/react/charts/LabeledSeriesChart.d.ts.map +1 -0
- package/dist/react/charts/LabeledSeriesChart.js +29 -0
- package/dist/react/charts/LabeledSeriesChart.js.map +1 -0
- package/dist/react/charts/LineChart.d.ts +25 -0
- package/dist/react/charts/LineChart.d.ts.map +1 -0
- package/dist/react/charts/LineChart.js +12 -0
- package/dist/react/charts/LineChart.js.map +1 -0
- package/dist/react/charts/MiniBarChart.d.ts +14 -0
- package/dist/react/charts/MiniBarChart.d.ts.map +1 -0
- package/dist/react/charts/MiniBarChart.js +14 -0
- package/dist/react/charts/MiniBarChart.js.map +1 -0
- package/dist/react/charts/PieChart.d.ts +25 -0
- package/dist/react/charts/PieChart.d.ts.map +1 -0
- package/dist/react/charts/PieChart.js +17 -0
- package/dist/react/charts/PieChart.js.map +1 -0
- package/dist/react/charts/RadialBarChart.d.ts +24 -0
- package/dist/react/charts/RadialBarChart.d.ts.map +1 -0
- package/dist/react/charts/RadialBarChart.js +20 -0
- package/dist/react/charts/RadialBarChart.js.map +1 -0
- package/dist/react/charts/Sparkline.d.ts +20 -0
- package/dist/react/charts/Sparkline.d.ts.map +1 -0
- package/dist/react/charts/Sparkline.js +19 -0
- package/dist/react/charts/Sparkline.js.map +1 -0
- package/dist/react/charts/StackedBars.d.ts +18 -0
- package/dist/react/charts/StackedBars.d.ts.map +1 -0
- package/dist/react/charts/StackedBars.js +15 -0
- package/dist/react/charts/StackedBars.js.map +1 -0
- package/dist/react/charts/StatusDonut.d.ts +7 -0
- package/dist/react/charts/StatusDonut.d.ts.map +1 -0
- package/dist/react/charts/StatusDonut.js +22 -0
- package/dist/react/charts/StatusDonut.js.map +1 -0
- package/dist/react/charts/TimeSeriesChart.d.ts +23 -0
- package/dist/react/charts/TimeSeriesChart.d.ts.map +1 -0
- package/dist/react/charts/TimeSeriesChart.js +26 -0
- package/dist/react/charts/TimeSeriesChart.js.map +1 -0
- package/dist/react/charts/chartTheme.d.ts +21 -0
- package/dist/react/charts/chartTheme.d.ts.map +1 -0
- package/dist/react/charts/chartTheme.js +55 -0
- package/dist/react/charts/chartTheme.js.map +1 -0
- package/dist/react/charts/format.d.ts +12 -0
- package/dist/react/charts/format.d.ts.map +1 -0
- package/dist/react/charts/format.js +111 -0
- package/dist/react/charts/format.js.map +1 -0
- package/dist/react/charts/index.d.ts +13 -0
- package/dist/react/charts/index.d.ts.map +1 -0
- package/dist/react/charts/index.js +23 -0
- package/dist/react/charts/index.js.map +1 -0
- package/dist/react/charts/shared.d.ts +30 -0
- package/dist/react/charts/shared.d.ts.map +1 -0
- package/dist/react/charts/shared.js +13 -0
- package/dist/react/charts/shared.js.map +1 -0
- package/dist/react/charts/tokens.d.ts +56 -0
- package/dist/react/charts/tokens.d.ts.map +1 -0
- package/dist/react/charts/tokens.js +128 -0
- package/dist/react/charts/tokens.js.map +1 -0
- package/dist/react/compat.d.ts +8 -0
- package/dist/react/compat.d.ts.map +1 -0
- package/dist/react/compat.js +31 -0
- package/dist/react/compat.js.map +1 -0
- package/dist/react/components/ActionBar.d.ts +27 -0
- package/dist/react/components/ActionBar.d.ts.map +1 -0
- package/dist/react/components/ActionBar.js +29 -0
- package/dist/react/components/ActionBar.js.map +1 -0
- package/dist/react/components/AddItemsMenu.d.ts +41 -0
- package/dist/react/components/AddItemsMenu.d.ts.map +1 -0
- package/dist/react/components/AddItemsMenu.js +26 -0
- package/dist/react/components/AddItemsMenu.js.map +1 -0
- package/dist/react/components/Alert.d.ts +28 -0
- package/dist/react/components/Alert.d.ts.map +1 -0
- package/dist/react/components/Alert.js +29 -0
- package/dist/react/components/Alert.js.map +1 -0
- package/dist/react/components/AppShell.d.ts +118 -0
- package/dist/react/components/AppShell.d.ts.map +1 -0
- package/dist/react/components/AppShell.js +57 -0
- package/dist/react/components/AppShell.js.map +1 -0
- package/dist/react/components/AutoGrowTextarea.d.ts +31 -0
- package/dist/react/components/AutoGrowTextarea.d.ts.map +1 -0
- package/dist/react/components/AutoGrowTextarea.js +75 -0
- package/dist/react/components/AutoGrowTextarea.js.map +1 -0
- package/dist/react/components/Badge.d.ts +27 -0
- package/dist/react/components/Badge.d.ts.map +1 -0
- package/dist/react/components/Badge.js +41 -0
- package/dist/react/components/Badge.js.map +1 -0
- package/dist/react/components/Button.d.ts +35 -0
- package/dist/react/components/Button.d.ts.map +1 -0
- package/dist/react/components/Button.js +56 -0
- package/dist/react/components/Button.js.map +1 -0
- package/dist/react/components/ButtonGroup.d.ts +11 -0
- package/dist/react/components/ButtonGroup.d.ts.map +1 -0
- package/dist/react/components/ButtonGroup.js +14 -0
- package/dist/react/components/ButtonGroup.js.map +1 -0
- package/dist/react/components/ButtonLink.d.ts +19 -0
- package/dist/react/components/ButtonLink.d.ts.map +1 -0
- package/dist/react/components/ButtonLink.js +13 -0
- package/dist/react/components/ButtonLink.js.map +1 -0
- package/dist/react/components/Card.d.ts +27 -0
- package/dist/react/components/Card.d.ts.map +1 -0
- package/dist/react/components/Card.js +29 -0
- package/dist/react/components/Card.js.map +1 -0
- package/dist/react/components/Checkbox.d.ts +14 -0
- package/dist/react/components/Checkbox.d.ts.map +1 -0
- package/dist/react/components/Checkbox.js +23 -0
- package/dist/react/components/Checkbox.js.map +1 -0
- package/dist/react/components/CodeFieldInput.d.ts +29 -0
- package/dist/react/components/CodeFieldInput.d.ts.map +1 -0
- package/dist/react/components/CodeFieldInput.js +37 -0
- package/dist/react/components/CodeFieldInput.js.map +1 -0
- package/dist/react/components/Collapsible.d.ts +28 -0
- package/dist/react/components/Collapsible.d.ts.map +1 -0
- package/dist/react/components/Collapsible.js +17 -0
- package/dist/react/components/Collapsible.js.map +1 -0
- package/dist/react/components/ColorField.d.ts +21 -0
- package/dist/react/components/ColorField.d.ts.map +1 -0
- package/dist/react/components/ColorField.js +16 -0
- package/dist/react/components/ColorField.js.map +1 -0
- package/dist/react/components/ConfirmDialog.d.ts +25 -0
- package/dist/react/components/ConfirmDialog.d.ts.map +1 -0
- package/dist/react/components/ConfirmDialog.js +29 -0
- package/dist/react/components/ConfirmDialog.js.map +1 -0
- package/dist/react/components/CopyButton.d.ts +40 -0
- package/dist/react/components/CopyButton.d.ts.map +1 -0
- package/dist/react/components/CopyButton.js +33 -0
- package/dist/react/components/CopyButton.js.map +1 -0
- package/dist/react/components/DataTable/CardView.d.ts +18 -0
- package/dist/react/components/DataTable/CardView.d.ts.map +1 -0
- package/dist/react/components/DataTable/CardView.js +23 -0
- package/dist/react/components/DataTable/CardView.js.map +1 -0
- package/dist/react/components/DataTable/DataTable.d.ts +53 -0
- package/dist/react/components/DataTable/DataTable.d.ts.map +1 -0
- package/dist/react/components/DataTable/DataTable.js +86 -0
- package/dist/react/components/DataTable/DataTable.js.map +1 -0
- package/dist/react/components/DataTable/Pagination.d.ts +14 -0
- package/dist/react/components/DataTable/Pagination.d.ts.map +1 -0
- package/dist/react/components/DataTable/Pagination.js +20 -0
- package/dist/react/components/DataTable/Pagination.js.map +1 -0
- package/dist/react/components/DataTable/RowActions.d.ts +13 -0
- package/dist/react/components/DataTable/RowActions.d.ts.map +1 -0
- package/dist/react/components/DataTable/RowActions.js +19 -0
- package/dist/react/components/DataTable/RowActions.js.map +1 -0
- package/dist/react/components/DataTable/SortHeader.d.ts +14 -0
- package/dist/react/components/DataTable/SortHeader.d.ts.map +1 -0
- package/dist/react/components/DataTable/SortHeader.js +15 -0
- package/dist/react/components/DataTable/SortHeader.js.map +1 -0
- package/dist/react/components/DataTable/Toolbar.d.ts +25 -0
- package/dist/react/components/DataTable/Toolbar.d.ts.map +1 -0
- package/dist/react/components/DataTable/Toolbar.js +17 -0
- package/dist/react/components/DataTable/Toolbar.js.map +1 -0
- package/dist/react/components/DataTable/ViewOptionsMenu.d.ts +12 -0
- package/dist/react/components/DataTable/ViewOptionsMenu.d.ts.map +1 -0
- package/dist/react/components/DataTable/ViewOptionsMenu.js +21 -0
- package/dist/react/components/DataTable/ViewOptionsMenu.js.map +1 -0
- package/dist/react/components/DataTable/cells/CellRenderer.d.ts +32 -0
- package/dist/react/components/DataTable/cells/CellRenderer.d.ts.map +1 -0
- package/dist/react/components/DataTable/cells/CellRenderer.js +133 -0
- package/dist/react/components/DataTable/cells/CellRenderer.js.map +1 -0
- package/dist/react/components/DataTable/cells/CodeCell.d.ts +13 -0
- package/dist/react/components/DataTable/cells/CodeCell.d.ts.map +1 -0
- package/dist/react/components/DataTable/cells/CodeCell.js +12 -0
- package/dist/react/components/DataTable/cells/CodeCell.js.map +1 -0
- package/dist/react/components/DataTable/cells/LinkCell.d.ts +12 -0
- package/dist/react/components/DataTable/cells/LinkCell.d.ts.map +1 -0
- package/dist/react/components/DataTable/cells/LinkCell.js +11 -0
- package/dist/react/components/DataTable/cells/LinkCell.js.map +1 -0
- package/dist/react/components/DataTable/cells/PasswordCell.d.ts +12 -0
- package/dist/react/components/DataTable/cells/PasswordCell.d.ts.map +1 -0
- package/dist/react/components/DataTable/cells/PasswordCell.js +21 -0
- package/dist/react/components/DataTable/cells/PasswordCell.js.map +1 -0
- package/dist/react/components/DataTable/index.d.ts +13 -0
- package/dist/react/components/DataTable/index.d.ts.map +1 -0
- package/dist/react/components/DataTable/index.js +12 -0
- package/dist/react/components/DataTable/index.js.map +1 -0
- package/dist/react/components/DataTable/types.d.ts +37 -0
- package/dist/react/components/DataTable/types.d.ts.map +1 -0
- package/dist/react/components/DataTable/types.js +2 -0
- package/dist/react/components/DataTable/types.js.map +1 -0
- package/dist/react/components/DataTable.d.ts +16 -0
- package/dist/react/components/DataTable.d.ts.map +1 -0
- package/dist/react/components/DataTable.js +25 -0
- package/dist/react/components/DataTable.js.map +1 -0
- package/dist/react/components/DiscardConfirmDialog.d.ts +25 -0
- package/dist/react/components/DiscardConfirmDialog.d.ts.map +1 -0
- package/dist/react/components/DiscardConfirmDialog.js +46 -0
- package/dist/react/components/DiscardConfirmDialog.js.map +1 -0
- package/dist/react/components/DiscardConfirmOverlay.d.ts +14 -0
- package/dist/react/components/DiscardConfirmOverlay.d.ts.map +1 -0
- package/dist/react/components/DiscardConfirmOverlay.js +7 -0
- package/dist/react/components/DiscardConfirmOverlay.js.map +1 -0
- package/dist/react/components/DisclosureButton.d.ts +20 -0
- package/dist/react/components/DisclosureButton.d.ts.map +1 -0
- package/dist/react/components/DisclosureButton.js +15 -0
- package/dist/react/components/DisclosureButton.js.map +1 -0
- package/dist/react/components/DismissButton.d.ts +10 -0
- package/dist/react/components/DismissButton.d.ts.map +1 -0
- package/dist/react/components/DismissButton.js +7 -0
- package/dist/react/components/DismissButton.js.map +1 -0
- package/dist/react/components/DragHandle.d.ts +15 -0
- package/dist/react/components/DragHandle.d.ts.map +1 -0
- package/dist/react/components/DragHandle.js +9 -0
- package/dist/react/components/DragHandle.js.map +1 -0
- package/dist/react/components/Drawer.d.ts +34 -0
- package/dist/react/components/Drawer.d.ts.map +1 -0
- package/dist/react/components/Drawer.js +58 -0
- package/dist/react/components/Drawer.js.map +1 -0
- package/dist/react/components/DropIndicator.d.ts +11 -0
- package/dist/react/components/DropIndicator.d.ts.map +1 -0
- package/dist/react/components/DropIndicator.js +18 -0
- package/dist/react/components/DropIndicator.js.map +1 -0
- package/dist/react/components/Dropdown.d.ts +64 -0
- package/dist/react/components/Dropdown.d.ts.map +1 -0
- package/dist/react/components/Dropdown.js +144 -0
- package/dist/react/components/Dropdown.js.map +1 -0
- package/dist/react/components/DropdownMenu.d.ts +34 -0
- package/dist/react/components/DropdownMenu.d.ts.map +1 -0
- package/dist/react/components/DropdownMenu.js +27 -0
- package/dist/react/components/DropdownMenu.js.map +1 -0
- package/dist/react/components/EmojiField.d.ts +17 -0
- package/dist/react/components/EmojiField.d.ts.map +1 -0
- package/dist/react/components/EmojiField.js +18 -0
- package/dist/react/components/EmojiField.js.map +1 -0
- package/dist/react/components/EmptyState.d.ts +18 -0
- package/dist/react/components/EmptyState.d.ts.map +1 -0
- package/dist/react/components/EmptyState.js +11 -0
- package/dist/react/components/EmptyState.js.map +1 -0
- package/dist/react/components/EnvCompare.d.ts +20 -0
- package/dist/react/components/EnvCompare.d.ts.map +1 -0
- package/dist/react/components/EnvCompare.js +31 -0
- package/dist/react/components/EnvCompare.js.map +1 -0
- package/dist/react/components/EnvEditor.d.ts +22 -0
- package/dist/react/components/EnvEditor.d.ts.map +1 -0
- package/dist/react/components/EnvEditor.js +42 -0
- package/dist/react/components/EnvEditor.js.map +1 -0
- package/dist/react/components/Field.d.ts +48 -0
- package/dist/react/components/Field.d.ts.map +1 -0
- package/dist/react/components/Field.js +49 -0
- package/dist/react/components/Field.js.map +1 -0
- package/dist/react/components/FieldInput.d.ts +86 -0
- package/dist/react/components/FieldInput.d.ts.map +1 -0
- package/dist/react/components/FieldInput.js +218 -0
- package/dist/react/components/FieldInput.js.map +1 -0
- package/dist/react/components/FieldLabel.d.ts +23 -0
- package/dist/react/components/FieldLabel.d.ts.map +1 -0
- package/dist/react/components/FieldLabel.js +8 -0
- package/dist/react/components/FieldLabel.js.map +1 -0
- package/dist/react/components/Grid.d.ts +20 -0
- package/dist/react/components/Grid.d.ts.map +1 -0
- package/dist/react/components/Grid.js +15 -0
- package/dist/react/components/Grid.js.map +1 -0
- package/dist/react/components/HoverCard.d.ts +19 -0
- package/dist/react/components/HoverCard.d.ts.map +1 -0
- package/dist/react/components/HoverCard.js +21 -0
- package/dist/react/components/HoverCard.js.map +1 -0
- package/dist/react/components/IconButton.d.ts +14 -0
- package/dist/react/components/IconButton.d.ts.map +1 -0
- package/dist/react/components/IconButton.js +13 -0
- package/dist/react/components/IconButton.js.map +1 -0
- package/dist/react/components/InfoHint.d.ts +24 -0
- package/dist/react/components/InfoHint.d.ts.map +1 -0
- package/dist/react/components/InfoHint.js +43 -0
- package/dist/react/components/InfoHint.js.map +1 -0
- package/dist/react/components/InlineEditableText.d.ts +28 -0
- package/dist/react/components/InlineEditableText.d.ts.map +1 -0
- package/dist/react/components/InlineEditableText.js +65 -0
- package/dist/react/components/InlineEditableText.js.map +1 -0
- package/dist/react/components/Input.d.ts +18 -0
- package/dist/react/components/Input.d.ts.map +1 -0
- package/dist/react/components/Input.js +22 -0
- package/dist/react/components/Input.js.map +1 -0
- package/dist/react/components/JsonEditor.d.ts +59 -0
- package/dist/react/components/JsonEditor.d.ts.map +1 -0
- package/dist/react/components/JsonEditor.js +54 -0
- package/dist/react/components/JsonEditor.js.map +1 -0
- package/dist/react/components/Lightbox.d.ts +17 -0
- package/dist/react/components/Lightbox.d.ts.map +1 -0
- package/dist/react/components/Lightbox.js +18 -0
- package/dist/react/components/Lightbox.js.map +1 -0
- package/dist/react/components/Modal.d.ts +35 -0
- package/dist/react/components/Modal.d.ts.map +1 -0
- package/dist/react/components/Modal.js +54 -0
- package/dist/react/components/Modal.js.map +1 -0
- package/dist/react/components/ModalShell.d.ts +39 -0
- package/dist/react/components/ModalShell.d.ts.map +1 -0
- package/dist/react/components/ModalShell.js +63 -0
- package/dist/react/components/ModalShell.js.map +1 -0
- package/dist/react/components/MultiSelectField.d.ts +28 -0
- package/dist/react/components/MultiSelectField.d.ts.map +1 -0
- package/dist/react/components/MultiSelectField.js +25 -0
- package/dist/react/components/MultiSelectField.js.map +1 -0
- package/dist/react/components/Page.d.ts +23 -0
- package/dist/react/components/Page.d.ts.map +1 -0
- package/dist/react/components/Page.js +24 -0
- package/dist/react/components/Page.js.map +1 -0
- package/dist/react/components/PageBottom.d.ts +62 -0
- package/dist/react/components/PageBottom.d.ts.map +1 -0
- package/dist/react/components/PageBottom.js +87 -0
- package/dist/react/components/PageBottom.js.map +1 -0
- package/dist/react/components/PageContainer.d.ts +8 -0
- package/dist/react/components/PageContainer.d.ts.map +1 -0
- package/dist/react/components/PageContainer.js +12 -0
- package/dist/react/components/PageContainer.js.map +1 -0
- package/dist/react/components/Pagination.d.ts +24 -0
- package/dist/react/components/Pagination.d.ts.map +1 -0
- package/dist/react/components/Pagination.js +48 -0
- package/dist/react/components/Pagination.js.map +1 -0
- package/dist/react/components/Popover.d.ts +23 -0
- package/dist/react/components/Popover.d.ts.map +1 -0
- package/dist/react/components/Popover.js +14 -0
- package/dist/react/components/Popover.js.map +1 -0
- package/dist/react/components/QueryBoundary.d.ts +34 -0
- package/dist/react/components/QueryBoundary.d.ts.map +1 -0
- package/dist/react/components/QueryBoundary.js +28 -0
- package/dist/react/components/QueryBoundary.js.map +1 -0
- package/dist/react/components/RatingField.d.ts +21 -0
- package/dist/react/components/RatingField.d.ts.map +1 -0
- package/dist/react/components/RatingField.js +30 -0
- package/dist/react/components/RatingField.js.map +1 -0
- package/dist/react/components/RenderField.d.ts +16 -0
- package/dist/react/components/RenderField.d.ts.map +1 -0
- package/dist/react/components/RenderField.js +19 -0
- package/dist/react/components/RenderField.js.map +1 -0
- package/dist/react/components/ScrollArea.d.ts +61 -0
- package/dist/react/components/ScrollArea.d.ts.map +1 -0
- package/dist/react/components/ScrollArea.js +67 -0
- package/dist/react/components/ScrollArea.js.map +1 -0
- package/dist/react/components/ScrollToTopButton.d.ts +8 -0
- package/dist/react/components/ScrollToTopButton.d.ts.map +1 -0
- package/dist/react/components/ScrollToTopButton.js +42 -0
- package/dist/react/components/ScrollToTopButton.js.map +1 -0
- package/dist/react/components/SecretInput.d.ts +38 -0
- package/dist/react/components/SecretInput.d.ts.map +1 -0
- package/dist/react/components/SecretInput.js +33 -0
- package/dist/react/components/SecretInput.js.map +1 -0
- package/dist/react/components/Section.d.ts +17 -0
- package/dist/react/components/Section.d.ts.map +1 -0
- package/dist/react/components/Section.js +14 -0
- package/dist/react/components/Section.js.map +1 -0
- package/dist/react/components/SectionHeading.d.ts +12 -0
- package/dist/react/components/SectionHeading.d.ts.map +1 -0
- package/dist/react/components/SectionHeading.js +5 -0
- package/dist/react/components/SectionHeading.js.map +1 -0
- package/dist/react/components/SegmentedControl.d.ts +24 -0
- package/dist/react/components/SegmentedControl.d.ts.map +1 -0
- package/dist/react/components/SegmentedControl.js +14 -0
- package/dist/react/components/SegmentedControl.js.map +1 -0
- package/dist/react/components/Select.d.ts +5 -0
- package/dist/react/components/Select.d.ts.map +1 -0
- package/dist/react/components/Select.js +8 -0
- package/dist/react/components/Select.js.map +1 -0
- package/dist/react/components/SelectField.d.ts +46 -0
- package/dist/react/components/SelectField.d.ts.map +1 -0
- package/dist/react/components/SelectField.js +23 -0
- package/dist/react/components/SelectField.js.map +1 -0
- package/dist/react/components/Skeleton.d.ts +28 -0
- package/dist/react/components/Skeleton.d.ts.map +1 -0
- package/dist/react/components/Skeleton.js +29 -0
- package/dist/react/components/Skeleton.js.map +1 -0
- package/dist/react/components/Spinner.d.ts +14 -0
- package/dist/react/components/Spinner.d.ts.map +1 -0
- package/dist/react/components/Spinner.js +10 -0
- package/dist/react/components/Spinner.js.map +1 -0
- package/dist/react/components/SplitButton.d.ts +36 -0
- package/dist/react/components/SplitButton.d.ts.map +1 -0
- package/dist/react/components/SplitButton.js +24 -0
- package/dist/react/components/SplitButton.js.map +1 -0
- package/dist/react/components/StatTile.d.ts +22 -0
- package/dist/react/components/StatTile.d.ts.map +1 -0
- package/dist/react/components/StatTile.js +27 -0
- package/dist/react/components/StatTile.js.map +1 -0
- package/dist/react/components/Surface.d.ts +37 -0
- package/dist/react/components/Surface.d.ts.map +1 -0
- package/dist/react/components/Surface.js +29 -0
- package/dist/react/components/Surface.js.map +1 -0
- package/dist/react/components/Switch.d.ts +12 -0
- package/dist/react/components/Switch.d.ts.map +1 -0
- package/dist/react/components/Switch.js +13 -0
- package/dist/react/components/Switch.js.map +1 -0
- package/dist/react/components/TagsInput.d.ts +25 -0
- package/dist/react/components/TagsInput.d.ts.map +1 -0
- package/dist/react/components/TagsInput.js +62 -0
- package/dist/react/components/TagsInput.js.map +1 -0
- package/dist/react/components/TextArea.d.ts +10 -0
- package/dist/react/components/TextArea.d.ts.map +1 -0
- package/dist/react/components/TextArea.js +14 -0
- package/dist/react/components/TextArea.js.map +1 -0
- package/dist/react/components/Tooltip.d.ts +32 -0
- package/dist/react/components/Tooltip.d.ts.map +1 -0
- package/dist/react/components/Tooltip.js +32 -0
- package/dist/react/components/Tooltip.js.map +1 -0
- package/dist/react/components/Wizard/ReviewStep.d.ts +26 -0
- package/dist/react/components/Wizard/ReviewStep.d.ts.map +1 -0
- package/dist/react/components/Wizard/ReviewStep.js +42 -0
- package/dist/react/components/Wizard/ReviewStep.js.map +1 -0
- package/dist/react/components/Wizard/Stepper.d.ts +24 -0
- package/dist/react/components/Wizard/Stepper.d.ts.map +1 -0
- package/dist/react/components/Wizard/Stepper.js +24 -0
- package/dist/react/components/Wizard/Stepper.js.map +1 -0
- package/dist/react/components/Wizard/Wizard.d.ts +20 -0
- package/dist/react/components/Wizard/Wizard.d.ts.map +1 -0
- package/dist/react/components/Wizard/Wizard.js +153 -0
- package/dist/react/components/Wizard/Wizard.js.map +1 -0
- package/dist/react/components/Wizard/types.d.ts +71 -0
- package/dist/react/components/Wizard/types.d.ts.map +1 -0
- package/dist/react/components/Wizard/types.js +2 -0
- package/dist/react/components/Wizard/types.js.map +1 -0
- package/dist/react/components/dialog.d.ts +38 -0
- package/dist/react/components/dialog.d.ts.map +1 -0
- package/dist/react/components/dialog.js +38 -0
- package/dist/react/components/dialog.js.map +1 -0
- package/dist/react/components/layout.d.ts +32 -0
- package/dist/react/components/layout.d.ts.map +1 -0
- package/dist/react/components/layout.js +46 -0
- package/dist/react/components/layout.js.map +1 -0
- package/dist/react/components/popoverPlacement.d.ts +40 -0
- package/dist/react/components/popoverPlacement.d.ts.map +1 -0
- package/dist/react/components/popoverPlacement.js +25 -0
- package/dist/react/components/popoverPlacement.js.map +1 -0
- package/dist/react/components/revealOnHover.d.ts +3 -0
- package/dist/react/components/revealOnHover.d.ts.map +1 -0
- package/dist/react/components/revealOnHover.js +3 -0
- package/dist/react/components/revealOnHover.js.map +1 -0
- package/dist/react/confirm.d.ts +25 -0
- package/dist/react/confirm.d.ts.map +1 -0
- package/dist/react/confirm.js +43 -0
- package/dist/react/confirm.js.map +1 -0
- package/dist/react/constants/viewport.d.ts +16 -0
- package/dist/react/constants/viewport.d.ts.map +1 -0
- package/dist/react/constants/viewport.js +16 -0
- package/dist/react/constants/viewport.js.map +1 -0
- package/dist/react/createApiHooks.d.ts +110 -0
- package/dist/react/createApiHooks.d.ts.map +1 -0
- package/dist/react/createApiHooks.js +56 -0
- package/dist/react/createApiHooks.js.map +1 -0
- package/dist/react/emoji/EmojiAutocomplete.d.ts +23 -0
- package/dist/react/emoji/EmojiAutocomplete.d.ts.map +1 -0
- package/dist/react/emoji/EmojiAutocomplete.js +99 -0
- package/dist/react/emoji/EmojiAutocomplete.js.map +1 -0
- package/dist/react/emoji/EmojiPicker.d.ts +32 -0
- package/dist/react/emoji/EmojiPicker.d.ts.map +1 -0
- package/dist/react/emoji/EmojiPicker.js +41 -0
- package/dist/react/emoji/EmojiPicker.js.map +1 -0
- package/dist/react/emoji/emojiSearch.d.ts +22 -0
- package/dist/react/emoji/emojiSearch.d.ts.map +1 -0
- package/dist/react/emoji/emojiSearch.js +49 -0
- package/dist/react/emoji/emojiSearch.js.map +1 -0
- package/dist/react/emoji/index.d.ts +4 -0
- package/dist/react/emoji/index.d.ts.map +1 -0
- package/dist/react/emoji/index.js +4 -0
- package/dist/react/emoji/index.js.map +1 -0
- package/dist/react/hooks/DragHandleIcon.d.ts +12 -0
- package/dist/react/hooks/DragHandleIcon.d.ts.map +1 -0
- package/dist/react/hooks/DragHandleIcon.js +13 -0
- package/dist/react/hooks/DragHandleIcon.js.map +1 -0
- package/dist/react/hooks/dragShared.d.ts +21 -0
- package/dist/react/hooks/dragShared.d.ts.map +1 -0
- package/dist/react/hooks/dragShared.js +2 -0
- package/dist/react/hooks/dragShared.js.map +1 -0
- package/dist/react/hooks/useAutoSizeTextarea.d.ts +19 -0
- package/dist/react/hooks/useAutoSizeTextarea.d.ts.map +1 -0
- package/dist/react/hooks/useAutoSizeTextarea.js +44 -0
- package/dist/react/hooks/useAutoSizeTextarea.js.map +1 -0
- package/dist/react/hooks/useCaretInView.d.ts +22 -0
- package/dist/react/hooks/useCaretInView.d.ts.map +1 -0
- package/dist/react/hooks/useCaretInView.js +32 -0
- package/dist/react/hooks/useCaretInView.js.map +1 -0
- package/dist/react/hooks/useCopyToClipboard.d.ts +11 -0
- package/dist/react/hooks/useCopyToClipboard.d.ts.map +1 -0
- package/dist/react/hooks/useCopyToClipboard.js +31 -0
- package/dist/react/hooks/useCopyToClipboard.js.map +1 -0
- package/dist/react/hooks/useCrossContainerDrag.d.ts +72 -0
- package/dist/react/hooks/useCrossContainerDrag.d.ts.map +1 -0
- package/dist/react/hooks/useCrossContainerDrag.js +202 -0
- package/dist/react/hooks/useCrossContainerDrag.js.map +1 -0
- package/dist/react/hooks/useDebouncedValue.d.ts +7 -0
- package/dist/react/hooks/useDebouncedValue.d.ts.map +1 -0
- package/dist/react/hooks/useDebouncedValue.js +15 -0
- package/dist/react/hooks/useDebouncedValue.js.map +1 -0
- package/dist/react/hooks/useDiscardGuard.d.ts +42 -0
- package/dist/react/hooks/useDiscardGuard.d.ts.map +1 -0
- package/dist/react/hooks/useDiscardGuard.js +44 -0
- package/dist/react/hooks/useDiscardGuard.js.map +1 -0
- package/dist/react/hooks/useDismissibleItems.d.ts +46 -0
- package/dist/react/hooks/useDismissibleItems.d.ts.map +1 -0
- package/dist/react/hooks/useDismissibleItems.js +28 -0
- package/dist/react/hooks/useDismissibleItems.js.map +1 -0
- package/dist/react/hooks/useDndSensors.d.ts +21 -0
- package/dist/react/hooks/useDndSensors.d.ts.map +1 -0
- package/dist/react/hooks/useDndSensors.js +23 -0
- package/dist/react/hooks/useDndSensors.js.map +1 -0
- package/dist/react/hooks/useDragReorder.d.ts +70 -0
- package/dist/react/hooks/useDragReorder.d.ts.map +1 -0
- package/dist/react/hooks/useDragReorder.js +134 -0
- package/dist/react/hooks/useDragReorder.js.map +1 -0
- package/dist/react/hooks/useDragToMove.d.ts +65 -0
- package/dist/react/hooks/useDragToMove.d.ts.map +1 -0
- package/dist/react/hooks/useDragToMove.js +76 -0
- package/dist/react/hooks/useDragToMove.js.map +1 -0
- package/dist/react/hooks/useEscapeKey.d.ts +3 -0
- package/dist/react/hooks/useEscapeKey.d.ts.map +1 -0
- package/dist/react/hooks/useEscapeKey.js +15 -0
- package/dist/react/hooks/useEscapeKey.js.map +1 -0
- package/dist/react/hooks/useHasHover.d.ts +9 -0
- package/dist/react/hooks/useHasHover.d.ts.map +1 -0
- package/dist/react/hooks/useHasHover.js +39 -0
- package/dist/react/hooks/useHasHover.js.map +1 -0
- package/dist/react/hooks/useKeyDown.d.ts +16 -0
- package/dist/react/hooks/useKeyDown.d.ts.map +1 -0
- package/dist/react/hooks/useKeyDown.js +42 -0
- package/dist/react/hooks/useKeyDown.js.map +1 -0
- package/dist/react/hooks/useKeyboardInset.d.ts +12 -0
- package/dist/react/hooks/useKeyboardInset.d.ts.map +1 -0
- package/dist/react/hooks/useKeyboardInset.js +33 -0
- package/dist/react/hooks/useKeyboardInset.js.map +1 -0
- package/dist/react/hooks/useMediaQuery.d.ts +3 -0
- package/dist/react/hooks/useMediaQuery.d.ts.map +1 -0
- package/dist/react/hooks/useMediaQuery.js +16 -0
- package/dist/react/hooks/useMediaQuery.js.map +1 -0
- package/dist/react/hooks/useOnlineStatus.d.ts +8 -0
- package/dist/react/hooks/useOnlineStatus.d.ts.map +1 -0
- package/dist/react/hooks/useOnlineStatus.js +27 -0
- package/dist/react/hooks/useOnlineStatus.js.map +1 -0
- package/dist/react/hooks/usePagination.d.ts +49 -0
- package/dist/react/hooks/usePagination.d.ts.map +1 -0
- package/dist/react/hooks/usePagination.js +50 -0
- package/dist/react/hooks/usePagination.js.map +1 -0
- package/dist/react/hooks/useTableSort.d.ts +33 -0
- package/dist/react/hooks/useTableSort.d.ts.map +1 -0
- package/dist/react/hooks/useTableSort.js +72 -0
- package/dist/react/hooks/useTableSort.js.map +1 -0
- package/dist/react/hooks/useWindowResize.d.ts +13 -0
- package/dist/react/hooks/useWindowResize.d.ts.map +1 -0
- package/dist/react/hooks/useWindowResize.js +30 -0
- package/dist/react/hooks/useWindowResize.js.map +1 -0
- package/dist/react/index.d.ts +106 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +110 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/layoutEngine/LayoutCanvas.d.ts +23 -0
- package/dist/react/layoutEngine/LayoutCanvas.d.ts.map +1 -0
- package/dist/react/layoutEngine/LayoutCanvas.js +153 -0
- package/dist/react/layoutEngine/LayoutCanvas.js.map +1 -0
- package/dist/react/layoutEngine/LayoutConfigDialog.d.ts +24 -0
- package/dist/react/layoutEngine/LayoutConfigDialog.d.ts.map +1 -0
- package/dist/react/layoutEngine/LayoutConfigDialog.js +100 -0
- package/dist/react/layoutEngine/LayoutConfigDialog.js.map +1 -0
- package/dist/react/layoutEngine/LayoutRenderer.d.ts +22 -0
- package/dist/react/layoutEngine/LayoutRenderer.d.ts.map +1 -0
- package/dist/react/layoutEngine/LayoutRenderer.js +69 -0
- package/dist/react/layoutEngine/LayoutRenderer.js.map +1 -0
- package/dist/react/layoutEngine/NodeInspector.d.ts +18 -0
- package/dist/react/layoutEngine/NodeInspector.d.ts.map +1 -0
- package/dist/react/layoutEngine/NodeInspector.js +94 -0
- package/dist/react/layoutEngine/NodeInspector.js.map +1 -0
- package/dist/react/layoutEngine/SuggestPanel.d.ts +12 -0
- package/dist/react/layoutEngine/SuggestPanel.d.ts.map +1 -0
- package/dist/react/layoutEngine/SuggestPanel.js +25 -0
- package/dist/react/layoutEngine/SuggestPanel.js.map +1 -0
- package/dist/react/layoutEngine/index.d.ts +9 -0
- package/dist/react/layoutEngine/index.d.ts.map +1 -0
- package/dist/react/layoutEngine/index.js +15 -0
- package/dist/react/layoutEngine/index.js.map +1 -0
- package/dist/react/layoutEngine/registry.d.ts +11 -0
- package/dist/react/layoutEngine/registry.d.ts.map +1 -0
- package/dist/react/layoutEngine/registry.js +46 -0
- package/dist/react/layoutEngine/registry.js.map +1 -0
- package/dist/react/layoutEngine/types.d.ts +81 -0
- package/dist/react/layoutEngine/types.d.ts.map +1 -0
- package/dist/react/layoutEngine/types.js +2 -0
- package/dist/react/layoutEngine/types.js.map +1 -0
- package/dist/react/layoutEngine/useLayoutEditor.d.ts +40 -0
- package/dist/react/layoutEngine/useLayoutEditor.d.ts.map +1 -0
- package/dist/react/layoutEngine/useLayoutEditor.js +98 -0
- package/dist/react/layoutEngine/useLayoutEditor.js.map +1 -0
- package/dist/react/lib/cn.d.ts +4 -0
- package/dist/react/lib/cn.d.ts.map +1 -0
- package/dist/react/lib/cn.js +7 -0
- package/dist/react/lib/cn.js.map +1 -0
- package/dist/react/lib/draftPersistence.d.ts +19 -0
- package/dist/react/lib/draftPersistence.d.ts.map +1 -0
- package/dist/react/lib/draftPersistence.js +50 -0
- package/dist/react/lib/draftPersistence.js.map +1 -0
- package/dist/react/lib/field.d.ts +13 -0
- package/dist/react/lib/field.d.ts.map +1 -0
- package/dist/react/lib/field.js +13 -0
- package/dist/react/lib/field.js.map +1 -0
- package/dist/react/lib/floatingStyles.d.ts +18 -0
- package/dist/react/lib/floatingStyles.d.ts.map +1 -0
- package/dist/react/lib/floatingStyles.js +24 -0
- package/dist/react/lib/floatingStyles.js.map +1 -0
- package/dist/react/lib/form.d.ts +25 -0
- package/dist/react/lib/form.d.ts.map +1 -0
- package/dist/react/lib/form.js +34 -0
- package/dist/react/lib/form.js.map +1 -0
- package/dist/react/lib/store.d.ts +21 -0
- package/dist/react/lib/store.d.ts.map +1 -0
- package/dist/react/lib/store.js +12 -0
- package/dist/react/lib/store.js.map +1 -0
- package/dist/react/media/AutoMaskControls.d.ts +31 -0
- package/dist/react/media/AutoMaskControls.d.ts.map +1 -0
- package/dist/react/media/AutoMaskControls.js +34 -0
- package/dist/react/media/AutoMaskControls.js.map +1 -0
- package/dist/react/media/BrushSizeSlider.d.ts +14 -0
- package/dist/react/media/BrushSizeSlider.d.ts.map +1 -0
- package/dist/react/media/BrushSizeSlider.js +49 -0
- package/dist/react/media/BrushSizeSlider.js.map +1 -0
- package/dist/react/media/ImageEditor.d.ts +14 -0
- package/dist/react/media/ImageEditor.d.ts.map +1 -0
- package/dist/react/media/ImageEditor.js +54 -0
- package/dist/react/media/ImageEditor.js.map +1 -0
- package/dist/react/media/MaskPainter.d.ts +21 -0
- package/dist/react/media/MaskPainter.d.ts.map +1 -0
- package/dist/react/media/MaskPainter.js +599 -0
- package/dist/react/media/MaskPainter.js.map +1 -0
- package/dist/react/media/MediaCatalogueViewer.d.ts +9 -0
- package/dist/react/media/MediaCatalogueViewer.d.ts.map +1 -0
- package/dist/react/media/MediaCatalogueViewer.js +43 -0
- package/dist/react/media/MediaCatalogueViewer.js.map +1 -0
- package/dist/react/media/MediaCell.d.ts +18 -0
- package/dist/react/media/MediaCell.d.ts.map +1 -0
- package/dist/react/media/MediaCell.js +20 -0
- package/dist/react/media/MediaCell.js.map +1 -0
- package/dist/react/media/MediaLightbox.d.ts +22 -0
- package/dist/react/media/MediaLightbox.d.ts.map +1 -0
- package/dist/react/media/MediaLightbox.js +24 -0
- package/dist/react/media/MediaLightbox.js.map +1 -0
- package/dist/react/media/TrimRangeSlider.d.ts +23 -0
- package/dist/react/media/TrimRangeSlider.d.ts.map +1 -0
- package/dist/react/media/TrimRangeSlider.js +59 -0
- package/dist/react/media/TrimRangeSlider.js.map +1 -0
- package/dist/react/media/VideoSlideContent.d.ts +13 -0
- package/dist/react/media/VideoSlideContent.d.ts.map +1 -0
- package/dist/react/media/VideoSlideContent.js +21 -0
- package/dist/react/media/VideoSlideContent.js.map +1 -0
- package/dist/react/media/VideoTrimmer.d.ts +10 -0
- package/dist/react/media/VideoTrimmer.d.ts.map +1 -0
- package/dist/react/media/VideoTrimmer.js +129 -0
- package/dist/react/media/VideoTrimmer.js.map +1 -0
- package/dist/react/media/VirtualizedRows.d.ts +28 -0
- package/dist/react/media/VirtualizedRows.d.ts.map +1 -0
- package/dist/react/media/VirtualizedRows.js +64 -0
- package/dist/react/media/VirtualizedRows.js.map +1 -0
- package/dist/react/media/imageEditorSpec.d.ts +70 -0
- package/dist/react/media/imageEditorSpec.d.ts.map +1 -0
- package/dist/react/media/imageEditorSpec.js +110 -0
- package/dist/react/media/imageEditorSpec.js.map +1 -0
- package/dist/react/media/index.d.ts +11 -0
- package/dist/react/media/index.d.ts.map +1 -0
- package/dist/react/media/index.js +18 -0
- package/dist/react/media/index.js.map +1 -0
- package/dist/react/media/maskGeometry.d.ts +42 -0
- package/dist/react/media/maskGeometry.d.ts.map +1 -0
- package/dist/react/media/maskGeometry.js +66 -0
- package/dist/react/media/maskGeometry.js.map +1 -0
- package/dist/react/media/maskModel.d.ts +65 -0
- package/dist/react/media/maskModel.d.ts.map +1 -0
- package/dist/react/media/maskModel.js +64 -0
- package/dist/react/media/maskModel.js.map +1 -0
- package/dist/react/media/maskRaster.d.ts +40 -0
- package/dist/react/media/maskRaster.d.ts.map +1 -0
- package/dist/react/media/maskRaster.js +126 -0
- package/dist/react/media/maskRaster.js.map +1 -0
- package/dist/react/media/mediaPhoto.d.ts +35 -0
- package/dist/react/media/mediaPhoto.d.ts.map +1 -0
- package/dist/react/media/mediaPhoto.js +53 -0
- package/dist/react/media/mediaPhoto.js.map +1 -0
- package/dist/react/media/types.d.ts +146 -0
- package/dist/react/media/types.d.ts.map +1 -0
- package/dist/react/media/types.js +2 -0
- package/dist/react/media/types.js.map +1 -0
- package/dist/react/media/useIntersectionObserver.d.ts +18 -0
- package/dist/react/media/useIntersectionObserver.d.ts.map +1 -0
- package/dist/react/media/useIntersectionObserver.js +28 -0
- package/dist/react/media/useIntersectionObserver.js.map +1 -0
- package/dist/react/media/videoThumbnailer.d.ts +14 -0
- package/dist/react/media/videoThumbnailer.d.ts.map +1 -0
- package/dist/react/media/videoThumbnailer.js +111 -0
- package/dist/react/media/videoThumbnailer.js.map +1 -0
- package/dist/react/nav/Breadcrumbs.d.ts +44 -0
- package/dist/react/nav/Breadcrumbs.d.ts.map +1 -0
- package/dist/react/nav/Breadcrumbs.js +43 -0
- package/dist/react/nav/Breadcrumbs.js.map +1 -0
- package/dist/react/nav/ColorSwatchGrid.d.ts +19 -0
- package/dist/react/nav/ColorSwatchGrid.d.ts.map +1 -0
- package/dist/react/nav/ColorSwatchGrid.js +21 -0
- package/dist/react/nav/ColorSwatchGrid.js.map +1 -0
- package/dist/react/nav/CommandBar.d.ts +43 -0
- package/dist/react/nav/CommandBar.d.ts.map +1 -0
- package/dist/react/nav/CommandBar.js +19 -0
- package/dist/react/nav/CommandBar.js.map +1 -0
- package/dist/react/nav/HeaderSearch.d.ts +37 -0
- package/dist/react/nav/HeaderSearch.d.ts.map +1 -0
- package/dist/react/nav/HeaderSearch.js +101 -0
- package/dist/react/nav/HeaderSearch.js.map +1 -0
- package/dist/react/nav/HubTileGrid.d.ts +32 -0
- package/dist/react/nav/HubTileGrid.d.ts.map +1 -0
- package/dist/react/nav/HubTileGrid.js +60 -0
- package/dist/react/nav/HubTileGrid.js.map +1 -0
- package/dist/react/nav/NavColorPicker.d.ts +19 -0
- package/dist/react/nav/NavColorPicker.d.ts.map +1 -0
- package/dist/react/nav/NavColorPicker.js +16 -0
- package/dist/react/nav/NavColorPicker.js.map +1 -0
- package/dist/react/nav/NavItemMenu.d.ts +30 -0
- package/dist/react/nav/NavItemMenu.d.ts.map +1 -0
- package/dist/react/nav/NavItemMenu.js +24 -0
- package/dist/react/nav/NavItemMenu.js.map +1 -0
- package/dist/react/nav/PlaceBar.d.ts +36 -0
- package/dist/react/nav/PlaceBar.d.ts.map +1 -0
- package/dist/react/nav/PlaceBar.js +36 -0
- package/dist/react/nav/PlaceBar.js.map +1 -0
- package/dist/react/nav/SearchResults.d.ts +43 -0
- package/dist/react/nav/SearchResults.d.ts.map +1 -0
- package/dist/react/nav/SearchResults.js +26 -0
- package/dist/react/nav/SearchResults.js.map +1 -0
- package/dist/react/nav/SideNav.d.ts +37 -0
- package/dist/react/nav/SideNav.d.ts.map +1 -0
- package/dist/react/nav/SideNav.js +76 -0
- package/dist/react/nav/SideNav.js.map +1 -0
- package/dist/react/nav/SideNavItem.d.ts +28 -0
- package/dist/react/nav/SideNavItem.d.ts.map +1 -0
- package/dist/react/nav/SideNavItem.js +38 -0
- package/dist/react/nav/SideNavItem.js.map +1 -0
- package/dist/react/nav/colors.d.ts +8 -0
- package/dist/react/nav/colors.d.ts.map +1 -0
- package/dist/react/nav/colors.js +31 -0
- package/dist/react/nav/colors.js.map +1 -0
- package/dist/react/nav/filterNavSearch.d.ts +15 -0
- package/dist/react/nav/filterNavSearch.d.ts.map +1 -0
- package/dist/react/nav/filterNavSearch.js +65 -0
- package/dist/react/nav/filterNavSearch.js.map +1 -0
- package/dist/react/nav/index.d.ts +15 -0
- package/dist/react/nav/index.d.ts.map +1 -0
- package/dist/react/nav/index.js +22 -0
- package/dist/react/nav/index.js.map +1 -0
- package/dist/react/nav/navMenuPlacement.d.ts +58 -0
- package/dist/react/nav/navMenuPlacement.d.ts.map +1 -0
- package/dist/react/nav/navMenuPlacement.js +36 -0
- package/dist/react/nav/navMenuPlacement.js.map +1 -0
- package/dist/react/nav/navSearch.d.ts +31 -0
- package/dist/react/nav/navSearch.d.ts.map +1 -0
- package/dist/react/nav/navSearch.js +37 -0
- package/dist/react/nav/navSearch.js.map +1 -0
- package/dist/react/nav/navShared.d.ts +43 -0
- package/dist/react/nav/navShared.d.ts.map +1 -0
- package/dist/react/nav/navShared.js +51 -0
- package/dist/react/nav/navShared.js.map +1 -0
- package/dist/react/nav/partitionAndOrder.d.ts +19 -0
- package/dist/react/nav/partitionAndOrder.d.ts.map +1 -0
- package/dist/react/nav/partitionAndOrder.js +25 -0
- package/dist/react/nav/partitionAndOrder.js.map +1 -0
- package/dist/react/nav/types.d.ts +65 -0
- package/dist/react/nav/types.d.ts.map +1 -0
- package/dist/react/nav/types.js +2 -0
- package/dist/react/nav/types.js.map +1 -0
- package/dist/react/palette/Command.d.ts +25 -0
- package/dist/react/palette/Command.d.ts.map +1 -0
- package/dist/react/palette/Command.js +41 -0
- package/dist/react/palette/Command.js.map +1 -0
- package/dist/react/palette/CommandPalette.d.ts +64 -0
- package/dist/react/palette/CommandPalette.d.ts.map +1 -0
- package/dist/react/palette/CommandPalette.js +205 -0
- package/dist/react/palette/CommandPalette.js.map +1 -0
- package/dist/react/palette/index.d.ts +7 -0
- package/dist/react/palette/index.d.ts.map +1 -0
- package/dist/react/palette/index.js +11 -0
- package/dist/react/palette/index.js.map +1 -0
- package/dist/react/palette/useCommandPalette.d.ts +16 -0
- package/dist/react/palette/useCommandPalette.d.ts.map +1 -0
- package/dist/react/palette/useCommandPalette.js +20 -0
- package/dist/react/palette/useCommandPalette.js.map +1 -0
- package/dist/react/palette/useHotkeys.d.ts +14 -0
- package/dist/react/palette/useHotkeys.d.ts.map +1 -0
- package/dist/react/palette/useHotkeys.js +35 -0
- package/dist/react/palette/useHotkeys.js.map +1 -0
- package/dist/react/palette/useShortcutRegistry.d.ts +4 -0
- package/dist/react/palette/useShortcutRegistry.d.ts.map +1 -0
- package/dist/react/palette/useShortcutRegistry.js +12 -0
- package/dist/react/palette/useShortcutRegistry.js.map +1 -0
- package/dist/react/search/HeaderSearch.d.ts +55 -0
- package/dist/react/search/HeaderSearch.d.ts.map +1 -0
- package/dist/react/search/HeaderSearch.js +107 -0
- package/dist/react/search/HeaderSearch.js.map +1 -0
- package/dist/react/search/SearchResults.d.ts +45 -0
- package/dist/react/search/SearchResults.d.ts.map +1 -0
- package/dist/react/search/SearchResults.js +25 -0
- package/dist/react/search/SearchResults.js.map +1 -0
- package/dist/react/search/index.d.ts +3 -0
- package/dist/react/search/index.d.ts.map +1 -0
- package/dist/react/search/index.js +8 -0
- package/dist/react/search/index.js.map +1 -0
- package/dist/react/spreadsheet/GridCopyPaste.d.ts +28 -0
- package/dist/react/spreadsheet/GridCopyPaste.d.ts.map +1 -0
- package/dist/react/spreadsheet/GridCopyPaste.js +84 -0
- package/dist/react/spreadsheet/GridCopyPaste.js.map +1 -0
- package/dist/react/spreadsheet/SpreadsheetGrid.d.ts +61 -0
- package/dist/react/spreadsheet/SpreadsheetGrid.d.ts.map +1 -0
- package/dist/react/spreadsheet/SpreadsheetGrid.js +31 -0
- package/dist/react/spreadsheet/SpreadsheetGrid.js.map +1 -0
- package/dist/react/spreadsheet/index.d.ts +6 -0
- package/dist/react/spreadsheet/index.d.ts.map +1 -0
- package/dist/react/spreadsheet/index.js +17 -0
- package/dist/react/spreadsheet/index.js.map +1 -0
- package/dist/react/spreadsheet/types.d.ts +42 -0
- package/dist/react/spreadsheet/types.d.ts.map +1 -0
- package/dist/react/spreadsheet/types.js +5 -0
- package/dist/react/spreadsheet/types.js.map +1 -0
- package/dist/react/spreadsheet/useGlideTheme.d.ts +14 -0
- package/dist/react/spreadsheet/useGlideTheme.d.ts.map +1 -0
- package/dist/react/spreadsheet/useGlideTheme.js +113 -0
- package/dist/react/spreadsheet/useGlideTheme.js.map +1 -0
- package/dist/react/spreadsheet/useGridSelection.d.ts +18 -0
- package/dist/react/spreadsheet/useGridSelection.d.ts.map +1 -0
- package/dist/react/spreadsheet/useGridSelection.js +32 -0
- package/dist/react/spreadsheet/useGridSelection.js.map +1 -0
- package/dist/react/styling.d.ts +76 -0
- package/dist/react/styling.d.ts.map +1 -0
- package/dist/react/styling.js +20 -0
- package/dist/react/styling.js.map +1 -0
- package/dist/react/testReport/TestReportViewer.d.ts +25 -0
- package/dist/react/testReport/TestReportViewer.d.ts.map +1 -0
- package/dist/react/testReport/TestReportViewer.js +114 -0
- package/dist/react/testReport/TestReportViewer.js.map +1 -0
- package/dist/react/testReport/index.d.ts +2 -0
- package/dist/react/testReport/index.d.ts.map +1 -0
- package/dist/react/testReport/index.js +2 -0
- package/dist/react/testReport/index.js.map +1 -0
- package/dist/react/toastStore.d.ts +34 -0
- package/dist/react/toastStore.d.ts.map +1 -0
- package/dist/react/toastStore.js +70 -0
- package/dist/react/toastStore.js.map +1 -0
- package/dist/react/uiScale/UiScaleControl.d.ts +15 -0
- package/dist/react/uiScale/UiScaleControl.d.ts.map +1 -0
- package/dist/react/uiScale/UiScaleControl.js +16 -0
- package/dist/react/uiScale/UiScaleControl.js.map +1 -0
- package/dist/react/uiScale/scale.d.ts +37 -0
- package/dist/react/uiScale/scale.d.ts.map +1 -0
- package/dist/react/uiScale/scale.js +48 -0
- package/dist/react/uiScale/scale.js.map +1 -0
- package/dist/react/uiScale/uiScaleStore.d.ts +48 -0
- package/dist/react/uiScale/uiScaleStore.d.ts.map +1 -0
- package/dist/react/uiScale/uiScaleStore.js +64 -0
- package/dist/react/uiScale/uiScaleStore.js.map +1 -0
- package/dist/react/uiScale/useUiScale.d.ts +28 -0
- package/dist/react/uiScale/useUiScale.d.ts.map +1 -0
- package/dist/react/uiScale/useUiScale.js +27 -0
- package/dist/react/uiScale/useUiScale.js.map +1 -0
- package/dist/react/useToasts.d.ts +21 -0
- package/dist/react/useToasts.d.ts.map +1 -0
- package/dist/react/useToasts.js +28 -0
- package/dist/react/useToasts.js.map +1 -0
- package/dist/server/app.d.ts +42 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +42 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/auth/cookie.d.ts +23 -0
- package/dist/server/auth/cookie.d.ts.map +1 -0
- package/dist/server/auth/cookie.js +36 -0
- package/dist/server/auth/cookie.js.map +1 -0
- package/dist/server/auth/csrf.d.ts +43 -0
- package/dist/server/auth/csrf.d.ts.map +1 -0
- package/dist/server/auth/csrf.js +37 -0
- package/dist/server/auth/csrf.js.map +1 -0
- package/dist/server/auth/getOnly.d.ts +21 -0
- package/dist/server/auth/getOnly.d.ts.map +1 -0
- package/dist/server/auth/getOnly.js +28 -0
- package/dist/server/auth/getOnly.js.map +1 -0
- package/dist/server/auth/index.d.ts +12 -0
- package/dist/server/auth/index.d.ts.map +1 -0
- package/dist/server/auth/index.js +15 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/server/auth/jwt.d.ts +19 -0
- package/dist/server/auth/jwt.d.ts.map +1 -0
- package/dist/server/auth/jwt.js +57 -0
- package/dist/server/auth/jwt.js.map +1 -0
- package/dist/server/auth/loginThrottle.d.ts +34 -0
- package/dist/server/auth/loginThrottle.d.ts.map +1 -0
- package/dist/server/auth/loginThrottle.js +63 -0
- package/dist/server/auth/loginThrottle.js.map +1 -0
- package/dist/server/auth/middleware.d.ts +15 -0
- package/dist/server/auth/middleware.d.ts.map +1 -0
- package/dist/server/auth/middleware.js +48 -0
- package/dist/server/auth/middleware.js.map +1 -0
- package/dist/server/auth/password.d.ts +15 -0
- package/dist/server/auth/password.d.ts.map +1 -0
- package/dist/server/auth/password.js +66 -0
- package/dist/server/auth/password.js.map +1 -0
- package/dist/server/auth/sessionStore.d.ts +20 -0
- package/dist/server/auth/sessionStore.d.ts.map +1 -0
- package/dist/server/auth/sessionStore.js +222 -0
- package/dist/server/auth/sessionStore.js.map +1 -0
- package/dist/server/auth/totp.d.ts +35 -0
- package/dist/server/auth/totp.d.ts.map +1 -0
- package/dist/server/auth/totp.js +82 -0
- package/dist/server/auth/totp.js.map +1 -0
- package/dist/server/auth/types.d.ts +134 -0
- package/dist/server/auth/types.d.ts.map +1 -0
- package/dist/server/auth/types.js +2 -0
- package/dist/server/auth/types.js.map +1 -0
- package/dist/server/auth/vault.d.ts +28 -0
- package/dist/server/auth/vault.d.ts.map +1 -0
- package/dist/server/auth/vault.js +58 -0
- package/dist/server/auth/vault.js.map +1 -0
- package/dist/server/auth.d.ts +20 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +20 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/context.d.ts +36 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +2 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/ctgr.d.ts +32 -0
- package/dist/server/ctgr.d.ts.map +1 -0
- package/dist/server/ctgr.js +61 -0
- package/dist/server/ctgr.js.map +1 -0
- package/dist/server/db/kysely.d.ts +15 -0
- package/dist/server/db/kysely.d.ts.map +1 -0
- package/dist/server/db/kysely.js +17 -0
- package/dist/server/db/kysely.js.map +1 -0
- package/dist/server/db/plumbingTypes.d.ts +117 -0
- package/dist/server/db/plumbingTypes.d.ts.map +1 -0
- package/dist/server/db/plumbingTypes.js +13 -0
- package/dist/server/db/plumbingTypes.js.map +1 -0
- package/dist/server/errors.d.ts +52 -0
- package/dist/server/errors.d.ts.map +1 -0
- package/dist/server/errors.js +52 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/index.d.ts +23 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +46 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/jobs/fireQueue.d.ts +13 -0
- package/dist/server/jobs/fireQueue.d.ts.map +1 -0
- package/dist/server/jobs/fireQueue.js +38 -0
- package/dist/server/jobs/fireQueue.js.map +1 -0
- package/dist/server/jobs/index.d.ts +7 -0
- package/dist/server/jobs/index.d.ts.map +1 -0
- package/dist/server/jobs/index.js +11 -0
- package/dist/server/jobs/index.js.map +1 -0
- package/dist/server/jobs/logger.d.ts +11 -0
- package/dist/server/jobs/logger.d.ts.map +1 -0
- package/dist/server/jobs/logger.js +15 -0
- package/dist/server/jobs/logger.js.map +1 -0
- package/dist/server/jobs/plainjobAdapter.d.ts +20 -0
- package/dist/server/jobs/plainjobAdapter.d.ts.map +1 -0
- package/dist/server/jobs/plainjobAdapter.js +49 -0
- package/dist/server/jobs/plainjobAdapter.js.map +1 -0
- package/dist/server/jobs/polling.d.ts +18 -0
- package/dist/server/jobs/polling.d.ts.map +1 -0
- package/dist/server/jobs/polling.js +63 -0
- package/dist/server/jobs/polling.js.map +1 -0
- package/dist/server/jobs/runner.d.ts +19 -0
- package/dist/server/jobs/runner.d.ts.map +1 -0
- package/dist/server/jobs/runner.js +142 -0
- package/dist/server/jobs/runner.js.map +1 -0
- package/dist/server/jobs/timeout.d.ts +29 -0
- package/dist/server/jobs/timeout.d.ts.map +1 -0
- package/dist/server/jobs/timeout.js +48 -0
- package/dist/server/jobs/timeout.js.map +1 -0
- package/dist/server/jobs/types.d.ts +141 -0
- package/dist/server/jobs/types.d.ts.map +1 -0
- package/dist/server/jobs/types.js +5 -0
- package/dist/server/jobs/types.js.map +1 -0
- package/dist/server/media-bun/ffmpeg.d.ts +58 -0
- package/dist/server/media-bun/ffmpeg.d.ts.map +1 -0
- package/dist/server/media-bun/ffmpeg.js +126 -0
- package/dist/server/media-bun/ffmpeg.js.map +1 -0
- package/dist/server/media-bun/image.d.ts +8 -0
- package/dist/server/media-bun/image.d.ts.map +1 -0
- package/dist/server/media-bun/image.js +97 -0
- package/dist/server/media-bun/image.js.map +1 -0
- package/dist/server/media-bun/index.d.ts +4 -0
- package/dist/server/media-bun/index.d.ts.map +1 -0
- package/dist/server/media-bun/index.js +8 -0
- package/dist/server/media-bun/index.js.map +1 -0
- package/dist/server/media-bun/video.d.ts +17 -0
- package/dist/server/media-bun/video.d.ts.map +1 -0
- package/dist/server/media-bun/video.js +100 -0
- package/dist/server/media-bun/video.js.map +1 -0
- package/dist/server/metrics/metricsBuffer.d.ts +40 -0
- package/dist/server/metrics/metricsBuffer.d.ts.map +1 -0
- package/dist/server/metrics/metricsBuffer.js +37 -0
- package/dist/server/metrics/metricsBuffer.js.map +1 -0
- package/dist/server/metrics/normalizeRoute.d.ts +6 -0
- package/dist/server/metrics/normalizeRoute.d.ts.map +1 -0
- package/dist/server/metrics/normalizeRoute.js +59 -0
- package/dist/server/metrics/normalizeRoute.js.map +1 -0
- package/dist/server/middleware/correlationId.d.ts +10 -0
- package/dist/server/middleware/correlationId.d.ts.map +1 -0
- package/dist/server/middleware/correlationId.js +21 -0
- package/dist/server/middleware/correlationId.js.map +1 -0
- package/dist/server/middleware/errorEnvelope.d.ts +14 -0
- package/dist/server/middleware/errorEnvelope.d.ts.map +1 -0
- package/dist/server/middleware/errorEnvelope.js +30 -0
- package/dist/server/middleware/errorEnvelope.js.map +1 -0
- package/dist/server/middleware/index.d.ts +7 -0
- package/dist/server/middleware/index.d.ts.map +1 -0
- package/dist/server/middleware/index.js +8 -0
- package/dist/server/middleware/index.js.map +1 -0
- package/dist/server/middleware/rateLimit.d.ts +28 -0
- package/dist/server/middleware/rateLimit.d.ts.map +1 -0
- package/dist/server/middleware/rateLimit.js +65 -0
- package/dist/server/middleware/rateLimit.js.map +1 -0
- package/dist/server/middleware/requestLogger.d.ts +30 -0
- package/dist/server/middleware/requestLogger.d.ts.map +1 -0
- package/dist/server/middleware/requestLogger.js +48 -0
- package/dist/server/middleware/requestLogger.js.map +1 -0
- package/dist/server/middleware/securityHeaders.d.ts +30 -0
- package/dist/server/middleware/securityHeaders.d.ts.map +1 -0
- package/dist/server/middleware/securityHeaders.js +45 -0
- package/dist/server/middleware/securityHeaders.js.map +1 -0
- package/dist/server/middleware/zValidator.d.ts +48 -0
- package/dist/server/middleware/zValidator.d.ts.map +1 -0
- package/dist/server/middleware/zValidator.js +76 -0
- package/dist/server/middleware/zValidator.js.map +1 -0
- package/dist/server/migration/runner.d.ts +43 -0
- package/dist/server/migration/runner.d.ts.map +1 -0
- package/dist/server/migration/runner.js +56 -0
- package/dist/server/migration/runner.js.map +1 -0
- package/dist/server/migration/types.d.ts +17 -0
- package/dist/server/migration/types.d.ts.map +1 -0
- package/dist/server/migration/types.js +2 -0
- package/dist/server/migration/types.js.map +1 -0
- package/dist/server/sqlite/backup.d.ts +36 -0
- package/dist/server/sqlite/backup.d.ts.map +1 -0
- package/dist/server/sqlite/backup.js +75 -0
- package/dist/server/sqlite/backup.js.map +1 -0
- package/dist/server/sqlite/fts5.d.ts +105 -0
- package/dist/server/sqlite/fts5.d.ts.map +1 -0
- package/dist/server/sqlite/fts5.js +151 -0
- package/dist/server/sqlite/fts5.js.map +1 -0
- package/dist/server/sqlite/health.d.ts +45 -0
- package/dist/server/sqlite/health.d.ts.map +1 -0
- package/dist/server/sqlite/health.js +53 -0
- package/dist/server/sqlite/health.js.map +1 -0
- package/dist/server/sqlite/index.d.ts +6 -0
- package/dist/server/sqlite/index.d.ts.map +1 -0
- package/dist/server/sqlite/index.js +10 -0
- package/dist/server/sqlite/index.js.map +1 -0
- package/dist/server/sqlite/readonlySql.d.ts +16 -0
- package/dist/server/sqlite/readonlySql.d.ts.map +1 -0
- package/dist/server/sqlite/readonlySql.js +66 -0
- package/dist/server/sqlite/readonlySql.js.map +1 -0
- package/dist/server/sqlite/viewer.d.ts +4 -0
- package/dist/server/sqlite/viewer.d.ts.map +1 -0
- package/dist/server/sqlite/viewer.js +92 -0
- package/dist/server/sqlite/viewer.js.map +1 -0
- package/dist/server/sqlite.d.ts +31 -0
- package/dist/server/sqlite.d.ts.map +1 -0
- package/dist/server/sqlite.js +46 -0
- package/dist/server/sqlite.js.map +1 -0
- package/dist/server/ws/eventBus.d.ts +15 -0
- package/dist/server/ws/eventBus.d.ts.map +1 -0
- package/dist/server/ws/eventBus.js +43 -0
- package/dist/server/ws/eventBus.js.map +1 -0
- package/dist/server/ws/hub.d.ts +21 -0
- package/dist/server/ws/hub.d.ts.map +1 -0
- package/dist/server/ws/hub.js +155 -0
- package/dist/server/ws/hub.js.map +1 -0
- package/dist/server/ws/index.d.ts +6 -0
- package/dist/server/ws/index.d.ts.map +1 -0
- package/dist/server/ws/index.js +8 -0
- package/dist/server/ws/index.js.map +1 -0
- package/dist/server/ws/presence.d.ts +12 -0
- package/dist/server/ws/presence.d.ts.map +1 -0
- package/dist/server/ws/presence.js +21 -0
- package/dist/server/ws/presence.js.map +1 -0
- package/dist/server/ws/room.d.ts +18 -0
- package/dist/server/ws/room.d.ts.map +1 -0
- package/dist/server/ws/room.js +24 -0
- package/dist/server/ws/room.js.map +1 -0
- package/dist/server/ws/types.d.ts +123 -0
- package/dist/server/ws/types.d.ts.map +1 -0
- package/dist/server/ws/types.js +2 -0
- package/dist/server/ws/types.js.map +1 -0
- package/package.json +241 -0
- package/src/styles.css +52 -0
- package/src/theme.css +239 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type JWTPayload } from 'jose';
|
|
2
|
+
import type { AppJwtPayload } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Sign an HS256 token. `expiresIn` is a jose duration string (`'15m'`, `'24h'`) or a
|
|
5
|
+
* number of seconds-from-now. `iat`/`exp` are set automatically — pass everything
|
|
6
|
+
* else (`userId`, `sessionId`, `roles`, `getOnly`, optional `purpose`).
|
|
7
|
+
*/
|
|
8
|
+
export declare function signToken(payload: Omit<AppJwtPayload, 'iat' | 'exp'>, secret: string, expiresIn: string | number): Promise<string>;
|
|
9
|
+
/** Verify signature + claims and return the decoded payload (throws on bad
|
|
10
|
+
* signature / expiry / malformed). */
|
|
11
|
+
export declare function verifyToken<T extends JWTPayload = AppJwtPayload>(token: string, secret: string): Promise<T>;
|
|
12
|
+
/**
|
|
13
|
+
* Verify a single-purpose token (vault/private-media/files/yt-oauth) AND assert its
|
|
14
|
+
* `purpose` claim matches — so an access token (or a token for a *different*
|
|
15
|
+
* feature) can never be replayed as, say, a vault-unlock token. Throws on a bad
|
|
16
|
+
* signature, expiry, or a purpose mismatch.
|
|
17
|
+
*/
|
|
18
|
+
export declare function verifyPurposeToken<T extends AppJwtPayload = AppJwtPayload>(token: string, secret: string, purpose: string): Promise<T>;
|
|
19
|
+
//# sourceMappingURL=jwt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../../src/server/auth/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,MAAM,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA8B7C;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,KAAK,CAAC,EAC3C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,MAAM,GACzB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;sCACsC;AACtC,wBAAsB,WAAW,CAAC,CAAC,SAAS,UAAU,GAAG,aAAa,EACpE,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,CAAC,CAGZ;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,EAC9E,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAMZ"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jwtVerify, SignJWT } from 'jose';
|
|
2
|
+
/**
|
|
3
|
+
* JWT sign/verify on `jose` (Web Crypto HMAC — native on Bun + Node, no native
|
|
4
|
+
* deps; replaces `jsonwebtoken`). Every token system in the apps — the access
|
|
5
|
+
* token plus the short-lived vault/private-media/files/yt-oauth unlock tokens —
|
|
6
|
+
* goes through these, so there is exactly ONE jose integration to reason about.
|
|
7
|
+
*
|
|
8
|
+
* jose verifies any standard HS256 JWT regardless of which library signed it, so a
|
|
9
|
+
* token previously minted by `jsonwebtoken` validates here unchanged — that is the
|
|
10
|
+
* whole cutover guarantee (no dual-verify shim or `jsonwebtoken` dependency is
|
|
11
|
+
* carried into this from-scratch toolkit). A pre-`getOnly` token simply has no
|
|
12
|
+
* `getOnly` claim; the auth middleware reads it as `false`.
|
|
13
|
+
*
|
|
14
|
+
* NOTE: Web Crypto HMAC is async, so these are async (jsonwebtoken was sync — every
|
|
15
|
+
* caller becomes async/await).
|
|
16
|
+
*/
|
|
17
|
+
const keyOf = (secret) => new TextEncoder().encode(secret);
|
|
18
|
+
/**
|
|
19
|
+
* Normalize jose's expiration input. jose treats a bare **number** as an absolute
|
|
20
|
+
* UNIX timestamp (seconds) — so `3600` would mean "1970" and expire instantly. We
|
|
21
|
+
* treat a number as RELATIVE seconds-from-now (the obviously-intended meaning) by
|
|
22
|
+
* handing jose a `"<n>s"` duration; a string (`'15m'`, `'24h'`) passes through as a
|
|
23
|
+
* jose duration unchanged.
|
|
24
|
+
*/
|
|
25
|
+
const asDuration = (expiresIn) => typeof expiresIn === 'number' ? `${expiresIn}s` : expiresIn;
|
|
26
|
+
/**
|
|
27
|
+
* Sign an HS256 token. `expiresIn` is a jose duration string (`'15m'`, `'24h'`) or a
|
|
28
|
+
* number of seconds-from-now. `iat`/`exp` are set automatically — pass everything
|
|
29
|
+
* else (`userId`, `sessionId`, `roles`, `getOnly`, optional `purpose`).
|
|
30
|
+
*/
|
|
31
|
+
export async function signToken(payload, secret, expiresIn) {
|
|
32
|
+
return new SignJWT(payload)
|
|
33
|
+
.setProtectedHeader({ alg: 'HS256' })
|
|
34
|
+
.setIssuedAt()
|
|
35
|
+
.setExpirationTime(asDuration(expiresIn))
|
|
36
|
+
.sign(keyOf(secret));
|
|
37
|
+
}
|
|
38
|
+
/** Verify signature + claims and return the decoded payload (throws on bad
|
|
39
|
+
* signature / expiry / malformed). */
|
|
40
|
+
export async function verifyToken(token, secret) {
|
|
41
|
+
const { payload } = await jwtVerify(token, keyOf(secret));
|
|
42
|
+
return payload;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Verify a single-purpose token (vault/private-media/files/yt-oauth) AND assert its
|
|
46
|
+
* `purpose` claim matches — so an access token (or a token for a *different*
|
|
47
|
+
* feature) can never be replayed as, say, a vault-unlock token. Throws on a bad
|
|
48
|
+
* signature, expiry, or a purpose mismatch.
|
|
49
|
+
*/
|
|
50
|
+
export async function verifyPurposeToken(token, secret, purpose) {
|
|
51
|
+
const payload = await verifyToken(token, secret);
|
|
52
|
+
if (payload.purpose !== purpose) {
|
|
53
|
+
throw new Error(`token purpose mismatch: expected '${purpose}', got '${payload.purpose}'`);
|
|
54
|
+
}
|
|
55
|
+
return payload;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=jwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../src/server/auth/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG3D;;;;;;;;;;;;;;GAcG;AAEH,MAAM,KAAK,GAAG,CAAC,MAAc,EAAc,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,SAA0B,EAAU,EAAE,CACxD,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAE9D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAA2C,EAC3C,MAAc,EACd,SAA0B;IAE1B,OAAO,IAAI,OAAO,CAAC,OAAqB,CAAC;SACtC,kBAAkB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;SACpC,WAAW,EAAE;SACb,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACzB,CAAC;AAED;sCACsC;AACtC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAa,EACb,MAAc;IAEd,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,OAAO,OAAY,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAa,EACb,MAAc,EACd,OAAe;IAEf,MAAM,OAAO,GAAG,MAAM,WAAW,CAAI,KAAK,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,qCAAqC,OAAO,WAAW,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory brute-force lockout for password login, keyed by the caller's choice of
|
|
3
|
+
* identifier (recommended: `"<email>:<ip>"` — per-account AND per-source, stricter
|
|
4
|
+
* than the per-IP {@link ../middleware/rateLimit}). After `maxAttempts` failures
|
|
5
|
+
* within `windowMs`, the key is locked for `lockoutMs`; a successful login clears
|
|
6
|
+
* the counter. In-memory matches the rest of the auth stack (the session store is
|
|
7
|
+
* in-memory too) and is correct for a single-instance deployment.
|
|
8
|
+
*
|
|
9
|
+
* This replaces the app's ad-hoc per-IP login limiter: pair `createRateLimiter`
|
|
10
|
+
* (per-IP, coarse) with `createLoginThrottle` (per-email+IP, strict).
|
|
11
|
+
*/
|
|
12
|
+
export interface LoginThrottle {
|
|
13
|
+
/** Is this key allowed to attempt a login right now? When locked, includes the ms
|
|
14
|
+
* until it may retry. */
|
|
15
|
+
check(key: string): {
|
|
16
|
+
allowed: boolean;
|
|
17
|
+
retryAfterMs?: number;
|
|
18
|
+
};
|
|
19
|
+
/** Record an attempt's outcome. Success resets the counter; failure advances the
|
|
20
|
+
* sliding window and may trip the lockout. */
|
|
21
|
+
record(key: string, success: boolean): void;
|
|
22
|
+
/** Clear a key's counter/lockout (e.g. after an admin unlock or a verified reset). */
|
|
23
|
+
reset(key: string): void;
|
|
24
|
+
}
|
|
25
|
+
export interface LoginThrottleOptions {
|
|
26
|
+
/** Failures within the window before locking. Default 5. */
|
|
27
|
+
maxAttempts?: number;
|
|
28
|
+
/** Sliding window failures must cluster within, ms. Default 15 min. */
|
|
29
|
+
windowMs?: number;
|
|
30
|
+
/** Lock duration once tripped, ms. Default 30 min. */
|
|
31
|
+
lockoutMs?: number;
|
|
32
|
+
}
|
|
33
|
+
export declare function createLoginThrottle(opts?: LoginThrottleOptions): LoginThrottle;
|
|
34
|
+
//# sourceMappingURL=loginThrottle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loginThrottle.d.ts","sourceRoot":"","sources":["../../../src/server/auth/loginThrottle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,aAAa;IAC5B;6BACyB;IACzB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE;kDAC8C;IAC9C,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,sFAAsF;IACtF,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,oBAAyB,GAAG,aAAa,CAmDlF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory brute-force lockout for password login, keyed by the caller's choice of
|
|
3
|
+
* identifier (recommended: `"<email>:<ip>"` — per-account AND per-source, stricter
|
|
4
|
+
* than the per-IP {@link ../middleware/rateLimit}). After `maxAttempts` failures
|
|
5
|
+
* within `windowMs`, the key is locked for `lockoutMs`; a successful login clears
|
|
6
|
+
* the counter. In-memory matches the rest of the auth stack (the session store is
|
|
7
|
+
* in-memory too) and is correct for a single-instance deployment.
|
|
8
|
+
*
|
|
9
|
+
* This replaces the app's ad-hoc per-IP login limiter: pair `createRateLimiter`
|
|
10
|
+
* (per-IP, coarse) with `createLoginThrottle` (per-email+IP, strict).
|
|
11
|
+
*/
|
|
12
|
+
const normalizeKey = (key) => key.trim().toLowerCase();
|
|
13
|
+
export function createLoginThrottle(opts = {}) {
|
|
14
|
+
const maxAttempts = opts.maxAttempts ?? 5;
|
|
15
|
+
const windowMs = opts.windowMs ?? 15 * 60 * 1000;
|
|
16
|
+
const lockoutMs = opts.lockoutMs ?? 30 * 60 * 1000;
|
|
17
|
+
const entries = new Map();
|
|
18
|
+
let lastSweep = Date.now();
|
|
19
|
+
// Drop keys that are neither locked nor holding live attempts, so the map can't
|
|
20
|
+
// grow unbounded under attack traffic.
|
|
21
|
+
const sweep = (now) => {
|
|
22
|
+
const cutoff = now - windowMs;
|
|
23
|
+
for (const [key, e] of entries) {
|
|
24
|
+
const live = e.attempts.filter((t) => t > cutoff);
|
|
25
|
+
if (live.length === 0 && e.lockedUntil <= now)
|
|
26
|
+
entries.delete(key);
|
|
27
|
+
else
|
|
28
|
+
e.attempts = live;
|
|
29
|
+
}
|
|
30
|
+
lastSweep = now;
|
|
31
|
+
};
|
|
32
|
+
return {
|
|
33
|
+
check(key) {
|
|
34
|
+
const e = entries.get(normalizeKey(key));
|
|
35
|
+
const now = Date.now();
|
|
36
|
+
if (e && e.lockedUntil > now) {
|
|
37
|
+
return { allowed: false, retryAfterMs: e.lockedUntil - now };
|
|
38
|
+
}
|
|
39
|
+
return { allowed: true };
|
|
40
|
+
},
|
|
41
|
+
record(key, success) {
|
|
42
|
+
const k = normalizeKey(key);
|
|
43
|
+
if (success) {
|
|
44
|
+
entries.delete(k);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const now = Date.now();
|
|
48
|
+
if (now - lastSweep > windowMs)
|
|
49
|
+
sweep(now);
|
|
50
|
+
const cutoff = now - windowMs;
|
|
51
|
+
const e = entries.get(k) ?? { attempts: [], lockedUntil: 0 };
|
|
52
|
+
e.attempts = e.attempts.filter((t) => t > cutoff);
|
|
53
|
+
e.attempts.push(now);
|
|
54
|
+
if (e.attempts.length >= maxAttempts)
|
|
55
|
+
e.lockedUntil = now + lockoutMs;
|
|
56
|
+
entries.set(k, e);
|
|
57
|
+
},
|
|
58
|
+
reset(key) {
|
|
59
|
+
entries.delete(normalizeKey(key));
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=loginThrottle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loginThrottle.js","sourceRoot":"","sources":["../../../src/server/auth/loginThrottle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from 'hono';
|
|
2
|
+
import type { AuthEnv, SessionStore } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* The composed auth middleware. Reads the httpOnly `access_token` cookie, verifies
|
|
5
|
+
* the JWT, checks the session is live (present, not revoked, inside its sliding
|
|
6
|
+
* window), and sets the normalized {@link AuthUser} on `c.get('user')` (plus
|
|
7
|
+
* `userId` for request-log attribution). Every failure maps to a 401 in the
|
|
8
|
+
* canonical error envelope.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately minimal: it does NOT slide/re-issue the token — that (and the
|
|
11
|
+
* `/f`-vs-`/login` policy) is app business (task 32). Mount {@link
|
|
12
|
+
* ./getOnly.getOnlyEnforcement} AFTER this to add the GET-only gate.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createAuthMiddleware(sessionStore: SessionStore, jwtSecret: string): MiddlewareHandler<AuthEnv>;
|
|
15
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/server/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAI9C,OAAO,KAAK,EAAiB,OAAO,EAAY,YAAY,EAAE,MAAM,SAAS,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,GAChB,iBAAiB,CAAC,OAAO,CAAC,CAmC5B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ApiError, toErrorEnvelope } from '../errors';
|
|
2
|
+
import { readAuthCookie } from './cookie';
|
|
3
|
+
import { verifyToken } from './jwt';
|
|
4
|
+
/**
|
|
5
|
+
* The composed auth middleware. Reads the httpOnly `access_token` cookie, verifies
|
|
6
|
+
* the JWT, checks the session is live (present, not revoked, inside its sliding
|
|
7
|
+
* window), and sets the normalized {@link AuthUser} on `c.get('user')` (plus
|
|
8
|
+
* `userId` for request-log attribution). Every failure maps to a 401 in the
|
|
9
|
+
* canonical error envelope.
|
|
10
|
+
*
|
|
11
|
+
* Deliberately minimal: it does NOT slide/re-issue the token — that (and the
|
|
12
|
+
* `/f`-vs-`/login` policy) is app business (task 32). Mount {@link
|
|
13
|
+
* ./getOnly.getOnlyEnforcement} AFTER this to add the GET-only gate.
|
|
14
|
+
*/
|
|
15
|
+
export function createAuthMiddleware(sessionStore, jwtSecret) {
|
|
16
|
+
return async (c, next) => {
|
|
17
|
+
const token = readAuthCookie(c);
|
|
18
|
+
if (!token) {
|
|
19
|
+
return c.json(toErrorEnvelope(new ApiError(401, 'Unauthorized')), 401);
|
|
20
|
+
}
|
|
21
|
+
let payload;
|
|
22
|
+
try {
|
|
23
|
+
payload = await verifyToken(token, jwtSecret);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return c.json(toErrorEnvelope(new ApiError(401, 'Invalid token')), 401);
|
|
27
|
+
}
|
|
28
|
+
const session = sessionStore.get(payload.sessionId);
|
|
29
|
+
if (!session || session.disabled) {
|
|
30
|
+
return c.json(toErrorEnvelope(new ApiError(401, 'Session revoked')), 401);
|
|
31
|
+
}
|
|
32
|
+
if (new Date(session.refreshExpiresAt) < new Date()) {
|
|
33
|
+
return c.json(toErrorEnvelope(new ApiError(401, 'Session expired')), 401);
|
|
34
|
+
}
|
|
35
|
+
const user = {
|
|
36
|
+
id: payload.userId,
|
|
37
|
+
roles: payload.roles ?? [],
|
|
38
|
+
// A token minted before the claim existed has no `getOnly` → treat as false,
|
|
39
|
+
// preserving access for pre-existing cookies.
|
|
40
|
+
getOnly: payload.getOnly ?? false,
|
|
41
|
+
sessionId: payload.sessionId,
|
|
42
|
+
};
|
|
43
|
+
c.set('user', user);
|
|
44
|
+
c.set('userId', user.id);
|
|
45
|
+
await next();
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/server/auth/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAA0B,EAC1B,SAAiB;IAEjB,OAAO,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QACvB,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,OAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,WAAW,CAAgB,KAAK,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;YACpD,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,IAAI,GAAa;YACrB,EAAE,EAAE,OAAO,CAAC,MAAM;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,6EAA6E;YAC7E,8CAA8C;YAC9C,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;YACjC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;QACF,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzB,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Mint an argon2id password hash. Returns the self-describing PHC string. */
|
|
2
|
+
export declare function hashPassword(plain: string): Promise<string>;
|
|
3
|
+
/**
|
|
4
|
+
* Verify a candidate against a stored hash, handling BOTH formats: an argon2id PHC
|
|
5
|
+
* string (new) via `Bun.password.verify`; a legacy `"<salt>:<pbkdf2-hex>"` digest by
|
|
6
|
+
* re-deriving PBKDF2-SHA512 with the stored salt and comparing in constant time.
|
|
7
|
+
*/
|
|
8
|
+
export declare function verifyPassword(plain: string, stored: string): Promise<boolean>;
|
|
9
|
+
/**
|
|
10
|
+
* True when a stored hash is a legacy (non-argon2id) digest and should be upgraded.
|
|
11
|
+
* Call AFTER a successful {@link verifyPassword} to opportunistically re-hash with
|
|
12
|
+
* argon2id — never block auth on the upgrade.
|
|
13
|
+
*/
|
|
14
|
+
export declare function needsRehash(stored: string): boolean;
|
|
15
|
+
//# sourceMappingURL=password.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/server/auth/password.ts"],"names":[],"mappings":"AA4BA,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE3D;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBpF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { pbkdf2 as pbkdf2Cb, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
import { promisify } from 'node:util';
|
|
3
|
+
/**
|
|
4
|
+
* Password hashing on `Bun.password` (argon2id — memory-hard, thread-pooled, zero
|
|
5
|
+
* deps, the current OWASP default). The argon2id hash is self-describing
|
|
6
|
+
* (`$argon2id$v=19$m=…$<salt>$<hash>`) so there is NO separate salt column — the new
|
|
7
|
+
* schema stores just the hash string.
|
|
8
|
+
*
|
|
9
|
+
* Legacy upgrade path: the old app used PBKDF2-SHA512 @ 1000 iterations with a
|
|
10
|
+
* separate salt; the ETL (task 43) brings those forward as a combined `"<salt>:<hex>"`
|
|
11
|
+
* string in the password column (it can't re-hash — it lacks the plaintext).
|
|
12
|
+
* {@link verifyPassword} transparently verifies BOTH shapes; on a legacy match the
|
|
13
|
+
* caller re-hashes with argon2id ({@link needsRehash}) — a silent per-login upgrade,
|
|
14
|
+
* no forced reset.
|
|
15
|
+
*/
|
|
16
|
+
// Legacy PBKDF2-SHA512 parameters — used ONLY to verify pre-argon2id hashes; never
|
|
17
|
+
// to mint new ones. (1000 iterations is far below modern guidance — exactly why we
|
|
18
|
+
// moved off it.)
|
|
19
|
+
const LEGACY_ITERATIONS = 1000;
|
|
20
|
+
const LEGACY_KEYLEN = 64;
|
|
21
|
+
const LEGACY_DIGEST = 'sha512';
|
|
22
|
+
const pbkdf2 = promisify(pbkdf2Cb);
|
|
23
|
+
const isArgon2 = (hash) => hash.startsWith('$argon2');
|
|
24
|
+
/** Mint an argon2id password hash. Returns the self-describing PHC string. */
|
|
25
|
+
export function hashPassword(plain) {
|
|
26
|
+
return Bun.password.hash(plain, { algorithm: 'argon2id' });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Verify a candidate against a stored hash, handling BOTH formats: an argon2id PHC
|
|
30
|
+
* string (new) via `Bun.password.verify`; a legacy `"<salt>:<pbkdf2-hex>"` digest by
|
|
31
|
+
* re-deriving PBKDF2-SHA512 with the stored salt and comparing in constant time.
|
|
32
|
+
*/
|
|
33
|
+
export async function verifyPassword(plain, stored) {
|
|
34
|
+
if (isArgon2(stored)) {
|
|
35
|
+
try {
|
|
36
|
+
return await Bun.password.verify(plain, stored);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Legacy: split on the FIRST colon — salt (hex) : derived (hex). A malformed value
|
|
43
|
+
// (no colon) is simply a non-match.
|
|
44
|
+
const sep = stored.indexOf(':');
|
|
45
|
+
if (sep === -1)
|
|
46
|
+
return false;
|
|
47
|
+
const salt = stored.slice(0, sep);
|
|
48
|
+
const expectedHex = stored.slice(sep + 1);
|
|
49
|
+
if (!salt || !expectedHex)
|
|
50
|
+
return false;
|
|
51
|
+
const derived = (await pbkdf2(plain, salt, LEGACY_ITERATIONS, LEGACY_KEYLEN, LEGACY_DIGEST)).toString('hex');
|
|
52
|
+
// timingSafeEqual throws on length mismatch; a length diff is already a non-match
|
|
53
|
+
// and short-circuiting leaks nothing a compare wouldn't.
|
|
54
|
+
if (derived.length !== expectedHex.length)
|
|
55
|
+
return false;
|
|
56
|
+
return timingSafeEqual(Buffer.from(derived), Buffer.from(expectedHex));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* True when a stored hash is a legacy (non-argon2id) digest and should be upgraded.
|
|
60
|
+
* Call AFTER a successful {@link verifyPassword} to opportunistically re-hash with
|
|
61
|
+
* argon2id — never block auth on the upgrade.
|
|
62
|
+
*/
|
|
63
|
+
export function needsRehash(stored) {
|
|
64
|
+
return !isArgon2(stored);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../../src/server/auth/password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;;;;;;;;;;;GAYG;AAEH,mFAAmF;AACnF,mFAAmF;AACnF,iBAAiB;AACjB,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,aAAa,GAAG,QAAQ,CAAC;AAE/B,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAEnC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAEvE,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,MAAc;IAChE,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,mFAAmF;IACnF,oCAAoC;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAExC,MAAM,OAAO,GAAG,CACd,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,CAAC,CAC3E,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClB,kFAAkF;IAClF,yDAAyD;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxD,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PlumbingDb } from '../db/kysely';
|
|
2
|
+
import type { SessionStore } from './types';
|
|
3
|
+
export interface SessionStoreOptions {
|
|
4
|
+
/** Sliding refresh window — how long after the last activity a session stays
|
|
5
|
+
* valid. Default 7 days. */
|
|
6
|
+
refreshWindowMs?: number;
|
|
7
|
+
/** Retention before a stale (lapsed) row is pruned from memory + DB. Default 30
|
|
8
|
+
* days. Must be ≥ refreshWindowMs to keep recently-expired rows for the audit view. */
|
|
9
|
+
retentionMs?: number;
|
|
10
|
+
/** Throttle window for sliding-`touch` DB writes. Memory is always current; the
|
|
11
|
+
* row is flushed at most this often (unless a token re-issue forces it). Default 60s. */
|
|
12
|
+
flushIntervalMs?: number;
|
|
13
|
+
/** Start a background prune timer. Default false — wire pruning through the job
|
|
14
|
+
* runner (task 29), or call {@link SessionStore.prune} yourself. */
|
|
15
|
+
autoPrune?: boolean;
|
|
16
|
+
/** Auto-prune cadence when {@link autoPrune} is on. Default 1 hour. */
|
|
17
|
+
pruneIntervalMs?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function createSessionStore(ky: PlumbingDb, opts?: SessionStoreOptions): SessionStore;
|
|
20
|
+
//# sourceMappingURL=sessionStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStore.d.ts","sourceRoot":"","sources":["../../../src/server/auth/sessionStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAC;AAgBzE,MAAM,WAAW,mBAAmB;IAClC;gCAC4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;2FACuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;6FACyF;IACzF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;wEACoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAiBD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,GAAE,mBAAwB,GAAG,YAAY,CAkN/F"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kysely-backed, revocable, restart-surviving session store (task 26).
|
|
3
|
+
*
|
|
4
|
+
* The in-memory map is the hot-path source of truth for token validity — the auth
|
|
5
|
+
* middleware reads it synchronously, no per-request DB round-trip. The
|
|
6
|
+
* `auth_sessions` table exists only so the map can be rebuilt after a restart
|
|
7
|
+
* ({@link SessionStore.rehydrate}); DB writes for sliding `touch`es are throttled
|
|
8
|
+
* (memory is always current). Single-server deployment, so there is no
|
|
9
|
+
* cross-instance coherence to manage.
|
|
10
|
+
*/
|
|
11
|
+
const HOUR_MS = 60 * 60 * 1000;
|
|
12
|
+
const DAY_MS = 24 * HOUR_MS;
|
|
13
|
+
const rowToSession = (r) => ({
|
|
14
|
+
sessionId: r.session_id,
|
|
15
|
+
userId: r.user_id,
|
|
16
|
+
getOnly: r.get_only === 1,
|
|
17
|
+
createdAt: r.created_at,
|
|
18
|
+
lastSeenAt: r.last_seen_at,
|
|
19
|
+
refreshExpiresAt: r.refresh_expires_at,
|
|
20
|
+
accessExpiresAt: r.access_expires_at,
|
|
21
|
+
disabled: r.disabled === 1,
|
|
22
|
+
disabledAt: r.disabled_at,
|
|
23
|
+
disabledBy: r.disabled_by,
|
|
24
|
+
userAgent: r.user_agent,
|
|
25
|
+
ip: r.ip,
|
|
26
|
+
});
|
|
27
|
+
export function createSessionStore(ky, opts = {}) {
|
|
28
|
+
const refreshWindowMs = opts.refreshWindowMs ?? 7 * DAY_MS;
|
|
29
|
+
const retentionMs = opts.retentionMs ?? 30 * DAY_MS;
|
|
30
|
+
const flushIntervalMs = opts.flushIntervalMs ?? 60_000;
|
|
31
|
+
const pruneIntervalMs = opts.pruneIntervalMs ?? HOUR_MS;
|
|
32
|
+
const map = new Map();
|
|
33
|
+
const lastFlushAt = new Map();
|
|
34
|
+
let pruneTimer;
|
|
35
|
+
const isFresh = (s, now = Date.now()) => !!s && !s.disabled && Date.parse(s.refreshExpiresAt) >= now;
|
|
36
|
+
const store = {
|
|
37
|
+
async rehydrate() {
|
|
38
|
+
// Drop ancient rows first so the map starts trim, then load only currently-valid
|
|
39
|
+
// sessions (disabled/expired rows stay in the DB for the audit view).
|
|
40
|
+
await store.prune();
|
|
41
|
+
const rows = await ky.selectFrom('auth_sessions').selectAll().execute();
|
|
42
|
+
const now = Date.now();
|
|
43
|
+
map.clear();
|
|
44
|
+
lastFlushAt.clear();
|
|
45
|
+
for (const r of rows) {
|
|
46
|
+
const s = rowToSession(r);
|
|
47
|
+
if (isFresh(s, now)) {
|
|
48
|
+
map.set(s.sessionId, s);
|
|
49
|
+
lastFlushAt.set(s.sessionId, now);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
async create(input) {
|
|
54
|
+
const now = Date.now();
|
|
55
|
+
const nowIso = new Date(now).toISOString();
|
|
56
|
+
const session = {
|
|
57
|
+
sessionId: input.sessionId,
|
|
58
|
+
userId: input.userId,
|
|
59
|
+
getOnly: input.getOnly ?? false,
|
|
60
|
+
createdAt: nowIso,
|
|
61
|
+
lastSeenAt: nowIso,
|
|
62
|
+
refreshExpiresAt: input.refreshExpiresAt ?? new Date(now + refreshWindowMs).toISOString(),
|
|
63
|
+
accessExpiresAt: input.accessExpiresAt ?? null,
|
|
64
|
+
disabled: false,
|
|
65
|
+
disabledAt: null,
|
|
66
|
+
disabledBy: null,
|
|
67
|
+
userAgent: input.userAgent ?? null,
|
|
68
|
+
ip: input.ip ?? null,
|
|
69
|
+
};
|
|
70
|
+
map.set(session.sessionId, session);
|
|
71
|
+
lastFlushAt.set(session.sessionId, now);
|
|
72
|
+
await ky
|
|
73
|
+
.insertInto('auth_sessions')
|
|
74
|
+
.values({
|
|
75
|
+
session_id: session.sessionId,
|
|
76
|
+
user_id: session.userId,
|
|
77
|
+
get_only: session.getOnly ? 1 : 0,
|
|
78
|
+
created_at: session.createdAt,
|
|
79
|
+
last_seen_at: session.lastSeenAt,
|
|
80
|
+
refresh_expires_at: session.refreshExpiresAt,
|
|
81
|
+
access_expires_at: session.accessExpiresAt,
|
|
82
|
+
disabled: 0,
|
|
83
|
+
disabled_at: null,
|
|
84
|
+
disabled_by: null,
|
|
85
|
+
user_agent: session.userAgent,
|
|
86
|
+
ip: session.ip,
|
|
87
|
+
})
|
|
88
|
+
.execute();
|
|
89
|
+
return session;
|
|
90
|
+
},
|
|
91
|
+
get(sessionId) {
|
|
92
|
+
return map.get(sessionId);
|
|
93
|
+
},
|
|
94
|
+
isValid(session) {
|
|
95
|
+
return isFresh(session);
|
|
96
|
+
},
|
|
97
|
+
async touch(sessionId, opts2) {
|
|
98
|
+
const s = map.get(sessionId);
|
|
99
|
+
if (!s)
|
|
100
|
+
return;
|
|
101
|
+
const now = Date.now();
|
|
102
|
+
s.lastSeenAt = new Date(now).toISOString();
|
|
103
|
+
s.refreshExpiresAt = new Date(now + refreshWindowMs).toISOString();
|
|
104
|
+
const reissued = opts2?.accessExpiresAt !== undefined;
|
|
105
|
+
if (reissued)
|
|
106
|
+
s.accessExpiresAt = opts2?.accessExpiresAt ?? null;
|
|
107
|
+
const last = lastFlushAt.get(sessionId) ?? 0;
|
|
108
|
+
if (reissued || now - last > flushIntervalMs) {
|
|
109
|
+
await ky
|
|
110
|
+
.updateTable('auth_sessions')
|
|
111
|
+
.set({
|
|
112
|
+
last_seen_at: s.lastSeenAt,
|
|
113
|
+
refresh_expires_at: s.refreshExpiresAt,
|
|
114
|
+
access_expires_at: s.accessExpiresAt,
|
|
115
|
+
})
|
|
116
|
+
.where('session_id', '=', sessionId)
|
|
117
|
+
.execute();
|
|
118
|
+
lastFlushAt.set(sessionId, now);
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
async disable(sessionId, disabledBy = null) {
|
|
122
|
+
const s = map.get(sessionId);
|
|
123
|
+
const nowIso = new Date().toISOString();
|
|
124
|
+
if (s) {
|
|
125
|
+
s.disabled = true;
|
|
126
|
+
s.disabledAt = nowIso;
|
|
127
|
+
s.disabledBy = disabledBy;
|
|
128
|
+
}
|
|
129
|
+
const res = await ky
|
|
130
|
+
.updateTable('auth_sessions')
|
|
131
|
+
.set({ disabled: 1, disabled_at: nowIso, disabled_by: disabledBy })
|
|
132
|
+
.where('session_id', '=', sessionId)
|
|
133
|
+
.where('disabled', '=', 0)
|
|
134
|
+
.executeTakeFirst();
|
|
135
|
+
return s !== undefined || Number(res?.numUpdatedRows ?? 0) > 0;
|
|
136
|
+
},
|
|
137
|
+
async disableAllForUser(userId, disabledBy = null) {
|
|
138
|
+
const nowIso = new Date().toISOString();
|
|
139
|
+
const affected = [];
|
|
140
|
+
for (const s of map.values()) {
|
|
141
|
+
if (s.userId === userId && !s.disabled) {
|
|
142
|
+
s.disabled = true;
|
|
143
|
+
s.disabledAt = nowIso;
|
|
144
|
+
s.disabledBy = disabledBy;
|
|
145
|
+
affected.push(s.sessionId);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
await ky
|
|
149
|
+
.updateTable('auth_sessions')
|
|
150
|
+
.set({ disabled: 1, disabled_at: nowIso, disabled_by: disabledBy })
|
|
151
|
+
.where('user_id', '=', userId)
|
|
152
|
+
.where('disabled', '=', 0)
|
|
153
|
+
.execute();
|
|
154
|
+
return affected;
|
|
155
|
+
},
|
|
156
|
+
async remove(sessionId) {
|
|
157
|
+
map.delete(sessionId);
|
|
158
|
+
lastFlushAt.delete(sessionId);
|
|
159
|
+
await ky.deleteFrom('auth_sessions').where('session_id', '=', sessionId).execute();
|
|
160
|
+
},
|
|
161
|
+
async deleteByUser(userId) {
|
|
162
|
+
for (const [id, s] of map) {
|
|
163
|
+
if (s.userId === userId) {
|
|
164
|
+
map.delete(id);
|
|
165
|
+
lastFlushAt.delete(id);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
await ky.deleteFrom('auth_sessions').where('user_id', '=', userId).execute();
|
|
169
|
+
},
|
|
170
|
+
async listByUser(userId) {
|
|
171
|
+
const rows = await ky
|
|
172
|
+
.selectFrom('auth_sessions')
|
|
173
|
+
.selectAll()
|
|
174
|
+
.where('user_id', '=', userId)
|
|
175
|
+
.orderBy('created_at', 'desc')
|
|
176
|
+
.execute();
|
|
177
|
+
return rows.map(rowToSession);
|
|
178
|
+
},
|
|
179
|
+
listAll() {
|
|
180
|
+
return Array.from(map.values());
|
|
181
|
+
},
|
|
182
|
+
getLastSeenForUser(userId) {
|
|
183
|
+
let latest = null;
|
|
184
|
+
for (const s of map.values()) {
|
|
185
|
+
if (s.userId !== userId || s.disabled)
|
|
186
|
+
continue;
|
|
187
|
+
if (!latest || s.lastSeenAt > latest)
|
|
188
|
+
latest = s.lastSeenAt;
|
|
189
|
+
}
|
|
190
|
+
return latest;
|
|
191
|
+
},
|
|
192
|
+
async prune() {
|
|
193
|
+
const cutoff = Date.now() - retentionMs;
|
|
194
|
+
const cutoffIso = new Date(cutoff).toISOString();
|
|
195
|
+
let removed = 0;
|
|
196
|
+
for (const [id, s] of map) {
|
|
197
|
+
if (Date.parse(s.lastSeenAt) < cutoff) {
|
|
198
|
+
map.delete(id);
|
|
199
|
+
lastFlushAt.delete(id);
|
|
200
|
+
removed++;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
await ky.deleteFrom('auth_sessions').where('last_seen_at', '<', cutoffIso).execute();
|
|
204
|
+
return removed;
|
|
205
|
+
},
|
|
206
|
+
stop() {
|
|
207
|
+
if (pruneTimer) {
|
|
208
|
+
clearInterval(pruneTimer);
|
|
209
|
+
pruneTimer = undefined;
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
if (opts.autoPrune) {
|
|
214
|
+
pruneTimer = setInterval(() => {
|
|
215
|
+
void store.prune();
|
|
216
|
+
}, pruneIntervalMs);
|
|
217
|
+
// Never keep the process alive for a prune tick.
|
|
218
|
+
pruneTimer.unref?.();
|
|
219
|
+
}
|
|
220
|
+
return store;
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=sessionStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../../src/server/auth/sessionStore.ts"],"names":[],"mappings":"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"}
|