@alneas/appkit-react 0.1.0 → 0.2.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/CHANGELOG.md +53 -0
- package/README.md +85 -15
- package/consumer-ai/SKILL.md +12 -0
- package/consumer-ai/api-index.json +103754 -0
- package/consumer-ai/package-context.json +409 -0
- package/dist/ai/action/ExecutionHistory.cjs.map +1 -1
- package/dist/ai/action/ExecutionHistory.d.cts +32 -2
- package/dist/ai/action/ExecutionHistory.d.ts +32 -2
- package/dist/ai/action/ExecutionHistory.js.map +1 -1
- package/dist/ai/action/ScreenActionContext.cjs.map +1 -1
- package/dist/ai/action/ScreenActionContext.d.cts +15 -2
- package/dist/ai/action/ScreenActionContext.d.ts +15 -2
- package/dist/ai/action/ScreenActionContext.js.map +1 -1
- package/dist/ai/action/context.cjs.map +1 -1
- package/dist/ai/action/context.d.cts +19 -3
- package/dist/ai/action/context.d.ts +19 -3
- package/dist/ai/action/context.js.map +1 -1
- package/dist/ai/action/types.d.cts +35 -3
- package/dist/ai/action/types.d.ts +35 -3
- package/dist/ai/action/use-execution-session.cjs.map +1 -1
- package/dist/ai/action/use-execution-session.d.cts +17 -1
- package/dist/ai/action/use-execution-session.d.ts +17 -1
- package/dist/ai/action/use-execution-session.js.map +1 -1
- package/dist/ai/action/use-screen-action-registry.cjs.map +1 -1
- package/dist/ai/action/use-screen-action-registry.d.cts +77 -8
- package/dist/ai/action/use-screen-action-registry.d.ts +77 -8
- package/dist/ai/action/use-screen-action-registry.js.map +1 -1
- package/dist/ai/action/use-screen-action.cjs.map +1 -1
- package/dist/ai/action/use-screen-action.d.cts +23 -6
- package/dist/ai/action/use-screen-action.d.ts +23 -6
- package/dist/ai/action/use-screen-action.js.map +1 -1
- package/dist/ai/action/use-screen-context.cjs.map +1 -1
- package/dist/ai/action/use-screen-context.d.cts +42 -5
- package/dist/ai/action/use-screen-context.d.ts +42 -5
- package/dist/ai/action/use-screen-context.js.map +1 -1
- package/dist/ai/ai-chat/transport.cjs.map +1 -1
- package/dist/ai/ai-chat/transport.d.cts +35 -8
- package/dist/ai/ai-chat/transport.d.ts +35 -8
- package/dist/ai/ai-chat/transport.js.map +1 -1
- package/dist/ai/generative-ui/GenerativeUIRenderer.cjs.map +1 -1
- package/dist/ai/generative-ui/GenerativeUIRenderer.d.cts +21 -3
- package/dist/ai/generative-ui/GenerativeUIRenderer.d.ts +21 -3
- package/dist/ai/generative-ui/GenerativeUIRenderer.js.map +1 -1
- package/dist/ai/generative-ui/error-boundary.cjs.map +1 -1
- package/dist/ai/generative-ui/error-boundary.d.cts +98 -2
- package/dist/ai/generative-ui/error-boundary.d.ts +98 -2
- package/dist/ai/generative-ui/error-boundary.js.map +1 -1
- package/dist/ai/generative-ui/registry.cjs.map +1 -1
- package/dist/ai/generative-ui/registry.d.cts +96 -7
- package/dist/ai/generative-ui/registry.d.ts +96 -7
- package/dist/ai/generative-ui/registry.js.map +1 -1
- package/dist/ai/proposal/ProposalFieldReview.cjs.map +1 -1
- package/dist/ai/proposal/ProposalFieldReview.d.cts +170 -8
- package/dist/ai/proposal/ProposalFieldReview.d.ts +170 -8
- package/dist/ai/proposal/ProposalFieldReview.js.map +1 -1
- package/dist/ai/proposal/types.d.cts +97 -26
- package/dist/ai/proposal/types.d.ts +97 -26
- package/dist/ai/proposal/use-proposal-batch-review.cjs.map +1 -1
- package/dist/ai/proposal/use-proposal-batch-review.d.cts +133 -7
- package/dist/ai/proposal/use-proposal-batch-review.d.ts +133 -7
- package/dist/ai/proposal/use-proposal-batch-review.js.map +1 -1
- package/dist/ai/proposal/use-proposal-review.cjs.map +1 -1
- package/dist/ai/proposal/use-proposal-review.d.cts +47 -5
- package/dist/ai/proposal/use-proposal-review.d.ts +47 -5
- package/dist/ai/proposal/use-proposal-review.js.map +1 -1
- package/dist/avatar.svg +1 -0
- package/dist/consumer-ai/SKILL.md +6 -0
- package/dist/consumer-ai/api-index.json +103754 -0
- package/dist/consumer-ai/package-context.json +5 -3
- package/dist/mockServiceWorker.js +361 -0
- package/dist/styles.css +1 -1
- package/dist/tools/components/auth/AuthForms.cjs.map +1 -1
- package/dist/tools/components/auth/AuthForms.d.cts +131 -81
- package/dist/tools/components/auth/AuthForms.d.ts +131 -81
- package/dist/tools/components/auth/AuthForms.js.map +1 -1
- package/dist/tools/components/auth/AuthGuard.cjs.map +1 -1
- package/dist/tools/components/auth/AuthGuard.d.cts +31 -4
- package/dist/tools/components/auth/AuthGuard.d.ts +31 -4
- package/dist/tools/components/auth/AuthGuard.js.map +1 -1
- package/dist/tools/components/auth/AuthProvider.cjs.map +1 -1
- package/dist/tools/components/auth/AuthProvider.d.cts +39 -42
- package/dist/tools/components/auth/AuthProvider.d.ts +39 -42
- package/dist/tools/components/auth/AuthProvider.js.map +1 -1
- package/dist/tools/components/auth/ProtectedRoute.cjs.map +1 -1
- package/dist/tools/components/auth/ProtectedRoute.d.cts +75 -60
- package/dist/tools/components/auth/ProtectedRoute.d.ts +75 -60
- package/dist/tools/components/auth/ProtectedRoute.js.map +1 -1
- package/dist/tools/components/auth/SignInButton.cjs.map +1 -1
- package/dist/tools/components/auth/SignInButton.d.cts +26 -18
- package/dist/tools/components/auth/SignInButton.d.ts +26 -18
- package/dist/tools/components/auth/SignInButton.js.map +1 -1
- package/dist/tools/components/auth/UserProfileProvider.cjs.map +1 -1
- package/dist/tools/components/auth/UserProfileProvider.d.cts +48 -20
- package/dist/tools/components/auth/UserProfileProvider.d.ts +48 -20
- package/dist/tools/components/auth/UserProfileProvider.js.map +1 -1
- package/dist/tools/components/auth/adapters/better-auth-adapter.cjs.map +1 -1
- package/dist/tools/components/auth/adapters/better-auth-adapter.d.cts +371 -51
- package/dist/tools/components/auth/adapters/better-auth-adapter.d.ts +371 -51
- package/dist/tools/components/auth/adapters/better-auth-adapter.js.map +1 -1
- package/dist/tools/components/auth/adapters/mock-adapter.cjs.map +1 -1
- package/dist/tools/components/auth/adapters/mock-adapter.d.cts +149 -28
- package/dist/tools/components/auth/adapters/mock-adapter.d.ts +149 -28
- package/dist/tools/components/auth/adapters/mock-adapter.js.map +1 -1
- package/dist/tools/components/auth/auth-session.cjs.map +1 -1
- package/dist/tools/components/auth/auth-session.d.cts +147 -1
- package/dist/tools/components/auth/auth-session.d.ts +147 -1
- package/dist/tools/components/auth/auth-session.js.map +1 -1
- package/dist/tools/components/auth/session-cache.cjs.map +1 -1
- package/dist/tools/components/auth/session-cache.d.cts +88 -24
- package/dist/tools/components/auth/session-cache.d.ts +88 -24
- package/dist/tools/components/auth/session-cache.js.map +1 -1
- package/dist/tools/components/auth/types.cjs.map +1 -1
- package/dist/tools/components/auth/types.d.cts +329 -106
- package/dist/tools/components/auth/types.d.ts +329 -106
- package/dist/tools/components/auth/types.js.map +1 -1
- package/dist/tools/components/auth/useAuth.cjs.map +1 -1
- package/dist/tools/components/auth/useAuth.d.cts +110 -17
- package/dist/tools/components/auth/useAuth.d.ts +110 -17
- package/dist/tools/components/auth/useAuth.js.map +1 -1
- package/dist/tools/components/auth/useAuthGuard.cjs.map +1 -1
- package/dist/tools/components/auth/useAuthGuard.d.cts +49 -38
- package/dist/tools/components/auth/useAuthGuard.d.ts +49 -38
- package/dist/tools/components/auth/useAuthGuard.js.map +1 -1
- package/dist/tools/components/auth/useRoleCheck.cjs.map +1 -1
- package/dist/tools/components/auth/useRoleCheck.d.cts +48 -1
- package/dist/tools/components/auth/useRoleCheck.d.ts +48 -1
- package/dist/tools/components/auth/useRoleCheck.js.map +1 -1
- package/dist/tools/components/auth/useUserProfile.cjs.map +1 -1
- package/dist/tools/components/auth/useUserProfile.d.cts +66 -1
- package/dist/tools/components/auth/useUserProfile.d.ts +66 -1
- package/dist/tools/components/auth/useUserProfile.js.map +1 -1
- package/dist/tools/components/barcode/BarcodeGenerator.cjs.map +1 -1
- package/dist/tools/components/barcode/BarcodeGenerator.d.cts +32 -18
- package/dist/tools/components/barcode/BarcodeGenerator.d.ts +32 -18
- package/dist/tools/components/barcode/BarcodeGenerator.js.map +1 -1
- package/dist/tools/components/barcode/QRCodeGenerator.cjs +1 -1
- package/dist/tools/components/barcode/QRCodeGenerator.cjs.map +1 -1
- package/dist/tools/components/barcode/QRCodeGenerator.d.cts +20 -13
- package/dist/tools/components/barcode/QRCodeGenerator.d.ts +20 -13
- package/dist/tools/components/barcode/QRCodeGenerator.js +1 -1
- package/dist/tools/components/barcode/QRCodeGenerator.js.map +1 -1
- package/dist/tools/components/barcode/QRCodeScanner.cjs.map +1 -1
- package/dist/tools/components/barcode/QRCodeScanner.d.cts +32 -1
- package/dist/tools/components/barcode/QRCodeScanner.d.ts +32 -1
- package/dist/tools/components/barcode/QRCodeScanner.js.map +1 -1
- package/dist/tools/components/calendar/ResourceCalendar.cjs.map +1 -1
- package/dist/tools/components/calendar/ResourceCalendar.d.cts +17 -42
- package/dist/tools/components/calendar/ResourceCalendar.d.ts +17 -42
- package/dist/tools/components/calendar/ResourceCalendar.js.map +1 -1
- package/dist/tools/components/calendar/views/ResourceView.cjs +1 -1
- package/dist/tools/components/calendar/views/ResourceView.cjs.map +1 -1
- package/dist/tools/components/calendar/views/ResourceView.js +2 -2
- package/dist/tools/components/calendar/views/ResourceView.js.map +1 -1
- package/dist/tools/components/chart/ComposedChart.cjs.map +1 -1
- package/dist/tools/components/chart/ComposedChart.d.cts +54 -1
- package/dist/tools/components/chart/ComposedChart.d.ts +54 -1
- package/dist/tools/components/chart/ComposedChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleAreaChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleAreaChart.d.cts +41 -1
- package/dist/tools/components/chart/SimpleAreaChart.d.ts +41 -1
- package/dist/tools/components/chart/SimpleAreaChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleBarChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleBarChart.d.cts +34 -24
- package/dist/tools/components/chart/SimpleBarChart.d.ts +34 -24
- package/dist/tools/components/chart/SimpleBarChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleLineChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleLineChart.d.cts +31 -28
- package/dist/tools/components/chart/SimpleLineChart.d.ts +31 -28
- package/dist/tools/components/chart/SimpleLineChart.js.map +1 -1
- package/dist/tools/components/chart/SimplePieChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimplePieChart.d.cts +28 -22
- package/dist/tools/components/chart/SimplePieChart.d.ts +28 -22
- package/dist/tools/components/chart/SimplePieChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleRadarChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleRadarChart.d.cts +38 -1
- package/dist/tools/components/chart/SimpleRadarChart.d.ts +38 -1
- package/dist/tools/components/chart/SimpleRadarChart.js.map +1 -1
- package/dist/tools/components/chart/SimpleScatterChart.cjs.map +1 -1
- package/dist/tools/components/chart/SimpleScatterChart.d.cts +44 -1
- package/dist/tools/components/chart/SimpleScatterChart.d.ts +44 -1
- package/dist/tools/components/chart/SimpleScatterChart.js.map +1 -1
- package/dist/tools/components/chart/StackedBarChart.cjs.map +1 -1
- package/dist/tools/components/chart/StackedBarChart.d.cts +38 -1
- package/dist/tools/components/chart/StackedBarChart.d.ts +38 -1
- package/dist/tools/components/chart/StackedBarChart.js.map +1 -1
- package/dist/tools/components/data-table/data-table.cjs +1 -1
- package/dist/tools/components/data-table/data-table.cjs.map +1 -1
- package/dist/tools/components/data-table/data-table.js +286 -263
- package/dist/tools/components/data-table/data-table.js.map +1 -1
- package/dist/tools/components/data-table/table-utils.cjs.map +1 -1
- package/dist/tools/components/data-table/table-utils.d.cts +45 -35
- package/dist/tools/components/data-table/table-utils.d.ts +45 -35
- package/dist/tools/components/data-table/table-utils.js.map +1 -1
- package/dist/tools/components/editable-table/editable-table.cjs +1 -1
- package/dist/tools/components/editable-table/editable-table.cjs.map +1 -1
- package/dist/tools/components/editable-table/editable-table.js +15 -2
- package/dist/tools/components/editable-table/editable-table.js.map +1 -1
- package/dist/tools/components/error/ErrorDialog.cjs +1 -1
- package/dist/tools/components/error/ErrorDialog.cjs.map +1 -1
- package/dist/tools/components/error/ErrorDialog.js +1 -1
- package/dist/tools/components/error/ErrorDialog.js.map +1 -1
- package/dist/tools/components/error/ErrorInline.cjs +1 -1
- package/dist/tools/components/error/ErrorInline.cjs.map +1 -1
- package/dist/tools/components/error/ErrorInline.js +1 -1
- package/dist/tools/components/error/ErrorInline.js.map +1 -1
- package/dist/tools/components/error/ErrorNotification.cjs +1 -1
- package/dist/tools/components/error/ErrorNotification.cjs.map +1 -1
- package/dist/tools/components/error/ErrorNotification.js +10 -10
- package/dist/tools/components/error/ErrorNotification.js.map +1 -1
- package/dist/tools/components/file-browser/FilePreview.cjs +1 -1
- package/dist/tools/components/file-browser/FilePreview.cjs.map +1 -1
- package/dist/tools/components/file-browser/FilePreview.js +28 -26
- package/dist/tools/components/file-browser/FilePreview.js.map +1 -1
- package/dist/tools/components/filter/filter.cjs.map +1 -1
- package/dist/tools/components/filter/filter.d.cts +23 -34
- package/dist/tools/components/filter/filter.d.ts +23 -34
- package/dist/tools/components/filter/filter.js.map +1 -1
- package/dist/tools/components/form/EnhancedDetailPage.cjs.map +1 -1
- package/dist/tools/components/form/EnhancedDetailPage.d.cts +47 -42
- package/dist/tools/components/form/EnhancedDetailPage.d.ts +47 -42
- package/dist/tools/components/form/EnhancedDetailPage.js.map +1 -1
- package/dist/tools/components/form/form-grid.cjs.map +1 -1
- package/dist/tools/components/form/form-grid.d.cts +44 -22
- package/dist/tools/components/form/form-grid.d.ts +44 -22
- package/dist/tools/components/form/form-grid.js.map +1 -1
- package/dist/tools/components/gantt/GanttChart.cjs +1 -1
- package/dist/tools/components/gantt/GanttChart.cjs.map +1 -1
- package/dist/tools/components/gantt/GanttChart.d.cts +20 -1
- package/dist/tools/components/gantt/GanttChart.d.ts +20 -1
- package/dist/tools/components/gantt/GanttChart.js +3 -0
- package/dist/tools/components/gantt/GanttChart.js.map +1 -1
- package/dist/tools/components/gantt/components/GanttTaskBar.cjs +1 -1
- package/dist/tools/components/gantt/components/GanttTaskBar.cjs.map +1 -1
- package/dist/tools/components/gantt/components/GanttTaskBar.js +2 -1
- package/dist/tools/components/gantt/components/GanttTaskBar.js.map +1 -1
- package/dist/tools/components/header/header.cjs +1 -1
- package/dist/tools/components/header/header.cjs.map +1 -1
- package/dist/tools/components/header/header.d.cts +103 -40
- package/dist/tools/components/header/header.d.ts +103 -40
- package/dist/tools/components/header/header.js +1 -1
- package/dist/tools/components/header/header.js.map +1 -1
- package/dist/tools/components/i18n/LanguageSwitcher.cjs.map +1 -1
- package/dist/tools/components/i18n/LanguageSwitcher.d.cts +18 -14
- package/dist/tools/components/i18n/LanguageSwitcher.d.ts +18 -14
- package/dist/tools/components/i18n/LanguageSwitcher.js.map +1 -1
- package/dist/tools/components/kanban/KanbanBoard.cjs +1 -1
- package/dist/tools/components/kanban/KanbanBoard.cjs.map +1 -1
- package/dist/tools/components/kanban/KanbanBoard.d.cts +16 -34
- package/dist/tools/components/kanban/KanbanBoard.d.ts +16 -34
- package/dist/tools/components/kanban/KanbanBoard.js +3 -0
- package/dist/tools/components/kanban/KanbanBoard.js.map +1 -1
- package/dist/tools/components/kanban/KanbanColumn.cjs +1 -1
- package/dist/tools/components/kanban/KanbanColumn.cjs.map +1 -1
- package/dist/tools/components/kanban/KanbanColumn.js +1 -1
- package/dist/tools/components/kanban/KanbanColumn.js.map +1 -1
- package/dist/tools/components/kanban/kanban-compound.cjs +1 -1
- package/dist/tools/components/kanban/kanban-compound.cjs.map +1 -1
- package/dist/tools/components/kanban/kanban-compound.js +4 -1
- package/dist/tools/components/kanban/kanban-compound.js.map +1 -1
- package/dist/tools/components/kanban/kanban-primitives.cjs +1 -1
- package/dist/tools/components/kanban/kanban-primitives.cjs.map +1 -1
- package/dist/tools/components/kanban/kanban-primitives.js +0 -1
- package/dist/tools/components/kanban/kanban-primitives.js.map +1 -1
- package/dist/tools/components/priority-queue/PriorityCard.cjs +1 -1
- package/dist/tools/components/priority-queue/PriorityCard.cjs.map +1 -1
- package/dist/tools/components/priority-queue/PriorityCard.js +3 -1
- package/dist/tools/components/priority-queue/PriorityCard.js.map +1 -1
- package/dist/tools/components/sidebar/SmartSidebar.cjs.map +1 -1
- package/dist/tools/components/sidebar/SmartSidebar.d.cts +41 -43
- package/dist/tools/components/sidebar/SmartSidebar.d.ts +41 -43
- package/dist/tools/components/sidebar/SmartSidebar.js.map +1 -1
- package/dist/tools/components/splash/SplashScreen.cjs.map +1 -1
- package/dist/tools/components/splash/SplashScreen.d.cts +43 -68
- package/dist/tools/components/splash/SplashScreen.d.ts +43 -68
- package/dist/tools/components/splash/SplashScreen.js.map +1 -1
- package/dist/tools/components/workflow/WorkflowStatusPanel.cjs +1 -1
- package/dist/tools/components/workflow/WorkflowStatusPanel.cjs.map +1 -1
- package/dist/tools/components/workflow/WorkflowStatusPanel.js +2 -2
- package/dist/tools/components/workflow/WorkflowStatusPanel.js.map +1 -1
- package/dist/tools/lib/data-access/data-access-context.cjs.map +1 -1
- package/dist/tools/lib/data-access/data-access-context.d.cts +15 -6
- package/dist/tools/lib/data-access/data-access-context.d.ts +15 -6
- package/dist/tools/lib/data-access/data-access-context.js.map +1 -1
- package/dist/tools/lib/data-access/react-query-provider.cjs.map +1 -1
- package/dist/tools/lib/data-access/react-query-provider.d.cts +19 -2
- package/dist/tools/lib/data-access/react-query-provider.d.ts +19 -2
- package/dist/tools/lib/data-access/react-query-provider.js.map +1 -1
- package/dist/tools/lib/data-access/react-query.cjs.map +1 -1
- package/dist/tools/lib/data-access/react-query.d.cts +365 -90
- package/dist/tools/lib/data-access/react-query.d.ts +365 -90
- package/dist/tools/lib/data-access/react-query.js.map +1 -1
- package/dist/tools/lib/error/AppError.cjs.map +1 -1
- package/dist/tools/lib/error/AppError.d.cts +157 -63
- package/dist/tools/lib/error/AppError.d.ts +157 -63
- package/dist/tools/lib/error/AppError.js.map +1 -1
- package/dist/tools/lib/hooks/useAsyncWithTimeout.cjs.map +1 -1
- package/dist/tools/lib/hooks/useAsyncWithTimeout.d.cts +79 -26
- package/dist/tools/lib/hooks/useAsyncWithTimeout.d.ts +79 -26
- package/dist/tools/lib/hooks/useAsyncWithTimeout.js.map +1 -1
- package/dist/tools/lib/hooks/useError.cjs.map +1 -1
- package/dist/tools/lib/hooks/useError.d.cts +51 -16
- package/dist/tools/lib/hooks/useError.d.ts +51 -16
- package/dist/tools/lib/hooks/useError.js.map +1 -1
- package/dist/tools/lib/schema/ajv.cjs +1 -1
- package/dist/tools/lib/schema/ajv.cjs.map +1 -1
- package/dist/tools/lib/schema/ajv.d.cts +19 -8
- package/dist/tools/lib/schema/ajv.d.ts +19 -8
- package/dist/tools/lib/schema/ajv.js +2 -1
- package/dist/tools/lib/schema/ajv.js.map +1 -1
- package/dist/tools/lib/state/error-store.cjs.map +1 -1
- package/dist/tools/lib/state/error-store.d.cts +61 -10
- package/dist/tools/lib/state/error-store.d.ts +61 -10
- package/dist/tools/lib/state/error-store.js.map +1 -1
- package/dist/tools/lib/state/store-factory.cjs.map +1 -1
- package/dist/tools/lib/state/store-factory.d.cts +25 -4
- package/dist/tools/lib/state/store-factory.d.ts +25 -4
- package/dist/tools/lib/state/store-factory.js.map +1 -1
- package/dist/tools/lib/state/ui-store.cjs.map +1 -1
- package/dist/tools/lib/state/ui-store.d.cts +39 -0
- package/dist/tools/lib/state/ui-store.d.ts +39 -0
- package/dist/tools/lib/state/ui-store.js.map +1 -1
- package/dist/ui/components/theme/theme-context.cjs.map +1 -1
- package/dist/ui/components/theme/theme-context.d.cts +171 -1
- package/dist/ui/components/theme/theme-context.d.ts +171 -1
- package/dist/ui/components/theme/theme-context.js.map +1 -1
- package/dist/ui/components/theme/theme-provider.cjs.map +1 -1
- package/dist/ui/components/theme/theme-provider.d.cts +31 -19
- package/dist/ui/components/theme/theme-provider.d.ts +31 -19
- package/dist/ui/components/theme/theme-provider.js.map +1 -1
- package/dist/ui/components/theme/theme-script.cjs.map +1 -1
- package/dist/ui/components/theme/theme-script.d.cts +16 -1
- package/dist/ui/components/theme/theme-script.d.ts +16 -1
- package/dist/ui/components/theme/theme-script.js.map +1 -1
- package/dist/ui/components/theme/theme-switcher.cjs +1 -1
- package/dist/ui/components/theme/theme-switcher.cjs.map +1 -1
- package/dist/ui/components/theme/theme-switcher.d.cts +82 -13
- package/dist/ui/components/theme/theme-switcher.d.ts +82 -13
- package/dist/ui/components/theme/theme-switcher.js +8 -0
- package/dist/ui/components/theme/theme-switcher.js.map +1 -1
- package/dist/ui/components/ui/accordion.cjs.map +1 -1
- package/dist/ui/components/ui/accordion.d.cts +60 -0
- package/dist/ui/components/ui/accordion.d.ts +60 -0
- package/dist/ui/components/ui/accordion.js.map +1 -1
- package/dist/ui/components/ui/adjustable-pane.cjs.map +1 -1
- package/dist/ui/components/ui/adjustable-pane.d.cts +44 -26
- package/dist/ui/components/ui/adjustable-pane.d.ts +44 -26
- package/dist/ui/components/ui/adjustable-pane.js.map +1 -1
- package/dist/ui/components/ui/alert-dialog.cjs.map +1 -1
- package/dist/ui/components/ui/alert-dialog.d.cts +179 -2
- package/dist/ui/components/ui/alert-dialog.d.ts +179 -2
- package/dist/ui/components/ui/alert-dialog.js.map +1 -1
- package/dist/ui/components/ui/alert.cjs.map +1 -1
- package/dist/ui/components/ui/alert.d.cts +52 -4
- package/dist/ui/components/ui/alert.d.ts +52 -4
- package/dist/ui/components/ui/alert.js.map +1 -1
- package/dist/ui/components/ui/aspect-ratio.cjs.map +1 -1
- package/dist/ui/components/ui/aspect-ratio.d.cts +16 -1
- package/dist/ui/components/ui/aspect-ratio.d.ts +16 -1
- package/dist/ui/components/ui/aspect-ratio.js.map +1 -1
- package/dist/ui/components/ui/avatar.cjs.map +1 -1
- package/dist/ui/components/ui/avatar.d.cts +87 -3
- package/dist/ui/components/ui/avatar.d.ts +87 -3
- package/dist/ui/components/ui/avatar.js.map +1 -1
- package/dist/ui/components/ui/badge-components.cjs.map +1 -1
- package/dist/ui/components/ui/badge-components.d.cts +13 -1
- package/dist/ui/components/ui/badge-components.d.ts +13 -1
- package/dist/ui/components/ui/badge-components.js.map +1 -1
- package/dist/ui/components/ui/badge-variants.cjs.map +1 -1
- package/dist/ui/components/ui/badge-variants.d.cts +15 -0
- package/dist/ui/components/ui/badge-variants.d.ts +15 -0
- package/dist/ui/components/ui/badge-variants.js.map +1 -1
- package/dist/ui/components/ui/breadcrumb.cjs.map +1 -1
- package/dist/ui/components/ui/breadcrumb.d.cts +91 -7
- package/dist/ui/components/ui/breadcrumb.d.ts +91 -7
- package/dist/ui/components/ui/breadcrumb.js.map +1 -1
- package/dist/ui/components/ui/button-components.cjs.map +1 -1
- package/dist/ui/components/ui/button-components.d.cts +18 -6
- package/dist/ui/components/ui/button-components.d.ts +18 -6
- package/dist/ui/components/ui/button-components.js.map +1 -1
- package/dist/ui/components/ui/button-group-components.cjs.map +1 -1
- package/dist/ui/components/ui/button-group-components.d.cts +39 -3
- package/dist/ui/components/ui/button-group-components.d.ts +39 -3
- package/dist/ui/components/ui/button-group-components.js.map +1 -1
- package/dist/ui/components/ui/button-group-variants.cjs.map +1 -1
- package/dist/ui/components/ui/button-group-variants.d.cts +15 -0
- package/dist/ui/components/ui/button-group-variants.d.ts +15 -0
- package/dist/ui/components/ui/button-group-variants.js.map +1 -1
- package/dist/ui/components/ui/button-variants.cjs.map +1 -1
- package/dist/ui/components/ui/button-variants.d.cts +13 -2
- package/dist/ui/components/ui/button-variants.d.ts +13 -2
- package/dist/ui/components/ui/button-variants.js.map +1 -1
- package/dist/ui/components/ui/card.cjs.map +1 -1
- package/dist/ui/components/ui/card.d.cts +106 -2
- package/dist/ui/components/ui/card.d.ts +106 -2
- package/dist/ui/components/ui/card.js.map +1 -1
- package/dist/ui/components/ui/checkbox-group.cjs.map +1 -1
- package/dist/ui/components/ui/checkbox-group.d.cts +13 -1
- package/dist/ui/components/ui/checkbox-group.d.ts +13 -1
- package/dist/ui/components/ui/checkbox-group.js.map +1 -1
- package/dist/ui/components/ui/checkbox.cjs.map +1 -1
- package/dist/ui/components/ui/checkbox.d.cts +17 -6
- package/dist/ui/components/ui/checkbox.d.ts +17 -6
- package/dist/ui/components/ui/checkbox.js.map +1 -1
- package/dist/ui/components/ui/collapsible.cjs.map +1 -1
- package/dist/ui/components/ui/collapsible.d.cts +39 -3
- package/dist/ui/components/ui/collapsible.d.ts +39 -3
- package/dist/ui/components/ui/collapsible.js.map +1 -1
- package/dist/ui/components/ui/combobox-components.cjs.map +1 -1
- package/dist/ui/components/ui/combobox-components.d.cts +209 -14
- package/dist/ui/components/ui/combobox-components.d.ts +209 -14
- package/dist/ui/components/ui/combobox-components.js.map +1 -1
- package/dist/ui/components/ui/combobox-hooks.cjs.map +1 -1
- package/dist/ui/components/ui/combobox-hooks.d.cts +13 -1
- package/dist/ui/components/ui/combobox-hooks.d.ts +13 -1
- package/dist/ui/components/ui/combobox-hooks.js.map +1 -1
- package/dist/ui/components/ui/command.cjs.map +1 -1
- package/dist/ui/components/ui/command.d.cts +132 -9
- package/dist/ui/components/ui/command.d.ts +132 -9
- package/dist/ui/components/ui/command.js.map +1 -1
- package/dist/ui/components/ui/context-menu.cjs.map +1 -1
- package/dist/ui/components/ui/context-menu.d.cts +233 -2
- package/dist/ui/components/ui/context-menu.d.ts +233 -2
- package/dist/ui/components/ui/context-menu.js.map +1 -1
- package/dist/ui/components/ui/dialog.cjs.map +1 -1
- package/dist/ui/components/ui/dialog.d.cts +157 -5
- package/dist/ui/components/ui/dialog.d.ts +157 -5
- package/dist/ui/components/ui/dialog.js.map +1 -1
- package/dist/ui/components/ui/drawer.cjs.map +1 -1
- package/dist/ui/components/ui/drawer.d.cts +130 -10
- package/dist/ui/components/ui/drawer.d.ts +130 -10
- package/dist/ui/components/ui/drawer.js.map +1 -1
- package/dist/ui/components/ui/dropdown-menu.cjs.map +1 -1
- package/dist/ui/components/ui/dropdown-menu.d.cts +225 -6
- package/dist/ui/components/ui/dropdown-menu.d.ts +225 -6
- package/dist/ui/components/ui/dropdown-menu.js.map +1 -1
- package/dist/ui/components/ui/empty.cjs.map +1 -1
- package/dist/ui/components/ui/empty.d.cts +78 -6
- package/dist/ui/components/ui/empty.d.ts +78 -6
- package/dist/ui/components/ui/empty.js.map +1 -1
- package/dist/ui/components/ui/field.cjs.map +1 -1
- package/dist/ui/components/ui/field.d.cts +180 -6
- package/dist/ui/components/ui/field.d.ts +180 -6
- package/dist/ui/components/ui/field.js.map +1 -1
- package/dist/ui/components/ui/file-icon.cjs.map +1 -1
- package/dist/ui/components/ui/file-icon.d.cts +32 -4
- package/dist/ui/components/ui/file-icon.d.ts +32 -4
- package/dist/ui/components/ui/file-icon.js.map +1 -1
- package/dist/ui/components/ui/hover-card.cjs.map +1 -1
- package/dist/ui/components/ui/hover-card.d.cts +39 -3
- package/dist/ui/components/ui/hover-card.d.ts +39 -3
- package/dist/ui/components/ui/hover-card.js.map +1 -1
- package/dist/ui/components/ui/input-group.cjs.map +1 -1
- package/dist/ui/components/ui/input-group.d.cts +84 -6
- package/dist/ui/components/ui/input-group.d.ts +84 -6
- package/dist/ui/components/ui/input-group.js.map +1 -1
- package/dist/ui/components/ui/input-otp.cjs.map +1 -1
- package/dist/ui/components/ui/input-otp.d.cts +58 -4
- package/dist/ui/components/ui/input-otp.d.ts +58 -4
- package/dist/ui/components/ui/input-otp.js.map +1 -1
- package/dist/ui/components/ui/input.cjs.map +1 -1
- package/dist/ui/components/ui/input.d.cts +18 -10
- package/dist/ui/components/ui/input.d.ts +18 -10
- package/dist/ui/components/ui/input.js.map +1 -1
- package/dist/ui/components/ui/item.cjs.map +1 -1
- package/dist/ui/components/ui/item.d.cts +130 -10
- package/dist/ui/components/ui/item.d.ts +130 -10
- package/dist/ui/components/ui/item.js.map +1 -1
- package/dist/ui/components/ui/kbd.cjs.map +1 -1
- package/dist/ui/components/ui/kbd.d.cts +26 -2
- package/dist/ui/components/ui/kbd.d.ts +26 -2
- package/dist/ui/components/ui/kbd.js.map +1 -1
- package/dist/ui/components/ui/label.cjs.map +1 -1
- package/dist/ui/components/ui/label.d.cts +15 -0
- package/dist/ui/components/ui/label.d.ts +15 -0
- package/dist/ui/components/ui/label.js.map +1 -1
- package/dist/ui/components/ui/layout.cjs +1 -1
- package/dist/ui/components/ui/layout.cjs.map +1 -1
- package/dist/ui/components/ui/layout.d.cts +45 -11
- package/dist/ui/components/ui/layout.d.ts +45 -11
- package/dist/ui/components/ui/layout.js +22 -20
- package/dist/ui/components/ui/layout.js.map +1 -1
- package/dist/ui/components/ui/menubar.cjs.map +1 -1
- package/dist/ui/components/ui/menubar.d.cts +220 -16
- package/dist/ui/components/ui/menubar.d.ts +220 -16
- package/dist/ui/components/ui/menubar.js.map +1 -1
- package/dist/ui/components/ui/meter.cjs.map +1 -1
- package/dist/ui/components/ui/meter.d.cts +52 -4
- package/dist/ui/components/ui/meter.d.ts +52 -4
- package/dist/ui/components/ui/meter.js.map +1 -1
- package/dist/ui/components/ui/mobile-form-variants.cjs.map +1 -1
- package/dist/ui/components/ui/mobile-form-variants.d.cts +30 -0
- package/dist/ui/components/ui/mobile-form-variants.d.ts +30 -0
- package/dist/ui/components/ui/mobile-form-variants.js.map +1 -1
- package/dist/ui/components/ui/mobile-form.cjs.map +1 -1
- package/dist/ui/components/ui/mobile-form.d.cts +186 -9
- package/dist/ui/components/ui/mobile-form.d.ts +186 -9
- package/dist/ui/components/ui/mobile-form.js.map +1 -1
- package/dist/ui/components/ui/navigation-menu-components.cjs.map +1 -1
- package/dist/ui/components/ui/navigation-menu-components.d.cts +104 -8
- package/dist/ui/components/ui/navigation-menu-components.d.ts +104 -8
- package/dist/ui/components/ui/navigation-menu-components.js.map +1 -1
- package/dist/ui/components/ui/navigation-menu-variants.cjs.map +1 -1
- package/dist/ui/components/ui/navigation-menu-variants.d.cts +15 -0
- package/dist/ui/components/ui/navigation-menu-variants.d.ts +15 -0
- package/dist/ui/components/ui/navigation-menu-variants.js.map +1 -1
- package/dist/ui/components/ui/number-field.cjs.map +1 -1
- package/dist/ui/components/ui/number-field.d.cts +78 -6
- package/dist/ui/components/ui/number-field.d.ts +78 -6
- package/dist/ui/components/ui/number-field.js.map +1 -1
- package/dist/ui/components/ui/pagination.cjs.map +1 -1
- package/dist/ui/components/ui/pagination.d.cts +99 -7
- package/dist/ui/components/ui/pagination.d.ts +99 -7
- package/dist/ui/components/ui/pagination.js.map +1 -1
- package/dist/ui/components/ui/password-input.cjs.map +1 -1
- package/dist/ui/components/ui/password-input.d.cts +10 -7
- package/dist/ui/components/ui/password-input.d.ts +10 -7
- package/dist/ui/components/ui/password-input.js.map +1 -1
- package/dist/ui/components/ui/popover.cjs.map +1 -1
- package/dist/ui/components/ui/popover.d.cts +86 -2
- package/dist/ui/components/ui/popover.d.ts +86 -2
- package/dist/ui/components/ui/popover.js.map +1 -1
- package/dist/ui/components/ui/progress.cjs.map +1 -1
- package/dist/ui/components/ui/progress.d.cts +72 -2
- package/dist/ui/components/ui/progress.d.ts +72 -2
- package/dist/ui/components/ui/progress.js.map +1 -1
- package/dist/ui/components/ui/radio-card.cjs.map +1 -1
- package/dist/ui/components/ui/radio-card.d.cts +32 -4
- package/dist/ui/components/ui/radio-card.d.ts +32 -4
- package/dist/ui/components/ui/radio-card.js.map +1 -1
- package/dist/ui/components/ui/radio-group.cjs.map +1 -1
- package/dist/ui/components/ui/radio-group.d.cts +28 -2
- package/dist/ui/components/ui/radio-group.d.ts +28 -2
- package/dist/ui/components/ui/radio-group.js.map +1 -1
- package/dist/ui/components/ui/resizable.cjs.map +1 -1
- package/dist/ui/components/ui/resizable.d.cts +42 -3
- package/dist/ui/components/ui/resizable.d.ts +42 -3
- package/dist/ui/components/ui/resizable.js.map +1 -1
- package/dist/ui/components/ui/responsive-list.cjs.map +1 -1
- package/dist/ui/components/ui/responsive-list.d.cts +176 -13
- package/dist/ui/components/ui/responsive-list.d.ts +176 -13
- package/dist/ui/components/ui/responsive-list.js.map +1 -1
- package/dist/ui/components/ui/scroll-area.cjs.map +1 -1
- package/dist/ui/components/ui/scroll-area.d.cts +28 -1
- package/dist/ui/components/ui/scroll-area.d.ts +28 -1
- package/dist/ui/components/ui/scroll-area.js.map +1 -1
- package/dist/ui/components/ui/searchable-select-input.cjs.map +1 -1
- package/dist/ui/components/ui/searchable-select-input.d.cts +199 -49
- package/dist/ui/components/ui/searchable-select-input.d.ts +199 -49
- package/dist/ui/components/ui/searchable-select-input.js.map +1 -1
- package/dist/ui/components/ui/select.cjs.map +1 -1
- package/dist/ui/components/ui/select.d.cts +205 -40
- package/dist/ui/components/ui/select.d.ts +205 -40
- package/dist/ui/components/ui/select.js.map +1 -1
- package/dist/ui/components/ui/separator.cjs.map +1 -1
- package/dist/ui/components/ui/separator.d.cts +13 -2
- package/dist/ui/components/ui/separator.d.ts +13 -2
- package/dist/ui/components/ui/separator.js.map +1 -1
- package/dist/ui/components/ui/sheet.cjs.map +1 -1
- package/dist/ui/components/ui/sheet.d.cts +128 -3
- package/dist/ui/components/ui/sheet.d.ts +128 -3
- package/dist/ui/components/ui/sheet.js.map +1 -1
- package/dist/ui/components/ui/skeleton.cjs.map +1 -1
- package/dist/ui/components/ui/skeleton.d.cts +13 -1
- package/dist/ui/components/ui/skeleton.d.ts +13 -1
- package/dist/ui/components/ui/skeleton.js.map +1 -1
- package/dist/ui/components/ui/slider.cjs.map +1 -1
- package/dist/ui/components/ui/slider.d.cts +13 -7
- package/dist/ui/components/ui/slider.d.ts +13 -7
- package/dist/ui/components/ui/slider.js.map +1 -1
- package/dist/ui/components/ui/spinner.cjs.map +1 -1
- package/dist/ui/components/ui/spinner.d.cts +13 -1
- package/dist/ui/components/ui/spinner.d.ts +13 -1
- package/dist/ui/components/ui/spinner.js.map +1 -1
- package/dist/ui/components/ui/switch.cjs.map +1 -1
- package/dist/ui/components/ui/switch.d.cts +26 -0
- package/dist/ui/components/ui/switch.d.ts +26 -0
- package/dist/ui/components/ui/switch.js.map +1 -1
- package/dist/ui/components/ui/table.cjs.map +1 -1
- package/dist/ui/components/ui/table.d.cts +118 -2
- package/dist/ui/components/ui/table.d.ts +118 -2
- package/dist/ui/components/ui/table.js.map +1 -1
- package/dist/ui/components/ui/tabs-components.cjs.map +1 -1
- package/dist/ui/components/ui/tabs-components.d.cts +52 -5
- package/dist/ui/components/ui/tabs-components.d.ts +52 -5
- package/dist/ui/components/ui/tabs-components.js.map +1 -1
- package/dist/ui/components/ui/tabs-variants.cjs.map +1 -1
- package/dist/ui/components/ui/tabs-variants.d.cts +15 -0
- package/dist/ui/components/ui/tabs-variants.d.ts +15 -0
- package/dist/ui/components/ui/tabs-variants.js.map +1 -1
- package/dist/ui/components/ui/textarea.cjs.map +1 -1
- package/dist/ui/components/ui/textarea.d.cts +23 -0
- package/dist/ui/components/ui/textarea.d.ts +23 -0
- package/dist/ui/components/ui/textarea.js.map +1 -1
- package/dist/ui/components/ui/toast.cjs.map +1 -1
- package/dist/ui/components/ui/toast.d.cts +136 -0
- package/dist/ui/components/ui/toast.d.ts +136 -0
- package/dist/ui/components/ui/toast.js.map +1 -1
- package/dist/ui/components/ui/toaster.cjs.map +1 -1
- package/dist/ui/components/ui/toaster.d.cts +12 -3
- package/dist/ui/components/ui/toaster.d.ts +12 -3
- package/dist/ui/components/ui/toaster.js.map +1 -1
- package/dist/ui/components/ui/toggle-components.cjs.map +1 -1
- package/dist/ui/components/ui/toggle-components.d.cts +15 -0
- package/dist/ui/components/ui/toggle-components.d.ts +15 -0
- package/dist/ui/components/ui/toggle-components.js.map +1 -1
- package/dist/ui/components/ui/toggle-group.cjs.map +1 -1
- package/dist/ui/components/ui/toggle-group.d.cts +33 -0
- package/dist/ui/components/ui/toggle-group.d.ts +33 -0
- package/dist/ui/components/ui/toggle-group.js.map +1 -1
- package/dist/ui/components/ui/toggle-variants.cjs.map +1 -1
- package/dist/ui/components/ui/toggle-variants.d.cts +15 -0
- package/dist/ui/components/ui/toggle-variants.d.ts +15 -0
- package/dist/ui/components/ui/toggle-variants.js.map +1 -1
- package/dist/ui/components/ui/toolbar.cjs.map +1 -1
- package/dist/ui/components/ui/toolbar.d.cts +94 -7
- package/dist/ui/components/ui/toolbar.d.ts +94 -7
- package/dist/ui/components/ui/toolbar.js.map +1 -1
- package/dist/ui/components/ui/tooltip.cjs.map +1 -1
- package/dist/ui/components/ui/tooltip.d.cts +54 -3
- package/dist/ui/components/ui/tooltip.d.ts +54 -3
- package/dist/ui/components/ui/tooltip.js.map +1 -1
- package/dist/ui/lib/hooks/use-gps.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-gps.d.cts +29 -4
- package/dist/ui/lib/hooks/use-gps.d.ts +29 -4
- package/dist/ui/lib/hooks/use-gps.js.map +1 -1
- package/dist/ui/lib/hooks/use-is-client.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-is-client.d.cts +11 -2
- package/dist/ui/lib/hooks/use-is-client.d.ts +11 -2
- package/dist/ui/lib/hooks/use-is-client.js.map +1 -1
- package/dist/ui/lib/hooks/use-keyboard-shortcut.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-keyboard-shortcut.d.cts +48 -18
- package/dist/ui/lib/hooks/use-keyboard-shortcut.d.ts +48 -18
- package/dist/ui/lib/hooks/use-keyboard-shortcut.js.map +1 -1
- package/dist/ui/lib/hooks/use-mobile.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-mobile.d.cts +11 -3
- package/dist/ui/lib/hooks/use-mobile.d.ts +11 -3
- package/dist/ui/lib/hooks/use-mobile.js.map +1 -1
- package/dist/ui/lib/hooks/use-toast.cjs.map +1 -1
- package/dist/ui/lib/hooks/use-toast.d.cts +184 -15
- package/dist/ui/lib/hooks/use-toast.d.ts +184 -15
- package/dist/ui/lib/hooks/use-toast.js.map +1 -1
- package/dist/ui/lib/ime-utils.cjs.map +1 -1
- package/dist/ui/lib/ime-utils.d.cts +40 -13
- package/dist/ui/lib/ime-utils.d.ts +40 -13
- package/dist/ui/lib/ime-utils.js.map +1 -1
- package/dist/ui/lib/utils.cjs.map +1 -1
- package/dist/ui/lib/utils.d.cts +9 -6
- package/dist/ui/lib/utils.d.ts +9 -6
- package/dist/ui/lib/utils.js.map +1 -1
- package/docs/ai.md +34 -1
- package/docs/exports.md +5 -1
- package/docs/index.md +89 -16
- package/docs/migration.md +268 -0
- package/docs/request-form.md +4 -1
- package/docs/tools.md +4 -1
- package/docs/ui.md +4 -1
- package/llms-full.txt +499 -36
- package/llms.txt +4 -0
- package/package.json +35 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"better-auth-adapter.js","names":["BetterAuthAdapter","client","options","error","data","resData","session","token","sessionData","organizationApi","setActive","result","isActive","callback","user","handleAuthChange","intervalId","res","email","password","_id","_email","_name","_image","_role","rest","metadata","betterAuthUser"],"sources":["../../../../../src/tools/components/auth/adapters/better-auth-adapter.ts"],"sourcesContent":["import { AuthAdapter, User } from '../types';\n\ntype BetterAuthError = { message?: string } | null;\ntype BetterAuthUser = {\n id: string;\n email?: string;\n name?: string;\n image?: string;\n role?: string;\n} & Record<string, unknown>;\ntype BetterAuthSession = {\n token?: string;\n activeOrganizationId?: string;\n activeTeamId?: string;\n} & Record<string, unknown>;\ntype BetterAuthSessionData = {\n user: BetterAuthUser | null;\n session: BetterAuthSession | null;\n} | null;\ntype BetterAuthResponse<T> = { data: T | null; error: BetterAuthError };\ntype BetterAuthTokenData = { token?: string } | string;\ntype BetterAuthOrganizationActionResponse =\n | { error?: BetterAuthError }\n | BetterAuthResponse<unknown>;\ntype BetterAuthOrganizationNamespace = {\n setActive?: (params: { organizationId: string }) => Promise<BetterAuthOrganizationActionResponse>;\n setActiveOrganization?: (params: {\n organizationId: string;\n }) => Promise<BetterAuthOrganizationActionResponse>;\n};\n\n// Define a type that matches the minimal client interface we need.\n// This avoids strict dependency on the exact generic types of the client.\ntype MinimalAuthClient = {\n signIn: {\n email: (\n params: { email: string; password: string },\n options?: Record<string, unknown>,\n ) => Promise<BetterAuthResponse<{ user?: BetterAuthUser | null }>>;\n };\n signUp: {\n email: (\n params: { email: string; password: string; name?: string },\n options?: Record<string, unknown>,\n ) => Promise<BetterAuthResponse<{ user?: BetterAuthUser | null }>>;\n };\n signOut: () => Promise<{ error?: BetterAuthError }>;\n getSession: () => Promise<BetterAuthResponse<BetterAuthSessionData>>;\n token?: () => Promise<BetterAuthResponse<BetterAuthTokenData>>;\n forgetPassword?: (params: {\n email: string;\n redirectTo?: string;\n }) => Promise<{ error?: BetterAuthError }>;\n changePassword?: (params: {\n newPassword: string;\n currentPassword?: string;\n revokeOtherSessions?: boolean;\n }) => Promise<{ error?: BetterAuthError }>;\n changeEmail?: (params: {\n newEmail: string;\n }) => Promise<{ error?: BetterAuthError }>;\n organization?: BetterAuthOrganizationNamespace;\n};\n\nexport interface BetterAuthAdapterOptions {\n /**\n * onAuthStateChanged で監視するカスタムイベント名\n * @default \"better-auth:session-changed\"\n */\n sessionChangeEventName?: string;\n /**\n * セッションポーリング間隔(ms)。0以下で無効化\n * @default 30000\n */\n pollIntervalMs?: number;\n}\n\n/**\n * Better Auth 用のアダプタークラス\n *\n * Better Auth クライアントをラップし、アプリケーション共通の AuthAdapter インターフェースを提供します。\n * これにより、UIコンポーネントは認証プロバイダーの実装詳細を気にすることなく利用できます。\n * Better Auth SDKはこのパッケージの依存ではありません。利用アプリでSDKを導入し、\n * 必要なメソッドを持つクライアントを渡してください。\n *\n * @example\n * ```tsx\n * import { createAuthClient } from 'better-auth/react'; // installed by the consuming application\n * const authClient = createAuthClient();\n * import { BetterAuthAdapter, AuthProvider } from \"@alneas/appkit-react/tools/auth\";\n *\n * const adapter = new BetterAuthAdapter(authClient);\n *\n * <AuthProvider adapter={adapter}>\n * <App />\n * </AuthProvider>\n * ```\n */\nexport class BetterAuthAdapter implements AuthAdapter {\n private client: MinimalAuthClient;\n private eventName: string;\n private pollIntervalMs: number;\n private inFlightSession: Promise<User | null> | null = null;\n\n /**\n * @param client Better Auth クライアントインスタンス (createAuthClient で作成されたもの)\n */\n constructor(client: MinimalAuthClient, options: BetterAuthAdapterOptions = {}) {\n this.client = client;\n this.eventName = options.sessionChangeEventName ?? 'better-auth:session-changed';\n this.pollIntervalMs = options.pollIntervalMs ?? 30000;\n }\n\n /**\n * メールアドレスとパスワードでログインします。\n *\n * @param email ユーザーのメールアドレス\n * @param password パスワード\n * @returns ログインしたユーザー情報\n * @throws ログインに失敗した場合にエラーを投げます\n */\n async login(email: string, password: string): Promise<User> {\n const { data, error } = await this.client.signIn.email({\n email,\n password,\n });\n\n if (error) {\n throw new Error(error.message || 'Login failed');\n }\n\n if (!data?.user) {\n throw new Error('No user returned');\n }\n this.emitSessionChanged();\n return this.mapUser(data.user);\n }\n\n /**\n * 新規ユーザー登録を行います。\n *\n * @param email メールアドレス\n * @param password パスワード\n * @param data 追加データ (現在は name のみサポート)\n * @returns 登録されたユーザー情報\n * @throws 登録に失敗した場合にエラーを投げます\n */\n async register(email: string, password: string, data?: { name?: string }): Promise<User> {\n const { data: resData, error } = await this.client.signUp.email({\n email,\n password,\n name: data?.name || '',\n });\n\n if (error) {\n throw new Error(error.message || 'Registration failed');\n }\n\n if (!resData?.user) {\n throw new Error('No user returned');\n }\n this.emitSessionChanged();\n return this.mapUser(resData.user);\n }\n\n /**\n * ログアウトします。\n *\n * @returns 完了時の Promise\n * @throws ログアウトに失敗した場合にエラーを投げます\n */\n async logout(): Promise<void> {\n const { error } = await this.client.signOut();\n if (error) {\n throw new Error(error.message || 'Logout failed');\n }\n this.emitSessionChanged();\n }\n\n /**\n * 現在のユーザーを取得します。\n * Better Auth の getSession メソッドを使用してセッション情報を取得します。\n */\n async getCurrentUser(): Promise<User | null> {\n if (this.inFlightSession) return this.inFlightSession;\n this.inFlightSession = (async () => {\n try {\n const session = await this.getSessionData();\n if (session?.user) {\n return this.mapUser(session.user, session.session);\n }\n return null;\n } catch {\n return null;\n } finally {\n this.inFlightSession = null;\n }\n })();\n return this.inFlightSession;\n }\n\n /**\n * SupabaseTokenProvider 用に認証トークンを取得します。\n *\n * 優先順位:\n * 1. Better Auth JWT plugin の `/token` エンドポイント\n * 2. セッションの `session.token`\n */\n async getToken(): Promise<string | null> {\n // 1) JWT plugin endpoint (/token) が利用可能なら優先\n if (this.client.token) {\n try {\n const { data, error } = await this.client.token();\n if (!error) {\n const token = this.extractToken(data);\n if (token) return token;\n }\n } catch {\n // fallback to session token\n }\n }\n\n // 2) セッションの token を使用\n const sessionData = await this.getSessionData();\n return this.extractSessionToken(sessionData);\n }\n\n /**\n * organization plugin が有効な場合、アクティブな組織を切り替えます。\n */\n async setActiveOrganization(organizationId: string): Promise<void> {\n const organizationApi = this.client.organization;\n const setActive = organizationApi?.setActive ?? organizationApi?.setActiveOrganization;\n\n if (!setActive) {\n throw new Error('Organization plugin is not configured on Better Auth client.');\n }\n\n const result = await setActive({ organizationId });\n const error = 'error' in result ? result.error : null;\n if (error) {\n throw new Error(error.message || 'Failed to set active organization');\n }\n\n this.emitSessionChanged();\n }\n\n /**\n * 現在の organization / team コンテキストを取得します。\n */\n async getOrganizationContext(): Promise<{\n activeOrganizationId: string | null;\n activeTeamId: string | null;\n }> {\n const sessionData = await this.getSessionData();\n return {\n activeOrganizationId:\n typeof sessionData?.session?.activeOrganizationId === 'string'\n ? sessionData.session.activeOrganizationId\n : null,\n activeTeamId:\n typeof sessionData?.session?.activeTeamId === 'string'\n ? sessionData.session.activeTeamId\n : null,\n };\n }\n\n /**\n * 認証状態の変更を監視します。\n *\n * Better Auth は内部的に nanostore (atom) を使用して状態管理を行いますが、\n * window イベントは発火しません。このメソッドは以下の方法で状態変化を検出します:\n *\n * 1. 初回呼び出し時に現在のユーザーを取得\n * 2. カスタムウィンドウイベントをリッスン (デフォルト: 'better-auth:session-changed')\n * 3. 定期的なポーリング(フォールバック)\n *\n * @deprecated React コンポーネント内では useAuth() の使用を推奨します。\n */\n onAuthStateChanged(callback: (user: User | null) => void): () => void {\n let isActive = true;\n\n // 1. Initial call - get current user immediately\n this.getCurrentUser().then((user) => {\n if (isActive) callback(user);\n });\n\n if (typeof window === 'undefined') {\n return () => {\n isActive = false;\n };\n }\n\n // 2. Listen for custom window events\n const handleAuthChange = async () => {\n if (!isActive) return;\n const user = await this.getCurrentUser();\n callback(user);\n };\n\n window.addEventListener(this.eventName, handleAuthChange);\n\n // 3. Polling fallback\n const intervalId =\n this.pollIntervalMs > 0\n ? setInterval(async () => {\n if (!isActive) return;\n const user = await this.getCurrentUser();\n callback(user);\n }, this.pollIntervalMs)\n : null;\n\n // Return cleanup function\n return () => {\n isActive = false;\n window.removeEventListener(this.eventName, handleAuthChange);\n if (intervalId) {\n clearInterval(intervalId);\n }\n };\n }\n\n /**\n * メールアドレスを更新します。\n */\n async updateEmail(email: string): Promise<void> {\n if (!this.client.changeEmail) {\n throw new Error('Update email is not available. Configure Better Auth changeEmail endpoint.');\n }\n const res = await this.client.changeEmail({ newEmail: email });\n if (res.error) {\n throw new Error(res.error.message || 'Failed to update email');\n }\n }\n\n /**\n * パスワードを更新します。\n */\n async updatePassword(password: string): Promise<void> {\n if (!this.client.changePassword) {\n throw new Error('Update password is not available. Configure Better Auth changePassword endpoint.');\n }\n const res = await this.client.changePassword({ newPassword: password });\n if (res.error) {\n throw new Error(res.error.message || 'Failed to update password');\n }\n }\n\n /**\n * パスワードリセットメールを送信します。\n */\n async resetPassword(email: string): Promise<void> {\n if (!this.client.forgetPassword) {\n throw new Error(\n 'Reset password is not available. Configure Better Auth email/password reset endpoint.',\n );\n }\n\n const { error } = await this.client.forgetPassword({\n email,\n redirectTo: '/reset-password',\n });\n\n if (error) {\n throw new Error(error.message || 'Failed to send reset password email');\n }\n }\n\n private async getSessionData(): Promise<BetterAuthSessionData> {\n const session = await this.client.getSession();\n if (session?.error) {\n return null;\n }\n return session?.data ?? null;\n }\n\n private extractSessionToken(sessionData: BetterAuthSessionData): string | null {\n const token = sessionData?.session?.token;\n return typeof token === 'string' && token.length > 0 ? token : null;\n }\n\n private extractToken(data: BetterAuthTokenData | null): string | null {\n if (!data) return null;\n if (typeof data === 'string') {\n return data.length > 0 ? data : null;\n }\n const token = data.token;\n return typeof token === 'string' && token.length > 0 ? token : null;\n }\n\n private buildMetadata(\n user: BetterAuthUser,\n session?: BetterAuthSession | null,\n ): Record<string, unknown> {\n const { id: _id, email: _email, name: _name, image: _image, role: _role, ...rest } = user;\n const metadata: Record<string, unknown> = { ...rest };\n\n if (session?.activeOrganizationId) {\n metadata.activeOrganizationId = session.activeOrganizationId;\n }\n if (session?.activeTeamId) {\n metadata.activeTeamId = session.activeTeamId;\n }\n\n return metadata;\n }\n\n private emitSessionChanged(): void {\n if (typeof window === 'undefined') return;\n window.dispatchEvent(new CustomEvent(this.eventName));\n }\n\n // Helper to map Better Auth user to our User type\n private mapUser(betterAuthUser: BetterAuthUser, session?: BetterAuthSession | null): User {\n if (!betterAuthUser) {\n // throw error or return generic\n throw new Error('User data missing');\n }\n return {\n id: betterAuthUser.id,\n email: betterAuthUser.email || '',\n name: betterAuthUser.name,\n avatarUrl: betterAuthUser.image,\n role: betterAuthUser.role,\n metadata: this.buildMetadata(betterAuthUser, session),\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"better-auth-adapter.js","names":["BetterAuthAdapter","client","options","error","data","resData","session","token","sessionData","organizationApi","setActive","result","isActive","callback","user","handleAuthChange","intervalId","res","email","password","_id","_email","_name","_image","_role","rest","metadata","betterAuthUser"],"sources":["../../../../../src/tools/components/auth/adapters/better-auth-adapter.ts"],"sourcesContent":["import { AuthAdapter, User } from '../types';\n\n/**\n * Host endpoint error payload, or null when no endpoint error is present.\n *\n * @see BetterAuthAdapter for the public host-input example.\n */\ntype BetterAuthError = {\n /** Optional endpoint error text used in adapter Error messages. */\n message?: string;\n} | null;\n/**\n * Minimal host user fields mapped to Appkit User; remaining keys become metadata.\n *\n * @see BetterAuthAdapter for the public host-input example.\n */\ntype BetterAuthUser = {\n /** Stable host user ID. */\n id: string;\n /** Optional host email; mapped to an empty string if absent. */\n email?: string;\n /** Optional host display name. */\n name?: string;\n /** Optional avatar URL mapped to avatarUrl. */\n image?: string;\n /** Optional host role copied without authorization checks. */\n role?: string;\n} & Record<string, unknown>;\n/**\n * Minimal host session fields used for token and organization context lookup.\n *\n * @see BetterAuthAdapter for the public host-input example.\n */\ntype BetterAuthSession = {\n /** Optional session token; nonempty values are used by fallback lookup. */\n token?: string;\n /** Optional active organization copied into user metadata. */\n activeOrganizationId?: string;\n /** Optional active team copied into user metadata. */\n activeTeamId?: string;\n} & Record<string, unknown>;\n/**\n * Nullable host session response; user and session may independently be null.\n *\n * @see BetterAuthAdapter for the public host-input example.\n */\ntype BetterAuthSessionData = {\n /** Host session user, or null for no user. */\n user: BetterAuthUser | null;\n /** Host session metadata, or null when unavailable. */\n session: BetterAuthSession | null;\n} | null;\n/**\n * Host response envelope with nullable data and an endpoint error.\n *\n * @typeParam T - Successful response payload.\n *\n * @see BetterAuthAdapter for the public host-input example.\n */\ntype BetterAuthResponse<T> = {\n /** Successful payload, or null when unavailable. */\n data: T | null;\n /** Endpoint failure; null represents no endpoint error. */\n error: BetterAuthError;\n};\n/**\n * Host token endpoint payload accepted as a string or optional token property.\n *\n * @see BetterAuthAdapter for the public host-input example.\n */\ntype BetterAuthTokenData = {\n /** Nonempty token is preferred; missing/empty values trigger fallback. */\n token?: string;\n} | string;\n/**\n * Organization mutation response with an optional or envelope endpoint error.\n *\n * @see BetterAuthAdapter for the public host-input example.\n */\ntype BetterAuthOrganizationActionResponse =\n | {\n /** Optional endpoint error; missing or null means no reported error. */\n error?: BetterAuthError;\n}\n | BetterAuthResponse<unknown>;\n/**\n * Optional host organization methods; setActive is preferred over setActiveOrganization.\n *\n * @see BetterAuthAdapter for the public host-input example.\n */\ntype BetterAuthOrganizationNamespace = {\n /**\n * Optional preferred organization switch operation.\n *\n * @param params - Organization identifier.\n *\n * @returns Host completion response.\n */\n setActive?: (params: {\n /** Target organization identifier. */\n organizationId: string;\n }) => Promise<BetterAuthOrganizationActionResponse>;\n /**\n * Optional legacy organization switch operation, used only without setActive.\n *\n * @param params - Organization identifier.\n *\n * @returns Host completion response.\n */\n setActiveOrganization?: (params: {\n /** Target organization identifier. */\n organizationId: string;\n }) => Promise<BetterAuthOrganizationActionResponse>;\n};\n\n// Define a type that matches the minimal client interface we need.\n// This avoids strict dependency on the exact generic types of the client.\n/**\n * Structural host client accepted by BetterAuthAdapter without importing its SDK.\n *\n * @remarks Required email sign-in/up, sign-out and session methods may reject with client\n * errors. Optional account/plugin methods cause the matching adapter operation to reject\n * when absent, except token which falls back to session lookup.\n *\n * @see BetterAuthAdapter for the public host-input example.\n */\ntype MinimalAuthClient = {\n /**\n * Email sign-in namespace required by the adapter.\n */\n signIn: {\n /**\n * Submit email credentials through the host client.\n *\n * @param params - Account credentials and optional sign-up name.\n *\n * @param options - Optional SDK request options; the adapter does not supply them.\n *\n * @returns Host response whose user is required for adapter success.\n */\n email: (\n params: {\n /** Account email. */\n email: string;\n /** Account password. */\n password: string;\n },\n options?: Record<string, unknown>,\n ) => Promise<BetterAuthResponse<{\n /** User returned by email sign-in/up; adapter rejects when absent. */\n user?: BetterAuthUser | null;\n }>>;\n };\n /**\n * Email sign-up namespace required by the adapter.\n */\n signUp: {\n /**\n * Submit email credentials through the host client.\n *\n * @param params - Account credentials and optional sign-up name.\n *\n * @param options - Optional SDK request options; the adapter does not supply them.\n *\n * @returns Host response whose user is required for adapter success.\n */\n email: (\n params: {\n /** Account email. */\n email: string;\n /** Account password. */\n password: string;\n /** Optional display name. */\n name?: string;\n },\n options?: Record<string, unknown>,\n ) => Promise<BetterAuthResponse<{\n /** User returned by email sign-in/up; adapter rejects when absent. */\n user?: BetterAuthUser | null;\n }>>;\n };\n /**\n * End the host session.\n *\n * @returns Endpoint error payload after completion.\n */\n signOut: () => Promise<{\n /** Optional endpoint error; missing or null means no reported error. */\n error?: BetterAuthError;\n}>;\n /**\n * Read the host session.\n *\n * @returns Nullable user/session payload and endpoint error.\n */\n getSession: () => Promise<BetterAuthResponse<BetterAuthSessionData>>;\n /**\n * Optional JWT/token endpoint; adapter swallows endpoint failures before session fallback.\n *\n * @returns Token payload and endpoint error.\n */\n token?: () => Promise<BetterAuthResponse<BetterAuthTokenData>>;\n /**\n * Optional password-reset endpoint.\n *\n * @param params - Account email and optional redirect destination.\n *\n * @returns Completion response with optional endpoint error.\n */\n forgetPassword?: (params: {\n /** Optional host email; mapped to an empty string if absent. */\n email: string;\n /** Optional reset redirect; adapter supplies /reset-password. */\n redirectTo?: string;\n }) => Promise<{\n /** Optional endpoint error; missing or null means no reported error. */\n error?: BetterAuthError;\n}>;\n /**\n * Optional password-change endpoint.\n *\n * @param params - New password and optional host-only verification/session switches.\n *\n * @returns Completion response with optional endpoint error.\n */\n changePassword?: (params: {\n /** Replacement password sent by the adapter. */\n newPassword: string;\n /** Optional current password supported by the host; adapter does not supply it. */\n currentPassword?: string;\n /** Optional host session-revocation switch; adapter does not supply it. */\n revokeOtherSessions?: boolean;\n }) => Promise<{\n /** Optional endpoint error; missing or null means no reported error. */\n error?: BetterAuthError;\n}>;\n /**\n * Optional email-change endpoint.\n *\n * @param params - New email address.\n *\n * @returns Completion response with optional endpoint error.\n */\n changeEmail?: (params: {\n /** Replacement account email. */\n newEmail: string;\n }) => Promise<{\n /** Optional endpoint error; missing or null means no reported error. */\n error?: BetterAuthError;\n}>;\n /** Optional organization plugin namespace. */\n organization?: BetterAuthOrganizationNamespace;\n};\n\n/**\n * Polling and browser event settings; see BetterAuthAdapter for host setup.\n * @see BetterAuthAdapter for the canonical usage example.\n */\nexport interface BetterAuthAdapterOptions {\n /**\n * Custom window event observed by onAuthStateChanged.\n *\n * @defaultValue \"better-auth:session-changed\"\n */\n sessionChangeEventName?: string;\n /**\n * Session polling interval in milliseconds; zero or negative disables polling.\n *\n * @defaultValue 30000\n */\n pollIntervalMs?: number;\n}\n\n/**\n * Adapts a host-supplied Better Auth client to Appkit authentication operations.\n *\n * @remarks The host installs/configures the Better Auth SDK and server and supplies a\n * structurally compatible client. No SDK or working backend is created by this class.\n * Subscriptions use an initial session read, custom window events and optional polling;\n * each returned cleanup stops its listener/timer. AuthProvider requires an outer\n * QueryClientProvider; this adapter alone requires neither CSS nor a React provider.\n *\n * @example\n * ```tsx\n * import type { ReactNode } from 'react';\n * import { useMemo } from 'react';\n * import { QueryClient, QueryClientProvider } from '@tanstack/react-query';\n * import { BetterAuthAdapter, AuthProvider } from '@alneas/appkit-react/tools/auth';\n * export function BetterAuthRoot({ authClient, queryClient, children }: {\n * authClient: ConstructorParameters<typeof BetterAuthAdapter>[0];\n * queryClient: QueryClient;\n * children: ReactNode;\n * }) {\n * const adapter = useMemo(() => new BetterAuthAdapter(authClient), [authClient]);\n * return <QueryClientProvider client={queryClient}>\n * <AuthProvider adapter={adapter}>{children}</AuthProvider>\n * </QueryClientProvider>;\n * }\n * ```\n */\nexport class BetterAuthAdapter implements AuthAdapter {\n private client: MinimalAuthClient;\n private eventName: string;\n private pollIntervalMs: number;\n private inFlightSession: Promise<User | null> | null = null;\n\n /**\n * Creates an adapter around an already configured host client.\n *\n * @param client - Compatible Better Auth client with email sign-in/up, sign-out and getSession.\n *\n * @param options - Event name and polling interval; defaults to better-auth:session-changed and 30000 ms.\n *\n * @remarks Construction makes no requests and starts no listeners; see the class example.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export function adapt(client: ConstructorParameters<typeof BetterAuthAdapter>[0]) {\n * return new BetterAuthAdapter(client, { pollIntervalMs: 0 });\n * }\n * ```\n */\n constructor(client: MinimalAuthClient, options: BetterAuthAdapterOptions = {}) {\n this.client = client;\n this.eventName = options.sessionChangeEventName ?? 'better-auth:session-changed';\n this.pollIntervalMs = options.pollIntervalMs ?? 30000;\n }\n\n /**\n * Signs in with the client email/password endpoint.\n *\n * @param email - User email address.\n *\n * @param password - User password.\n *\n * @returns The mapped signed-in user; emits the session-change event on success.\n *\n * @throws Rejects on client failure, endpoint error or a response missing a user.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.login('person@example.com', password);\n * }\n * ```\n */\n async login(email: string, password: string): Promise<User> {\n const { data, error } = await this.client.signIn.email({\n email,\n password,\n });\n\n if (error) {\n throw new Error(error.message || 'Login failed');\n }\n\n if (!data?.user) {\n throw new Error('No user returned');\n }\n this.emitSessionChanged();\n return this.mapUser(data.user);\n }\n\n /**\n * Creates an account through the client email sign-up endpoint.\n *\n * @param email - New account email.\n *\n * @param password - New account password.\n *\n * @param data - Optional name; omitted or empty names are sent as an empty string.\n *\n * @returns The mapped registered user; emits the session-change event on success.\n *\n * @throws Rejects on client failure, endpoint error or a response missing a user.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.register('person@example.com', password, { name: 'Reader' });\n * }\n * ```\n */\n async register(email: string, password: string, data?: {\n /** Optional display name forwarded as an empty string when omitted. */\n name?: string;\n }): Promise<User> {\n const { data: resData, error } = await this.client.signUp.email({\n email,\n password,\n name: data?.name || '',\n });\n\n if (error) {\n throw new Error(error.message || 'Registration failed');\n }\n\n if (!resData?.user) {\n throw new Error('No user returned');\n }\n this.emitSessionChanged();\n return this.mapUser(resData.user);\n }\n\n /**\n * Signs out through the supplied client.\n *\n *\n * @returns No value after sign-out succeeds and the session-change event is emitted.\n *\n * @throws Rejects on client failure or endpoint error.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.logout();\n * }\n * ```\n */\n async logout(): Promise<void> {\n const { error } = await this.client.signOut();\n if (error) {\n throw new Error(error.message || 'Logout failed');\n }\n this.emitSessionChanged();\n }\n\n /**\n * Reads the current user, coalescing concurrent reads on this adapter.\n *\n *\n * @returns The mapped session user, or null for no session, endpoint errors or thrown read failures.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.getCurrentUser();\n * }\n * ```\n */\n async getCurrentUser(): Promise<User | null> {\n if (this.inFlightSession) return this.inFlightSession;\n this.inFlightSession = (async () => {\n try {\n const session = await this.getSessionData();\n if (session?.user) {\n return this.mapUser(session.user, session.session);\n }\n return null;\n } catch {\n return null;\n } finally {\n this.inFlightSession = null;\n }\n })();\n return this.inFlightSession;\n }\n\n /**\n * Reads a token, trying the optional token endpoint before the session token.\n *\n *\n * @returns A nonempty token string or null if no token is available.\n *\n * @throws Rejects if the fallback session request throws; token-endpoint failures are swallowed.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.getToken();\n * }\n * ```\n */\n async getToken(): Promise<string | null> {\n // 1) JWT plugin endpoint (/token) が利用可能なら優先\n if (this.client.token) {\n try {\n const { data, error } = await this.client.token();\n if (!error) {\n const token = this.extractToken(data);\n if (token) return token;\n }\n } catch {\n // fallback to session token\n }\n }\n\n // 2) セッションの token を使用\n const sessionData = await this.getSessionData();\n return this.extractSessionToken(sessionData);\n }\n\n /**\n * Changes the active organization using the optional organization client namespace.\n *\n * @param organizationId - Organization identifier sent to setActive or setActiveOrganization.\n *\n * @returns No value after success; emits a session-change event.\n *\n * @throws Rejects if the plugin method is missing, the client rejects or an endpoint error is returned.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.setActiveOrganization('selected-organization');\n * }\n * ```\n */\n async setActiveOrganization(organizationId: string): Promise<void> {\n const organizationApi = this.client.organization;\n const setActive = organizationApi?.setActive ?? organizationApi?.setActiveOrganization;\n\n if (!setActive) {\n throw new Error('Organization plugin is not configured on Better Auth client.');\n }\n\n const result = await setActive({ organizationId });\n const error = 'error' in result ? result.error : null;\n if (error) {\n throw new Error(error.message || 'Failed to set active organization');\n }\n\n this.emitSessionChanged();\n }\n\n /**\n * Reads active organization/team identifiers from the current session.\n *\n *\n * @returns An object whose two identifiers are strings when present and null otherwise.\n *\n * @throws Rejects if the session request throws; returned endpoint errors produce null identifiers.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.getOrganizationContext();\n * }\n * ```\n */\n async getOrganizationContext(): Promise<{\n /** Active organization, or null when absent. */\n activeOrganizationId: string | null;\n /** Active team, or null when absent. */\n activeTeamId: string | null;\n }> {\n const sessionData = await this.getSessionData();\n return {\n activeOrganizationId:\n typeof sessionData?.session?.activeOrganizationId === 'string'\n ? sessionData.session.activeOrganizationId\n : null,\n activeTeamId:\n typeof sessionData?.session?.activeTeamId === 'string'\n ? sessionData.session.activeTeamId\n : null,\n };\n }\n\n /**\n * Observes session state using an initial read, browser events and optional polling.\n *\n * @param callback - Receives the mapped user or null after each read; callbacks can repeat unchanged values.\n *\n * @returns Cleanup that disables the initial callback and removes browser listeners/timers.\n *\n * @remarks On the server only the initial asynchronous read occurs. Browser polling defaults\n * to 30000 ms and is disabled by nonpositive intervals. Callback errors are not caught.\n * An already-running event/poll read may still invoke callback after cleanup.\n *\n * @deprecated React consumers should use useAuth under AuthProvider for managed lifecycle/state.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter, type User } from '@alneas/appkit-react/tools/auth';\n * export function observe(adapter: BetterAuthAdapter, onUser: (user: User | null) => void) {\n * return adapter.onAuthStateChanged(onUser);\n * }\n * // The host calls the returned cleanup when observation ends.\n * ```\n */\n onAuthStateChanged(callback: (user: User | null) => void): () => void {\n let isActive = true;\n\n // 1. Initial call - get current user immediately\n this.getCurrentUser().then((user) => {\n if (isActive) callback(user);\n });\n\n if (typeof window === 'undefined') {\n return () => {\n isActive = false;\n };\n }\n\n // 2. Listen for custom window events\n const handleAuthChange = async () => {\n if (!isActive) return;\n const user = await this.getCurrentUser();\n callback(user);\n };\n\n window.addEventListener(this.eventName, handleAuthChange);\n\n // 3. Polling fallback\n const intervalId =\n this.pollIntervalMs > 0\n ? setInterval(async () => {\n if (!isActive) return;\n const user = await this.getCurrentUser();\n callback(user);\n }, this.pollIntervalMs)\n : null;\n\n // Return cleanup function\n return () => {\n isActive = false;\n window.removeEventListener(this.eventName, handleAuthChange);\n if (intervalId) {\n clearInterval(intervalId);\n }\n };\n }\n\n /**\n * Requests an email change through the optional changeEmail endpoint.\n *\n * @param email - New email address.\n *\n * @returns No value after the endpoint succeeds; this method emits no session-change event.\n *\n * @throws Rejects if changeEmail is absent, the client rejects or an endpoint error is returned.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.updateEmail('new@example.com');\n * }\n * ```\n */\n async updateEmail(email: string): Promise<void> {\n if (!this.client.changeEmail) {\n throw new Error('Update email is not available. Configure Better Auth changeEmail endpoint.');\n }\n const res = await this.client.changeEmail({ newEmail: email });\n if (res.error) {\n throw new Error(res.error.message || 'Failed to update email');\n }\n }\n\n /**\n * Requests a password change through the optional changePassword endpoint.\n *\n * @param password - New password; this method does not send a current password.\n *\n * @returns No value after the endpoint succeeds; this method emits no session-change event.\n *\n * @throws Rejects if changePassword is absent, the client rejects or an endpoint error is returned.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.updatePassword(password);\n * }\n * ```\n */\n async updatePassword(password: string): Promise<void> {\n if (!this.client.changePassword) {\n throw new Error('Update password is not available. Configure Better Auth changePassword endpoint.');\n }\n const res = await this.client.changePassword({ newPassword: password });\n if (res.error) {\n throw new Error(res.error.message || 'Failed to update password');\n }\n }\n\n /**\n * Requests a password-reset email with redirectTo set to /reset-password.\n *\n * @param email - Account email address.\n *\n * @returns No value after the endpoint succeeds; delivery is owned by the host backend.\n *\n * @throws Rejects if forgetPassword is absent, the client rejects or an endpoint error is returned.\n *\n * @example\n * ```ts\n * import { BetterAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * export async function run(adapter: BetterAuthAdapter, password: string) {\n * return adapter.resetPassword('person@example.com');\n * }\n * ```\n */\n async resetPassword(email: string): Promise<void> {\n if (!this.client.forgetPassword) {\n throw new Error(\n 'Reset password is not available. Configure Better Auth email/password reset endpoint.',\n );\n }\n\n const { error } = await this.client.forgetPassword({\n email,\n redirectTo: '/reset-password',\n });\n\n if (error) {\n throw new Error(error.message || 'Failed to send reset password email');\n }\n }\n\n private async getSessionData(): Promise<BetterAuthSessionData> {\n const session = await this.client.getSession();\n if (session?.error) {\n return null;\n }\n return session?.data ?? null;\n }\n\n private extractSessionToken(sessionData: BetterAuthSessionData): string | null {\n const token = sessionData?.session?.token;\n return typeof token === 'string' && token.length > 0 ? token : null;\n }\n\n private extractToken(data: BetterAuthTokenData | null): string | null {\n if (!data) return null;\n if (typeof data === 'string') {\n return data.length > 0 ? data : null;\n }\n const token = data.token;\n return typeof token === 'string' && token.length > 0 ? token : null;\n }\n\n private buildMetadata(\n user: BetterAuthUser,\n session?: BetterAuthSession | null,\n ): Record<string, unknown> {\n const { id: _id, email: _email, name: _name, image: _image, role: _role, ...rest } = user;\n const metadata: Record<string, unknown> = { ...rest };\n\n if (session?.activeOrganizationId) {\n metadata.activeOrganizationId = session.activeOrganizationId;\n }\n if (session?.activeTeamId) {\n metadata.activeTeamId = session.activeTeamId;\n }\n\n return metadata;\n }\n\n private emitSessionChanged(): void {\n if (typeof window === 'undefined') return;\n window.dispatchEvent(new CustomEvent(this.eventName));\n }\n\n // Helper to map Better Auth user to our User type\n private mapUser(betterAuthUser: BetterAuthUser, session?: BetterAuthSession | null): User {\n if (!betterAuthUser) {\n // throw error or return generic\n throw new Error('User data missing');\n }\n return {\n id: betterAuthUser.id,\n email: betterAuthUser.email || '',\n name: betterAuthUser.name,\n avatarUrl: betterAuthUser.image,\n role: betterAuthUser.role,\n metadata: this.buildMetadata(betterAuthUser, session),\n };\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-adapter.cjs","names":["MockAuthAdapter","initialUser","password","data","email","provider","callback","l"],"sources":["../../../../../src/tools/components/auth/adapters/mock-adapter.ts"],"sourcesContent":["import { AuthAdapter, OAuthProvider, User } from '../types';\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"mock-adapter.cjs","names":["MockAuthAdapter","initialUser","password","data","email","provider","callback","l"],"sources":["../../../../../src/tools/components/auth/adapters/mock-adapter.ts"],"sourcesContent":["import { AuthAdapter, OAuthProvider, User } from '../types';\n\n/**\n * Simulates authentication in memory for tests and isolated development previews.\n *\n * @remarks Never authenticates a backend, verifies a password or persists state. Listener\n * callbacks run synchronously and may throw. Use a real host adapter for production.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * const user = await adapter.login('preview@example.com', 'preview-only');\n * await adapter.logout();\n * ```\n */\nexport class MockAuthAdapter implements AuthAdapter {\n private currentUser: User | null = null;\n private listeners: ((user: User | null) => void)[] = [];\n\n /**\n * Creates an isolated in-memory authentication fixture.\n *\n * @param initialUser - Initial display user, default null.\n *\n * @see MockAuthAdapter for a complete preview-only example.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter({ id: 'preview-1', email: 'preview@example.com' });\n * ```\n */\n constructor(initialUser: User | null = null) {\n this.currentUser = initialUser;\n }\n\n /**\n * Simulates email login with a fixed user ID of 1.\n *\n * @param email - Display email.\n *\n * @param password - Only the literal error triggers invalid-credentials rejection.\n *\n * @returns Mock user after synchronous listener notification.\n *\n * @throws Rejects for password error or a throwing listener.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.login('preview@example.com', 'preview-only');\n * ```\n */\n async login(email: string, password: string): Promise<User> {\n if (password === 'error') throw new Error('Invalid credentials');\n this.currentUser = { id: '1', email, name: 'Mock User' };\n this.notifyListeners();\n return this.currentUser;\n }\n\n /**\n * Simulates registration with fixed user ID 2.\n *\n * @param email - Display email.\n *\n * @param _password - Ignored; no credentials are stored.\n *\n * @param data - Optional name; empty/omitted uses New User.\n *\n * @returns Mock user after synchronous listener notification.\n *\n * @throws Rejects if a listener throws.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.register('preview@example.com', 'preview-only', { name: 'Preview' });\n * ```\n */\n async register(email: string, _password: string, data?: {\n /** Optional display name; omission/empty uses New User. */\n name?: string;\n }): Promise<User> {\n this.currentUser = { id: '2', email, name: data?.name || 'New User' };\n this.notifyListeners();\n return this.currentUser;\n }\n\n /**\n * Clears the in-memory user and synchronously notifies listeners.\n *\n *\n * @returns No value after notification.\n *\n * @throws Rejects if a listener throws.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.logout();\n * ```\n */\n async logout(): Promise<void> {\n this.currentUser = null;\n this.notifyListeners();\n }\n\n /**\n * Logs a reset request without sending email.\n *\n * @param email - Email included in console output.\n *\n * @returns No value; no reset token or email is created.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.resetPassword('preview@example.com');\n * ```\n */\n async resetPassword(email: string): Promise<void> {\n console.log(`Reset password for ${email}`);\n }\n\n /**\n * Changes the current mock user email when a user exists.\n *\n * @param email - Replacement display email.\n *\n * @returns No value; without a current user the operation does nothing.\n *\n * @throws Rejects if a listener throws.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.updateEmail('new@example.com');\n * ```\n */\n async updateEmail(email: string): Promise<void> {\n if (this.currentUser) {\n this.currentUser = { ...this.currentUser, email };\n this.notifyListeners();\n }\n }\n\n /**\n * Logs a password update without checking or storing credentials.\n *\n * @param _password - Ignored new password.\n *\n * @returns No value after console output.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.updatePassword('preview-only');\n * ```\n */\n async updatePassword(_password: string): Promise<void> {\n console.log('Password updated');\n }\n\n /**\n * Reads the current in-memory display user.\n *\n *\n * @returns Current user or null, returned by reference.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.getCurrentUser();\n * ```\n */\n async getCurrentUser(): Promise<User | null> {\n return this.currentUser;\n }\n\n /**\n * Creates a synthetic display user for an OAuth provider without contacting it.\n *\n * @param provider - Used in the synthetic ID, email and name.\n *\n * @returns Synthetic user after synchronous listener notification.\n *\n * @throws Rejects if a listener throws.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.loginWithProvider('google');\n * ```\n */\n async loginWithProvider(provider: OAuthProvider): Promise<User> {\n this.currentUser = {\n id: `${provider}-1`,\n email: `${provider}@example.com`,\n name: `${provider} User`,\n };\n this.notifyListeners();\n return this.currentUser;\n }\n\n /**\n * Registers a synchronous listener and immediately calls it with the current user.\n *\n * @param callback - Receives the current user or null on registration and each mutation.\n *\n * @returns Cleanup removing this callback from the listener list.\n *\n * @throws Callback errors propagate; a failed initial callback is already registered.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * const stop = adapter.onAuthStateChanged(user => { console.log(user?.id); });\n * stop();\n * ```\n */\n onAuthStateChanged(callback: (user: User | null) => void): () => void {\n this.listeners.push(callback);\n callback(this.currentUser);\n return () => {\n this.listeners = this.listeners.filter((l) => l !== callback);\n };\n }\n\n private notifyListeners() {\n this.listeners.forEach((l) => l(this.currentUser));\n }\n}\n"],"mappings":"A,gFAgBA,IAAaA,EAAb,KAAoD,CAClD,YAAmC,KACnC,UAAqD,CAAC,EAetD,YAAY,EAA2B,KAAM,CAC3C,KAAK,YAAcC,CACrB,CAoBA,MAAM,MAAM,EAAe,EAAiC,CAC1D,GAAIC,IAAa,QAAS,MAAU,MAAM,qBAAqB,EAG/D,MAFA,MAAK,YAAc,CAAE,GAAI,IAAK,QAAO,KAAM,WAAY,EACvD,KAAK,gBAAgB,EACd,KAAK,WACd,CAsBA,MAAM,SAAS,EAAe,EAAmB,EAG/B,CAGhB,MAFA,MAAK,YAAc,CAAE,GAAI,IAAK,QAAO,KAAMC,GAAM,MAAQ,UAAW,EACpE,KAAK,gBAAgB,EACd,KAAK,WACd,CAiBA,MAAM,QAAwB,CAC5B,KAAK,YAAc,KACnB,KAAK,gBAAgB,CACvB,CAgBA,MAAM,cAAc,EAA8B,CAChD,QAAQ,IAAI,sBAAsBC,GAAO,CAC3C,CAkBA,MAAM,YAAY,EAA8B,CAC1C,KAAK,cACP,KAAK,YAAc,CAAE,GAAG,KAAK,YAAa,OAAM,EAChD,KAAK,gBAAgB,EAEzB,CAgBA,MAAM,eAAe,EAAkC,CACrD,QAAQ,IAAI,kBAAkB,CAChC,CAeA,MAAM,gBAAuC,CAC3C,OAAO,KAAK,WACd,CAkBA,MAAM,kBAAkB,EAAwC,CAO9D,MANA,MAAK,YAAc,CACjB,GAAI,GAAGC,EAAS,IAChB,MAAO,GAAGA,EAAS,cACnB,KAAM,GAAGA,EAAS,MACpB,EACA,KAAK,gBAAgB,EACd,KAAK,WACd,CAmBA,mBAAmB,EAAmD,CAGpE,OAFA,KAAK,UAAU,KAAKC,CAAQ,EAC5BA,EAAS,KAAK,WAAW,MACZ,CACX,KAAK,UAAY,KAAK,UAAU,OAAQ,GAAMC,IAAMD,CAAQ,CAC9D,CACF,CAEA,iBAA0B,CACxB,KAAK,UAAU,QAAS,GAAMC,EAAE,KAAK,WAAW,CAAC,CACnD,CACF,E"}
|
|
@@ -1,67 +1,188 @@
|
|
|
1
1
|
import { AuthAdapter, OAuthProvider, User } from '../types.cjs';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Simulates authentication in memory for tests and isolated development previews.
|
|
4
|
+
*
|
|
5
|
+
* @remarks Never authenticates a backend, verifies a password or persists state. Listener
|
|
6
|
+
* callbacks run synchronously and may throw. Use a real host adapter for production.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
11
|
+
* const adapter = new MockAuthAdapter();
|
|
12
|
+
* const user = await adapter.login('preview@example.com', 'preview-only');
|
|
13
|
+
* await adapter.logout();
|
|
14
|
+
* ```
|
|
5
15
|
*/
|
|
6
16
|
export declare class MockAuthAdapter implements AuthAdapter {
|
|
7
17
|
private currentUser;
|
|
8
18
|
private listeners;
|
|
9
19
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
20
|
+
* Creates an isolated in-memory authentication fixture.
|
|
21
|
+
*
|
|
22
|
+
* @param initialUser - Initial display user, default null.
|
|
23
|
+
*
|
|
24
|
+
* @see MockAuthAdapter for a complete preview-only example.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
29
|
+
* const adapter = new MockAuthAdapter({ id: 'preview-1', email: 'preview@example.com' });
|
|
30
|
+
* ```
|
|
12
31
|
*/
|
|
13
32
|
constructor(initialUser?: User | null);
|
|
14
33
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* @param
|
|
18
|
-
*
|
|
34
|
+
* Simulates email login with a fixed user ID of 1.
|
|
35
|
+
*
|
|
36
|
+
* @param email - Display email.
|
|
37
|
+
*
|
|
38
|
+
* @param password - Only the literal error triggers invalid-credentials rejection.
|
|
39
|
+
*
|
|
40
|
+
* @returns Mock user after synchronous listener notification.
|
|
41
|
+
*
|
|
42
|
+
* @throws Rejects for password error or a throwing listener.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
47
|
+
* const adapter = new MockAuthAdapter();
|
|
48
|
+
* await adapter.login('preview@example.com', 'preview-only');
|
|
49
|
+
* ```
|
|
19
50
|
*/
|
|
20
51
|
login(email: string, password: string): Promise<User>;
|
|
21
52
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* @param
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
53
|
+
* Simulates registration with fixed user ID 2.
|
|
54
|
+
*
|
|
55
|
+
* @param email - Display email.
|
|
56
|
+
*
|
|
57
|
+
* @param _password - Ignored; no credentials are stored.
|
|
58
|
+
*
|
|
59
|
+
* @param data - Optional name; empty/omitted uses New User.
|
|
60
|
+
*
|
|
61
|
+
* @returns Mock user after synchronous listener notification.
|
|
62
|
+
*
|
|
63
|
+
* @throws Rejects if a listener throws.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
68
|
+
* const adapter = new MockAuthAdapter();
|
|
69
|
+
* await adapter.register('preview@example.com', 'preview-only', { name: 'Preview' });
|
|
70
|
+
* ```
|
|
27
71
|
*/
|
|
28
72
|
register(email: string, _password: string, data?: {
|
|
73
|
+
/** Optional display name; omission/empty uses New User. */
|
|
29
74
|
name?: string;
|
|
30
75
|
}): Promise<User>;
|
|
31
76
|
/**
|
|
32
|
-
*
|
|
77
|
+
* Clears the in-memory user and synchronously notifies listeners.
|
|
78
|
+
*
|
|
79
|
+
*
|
|
80
|
+
* @returns No value after notification.
|
|
81
|
+
*
|
|
82
|
+
* @throws Rejects if a listener throws.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
87
|
+
* const adapter = new MockAuthAdapter();
|
|
88
|
+
* await adapter.logout();
|
|
89
|
+
* ```
|
|
33
90
|
*/
|
|
34
91
|
logout(): Promise<void>;
|
|
35
92
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
93
|
+
* Logs a reset request without sending email.
|
|
94
|
+
*
|
|
95
|
+
* @param email - Email included in console output.
|
|
96
|
+
*
|
|
97
|
+
* @returns No value; no reset token or email is created.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
102
|
+
* const adapter = new MockAuthAdapter();
|
|
103
|
+
* await adapter.resetPassword('preview@example.com');
|
|
104
|
+
* ```
|
|
38
105
|
*/
|
|
39
106
|
resetPassword(email: string): Promise<void>;
|
|
40
107
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
108
|
+
* Changes the current mock user email when a user exists.
|
|
109
|
+
*
|
|
110
|
+
* @param email - Replacement display email.
|
|
111
|
+
*
|
|
112
|
+
* @returns No value; without a current user the operation does nothing.
|
|
113
|
+
*
|
|
114
|
+
* @throws Rejects if a listener throws.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
119
|
+
* const adapter = new MockAuthAdapter();
|
|
120
|
+
* await adapter.updateEmail('new@example.com');
|
|
121
|
+
* ```
|
|
43
122
|
*/
|
|
44
123
|
updateEmail(email: string): Promise<void>;
|
|
45
124
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
125
|
+
* Logs a password update without checking or storing credentials.
|
|
126
|
+
*
|
|
127
|
+
* @param _password - Ignored new password.
|
|
128
|
+
*
|
|
129
|
+
* @returns No value after console output.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```ts
|
|
133
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
134
|
+
* const adapter = new MockAuthAdapter();
|
|
135
|
+
* await adapter.updatePassword('preview-only');
|
|
136
|
+
* ```
|
|
48
137
|
*/
|
|
49
138
|
updatePassword(_password: string): Promise<void>;
|
|
50
139
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
140
|
+
* Reads the current in-memory display user.
|
|
141
|
+
*
|
|
142
|
+
*
|
|
143
|
+
* @returns Current user or null, returned by reference.
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
148
|
+
* const adapter = new MockAuthAdapter();
|
|
149
|
+
* await adapter.getCurrentUser();
|
|
150
|
+
* ```
|
|
53
151
|
*/
|
|
54
152
|
getCurrentUser(): Promise<User | null>;
|
|
55
153
|
/**
|
|
56
|
-
* OAuth
|
|
57
|
-
*
|
|
58
|
-
* @
|
|
154
|
+
* Creates a synthetic display user for an OAuth provider without contacting it.
|
|
155
|
+
*
|
|
156
|
+
* @param provider - Used in the synthetic ID, email and name.
|
|
157
|
+
*
|
|
158
|
+
* @returns Synthetic user after synchronous listener notification.
|
|
159
|
+
*
|
|
160
|
+
* @throws Rejects if a listener throws.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
165
|
+
* const adapter = new MockAuthAdapter();
|
|
166
|
+
* await adapter.loginWithProvider('google');
|
|
167
|
+
* ```
|
|
59
168
|
*/
|
|
60
169
|
loginWithProvider(provider: OAuthProvider): Promise<User>;
|
|
61
170
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* @
|
|
171
|
+
* Registers a synchronous listener and immediately calls it with the current user.
|
|
172
|
+
*
|
|
173
|
+
* @param callback - Receives the current user or null on registration and each mutation.
|
|
174
|
+
*
|
|
175
|
+
* @returns Cleanup removing this callback from the listener list.
|
|
176
|
+
*
|
|
177
|
+
* @throws Callback errors propagate; a failed initial callback is already registered.
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```ts
|
|
181
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
182
|
+
* const adapter = new MockAuthAdapter();
|
|
183
|
+
* const stop = adapter.onAuthStateChanged(user => { console.log(user?.id); });
|
|
184
|
+
* stop();
|
|
185
|
+
* ```
|
|
65
186
|
*/
|
|
66
187
|
onAuthStateChanged(callback: (user: User | null) => void): () => void;
|
|
67
188
|
private notifyListeners;
|
|
@@ -1,67 +1,188 @@
|
|
|
1
1
|
import { AuthAdapter, OAuthProvider, User } from '../types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* Simulates authentication in memory for tests and isolated development previews.
|
|
4
|
+
*
|
|
5
|
+
* @remarks Never authenticates a backend, verifies a password or persists state. Listener
|
|
6
|
+
* callbacks run synchronously and may throw. Use a real host adapter for production.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
11
|
+
* const adapter = new MockAuthAdapter();
|
|
12
|
+
* const user = await adapter.login('preview@example.com', 'preview-only');
|
|
13
|
+
* await adapter.logout();
|
|
14
|
+
* ```
|
|
5
15
|
*/
|
|
6
16
|
export declare class MockAuthAdapter implements AuthAdapter {
|
|
7
17
|
private currentUser;
|
|
8
18
|
private listeners;
|
|
9
19
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
20
|
+
* Creates an isolated in-memory authentication fixture.
|
|
21
|
+
*
|
|
22
|
+
* @param initialUser - Initial display user, default null.
|
|
23
|
+
*
|
|
24
|
+
* @see MockAuthAdapter for a complete preview-only example.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
29
|
+
* const adapter = new MockAuthAdapter({ id: 'preview-1', email: 'preview@example.com' });
|
|
30
|
+
* ```
|
|
12
31
|
*/
|
|
13
32
|
constructor(initialUser?: User | null);
|
|
14
33
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* @param
|
|
18
|
-
*
|
|
34
|
+
* Simulates email login with a fixed user ID of 1.
|
|
35
|
+
*
|
|
36
|
+
* @param email - Display email.
|
|
37
|
+
*
|
|
38
|
+
* @param password - Only the literal error triggers invalid-credentials rejection.
|
|
39
|
+
*
|
|
40
|
+
* @returns Mock user after synchronous listener notification.
|
|
41
|
+
*
|
|
42
|
+
* @throws Rejects for password error or a throwing listener.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
47
|
+
* const adapter = new MockAuthAdapter();
|
|
48
|
+
* await adapter.login('preview@example.com', 'preview-only');
|
|
49
|
+
* ```
|
|
19
50
|
*/
|
|
20
51
|
login(email: string, password: string): Promise<User>;
|
|
21
52
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* @param
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
53
|
+
* Simulates registration with fixed user ID 2.
|
|
54
|
+
*
|
|
55
|
+
* @param email - Display email.
|
|
56
|
+
*
|
|
57
|
+
* @param _password - Ignored; no credentials are stored.
|
|
58
|
+
*
|
|
59
|
+
* @param data - Optional name; empty/omitted uses New User.
|
|
60
|
+
*
|
|
61
|
+
* @returns Mock user after synchronous listener notification.
|
|
62
|
+
*
|
|
63
|
+
* @throws Rejects if a listener throws.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
68
|
+
* const adapter = new MockAuthAdapter();
|
|
69
|
+
* await adapter.register('preview@example.com', 'preview-only', { name: 'Preview' });
|
|
70
|
+
* ```
|
|
27
71
|
*/
|
|
28
72
|
register(email: string, _password: string, data?: {
|
|
73
|
+
/** Optional display name; omission/empty uses New User. */
|
|
29
74
|
name?: string;
|
|
30
75
|
}): Promise<User>;
|
|
31
76
|
/**
|
|
32
|
-
*
|
|
77
|
+
* Clears the in-memory user and synchronously notifies listeners.
|
|
78
|
+
*
|
|
79
|
+
*
|
|
80
|
+
* @returns No value after notification.
|
|
81
|
+
*
|
|
82
|
+
* @throws Rejects if a listener throws.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
87
|
+
* const adapter = new MockAuthAdapter();
|
|
88
|
+
* await adapter.logout();
|
|
89
|
+
* ```
|
|
33
90
|
*/
|
|
34
91
|
logout(): Promise<void>;
|
|
35
92
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
93
|
+
* Logs a reset request without sending email.
|
|
94
|
+
*
|
|
95
|
+
* @param email - Email included in console output.
|
|
96
|
+
*
|
|
97
|
+
* @returns No value; no reset token or email is created.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
102
|
+
* const adapter = new MockAuthAdapter();
|
|
103
|
+
* await adapter.resetPassword('preview@example.com');
|
|
104
|
+
* ```
|
|
38
105
|
*/
|
|
39
106
|
resetPassword(email: string): Promise<void>;
|
|
40
107
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
108
|
+
* Changes the current mock user email when a user exists.
|
|
109
|
+
*
|
|
110
|
+
* @param email - Replacement display email.
|
|
111
|
+
*
|
|
112
|
+
* @returns No value; without a current user the operation does nothing.
|
|
113
|
+
*
|
|
114
|
+
* @throws Rejects if a listener throws.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
119
|
+
* const adapter = new MockAuthAdapter();
|
|
120
|
+
* await adapter.updateEmail('new@example.com');
|
|
121
|
+
* ```
|
|
43
122
|
*/
|
|
44
123
|
updateEmail(email: string): Promise<void>;
|
|
45
124
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
125
|
+
* Logs a password update without checking or storing credentials.
|
|
126
|
+
*
|
|
127
|
+
* @param _password - Ignored new password.
|
|
128
|
+
*
|
|
129
|
+
* @returns No value after console output.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```ts
|
|
133
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
134
|
+
* const adapter = new MockAuthAdapter();
|
|
135
|
+
* await adapter.updatePassword('preview-only');
|
|
136
|
+
* ```
|
|
48
137
|
*/
|
|
49
138
|
updatePassword(_password: string): Promise<void>;
|
|
50
139
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
140
|
+
* Reads the current in-memory display user.
|
|
141
|
+
*
|
|
142
|
+
*
|
|
143
|
+
* @returns Current user or null, returned by reference.
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```ts
|
|
147
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
148
|
+
* const adapter = new MockAuthAdapter();
|
|
149
|
+
* await adapter.getCurrentUser();
|
|
150
|
+
* ```
|
|
53
151
|
*/
|
|
54
152
|
getCurrentUser(): Promise<User | null>;
|
|
55
153
|
/**
|
|
56
|
-
* OAuth
|
|
57
|
-
*
|
|
58
|
-
* @
|
|
154
|
+
* Creates a synthetic display user for an OAuth provider without contacting it.
|
|
155
|
+
*
|
|
156
|
+
* @param provider - Used in the synthetic ID, email and name.
|
|
157
|
+
*
|
|
158
|
+
* @returns Synthetic user after synchronous listener notification.
|
|
159
|
+
*
|
|
160
|
+
* @throws Rejects if a listener throws.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
165
|
+
* const adapter = new MockAuthAdapter();
|
|
166
|
+
* await adapter.loginWithProvider('google');
|
|
167
|
+
* ```
|
|
59
168
|
*/
|
|
60
169
|
loginWithProvider(provider: OAuthProvider): Promise<User>;
|
|
61
170
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* @
|
|
171
|
+
* Registers a synchronous listener and immediately calls it with the current user.
|
|
172
|
+
*
|
|
173
|
+
* @param callback - Receives the current user or null on registration and each mutation.
|
|
174
|
+
*
|
|
175
|
+
* @returns Cleanup removing this callback from the listener list.
|
|
176
|
+
*
|
|
177
|
+
* @throws Callback errors propagate; a failed initial callback is already registered.
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```ts
|
|
181
|
+
* import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';
|
|
182
|
+
* const adapter = new MockAuthAdapter();
|
|
183
|
+
* const stop = adapter.onAuthStateChanged(user => { console.log(user?.id); });
|
|
184
|
+
* stop();
|
|
185
|
+
* ```
|
|
65
186
|
*/
|
|
66
187
|
onAuthStateChanged(callback: (user: User | null) => void): () => void;
|
|
67
188
|
private notifyListeners;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-adapter.js","names":["MockAuthAdapter","initialUser","password","data","email","provider","callback","l"],"sources":["../../../../../src/tools/components/auth/adapters/mock-adapter.ts"],"sourcesContent":["import { AuthAdapter, OAuthProvider, User } from '../types';\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"mock-adapter.js","names":["MockAuthAdapter","initialUser","password","data","email","provider","callback","l"],"sources":["../../../../../src/tools/components/auth/adapters/mock-adapter.ts"],"sourcesContent":["import { AuthAdapter, OAuthProvider, User } from '../types';\n\n/**\n * Simulates authentication in memory for tests and isolated development previews.\n *\n * @remarks Never authenticates a backend, verifies a password or persists state. Listener\n * callbacks run synchronously and may throw. Use a real host adapter for production.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * const user = await adapter.login('preview@example.com', 'preview-only');\n * await adapter.logout();\n * ```\n */\nexport class MockAuthAdapter implements AuthAdapter {\n private currentUser: User | null = null;\n private listeners: ((user: User | null) => void)[] = [];\n\n /**\n * Creates an isolated in-memory authentication fixture.\n *\n * @param initialUser - Initial display user, default null.\n *\n * @see MockAuthAdapter for a complete preview-only example.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter({ id: 'preview-1', email: 'preview@example.com' });\n * ```\n */\n constructor(initialUser: User | null = null) {\n this.currentUser = initialUser;\n }\n\n /**\n * Simulates email login with a fixed user ID of 1.\n *\n * @param email - Display email.\n *\n * @param password - Only the literal error triggers invalid-credentials rejection.\n *\n * @returns Mock user after synchronous listener notification.\n *\n * @throws Rejects for password error or a throwing listener.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.login('preview@example.com', 'preview-only');\n * ```\n */\n async login(email: string, password: string): Promise<User> {\n if (password === 'error') throw new Error('Invalid credentials');\n this.currentUser = { id: '1', email, name: 'Mock User' };\n this.notifyListeners();\n return this.currentUser;\n }\n\n /**\n * Simulates registration with fixed user ID 2.\n *\n * @param email - Display email.\n *\n * @param _password - Ignored; no credentials are stored.\n *\n * @param data - Optional name; empty/omitted uses New User.\n *\n * @returns Mock user after synchronous listener notification.\n *\n * @throws Rejects if a listener throws.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.register('preview@example.com', 'preview-only', { name: 'Preview' });\n * ```\n */\n async register(email: string, _password: string, data?: {\n /** Optional display name; omission/empty uses New User. */\n name?: string;\n }): Promise<User> {\n this.currentUser = { id: '2', email, name: data?.name || 'New User' };\n this.notifyListeners();\n return this.currentUser;\n }\n\n /**\n * Clears the in-memory user and synchronously notifies listeners.\n *\n *\n * @returns No value after notification.\n *\n * @throws Rejects if a listener throws.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.logout();\n * ```\n */\n async logout(): Promise<void> {\n this.currentUser = null;\n this.notifyListeners();\n }\n\n /**\n * Logs a reset request without sending email.\n *\n * @param email - Email included in console output.\n *\n * @returns No value; no reset token or email is created.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.resetPassword('preview@example.com');\n * ```\n */\n async resetPassword(email: string): Promise<void> {\n console.log(`Reset password for ${email}`);\n }\n\n /**\n * Changes the current mock user email when a user exists.\n *\n * @param email - Replacement display email.\n *\n * @returns No value; without a current user the operation does nothing.\n *\n * @throws Rejects if a listener throws.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.updateEmail('new@example.com');\n * ```\n */\n async updateEmail(email: string): Promise<void> {\n if (this.currentUser) {\n this.currentUser = { ...this.currentUser, email };\n this.notifyListeners();\n }\n }\n\n /**\n * Logs a password update without checking or storing credentials.\n *\n * @param _password - Ignored new password.\n *\n * @returns No value after console output.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.updatePassword('preview-only');\n * ```\n */\n async updatePassword(_password: string): Promise<void> {\n console.log('Password updated');\n }\n\n /**\n * Reads the current in-memory display user.\n *\n *\n * @returns Current user or null, returned by reference.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.getCurrentUser();\n * ```\n */\n async getCurrentUser(): Promise<User | null> {\n return this.currentUser;\n }\n\n /**\n * Creates a synthetic display user for an OAuth provider without contacting it.\n *\n * @param provider - Used in the synthetic ID, email and name.\n *\n * @returns Synthetic user after synchronous listener notification.\n *\n * @throws Rejects if a listener throws.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * await adapter.loginWithProvider('google');\n * ```\n */\n async loginWithProvider(provider: OAuthProvider): Promise<User> {\n this.currentUser = {\n id: `${provider}-1`,\n email: `${provider}@example.com`,\n name: `${provider} User`,\n };\n this.notifyListeners();\n return this.currentUser;\n }\n\n /**\n * Registers a synchronous listener and immediately calls it with the current user.\n *\n * @param callback - Receives the current user or null on registration and each mutation.\n *\n * @returns Cleanup removing this callback from the listener list.\n *\n * @throws Callback errors propagate; a failed initial callback is already registered.\n *\n * @example\n * ```ts\n * import { MockAuthAdapter } from '@alneas/appkit-react/tools/auth';\n * const adapter = new MockAuthAdapter();\n * const stop = adapter.onAuthStateChanged(user => { console.log(user?.id); });\n * stop();\n * ```\n */\n onAuthStateChanged(callback: (user: User | null) => void): () => void {\n this.listeners.push(callback);\n callback(this.currentUser);\n return () => {\n this.listeners = this.listeners.filter((l) => l !== callback);\n };\n }\n\n private notifyListeners() {\n this.listeners.forEach((l) => l(this.currentUser));\n }\n}\n"],"mappings":";;AAgBA,IAAaA,IAAb,MAAoD;CAClD,cAAmC;CACnC,YAAqD,CAAC;CAetD,YAAY,IAA2B,MAAM;EAC3C,KAAK,cAAcC;CACrB;CAoBA,MAAM,MAAM,GAAe,GAAiC;EAC1D,IAAIC,MAAa,SAAS,MAAU,MAAM,qBAAqB;EAG/D,OAFA,KAAK,cAAc;GAAE,IAAI;GAAK;GAAO,MAAM;EAAY,GACvD,KAAK,gBAAgB,GACd,KAAK;CACd;CAsBA,MAAM,SAAS,GAAe,GAAmB,GAG/B;EAGhB,OAFA,KAAK,cAAc;GAAE,IAAI;GAAK;GAAO,MAAMC,GAAM,QAAQ;EAAW,GACpE,KAAK,gBAAgB,GACd,KAAK;CACd;CAiBA,MAAM,SAAwB;EAE5B,AADA,KAAK,cAAc,MACnB,KAAK,gBAAgB;CACvB;CAgBA,MAAM,cAAc,GAA8B;EAChD,QAAQ,IAAI,sBAAsBC,GAAO;CAC3C;CAkBA,MAAM,YAAY,GAA8B;EAC9C,AAAI,KAAK,gBACP,KAAK,cAAc;GAAE,GAAG,KAAK;GAAa;EAAM,GAChD,KAAK,gBAAgB;CAEzB;CAgBA,MAAM,eAAe,GAAkC;EACrD,QAAQ,IAAI,kBAAkB;CAChC;CAeA,MAAM,iBAAuC;EAC3C,OAAO,KAAK;CACd;CAkBA,MAAM,kBAAkB,GAAwC;EAO9D,OANA,KAAK,cAAc;GACjB,IAAI,GAAGC,EAAS;GAChB,OAAO,GAAGA,EAAS;GACnB,MAAM,GAAGA,EAAS;EACpB,GACA,KAAK,gBAAgB,GACd,KAAK;CACd;CAmBA,mBAAmB,GAAmD;EAGpE,OAFA,KAAK,UAAU,KAAKC,CAAQ,GAC5BA,EAAS,KAAK,WAAW,SACZ;GACX,KAAK,YAAY,KAAK,UAAU,QAAQ,MAAMC,MAAMD,CAAQ;EAC9D;CACF;CAEA,kBAA0B;EACxB,KAAK,UAAU,SAAS,MAAMC,EAAE,KAAK,WAAW,CAAC;CACnD;AACF"}
|