@jazzmind/busibox-app 3.0.18 → 3.0.20
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/dist/components/UserDropdown.d.ts +0 -16
- package/dist/components/UserDropdown.d.ts.map +1 -1
- package/dist/components/UserDropdown.js +2 -2
- package/dist/components/UserDropdown.js.map +1 -1
- package/dist/components/auth/PasskeyRequiredWrapper.d.ts +0 -8
- package/dist/components/auth/PasskeyRequiredWrapper.d.ts.map +1 -1
- package/dist/components/auth/PasskeyRequiredWrapper.js +2 -2
- package/dist/components/auth/PasskeyRequiredWrapper.js.map +1 -1
- package/dist/components/auth/ProtectedRoute.d.ts +0 -9
- package/dist/components/auth/ProtectedRoute.d.ts.map +1 -1
- package/dist/components/auth/ProtectedRoute.js +2 -2
- package/dist/components/auth/ProtectedRoute.js.map +1 -1
- package/dist/components/auth/SessionProvider.d.ts +0 -40
- package/dist/components/auth/SessionProvider.d.ts.map +1 -1
- package/dist/components/auth/SessionProvider.js +2 -2
- package/dist/components/auth/SessionProvider.js.map +1 -1
- package/dist/components/chat/AgentBadge.d.ts +0 -5
- package/dist/components/chat/AgentBadge.d.ts.map +1 -1
- package/dist/components/chat/AgentBadge.js +2 -2
- package/dist/components/chat/AgentBadge.js.map +1 -1
- package/dist/components/chat/AgentSelectionPanel.d.ts +0 -6
- package/dist/components/chat/AgentSelectionPanel.d.ts.map +1 -1
- package/dist/components/chat/AgentSelectionPanel.js +2 -2
- package/dist/components/chat/AgentSelectionPanel.js.map +1 -1
- package/dist/components/chat/AgentSelector.d.ts +0 -6
- package/dist/components/chat/AgentSelector.d.ts.map +1 -1
- package/dist/components/chat/AgentSelector.js +2 -2
- package/dist/components/chat/AgentSelector.js.map +1 -1
- package/dist/components/chat/AgentToolSelector.d.ts +0 -7
- package/dist/components/chat/AgentToolSelector.d.ts.map +1 -1
- package/dist/components/chat/AgentToolSelector.js +2 -2
- package/dist/components/chat/AgentToolSelector.js.map +1 -1
- package/dist/components/chat/AttachmentPreview.d.ts.map +1 -1
- package/dist/components/chat/AttachmentPreview.js +0 -5
- package/dist/components/chat/AttachmentPreview.js.map +1 -1
- package/dist/components/chat/AttachmentUploader.d.ts +0 -5
- package/dist/components/chat/AttachmentUploader.d.ts.map +1 -1
- package/dist/components/chat/AttachmentUploader.js +2 -2
- package/dist/components/chat/AttachmentUploader.js.map +1 -1
- package/dist/components/chat/ChatContainer.d.ts +0 -6
- package/dist/components/chat/ChatContainer.d.ts.map +1 -1
- package/dist/components/chat/ChatContainer.js +2 -2
- package/dist/components/chat/ChatContainer.js.map +1 -1
- package/dist/components/chat/ConversationSidebar.d.ts +0 -5
- package/dist/components/chat/ConversationSidebar.d.ts.map +1 -1
- package/dist/components/chat/ConversationSidebar.js +2 -2
- package/dist/components/chat/ConversationSidebar.js.map +1 -1
- package/dist/components/chat/DeleteConversationModal.d.ts +0 -3
- package/dist/components/chat/DeleteConversationModal.d.ts.map +1 -1
- package/dist/components/chat/DeleteConversationModal.js +2 -2
- package/dist/components/chat/DeleteConversationModal.js.map +1 -1
- package/dist/components/chat/FullChatInterface.d.ts +0 -23
- package/dist/components/chat/FullChatInterface.d.ts.map +1 -1
- package/dist/components/chat/FullChatInterface.js +2 -2
- package/dist/components/chat/FullChatInterface.js.map +1 -1
- package/dist/components/chat/InsightEditModal.d.ts +0 -5
- package/dist/components/chat/InsightEditModal.d.ts.map +1 -1
- package/dist/components/chat/InsightEditModal.js +2 -2
- package/dist/components/chat/InsightEditModal.js.map +1 -1
- package/dist/components/chat/LibrarySelector.d.ts +0 -6
- package/dist/components/chat/LibrarySelector.d.ts.map +1 -1
- package/dist/components/chat/LibrarySelector.js +2 -2
- package/dist/components/chat/LibrarySelector.js.map +1 -1
- package/dist/components/chat/MessageInput.d.ts +0 -5
- package/dist/components/chat/MessageInput.d.ts.map +1 -1
- package/dist/components/chat/MessageInput.js +2 -2
- package/dist/components/chat/MessageInput.js.map +1 -1
- package/dist/components/chat/MessageList.d.ts +0 -5
- package/dist/components/chat/MessageList.d.ts.map +1 -1
- package/dist/components/chat/MessageList.js +2 -2
- package/dist/components/chat/MessageList.js.map +1 -1
- package/dist/components/chat/RawContentToggle.d.ts.map +1 -1
- package/dist/components/chat/RawContentToggle.js +0 -6
- package/dist/components/chat/RawContentToggle.js.map +1 -1
- package/dist/components/chat/SearchToggles.d.ts +0 -5
- package/dist/components/chat/SearchToggles.d.ts.map +1 -1
- package/dist/components/chat/SearchToggles.js +2 -2
- package/dist/components/chat/SearchToggles.js.map +1 -1
- package/dist/components/chat/SimpleChatInterface.d.ts +0 -25
- package/dist/components/chat/SimpleChatInterface.d.ts.map +1 -1
- package/dist/components/chat/SimpleChatInterface.js +2 -2
- package/dist/components/chat/SimpleChatInterface.js.map +1 -1
- package/dist/components/chat/ThinkingSection.d.ts +0 -7
- package/dist/components/chat/ThinkingSection.d.ts.map +1 -1
- package/dist/components/chat/ThinkingSection.js +2 -2
- package/dist/components/chat/ThinkingSection.js.map +1 -1
- package/dist/components/chat/ThinkingToggle.d.ts +0 -6
- package/dist/components/chat/ThinkingToggle.d.ts.map +1 -1
- package/dist/components/chat/ThinkingToggle.js +2 -2
- package/dist/components/chat/ThinkingToggle.js.map +1 -1
- package/dist/components/chat/ToolSelector.d.ts +0 -6
- package/dist/components/chat/ToolSelector.d.ts.map +1 -1
- package/dist/components/chat/ToolSelector.js +2 -2
- package/dist/components/chat/ToolSelector.js.map +1 -1
- package/dist/components/shared/AppIcon.d.ts.map +1 -1
- package/dist/components/shared/AppIcon.js +2 -2
- package/dist/components/shared/AppIcon.js.map +1 -1
- package/dist/components/shared/Modal.d.ts.map +1 -1
- package/dist/components/shared/Modal.js +2 -2
- package/dist/components/shared/Modal.js.map +1 -1
- package/dist/components/workflow/WorkflowList.d.ts.map +1 -1
- package/dist/components/workflow/WorkflowList.js +2 -2
- package/dist/components/workflow/WorkflowList.js.map +1 -1
- package/dist/contexts/AuthContext.d.ts.map +1 -1
- package/dist/contexts/AuthContext.js +2 -2
- package/dist/contexts/AuthContext.js.map +1 -1
- package/dist/contexts/CustomizationContext.d.ts.map +1 -1
- package/dist/contexts/CustomizationContext.js +2 -2
- package/dist/contexts/CustomizationContext.js.map +1 -1
- package/dist/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/contexts/ThemeContext.js +2 -2
- package/dist/contexts/ThemeContext.js.map +1 -1
- package/dist/layout/AdminHeader.d.ts +0 -5
- package/dist/layout/AdminHeader.d.ts.map +1 -1
- package/dist/layout/AdminHeader.js +2 -2
- package/dist/layout/AdminHeader.js.map +1 -1
- package/dist/layout/Footer.d.ts +0 -5
- package/dist/layout/Footer.d.ts.map +1 -1
- package/dist/layout/Footer.js +2 -2
- package/dist/layout/Footer.js.map +1 -1
- package/dist/layout/Header.d.ts.map +1 -1
- package/dist/layout/Header.js +2 -2
- package/dist/layout/Header.js.map +1 -1
- package/dist/layout/ThemeToggle.d.ts +0 -5
- package/dist/layout/ThemeToggle.d.ts.map +1 -1
- package/dist/layout/ThemeToggle.js +2 -2
- package/dist/layout/ThemeToggle.js.map +1 -1
- package/dist/lib/authz/sso-generator.d.ts.map +1 -1
- package/dist/lib/authz/sso-generator.js +7 -4
- package/dist/lib/authz/sso-generator.js.map +1 -1
- package/dist/lib/data/index.d.ts +2 -0
- package/dist/lib/data/index.d.ts.map +1 -1
- package/dist/lib/data/index.js +2 -0
- package/dist/lib/data/index.js.map +1 -1
- package/dist/lib/data/sharing.d.ts +154 -0
- package/dist/lib/data/sharing.d.ts.map +1 -0
- package/dist/lib/data/sharing.js +293 -0
- package/dist/lib/data/sharing.js.map +1 -0
- package/dist/lib/deploy/app-config.d.ts.map +1 -1
- package/dist/lib/deploy/app-config.js +5 -1
- package/dist/lib/deploy/app-config.js.map +1 -1
- package/dist/lib/deploy/app-permissions.d.ts +2 -0
- package/dist/lib/deploy/app-permissions.d.ts.map +1 -1
- package/dist/lib/deploy/app-permissions.js +2 -0
- package/dist/lib/deploy/app-permissions.js.map +1 -1
- package/package.json +1 -1
- package/dist/lib/agent/agent-api-helpers.d.ts +0 -16
- package/dist/lib/agent/agent-api-helpers.d.ts.map +0 -1
- package/dist/lib/agent/agent-api-helpers.js +0 -50
- package/dist/lib/agent/agent-api-helpers.js.map +0 -1
- package/dist/lib/agent/api-helpers.d.ts +0 -16
- package/dist/lib/agent/api-helpers.d.ts.map +0 -1
- package/dist/lib/agent/api-helpers.js +0 -50
- package/dist/lib/agent/api-helpers.js.map +0 -1
- package/dist/lib/agent/chat-cleanup.d.ts +0 -34
- package/dist/lib/agent/chat-cleanup.d.ts.map +0 -1
- package/dist/lib/agent/chat-cleanup.js +0 -133
- package/dist/lib/agent/chat-cleanup.js.map +0 -1
- package/dist/lib/agent/client.d.ts +0 -55
- package/dist/lib/agent/client.d.ts.map +0 -1
- package/dist/lib/agent/client.js +0 -103
- package/dist/lib/agent/client.js.map +0 -1
- package/dist/lib/agent/openai.d.ts +0 -94
- package/dist/lib/agent/openai.d.ts.map +0 -1
- package/dist/lib/agent/openai.js +0 -290
- package/dist/lib/agent/openai.js.map +0 -1
- package/dist/lib/ai/dual-model-router.d.ts +0 -130
- package/dist/lib/ai/dual-model-router.d.ts.map +0 -1
- package/dist/lib/ai/dual-model-router.js +0 -413
- package/dist/lib/ai/dual-model-router.js.map +0 -1
- package/dist/lib/ai/openai.d.ts +0 -94
- package/dist/lib/ai/openai.d.ts.map +0 -1
- package/dist/lib/ai/openai.js +0 -290
- package/dist/lib/ai/openai.js.map +0 -1
- package/dist/lib/ai/tools.d.ts +0 -64
- package/dist/lib/ai/tools.d.ts.map +0 -1
- package/dist/lib/ai/tools.js +0 -159
- package/dist/lib/ai/tools.js.map +0 -1
- package/dist/lib/audit/client.d.ts +0 -138
- package/dist/lib/audit/client.d.ts.map +0 -1
- package/dist/lib/audit/client.js +0 -486
- package/dist/lib/audit/client.js.map +0 -1
- package/dist/lib/audit/index.d.ts +0 -6
- package/dist/lib/audit/index.d.ts.map +0 -1
- package/dist/lib/audit/index.js +0 -6
- package/dist/lib/audit/index.js.map +0 -1
- package/dist/lib/auth/auth-helper.d.ts +0 -167
- package/dist/lib/auth/auth-helper.d.ts.map +0 -1
- package/dist/lib/auth/auth-helper.js +0 -345
- package/dist/lib/auth/auth-helper.js.map +0 -1
- package/dist/lib/auth/auth-state-manager.d.ts +0 -201
- package/dist/lib/auth/auth-state-manager.d.ts.map +0 -1
- package/dist/lib/auth/auth-state-manager.js +0 -597
- package/dist/lib/auth/auth-state-manager.js.map +0 -1
- package/dist/lib/auth/client.d.ts +0 -276
- package/dist/lib/auth/client.d.ts.map +0 -1
- package/dist/lib/auth/client.js +0 -325
- package/dist/lib/auth/client.js.map +0 -1
- package/dist/lib/auth/index.d.ts +0 -10
- package/dist/lib/auth/index.d.ts.map +0 -1
- package/dist/lib/auth/index.js +0 -10
- package/dist/lib/auth/index.js.map +0 -1
- package/dist/lib/auth/sso-route-handler.d.ts +0 -114
- package/dist/lib/auth/sso-route-handler.d.ts.map +0 -1
- package/dist/lib/auth/sso-route-handler.js +0 -199
- package/dist/lib/auth/sso-route-handler.js.map +0 -1
- package/dist/lib/auth/sso.d.ts +0 -162
- package/dist/lib/auth/sso.d.ts.map +0 -1
- package/dist/lib/auth/sso.js +0 -282
- package/dist/lib/auth/sso.js.map +0 -1
- package/dist/lib/authz/email.d.ts +0 -65
- package/dist/lib/authz/email.d.ts.map +0 -1
- package/dist/lib/authz/email.js +0 -112
- package/dist/lib/authz/email.js.map +0 -1
- package/dist/lib/authz/permissions.d.ts +0 -109
- package/dist/lib/authz/permissions.d.ts.map +0 -1
- package/dist/lib/authz/permissions.js +0 -238
- package/dist/lib/authz/permissions.js.map +0 -1
- package/dist/lib/authz/service-audit.d.ts +0 -41
- package/dist/lib/authz/service-audit.d.ts.map +0 -1
- package/dist/lib/authz/service-audit.js +0 -60
- package/dist/lib/authz/service-audit.js.map +0 -1
- package/dist/lib/chat-server/agent-api-client.d.ts +0 -151
- package/dist/lib/chat-server/agent-api-client.d.ts.map +0 -1
- package/dist/lib/chat-server/agent-api-client.js +0 -162
- package/dist/lib/chat-server/agent-api-client.js.map +0 -1
- package/dist/lib/chat-server/attachments.d.ts +0 -118
- package/dist/lib/chat-server/attachments.d.ts.map +0 -1
- package/dist/lib/chat-server/attachments.js +0 -317
- package/dist/lib/chat-server/attachments.js.map +0 -1
- package/dist/lib/chat-server/cleanup.d.ts +0 -34
- package/dist/lib/chat-server/cleanup.d.ts.map +0 -1
- package/dist/lib/chat-server/cleanup.js +0 -133
- package/dist/lib/chat-server/cleanup.js.map +0 -1
- package/dist/lib/chat-server/conversations.d.ts +0 -159
- package/dist/lib/chat-server/conversations.d.ts.map +0 -1
- package/dist/lib/chat-server/conversations.js +0 -278
- package/dist/lib/chat-server/conversations.js.map +0 -1
- package/dist/lib/chat-server/insights.d.ts +0 -84
- package/dist/lib/chat-server/insights.d.ts.map +0 -1
- package/dist/lib/chat-server/insights.js +0 -193
- package/dist/lib/chat-server/insights.js.map +0 -1
- package/dist/lib/chat-server/messages.d.ts +0 -154
- package/dist/lib/chat-server/messages.d.ts.map +0 -1
- package/dist/lib/chat-server/messages.js +0 -282
- package/dist/lib/chat-server/messages.js.map +0 -1
- package/dist/lib/chat-server/middleware.d.ts +0 -119
- package/dist/lib/chat-server/middleware.d.ts.map +0 -1
- package/dist/lib/chat-server/middleware.js +0 -234
- package/dist/lib/chat-server/middleware.js.map +0 -1
- package/dist/lib/chat-server/models.d.ts +0 -60
- package/dist/lib/chat-server/models.d.ts.map +0 -1
- package/dist/lib/chat-server/models.js +0 -205
- package/dist/lib/chat-server/models.js.map +0 -1
- package/dist/lib/chat-server/search.d.ts +0 -89
- package/dist/lib/chat-server/search.d.ts.map +0 -1
- package/dist/lib/chat-server/search.js +0 -203
- package/dist/lib/chat-server/search.js.map +0 -1
- package/dist/lib/chat-server/sharing.d.ts +0 -70
- package/dist/lib/chat-server/sharing.d.ts.map +0 -1
- package/dist/lib/chat-server/sharing.js +0 -146
- package/dist/lib/chat-server/sharing.js.map +0 -1
- package/dist/lib/data/embeddings-app-client.d.ts +0 -37
- package/dist/lib/data/embeddings-app-client.d.ts.map +0 -1
- package/dist/lib/data/embeddings-app-client.js +0 -72
- package/dist/lib/data/embeddings-app-client.js.map +0 -1
- package/dist/lib/deploy/manifest-validator.d.ts +0 -25
- package/dist/lib/deploy/manifest-validator.d.ts.map +0 -1
- package/dist/lib/deploy/manifest-validator.js +0 -142
- package/dist/lib/deploy/manifest-validator.js.map +0 -1
- package/dist/lib/embeddings/data-client.d.ts +0 -37
- package/dist/lib/embeddings/data-client.d.ts.map +0 -1
- package/dist/lib/embeddings/data-client.js +0 -72
- package/dist/lib/embeddings/data-client.js.map +0 -1
- package/dist/lib/hooks/useMediaQuery.d.ts +0 -6
- package/dist/lib/hooks/useMediaQuery.d.ts.map +0 -1
- package/dist/lib/hooks/useMediaQuery.js +0 -18
- package/dist/lib/hooks/useMediaQuery.js.map +0 -1
- package/dist/lib/insights/client.d.ts +0 -131
- package/dist/lib/insights/client.d.ts.map +0 -1
- package/dist/lib/insights/client.js +0 -306
- package/dist/lib/insights/client.js.map +0 -1
- package/dist/lib/insights/index.d.ts +0 -5
- package/dist/lib/insights/index.d.ts.map +0 -1
- package/dist/lib/insights/index.js +0 -5
- package/dist/lib/insights/index.js.map +0 -1
- package/dist/lib/next/authz-client.d.ts +0 -120
- package/dist/lib/next/authz-client.d.ts.map +0 -1
- package/dist/lib/next/authz-client.js +0 -203
- package/dist/lib/next/authz-client.js.map +0 -1
- package/dist/lib/next/passkey.d.ts +0 -78
- package/dist/lib/next/passkey.d.ts.map +0 -1
- package/dist/lib/next/passkey.js +0 -380
- package/dist/lib/next/passkey.js.map +0 -1
- package/dist/lib/next/sso.d.ts +0 -51
- package/dist/lib/next/sso.d.ts.map +0 -1
- package/dist/lib/next/sso.js +0 -167
- package/dist/lib/next/sso.js.map +0 -1
- package/dist/lib/rbac/client.d.ts +0 -320
- package/dist/lib/rbac/client.d.ts.map +0 -1
- package/dist/lib/rbac/client.js +0 -532
- package/dist/lib/rbac/client.js.map +0 -1
- package/dist/lib/rbac/index.d.ts +0 -6
- package/dist/lib/rbac/index.d.ts.map +0 -1
- package/dist/lib/rbac/index.js +0 -6
- package/dist/lib/rbac/index.js.map +0 -1
- package/dist/lib/search/providers.d.ts +0 -105
- package/dist/lib/search/providers.d.ts.map +0 -1
- package/dist/lib/search/providers.js +0 -140
- package/dist/lib/search/providers.js.map +0 -1
- package/dist/lib/services/api-client.d.ts +0 -46
- package/dist/lib/services/api-client.d.ts.map +0 -1
- package/dist/lib/services/api-client.js +0 -80
- package/dist/lib/services/api-client.js.map +0 -1
- package/dist/lib/services/app-library.d.ts +0 -36
- package/dist/lib/services/app-library.d.ts.map +0 -1
- package/dist/lib/services/app-library.js +0 -123
- package/dist/lib/services/app-library.js.map +0 -1
- package/dist/lib/services/app-utils.d.ts +0 -22
- package/dist/lib/services/app-utils.d.ts.map +0 -1
- package/dist/lib/services/app-utils.js +0 -36
- package/dist/lib/services/app-utils.js.map +0 -1
- package/dist/lib/services/audit.d.ts +0 -41
- package/dist/lib/services/audit.d.ts.map +0 -1
- package/dist/lib/services/audit.js +0 -60
- package/dist/lib/services/audit.js.map +0 -1
- package/dist/lib/services/database-cloner.d.ts +0 -28
- package/dist/lib/services/database-cloner.d.ts.map +0 -1
- package/dist/lib/services/database-cloner.js +0 -197
- package/dist/lib/services/database-cloner.js.map +0 -1
- package/dist/lib/services/default-apps.d.ts +0 -31
- package/dist/lib/services/default-apps.d.ts.map +0 -1
- package/dist/lib/services/default-apps.js +0 -121
- package/dist/lib/services/default-apps.js.map +0 -1
- package/dist/lib/services/deploy-api-client.d.ts +0 -184
- package/dist/lib/services/deploy-api-client.d.ts.map +0 -1
- package/dist/lib/services/deploy-api-client.js +0 -208
- package/dist/lib/services/deploy-api-client.js.map +0 -1
- package/dist/lib/services/deployment-service-client.d.ts +0 -122
- package/dist/lib/services/deployment-service-client.d.ts.map +0 -1
- package/dist/lib/services/deployment-service-client.js +0 -245
- package/dist/lib/services/deployment-service-client.js.map +0 -1
- package/dist/lib/services/docs.d.ts +0 -80
- package/dist/lib/services/docs.d.ts.map +0 -1
- package/dist/lib/services/docs.js +0 -160
- package/dist/lib/services/docs.js.map +0 -1
- package/dist/lib/services/email-validation.d.ts +0 -33
- package/dist/lib/services/email-validation.d.ts.map +0 -1
- package/dist/lib/services/email-validation.js +0 -70
- package/dist/lib/services/email-validation.js.map +0 -1
- package/dist/lib/services/email.d.ts +0 -65
- package/dist/lib/services/email.d.ts.map +0 -1
- package/dist/lib/services/email.js +0 -112
- package/dist/lib/services/email.js.map +0 -1
- package/dist/lib/services/github-manifest-fetcher.d.ts +0 -74
- package/dist/lib/services/github-manifest-fetcher.d.ts.map +0 -1
- package/dist/lib/services/github-manifest-fetcher.js +0 -168
- package/dist/lib/services/github-manifest-fetcher.js.map +0 -1
- package/dist/lib/services/libraries.d.ts +0 -124
- package/dist/lib/services/libraries.d.ts.map +0 -1
- package/dist/lib/services/libraries.js +0 -507
- package/dist/lib/services/libraries.js.map +0 -1
- package/dist/lib/services/litellm.d.ts +0 -33
- package/dist/lib/services/litellm.d.ts.map +0 -1
- package/dist/lib/services/litellm.js +0 -222
- package/dist/lib/services/litellm.js.map +0 -1
- package/dist/lib/services/manifest-schema.d.ts +0 -66
- package/dist/lib/services/manifest-schema.d.ts.map +0 -1
- package/dist/lib/services/manifest-schema.js +0 -86
- package/dist/lib/services/manifest-schema.js.map +0 -1
- package/dist/lib/services/manifest-validator.d.ts +0 -25
- package/dist/lib/services/manifest-validator.d.ts.map +0 -1
- package/dist/lib/services/manifest-validator.js +0 -142
- package/dist/lib/services/manifest-validator.js.map +0 -1
- package/dist/lib/services/manifest.d.ts +0 -45
- package/dist/lib/services/manifest.d.ts.map +0 -1
- package/dist/lib/services/manifest.js +0 -137
- package/dist/lib/services/manifest.js.map +0 -1
- package/dist/lib/services/permissions.d.ts +0 -109
- package/dist/lib/services/permissions.d.ts.map +0 -1
- package/dist/lib/services/permissions.js +0 -238
- package/dist/lib/services/permissions.js.map +0 -1
- package/dist/lib/services/service-client.d.ts +0 -99
- package/dist/lib/services/service-client.d.ts.map +0 -1
- package/dist/lib/services/service-client.js +0 -146
- package/dist/lib/services/service-client.js.map +0 -1
- package/dist/lib/services/tags.d.ts +0 -37
- package/dist/lib/services/tags.d.ts.map +0 -1
- package/dist/lib/services/tags.js +0 -189
- package/dist/lib/services/tags.js.map +0 -1
- package/dist/lib/services/url-validation.d.ts +0 -22
- package/dist/lib/services/url-validation.d.ts.map +0 -1
- package/dist/lib/services/url-validation.js +0 -86
- package/dist/lib/services/url-validation.js.map +0 -1
- package/dist/lib/services/user-management.d.ts +0 -81
- package/dist/lib/services/user-management.d.ts.map +0 -1
- package/dist/lib/services/user-management.js +0 -154
- package/dist/lib/services/user-management.js.map +0 -1
- package/dist/lib/storage/index.d.ts +0 -11
- package/dist/lib/storage/index.d.ts.map +0 -1
- package/dist/lib/storage/index.js +0 -12
- package/dist/lib/storage/index.js.map +0 -1
- package/dist/lib/storage/types.d.ts +0 -61
- package/dist/lib/storage/types.d.ts.map +0 -1
- package/dist/lib/storage/types.js +0 -8
- package/dist/lib/storage/types.js.map +0 -1
- package/dist/lib/stores/app-config-store.d.ts +0 -90
- package/dist/lib/stores/app-config-store.d.ts.map +0 -1
- package/dist/lib/stores/app-config-store.js +0 -491
- package/dist/lib/stores/app-config-store.js.map +0 -1
- package/dist/lib/stores/bridge-config-store.d.ts +0 -44
- package/dist/lib/stores/bridge-config-store.d.ts.map +0 -1
- package/dist/lib/stores/bridge-config-store.js +0 -207
- package/dist/lib/stores/bridge-config-store.js.map +0 -1
- package/dist/lib/stores/chat-config-store.d.ts +0 -28
- package/dist/lib/stores/chat-config-store.d.ts.map +0 -1
- package/dist/lib/stores/chat-config-store.js +0 -152
- package/dist/lib/stores/chat-config-store.js.map +0 -1
- package/dist/lib/stores/data-settings-store.d.ts +0 -44
- package/dist/lib/stores/data-settings-store.d.ts.map +0 -1
- package/dist/lib/stores/data-settings-store.js +0 -202
- package/dist/lib/stores/data-settings-store.js.map +0 -1
- package/dist/lib/stores/email-config-store.d.ts +0 -45
- package/dist/lib/stores/email-config-store.d.ts.map +0 -1
- package/dist/lib/stores/email-config-store.js +0 -185
- package/dist/lib/stores/email-config-store.js.map +0 -1
- package/dist/lib/stores/portal-config-store.d.ts +0 -38
- package/dist/lib/stores/portal-config-store.d.ts.map +0 -1
- package/dist/lib/stores/portal-config-store.js +0 -238
- package/dist/lib/stores/portal-config-store.js.map +0 -1
- package/dist/lib/stores/video-store.d.ts +0 -91
- package/dist/lib/stores/video-store.d.ts.map +0 -1
- package/dist/lib/stores/video-store.js +0 -451
- package/dist/lib/stores/video-store.js.map +0 -1
- package/dist/lib/videos/access-control.d.ts +0 -35
- package/dist/lib/videos/access-control.d.ts.map +0 -1
- package/dist/lib/videos/access-control.js +0 -63
- package/dist/lib/videos/access-control.js.map +0 -1
- package/dist/lib/videos/agent-api-client.d.ts +0 -46
- package/dist/lib/videos/agent-api-client.d.ts.map +0 -1
- package/dist/lib/videos/agent-api-client.js +0 -75
- package/dist/lib/videos/agent-api-client.js.map +0 -1
- package/dist/lib/videos/creation.d.ts +0 -24
- package/dist/lib/videos/creation.d.ts.map +0 -1
- package/dist/lib/videos/creation.js +0 -112
- package/dist/lib/videos/creation.js.map +0 -1
- package/dist/lib/videos/expiration.d.ts +0 -13
- package/dist/lib/videos/expiration.d.ts.map +0 -1
- package/dist/lib/videos/expiration.js +0 -95
- package/dist/lib/videos/expiration.js.map +0 -1
- package/dist/lib/videos/image-resize.d.ts +0 -42
- package/dist/lib/videos/image-resize.d.ts.map +0 -1
- package/dist/lib/videos/image-resize.js +0 -106
- package/dist/lib/videos/image-resize.js.map +0 -1
- package/dist/lib/videos/processing.d.ts +0 -35
- package/dist/lib/videos/processing.d.ts.map +0 -1
- package/dist/lib/videos/processing.js +0 -154
- package/dist/lib/videos/processing.js.map +0 -1
- package/dist/lib/videos/status.d.ts +0 -2
- package/dist/lib/videos/status.d.ts.map +0 -1
- package/dist/lib/videos/status.js +0 -141
- package/dist/lib/videos/status.js.map +0 -1
- package/dist/lib/videos/upload.d.ts +0 -41
- package/dist/lib/videos/upload.d.ts.map +0 -1
- package/dist/lib/videos/upload.js +0 -118
- package/dist/lib/videos/upload.js.map +0 -1
- package/dist/lib/videos/url-normalization.d.ts +0 -29
- package/dist/lib/videos/url-normalization.d.ts.map +0 -1
- package/dist/lib/videos/url-normalization.js +0 -61
- package/dist/lib/videos/url-normalization.js.map +0 -1
- package/dist/sso/index.d.ts +0 -3
- package/dist/sso/index.d.ts.map +0 -1
- package/dist/sso/index.js +0 -3
- package/dist/sso/index.js.map +0 -1
- package/dist/sso/token.d.ts +0 -17
- package/dist/sso/token.d.ts.map +0 -1
- package/dist/sso/token.js +0 -57
- package/dist/sso/token.js.map +0 -1
- package/dist/types/sso.d.ts +0 -37
- package/dist/types/sso.d.ts.map +0 -1
- package/dist/types/sso.js +0 -2
- package/dist/types/sso.js.map +0 -1
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebAuthn / Passkey Utility Functions
|
|
3
|
-
*
|
|
4
|
-
* Implements passkey registration and authentication using the WebAuthn standard.
|
|
5
|
-
* Uses @simplewebauthn/server for server-side operations.
|
|
6
|
-
*
|
|
7
|
-
* NOTE: Passkey storage is now handled by the authz service.
|
|
8
|
-
* This module performs WebAuthn verification locally, then stores results via authz.
|
|
9
|
-
*/
|
|
10
|
-
import type { RegistrationResponseJSON, AuthenticationResponseJSON } from '@simplewebauthn/types';
|
|
11
|
-
import { type Passkey } from '@jazzmind/busibox-app/lib/auth';
|
|
12
|
-
import { type AuthzUser } from '../services/user-management';
|
|
13
|
-
/**
|
|
14
|
-
* Generate registration options for a user to create a new passkey
|
|
15
|
-
* @param userId - User ID
|
|
16
|
-
* @param userEmail - User email
|
|
17
|
-
* @param sessionJwt - Session JWT for authentication with authz service
|
|
18
|
-
*/
|
|
19
|
-
export declare function generatePasskeyRegistrationOptions(userId: string, userEmail: string, sessionJwt: string): Promise<any>;
|
|
20
|
-
/**
|
|
21
|
-
* Verify a registration response and store the new passkey
|
|
22
|
-
* @param userId - User ID
|
|
23
|
-
* @param response - Registration response from WebAuthn
|
|
24
|
-
* @param deviceName - Name for the passkey
|
|
25
|
-
* @param sessionJwt - Session JWT for authentication with authz service
|
|
26
|
-
*/
|
|
27
|
-
export declare function verifyPasskeyRegistration(userId: string, response: RegistrationResponseJSON, deviceName: string, sessionJwt: string): Promise<Passkey>;
|
|
28
|
-
/**
|
|
29
|
-
* Generate authentication options for passkey login
|
|
30
|
-
*
|
|
31
|
-
* Note: We don't look up user by email here because:
|
|
32
|
-
* 1. During login, we don't have an access token yet
|
|
33
|
-
* 2. Modern browsers support "discoverable credentials" which auto-select the right passkey
|
|
34
|
-
* 3. Allowing any passkey is actually the correct UX for passkey authentication
|
|
35
|
-
*/
|
|
36
|
-
export declare function generatePasskeyAuthenticationOptions(_email?: string): Promise<any>;
|
|
37
|
-
/**
|
|
38
|
-
* Verify an authentication response and return the user and session
|
|
39
|
-
*/
|
|
40
|
-
export declare function verifyPasskeyAuthentication(response: AuthenticationResponseJSON): Promise<{
|
|
41
|
-
passkey: Passkey & {
|
|
42
|
-
user_id: string;
|
|
43
|
-
};
|
|
44
|
-
user: AuthzUser;
|
|
45
|
-
session: {
|
|
46
|
-
token: string;
|
|
47
|
-
expires_at: string;
|
|
48
|
-
};
|
|
49
|
-
}>;
|
|
50
|
-
/**
|
|
51
|
-
* Get all passkeys for a user
|
|
52
|
-
* @param userId - User ID
|
|
53
|
-
* @param sessionJwt - Optional session JWT for self-service authentication
|
|
54
|
-
*/
|
|
55
|
-
export declare function getUserPasskeys(userId: string, sessionJwt?: string): Promise<Passkey[]>;
|
|
56
|
-
/**
|
|
57
|
-
* Delete a passkey
|
|
58
|
-
* @param userId - User ID (for ownership verification)
|
|
59
|
-
* @param passkeyId - Passkey ID to delete
|
|
60
|
-
* @param sessionJwt - Optional session JWT for self-service authentication
|
|
61
|
-
*/
|
|
62
|
-
export declare function deletePasskey(userId: string, passkeyId: string, sessionJwt?: string): Promise<Passkey>;
|
|
63
|
-
/**
|
|
64
|
-
* Rename a passkey
|
|
65
|
-
* @param userId - User ID (for ownership verification)
|
|
66
|
-
* @param passkeyId - Passkey ID to rename
|
|
67
|
-
* @param newName - New name for the passkey
|
|
68
|
-
* @param sessionJwt - Optional session JWT for self-service authentication
|
|
69
|
-
*/
|
|
70
|
-
export declare function renamePasskey(userId: string, passkeyId: string, newName: string, sessionJwt?: string): Promise<Passkey>;
|
|
71
|
-
/**
|
|
72
|
-
* Check if user has any passkeys
|
|
73
|
-
* @param userId - User ID
|
|
74
|
-
* @param sessionJwt - Optional session JWT for self-service authentication
|
|
75
|
-
*/
|
|
76
|
-
export declare function userHasPasskeys(userId: string, sessionJwt?: string): Promise<boolean>;
|
|
77
|
-
export declare function cleanupExpiredChallenges(): Promise<any>;
|
|
78
|
-
//# sourceMappingURL=passkey.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../../../src/lib/next/passkey.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAG3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAML,KAAK,OAAO,EACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAmC7D;;;;;GAKG;AACH,wBAAsB,kCAAkC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBA0C7G;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,wBAAwB,EAClC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,oBAkDnB;AAMD;;;;;;;GAOG;AACH,wBAAsB,oCAAoC,CAAC,MAAM,CAAC,EAAE,MAAM,gBAmBzE;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,0BAA0B,GAAG,OAAO,CAAC;IAC/F,OAAO,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD,CAAC,CAuID;AAMD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,sBAMxE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,oBAgBzF;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkC7H;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO3F;AAoBD,wBAAsB,wBAAwB,iBAgB7C"}
|
package/dist/lib/next/passkey.js
DELETED
|
@@ -1,380 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebAuthn / Passkey Utility Functions
|
|
3
|
-
*
|
|
4
|
-
* Implements passkey registration and authentication using the WebAuthn standard.
|
|
5
|
-
* Uses @simplewebauthn/server for server-side operations.
|
|
6
|
-
*
|
|
7
|
-
* NOTE: Passkey storage is now handled by the authz service.
|
|
8
|
-
* This module performs WebAuthn verification locally, then stores results via authz.
|
|
9
|
-
*/
|
|
10
|
-
import { generateRegistrationOptions, verifyRegistrationResponse, generateAuthenticationOptions, verifyAuthenticationResponse, } from '@simplewebauthn/server';
|
|
11
|
-
import { createPasskeyChallenge, registerPasskey as authzRegisterPasskey, listUserPasskeys as authzListUserPasskeys, deletePasskey as authzDeletePasskey, authenticateWithPasskey as authzAuthenticateWithPasskey, } from '@jazzmind/busibox-app/lib/auth';
|
|
12
|
-
import { getAuthzOptions, getAuthzBaseUrl } from './authz-client';
|
|
13
|
-
// RP (Relying Party) configuration
|
|
14
|
-
// APP_URL is a runtime env var (server-side only) - it's NOT prefixed with NEXT_PUBLIC_
|
|
15
|
-
// because we don't want it baked into the client bundle at build time.
|
|
16
|
-
// This ensures the correct domain is used even if the build was done with different env vars.
|
|
17
|
-
const getAppUrl = () => process.env.APP_URL || process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000';
|
|
18
|
-
const getRpId = () => {
|
|
19
|
-
const url = getAppUrl();
|
|
20
|
-
try {
|
|
21
|
-
return new URL(url).hostname;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return 'localhost';
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
const getRpName = () => process.env.APP_NAME || 'Busibox Portal';
|
|
28
|
-
const getOrigin = () => {
|
|
29
|
-
const url = getAppUrl();
|
|
30
|
-
try {
|
|
31
|
-
// WebAuthn origin must be protocol + hostname only (no path)
|
|
32
|
-
const parsed = new URL(url);
|
|
33
|
-
return `${parsed.protocol}//${parsed.hostname}${parsed.port ? ':' + parsed.port : ''}`;
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return 'http://localhost:3000';
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
// ============================================================================
|
|
40
|
-
// Registration (adding a new passkey)
|
|
41
|
-
// ============================================================================
|
|
42
|
-
/**
|
|
43
|
-
* Generate registration options for a user to create a new passkey
|
|
44
|
-
* @param userId - User ID
|
|
45
|
-
* @param userEmail - User email
|
|
46
|
-
* @param sessionJwt - Session JWT for authentication with authz service
|
|
47
|
-
*/
|
|
48
|
-
export async function generatePasskeyRegistrationOptions(userId, userEmail, sessionJwt) {
|
|
49
|
-
// Use session JWT directly for self-service auth (no token exchange needed)
|
|
50
|
-
// The authz passkey endpoints support session JWT for users managing their own passkeys
|
|
51
|
-
const options = {
|
|
52
|
-
authzUrl: getAuthzBaseUrl(),
|
|
53
|
-
accessToken: sessionJwt, // Session JWT works for self-service
|
|
54
|
-
};
|
|
55
|
-
// Get existing passkeys for this user to exclude
|
|
56
|
-
const existingPasskeys = await authzListUserPasskeys(userId, options);
|
|
57
|
-
const excludeCredentials = existingPasskeys.map((passkey) => ({
|
|
58
|
-
id: passkey.credential_id,
|
|
59
|
-
type: 'public-key',
|
|
60
|
-
transports: (passkey.transports || []),
|
|
61
|
-
}));
|
|
62
|
-
const registrationOptions = await generateRegistrationOptions({
|
|
63
|
-
rpName: getRpName(),
|
|
64
|
-
rpID: getRpId(),
|
|
65
|
-
userID: new TextEncoder().encode(userId),
|
|
66
|
-
userName: userEmail,
|
|
67
|
-
userDisplayName: userEmail.split('@')[0],
|
|
68
|
-
// Timeout after 5 minutes
|
|
69
|
-
timeout: 300000,
|
|
70
|
-
// Prefer platform authenticators (Face ID, Touch ID, Windows Hello)
|
|
71
|
-
authenticatorSelection: {
|
|
72
|
-
authenticatorAttachment: 'platform',
|
|
73
|
-
residentKey: 'preferred',
|
|
74
|
-
userVerification: 'preferred',
|
|
75
|
-
},
|
|
76
|
-
// Don't re-register existing authenticators
|
|
77
|
-
excludeCredentials,
|
|
78
|
-
// Request attestation for device info
|
|
79
|
-
attestationType: 'none',
|
|
80
|
-
});
|
|
81
|
-
// Store challenge for verification via authz
|
|
82
|
-
await createPasskeyChallenge('registration', userId, options);
|
|
83
|
-
return registrationOptions;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Verify a registration response and store the new passkey
|
|
87
|
-
* @param userId - User ID
|
|
88
|
-
* @param response - Registration response from WebAuthn
|
|
89
|
-
* @param deviceName - Name for the passkey
|
|
90
|
-
* @param sessionJwt - Session JWT for authentication with authz service
|
|
91
|
-
*/
|
|
92
|
-
export async function verifyPasskeyRegistration(userId, response, deviceName, sessionJwt) {
|
|
93
|
-
// Use session JWT directly for self-service auth (no token exchange needed)
|
|
94
|
-
// The authz passkey endpoints support session JWT for users managing their own passkeys
|
|
95
|
-
const options = {
|
|
96
|
-
authzUrl: getAuthzBaseUrl(),
|
|
97
|
-
accessToken: sessionJwt, // Session JWT works for self-service
|
|
98
|
-
};
|
|
99
|
-
// Get the challenge from authz (we use the user's most recent challenge)
|
|
100
|
-
// Since authz stores challenges separately, we need to fetch it
|
|
101
|
-
// For now, we'll pass the expected challenge from the client
|
|
102
|
-
// This is a simplification - in production, you'd want to fetch the challenge
|
|
103
|
-
// Note: The challenge is in the response's clientDataJSON
|
|
104
|
-
// We need to extract it and verify against what we stored
|
|
105
|
-
const clientDataJSON = JSON.parse(Buffer.from(response.response.clientDataJSON, 'base64').toString());
|
|
106
|
-
const expectedChallenge = clientDataJSON.challenge;
|
|
107
|
-
// Verify the registration response
|
|
108
|
-
const verification = await verifyRegistrationResponse({
|
|
109
|
-
response,
|
|
110
|
-
expectedChallenge,
|
|
111
|
-
expectedOrigin: getOrigin(),
|
|
112
|
-
expectedRPID: getRpId(),
|
|
113
|
-
requireUserVerification: false,
|
|
114
|
-
});
|
|
115
|
-
if (!verification.verified || !verification.registrationInfo) {
|
|
116
|
-
throw new Error('Registration verification failed');
|
|
117
|
-
}
|
|
118
|
-
const { credential, credentialDeviceType, credentialBackedUp } = verification.registrationInfo;
|
|
119
|
-
// Store the new passkey via authz
|
|
120
|
-
const passkey = await authzRegisterPasskey({
|
|
121
|
-
userId,
|
|
122
|
-
credentialId: bufferToBase64Url(credential.id),
|
|
123
|
-
credentialPublicKey: bufferToBase64Url(credential.publicKey),
|
|
124
|
-
counter: credential.counter,
|
|
125
|
-
deviceType: credentialDeviceType,
|
|
126
|
-
backedUp: credentialBackedUp,
|
|
127
|
-
transports: response.response.transports || [],
|
|
128
|
-
aaguid: verification.registrationInfo.aaguid,
|
|
129
|
-
name: deviceName,
|
|
130
|
-
}, options);
|
|
131
|
-
return passkey;
|
|
132
|
-
}
|
|
133
|
-
// ============================================================================
|
|
134
|
-
// Authentication (signing in with a passkey)
|
|
135
|
-
// ============================================================================
|
|
136
|
-
/**
|
|
137
|
-
* Generate authentication options for passkey login
|
|
138
|
-
*
|
|
139
|
-
* Note: We don't look up user by email here because:
|
|
140
|
-
* 1. During login, we don't have an access token yet
|
|
141
|
-
* 2. Modern browsers support "discoverable credentials" which auto-select the right passkey
|
|
142
|
-
* 3. Allowing any passkey is actually the correct UX for passkey authentication
|
|
143
|
-
*/
|
|
144
|
-
export async function generatePasskeyAuthenticationOptions(_email) {
|
|
145
|
-
const options = getAuthzOptions();
|
|
146
|
-
// We don't restrict to specific credentials - the browser will show
|
|
147
|
-
// all available passkeys for this RP (discoverable credentials)
|
|
148
|
-
// This is the correct behavior for passkey authentication
|
|
149
|
-
const authOptions = await generateAuthenticationOptions({
|
|
150
|
-
rpID: getRpId(),
|
|
151
|
-
timeout: 300000,
|
|
152
|
-
userVerification: 'preferred',
|
|
153
|
-
// undefined means allow any passkey (discoverable credential)
|
|
154
|
-
allowCredentials: undefined,
|
|
155
|
-
});
|
|
156
|
-
// Store challenge for verification via authz (userId is null because we don't know the user yet)
|
|
157
|
-
await createPasskeyChallenge('authentication', undefined, options);
|
|
158
|
-
return authOptions;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Verify an authentication response and return the user and session
|
|
162
|
-
*/
|
|
163
|
-
export async function verifyPasskeyAuthentication(response) {
|
|
164
|
-
const options = getAuthzOptions();
|
|
165
|
-
// Extract the challenge from the response first (needed for verification)
|
|
166
|
-
const clientDataJSON = JSON.parse(Buffer.from(response.response.clientDataJSON, 'base64').toString());
|
|
167
|
-
const expectedChallenge = clientDataJSON.challenge;
|
|
168
|
-
// Find the passkey by credential ID via authz
|
|
169
|
-
// The credential ID should match what was stored during registration
|
|
170
|
-
// During registration, we store: bufferToBase64Url(credential.id)
|
|
171
|
-
// During authentication, response.id and response.rawId should both be Base64URL-encoded
|
|
172
|
-
// Use rawId if available, otherwise fall back to id
|
|
173
|
-
const credentialId = response.rawId || response.id;
|
|
174
|
-
if (!credentialId) {
|
|
175
|
-
throw new Error('Missing credential ID in authentication response');
|
|
176
|
-
}
|
|
177
|
-
// Log for debugging
|
|
178
|
-
console.log('[PASSKEY] Authentication response credential IDs:', {
|
|
179
|
-
id: response.id,
|
|
180
|
-
rawId: response.rawId,
|
|
181
|
-
using: credentialId,
|
|
182
|
-
id_length: response.id?.length,
|
|
183
|
-
rawId_length: response.rawId?.length,
|
|
184
|
-
});
|
|
185
|
-
// Get passkey details from authz via HTTP call
|
|
186
|
-
// Zero Trust: This is a public endpoint during authentication - no auth needed
|
|
187
|
-
const authzUrl = getAuthzBaseUrl();
|
|
188
|
-
// Credential ID is already Base64URL-encoded, but we need to URL-encode it for the path
|
|
189
|
-
const encodedCredentialId = encodeURIComponent(credentialId);
|
|
190
|
-
console.log('[PASSKEY] Looking up passkey with credential ID:', credentialId.substring(0, 30) + '...');
|
|
191
|
-
const passkeyResponse = await fetch(`${authzUrl}/auth/passkeys/by-credential/${encodedCredentialId}`);
|
|
192
|
-
if (!passkeyResponse.ok) {
|
|
193
|
-
const errorText = await passkeyResponse.text().catch(() => 'Unknown error');
|
|
194
|
-
console.error(`[PASSKEY] Failed to get passkey by credential ID: ${passkeyResponse.status} - ${errorText}`);
|
|
195
|
-
console.error(`[PASSKEY] Credential ID: ${credentialId.substring(0, 20)}...`);
|
|
196
|
-
throw new Error('Passkey not found');
|
|
197
|
-
}
|
|
198
|
-
const passkeyData = await passkeyResponse.json();
|
|
199
|
-
// Validate that user_id exists in the response
|
|
200
|
-
if (!passkeyData.user_id) {
|
|
201
|
-
console.error('[PASSKEY] Passkey lookup response missing user_id:', passkeyData);
|
|
202
|
-
throw new Error('Passkey lookup returned invalid data: missing user_id');
|
|
203
|
-
}
|
|
204
|
-
const passkey = passkeyData;
|
|
205
|
-
// Log the passkey data for debugging
|
|
206
|
-
console.log('[PASSKEY] Passkey lookup result:', {
|
|
207
|
-
passkey_id: passkey.passkey_id,
|
|
208
|
-
user_id: passkey.user_id,
|
|
209
|
-
user_id_type: typeof passkey.user_id,
|
|
210
|
-
credential_id: passkey.credential_id?.substring(0, 20) + '...',
|
|
211
|
-
});
|
|
212
|
-
// Verify the authentication response
|
|
213
|
-
const verification = await verifyAuthenticationResponse({
|
|
214
|
-
response,
|
|
215
|
-
expectedChallenge,
|
|
216
|
-
expectedOrigin: getOrigin(),
|
|
217
|
-
expectedRPID: getRpId(),
|
|
218
|
-
credential: {
|
|
219
|
-
id: passkey.credential_id,
|
|
220
|
-
publicKey: base64UrlToBuffer(passkey.credential_public_key),
|
|
221
|
-
counter: passkey.counter,
|
|
222
|
-
transports: (passkey.transports || []),
|
|
223
|
-
},
|
|
224
|
-
requireUserVerification: false,
|
|
225
|
-
});
|
|
226
|
-
if (!verification.verified) {
|
|
227
|
-
throw new Error('Authentication verification failed');
|
|
228
|
-
}
|
|
229
|
-
// Authenticate with authz - this updates the counter, creates a session, and returns user info
|
|
230
|
-
// This is a public endpoint - no access token needed (the passkey signature is the proof)
|
|
231
|
-
const authResult = await authzAuthenticateWithPasskey(credentialId, verification.authenticationInfo.newCounter, options);
|
|
232
|
-
if (!authResult) {
|
|
233
|
-
throw new Error('Passkey authentication failed - counter replay or invalid passkey');
|
|
234
|
-
}
|
|
235
|
-
// The authResult already has the user info - no need to call getUser separately
|
|
236
|
-
// Get user ID - authz API may return 'id' or 'user_id' depending on endpoint
|
|
237
|
-
const authUser = authResult.user;
|
|
238
|
-
const resolvedUserId = authUser.id || authUser.user_id;
|
|
239
|
-
if (!resolvedUserId) {
|
|
240
|
-
throw new Error('Passkey authentication failed - no user ID in response');
|
|
241
|
-
}
|
|
242
|
-
// Map the roles to include required fields (authz returns minimal role info)
|
|
243
|
-
const user = {
|
|
244
|
-
id: resolvedUserId,
|
|
245
|
-
email: authResult.user.email,
|
|
246
|
-
status: authResult.user.status,
|
|
247
|
-
roles: authResult.user.roles.map(r => ({
|
|
248
|
-
id: r.id,
|
|
249
|
-
name: r.name,
|
|
250
|
-
created_at: '', // Not returned by auth endpoint
|
|
251
|
-
updated_at: '', // Not returned by auth endpoint
|
|
252
|
-
})),
|
|
253
|
-
created_at: '', // Not returned by auth endpoint
|
|
254
|
-
updated_at: '', // Not returned by auth endpoint
|
|
255
|
-
};
|
|
256
|
-
// Extract session info from authResult
|
|
257
|
-
const session = {
|
|
258
|
-
token: authResult.session.token,
|
|
259
|
-
expires_at: authResult.session.expires_at,
|
|
260
|
-
};
|
|
261
|
-
console.log('[PASSKEY] Authentication successful:', {
|
|
262
|
-
user_id: user.id,
|
|
263
|
-
email: user.email,
|
|
264
|
-
roles: user.roles?.map(r => r.name),
|
|
265
|
-
session_token_length: session.token?.length,
|
|
266
|
-
});
|
|
267
|
-
return { passkey, user, session };
|
|
268
|
-
}
|
|
269
|
-
// ============================================================================
|
|
270
|
-
// Passkey Management
|
|
271
|
-
// ============================================================================
|
|
272
|
-
/**
|
|
273
|
-
* Get all passkeys for a user
|
|
274
|
-
* @param userId - User ID
|
|
275
|
-
* @param sessionJwt - Optional session JWT for self-service authentication
|
|
276
|
-
*/
|
|
277
|
-
export async function getUserPasskeys(userId, sessionJwt) {
|
|
278
|
-
const options = {
|
|
279
|
-
...getAuthzOptions(),
|
|
280
|
-
...(sessionJwt && { accessToken: sessionJwt }),
|
|
281
|
-
};
|
|
282
|
-
return authzListUserPasskeys(userId, options);
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Delete a passkey
|
|
286
|
-
* @param userId - User ID (for ownership verification)
|
|
287
|
-
* @param passkeyId - Passkey ID to delete
|
|
288
|
-
* @param sessionJwt - Optional session JWT for self-service authentication
|
|
289
|
-
*/
|
|
290
|
-
export async function deletePasskey(userId, passkeyId, sessionJwt) {
|
|
291
|
-
const options = {
|
|
292
|
-
...getAuthzOptions(),
|
|
293
|
-
...(sessionJwt && { accessToken: sessionJwt }),
|
|
294
|
-
};
|
|
295
|
-
// First verify the passkey belongs to this user
|
|
296
|
-
const passkeys = await authzListUserPasskeys(userId, options);
|
|
297
|
-
const passkey = passkeys.find(p => p.passkey_id === passkeyId);
|
|
298
|
-
if (!passkey) {
|
|
299
|
-
throw new Error('Passkey not found');
|
|
300
|
-
}
|
|
301
|
-
await authzDeletePasskey(passkeyId, options);
|
|
302
|
-
return passkey;
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Rename a passkey
|
|
306
|
-
* @param userId - User ID (for ownership verification)
|
|
307
|
-
* @param passkeyId - Passkey ID to rename
|
|
308
|
-
* @param newName - New name for the passkey
|
|
309
|
-
* @param sessionJwt - Optional session JWT for self-service authentication
|
|
310
|
-
*/
|
|
311
|
-
export async function renamePasskey(userId, passkeyId, newName, sessionJwt) {
|
|
312
|
-
const options = {
|
|
313
|
-
...getAuthzOptions(),
|
|
314
|
-
...(sessionJwt && { accessToken: sessionJwt }),
|
|
315
|
-
};
|
|
316
|
-
// First verify the passkey belongs to this user
|
|
317
|
-
const passkeys = await authzListUserPasskeys(userId, options);
|
|
318
|
-
const passkey = passkeys.find(p => p.passkey_id === passkeyId);
|
|
319
|
-
if (!passkey) {
|
|
320
|
-
throw new Error('Passkey not found');
|
|
321
|
-
}
|
|
322
|
-
// Update the passkey name via authz
|
|
323
|
-
const authzUrl = getAuthzBaseUrl();
|
|
324
|
-
const headers = {
|
|
325
|
-
'Content-Type': 'application/json',
|
|
326
|
-
};
|
|
327
|
-
if (sessionJwt) {
|
|
328
|
-
headers['Authorization'] = `Bearer ${sessionJwt}`;
|
|
329
|
-
}
|
|
330
|
-
const response = await fetch(`${authzUrl}/auth/passkeys/${passkeyId}`, {
|
|
331
|
-
method: 'PATCH',
|
|
332
|
-
headers,
|
|
333
|
-
body: JSON.stringify({ name: newName }),
|
|
334
|
-
});
|
|
335
|
-
if (!response.ok) {
|
|
336
|
-
throw new Error('Failed to rename passkey');
|
|
337
|
-
}
|
|
338
|
-
return response.json();
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Check if user has any passkeys
|
|
342
|
-
* @param userId - User ID
|
|
343
|
-
* @param sessionJwt - Optional session JWT for self-service authentication
|
|
344
|
-
*/
|
|
345
|
-
export async function userHasPasskeys(userId, sessionJwt) {
|
|
346
|
-
const options = {
|
|
347
|
-
...getAuthzOptions(),
|
|
348
|
-
...(sessionJwt && { accessToken: sessionJwt }),
|
|
349
|
-
};
|
|
350
|
-
const passkeys = await authzListUserPasskeys(userId, options);
|
|
351
|
-
return passkeys.length > 0;
|
|
352
|
-
}
|
|
353
|
-
// ============================================================================
|
|
354
|
-
// Utility Functions
|
|
355
|
-
// ============================================================================
|
|
356
|
-
function bufferToBase64Url(input) {
|
|
357
|
-
const buffer = typeof input === 'string' ? base64UrlToBuffer(input) : input;
|
|
358
|
-
return Buffer.from(buffer).toString('base64url');
|
|
359
|
-
}
|
|
360
|
-
function base64UrlToBuffer(base64url) {
|
|
361
|
-
return new Uint8Array(Buffer.from(base64url, 'base64url'));
|
|
362
|
-
}
|
|
363
|
-
// ============================================================================
|
|
364
|
-
// Challenge Cleanup (should be run periodically)
|
|
365
|
-
// ============================================================================
|
|
366
|
-
export async function cleanupExpiredChallenges() {
|
|
367
|
-
const options = getAuthzOptions();
|
|
368
|
-
// Call the authz cleanup endpoint
|
|
369
|
-
// Zero Trust: This is a maintenance endpoint - should be called with service account JWT
|
|
370
|
-
const authzUrl = getAuthzBaseUrl();
|
|
371
|
-
const response = await fetch(`${authzUrl}/auth/cleanup`, {
|
|
372
|
-
method: 'POST',
|
|
373
|
-
});
|
|
374
|
-
if (!response.ok) {
|
|
375
|
-
throw new Error('Failed to cleanup expired challenges');
|
|
376
|
-
}
|
|
377
|
-
const result = await response.json();
|
|
378
|
-
return result.passkeyChallengesDeleted || 0;
|
|
379
|
-
}
|
|
380
|
-
//# sourceMappingURL=passkey.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"passkey.js","sourceRoot":"","sources":["../../../src/lib/next/passkey.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/next/sso.d.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SSO Token Generation (Zero Trust)
|
|
3
|
-
*
|
|
4
|
-
* Uses authz service OAuth2 token exchange (RFC 8693) to generate app-scoped tokens.
|
|
5
|
-
*
|
|
6
|
-
* Flow:
|
|
7
|
-
* 1. User requests access to an app (e.g., busibox-agents)
|
|
8
|
-
* 2. busibox-portal exchanges user's session JWT with authz for an app-scoped token
|
|
9
|
-
* 3. authz verifies user has access to the app via RBAC bindings
|
|
10
|
-
* 4. authz issues RS256 token with app_id claim and user's roles
|
|
11
|
-
* 5. External app validates token via authz JWKS: GET /.well-known/jwks.json
|
|
12
|
-
*
|
|
13
|
-
* Benefits:
|
|
14
|
-
* - Standardized OAuth2 flow (RFC 8693)
|
|
15
|
-
* - Asymmetric signing (RS256) with JWKS
|
|
16
|
-
* - Service-scoped tokens (audience enforcement)
|
|
17
|
-
* - App access controlled via authz RBAC bindings
|
|
18
|
-
* - Centralized audit logging
|
|
19
|
-
* - No client credentials needed - JWT proves identity
|
|
20
|
-
*/
|
|
21
|
-
/**
|
|
22
|
-
* User info for SSO token generation
|
|
23
|
-
*/
|
|
24
|
-
export interface SSOUserInfo {
|
|
25
|
-
id: string;
|
|
26
|
-
email: string;
|
|
27
|
-
roles: string[];
|
|
28
|
-
sessionJwt: string;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Generate an app-scoped access token for a user to access an external app.
|
|
32
|
-
*
|
|
33
|
-
* Zero Trust Flow:
|
|
34
|
-
* 1. Verify app exists and is active in busibox-portal DB
|
|
35
|
-
* 2. Exchange user's session JWT for an app-scoped token via authz
|
|
36
|
-
* 3. Authz verifies user has app access via RBAC bindings
|
|
37
|
-
* 4. Authz issues RS256 token with app_id claim
|
|
38
|
-
*
|
|
39
|
-
* The external app validates this token via authz JWKS endpoint:
|
|
40
|
-
* GET {authz_url}/.well-known/jwks.json
|
|
41
|
-
*
|
|
42
|
-
* @param userInfo - User info including id, email, roles, and sessionJwt
|
|
43
|
-
* @param appIdentifier - App identifier (UUID, stable audience, path, or name)
|
|
44
|
-
* @returns JWT token string and expiration date
|
|
45
|
-
*/
|
|
46
|
-
export declare function generateSSOToken(userInfo: SSOUserInfo, appIdentifier: string): Promise<{
|
|
47
|
-
token: string;
|
|
48
|
-
expiresAt: Date;
|
|
49
|
-
appUrl: string | null;
|
|
50
|
-
}>;
|
|
51
|
-
//# sourceMappingURL=sso.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sso.d.ts","sourceRoot":"","sources":["../../../src/lib/next/sso.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAoBH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAsBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5F,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC,CAoHD"}
|