libre-webui 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -22
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +33 -4
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/middleware/auth.d.ts +7 -0
- package/backend/dist/middleware/auth.d.ts.map +1 -1
- package/backend/dist/middleware/auth.js +26 -0
- package/backend/dist/middleware/auth.js.map +1 -1
- package/backend/dist/middleware/index.d.ts +20 -0
- package/backend/dist/middleware/index.d.ts.map +1 -1
- package/backend/dist/middleware/index.js +105 -2
- package/backend/dist/middleware/index.js.map +1 -1
- package/backend/dist/models/personaModel.d.ts.map +1 -1
- package/backend/dist/models/personaModel.js +2 -0
- package/backend/dist/models/personaModel.js.map +1 -1
- package/backend/dist/observability/otel.d.ts +40 -0
- package/backend/dist/observability/otel.d.ts.map +1 -0
- package/backend/dist/observability/otel.js +337 -0
- package/backend/dist/observability/otel.js.map +1 -0
- package/backend/dist/observability/requestContext.d.ts +14 -0
- package/backend/dist/observability/requestContext.d.ts.map +1 -0
- package/backend/dist/observability/requestContext.js +21 -0
- package/backend/dist/observability/requestContext.js.map +1 -0
- package/backend/dist/persistence/chatGenerationTypes.d.ts +9 -0
- package/backend/dist/persistence/chatGenerationTypes.d.ts.map +1 -1
- package/backend/dist/persistence/extensionTypes.d.ts +13 -0
- package/backend/dist/persistence/extensionTypes.d.ts.map +1 -1
- package/backend/dist/persistence/extensionTypes.js.map +1 -1
- package/backend/dist/persistence/index.d.ts +1 -1
- package/backend/dist/persistence/index.d.ts.map +1 -1
- package/backend/dist/persistence/index.js.map +1 -1
- package/backend/dist/persistence/postgresAgentFoundationMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresAgentFoundationMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresAgentFoundationMigration.js +164 -0
- package/backend/dist/persistence/postgresAgentFoundationMigration.js.map +1 -0
- package/backend/dist/persistence/postgresExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresExtensionRepositories.js +46 -2
- package/backend/dist/persistence/postgresExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.d.ts +10 -0
- package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.js +148 -0
- package/backend/dist/persistence/postgresMediaEnterpriseOpsMigration.js.map +1 -0
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js +107 -0
- package/backend/dist/persistence/postgresMfaPushRecoveryMigration.js.map +1 -0
- package/backend/dist/persistence/postgresMigrationRegistry.d.ts.map +1 -1
- package/backend/dist/persistence/postgresMigrationRegistry.js +12 -0
- package/backend/dist/persistence/postgresMigrationRegistry.js.map +1 -1
- package/backend/dist/persistence/postgresNotesV2Migration.d.ts +4 -0
- package/backend/dist/persistence/postgresNotesV2Migration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresNotesV2Migration.js +57 -0
- package/backend/dist/persistence/postgresNotesV2Migration.js.map +1 -0
- package/backend/dist/persistence/postgresResourceRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresResourceRepositories.js +1930 -133
- package/backend/dist/persistence/postgresResourceRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresSecurityRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/postgresSecurityRepositories.js +150 -0
- package/backend/dist/persistence/postgresSecurityRepositories.js.map +1 -1
- package/backend/dist/persistence/postgresSkillFilesMigration.d.ts +9 -0
- package/backend/dist/persistence/postgresSkillFilesMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresSkillFilesMigration.js +50 -0
- package/backend/dist/persistence/postgresSkillFilesMigration.js.map +1 -0
- package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts +10 -0
- package/backend/dist/persistence/postgresTeamCollaborationMigration.d.ts.map +1 -0
- package/backend/dist/persistence/postgresTeamCollaborationMigration.js +161 -0
- package/backend/dist/persistence/postgresTeamCollaborationMigration.js.map +1 -0
- package/backend/dist/persistence/resourceTypes.d.ts +600 -3
- package/backend/dist/persistence/resourceTypes.d.ts.map +1 -1
- package/backend/dist/persistence/resourceTypes.js.map +1 -1
- package/backend/dist/persistence/securityTypes.d.ts +59 -0
- package/backend/dist/persistence/securityTypes.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteExtensionRepositories.js +26 -4
- package/backend/dist/persistence/sqliteExtensionRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.d.ts +10 -0
- package/backend/dist/persistence/sqliteMigrations.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteMigrations.js +1492 -131
- package/backend/dist/persistence/sqliteMigrations.js.map +1 -1
- package/backend/dist/persistence/sqliteResourceRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteResourceRepositories.js +1657 -134
- package/backend/dist/persistence/sqliteResourceRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteSecurityRepositories.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteSecurityRepositories.js +134 -0
- package/backend/dist/persistence/sqliteSecurityRepositories.js.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.d.ts.map +1 -1
- package/backend/dist/persistence/sqliteToPostgresMigration.js +302 -3
- package/backend/dist/persistence/sqliteToPostgresMigration.js.map +1 -1
- package/backend/dist/platform/jobs/domainJobContracts.d.ts +10 -0
- package/backend/dist/platform/jobs/domainJobContracts.d.ts.map +1 -1
- package/backend/dist/platform/jobs/domainJobContracts.js +10 -0
- package/backend/dist/platform/jobs/domainJobContracts.js.map +1 -1
- package/backend/dist/platform/jobs/domainJobHandlers.d.ts.map +1 -1
- package/backend/dist/platform/jobs/domainJobHandlers.js +374 -4
- package/backend/dist/platform/jobs/domainJobHandlers.js.map +1 -1
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.d.ts.map +1 -1
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.js +4 -2
- package/backend/dist/platform/jobs/embeddedDurableJobWorker.js.map +1 -1
- package/backend/dist/platform/jobs/postgresDurableJobWorker.d.ts.map +1 -1
- package/backend/dist/platform/jobs/postgresDurableJobWorker.js +4 -2
- package/backend/dist/platform/jobs/postgresDurableJobWorker.js.map +1 -1
- package/backend/dist/platform/storage/pgVectorStore.d.ts +2 -1
- package/backend/dist/platform/storage/pgVectorStore.d.ts.map +1 -1
- package/backend/dist/platform/storage/pgVectorStore.js +51 -0
- package/backend/dist/platform/storage/pgVectorStore.js.map +1 -1
- package/backend/dist/platform/storage/platformDomainRepositories.d.ts +8 -2
- package/backend/dist/platform/storage/platformDomainRepositories.d.ts.map +1 -1
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.d.ts.map +1 -1
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js +25 -4
- package/backend/dist/platform/storage/postgresPlatformDomainRepositories.js.map +1 -1
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts +2 -1
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.d.ts.map +1 -1
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js +35 -0
- package/backend/dist/platform/storage/sqliteEncryptedVectorStore.js.map +1 -1
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.d.ts.map +1 -1
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js +26 -3
- package/backend/dist/platform/storage/sqlitePlatformDomainRepositories.js.map +1 -1
- package/backend/dist/platform/storage/vectorStore.d.ts +14 -0
- package/backend/dist/platform/storage/vectorStore.d.ts.map +1 -1
- package/backend/dist/platform/storage/vectorStore.js.map +1 -1
- package/backend/dist/routes/access.d.ts.map +1 -1
- package/backend/dist/routes/access.js +84 -3
- package/backend/dist/routes/access.js.map +1 -1
- package/backend/dist/routes/auth.d.ts.map +1 -1
- package/backend/dist/routes/auth.js +419 -1
- package/backend/dist/routes/auth.js.map +1 -1
- package/backend/dist/routes/calendar.d.ts.map +1 -1
- package/backend/dist/routes/calendar.js +125 -22
- package/backend/dist/routes/calendar.js.map +1 -1
- package/backend/dist/routes/channels.d.ts +3 -0
- package/backend/dist/routes/channels.d.ts.map +1 -0
- package/backend/dist/routes/channels.js +447 -0
- package/backend/dist/routes/channels.js.map +1 -0
- package/backend/dist/routes/chat.d.ts.map +1 -1
- package/backend/dist/routes/chat.js +195 -7
- package/backend/dist/routes/chat.js.map +1 -1
- package/backend/dist/routes/costs.d.ts +3 -0
- package/backend/dist/routes/costs.d.ts.map +1 -0
- package/backend/dist/routes/costs.js +191 -0
- package/backend/dist/routes/costs.js.map +1 -0
- package/backend/dist/routes/documents.d.ts.map +1 -1
- package/backend/dist/routes/documents.js +68 -21
- package/backend/dist/routes/documents.js.map +1 -1
- package/backend/dist/routes/evaluations.d.ts +3 -0
- package/backend/dist/routes/evaluations.d.ts.map +1 -0
- package/backend/dist/routes/evaluations.js +352 -0
- package/backend/dist/routes/evaluations.js.map +1 -0
- package/backend/dist/routes/imageGen.d.ts.map +1 -1
- package/backend/dist/routes/imageGen.js +2 -1
- package/backend/dist/routes/imageGen.js.map +1 -1
- package/backend/dist/routes/media.d.ts.map +1 -1
- package/backend/dist/routes/media.js +228 -7
- package/backend/dist/routes/media.js.map +1 -1
- package/backend/dist/routes/notes.d.ts.map +1 -1
- package/backend/dist/routes/notes.js +149 -36
- package/backend/dist/routes/notes.js.map +1 -1
- package/backend/dist/routes/notifications.d.ts +3 -0
- package/backend/dist/routes/notifications.d.ts.map +1 -0
- package/backend/dist/routes/notifications.js +213 -0
- package/backend/dist/routes/notifications.js.map +1 -0
- package/backend/dist/routes/openaiCompat.d.ts +3 -0
- package/backend/dist/routes/openaiCompat.d.ts.map +1 -0
- package/backend/dist/routes/openaiCompat.js +314 -0
- package/backend/dist/routes/openaiCompat.js.map +1 -0
- package/backend/dist/routes/personas.js +1 -1
- package/backend/dist/routes/personas.js.map +1 -1
- package/backend/dist/routes/prompts.d.ts +3 -0
- package/backend/dist/routes/prompts.d.ts.map +1 -0
- package/backend/dist/routes/prompts.js +173 -0
- package/backend/dist/routes/prompts.js.map +1 -0
- package/backend/dist/routes/push.d.ts +3 -0
- package/backend/dist/routes/push.d.ts.map +1 -0
- package/backend/dist/routes/push.js +105 -0
- package/backend/dist/routes/push.js.map +1 -0
- package/backend/dist/routes/recovery.d.ts +3 -0
- package/backend/dist/routes/recovery.d.ts.map +1 -0
- package/backend/dist/routes/recovery.js +83 -0
- package/backend/dist/routes/recovery.js.map +1 -0
- package/backend/dist/routes/search.d.ts.map +1 -1
- package/backend/dist/routes/search.js +29 -1
- package/backend/dist/routes/search.js.map +1 -1
- package/backend/dist/routes/skills.d.ts +3 -0
- package/backend/dist/routes/skills.d.ts.map +1 -0
- package/backend/dist/routes/skills.js +246 -0
- package/backend/dist/routes/skills.js.map +1 -0
- package/backend/dist/routes/stt.d.ts.map +1 -1
- package/backend/dist/routes/stt.js +2 -1
- package/backend/dist/routes/stt.js.map +1 -1
- package/backend/dist/routes/tools.d.ts +3 -0
- package/backend/dist/routes/tools.d.ts.map +1 -0
- package/backend/dist/routes/tools.js +359 -0
- package/backend/dist/routes/tools.js.map +1 -0
- package/backend/dist/routes/tts.d.ts.map +1 -1
- package/backend/dist/routes/tts.js +63 -8
- package/backend/dist/routes/tts.js.map +1 -1
- package/backend/dist/routes/users.d.ts.map +1 -1
- package/backend/dist/routes/users.js +35 -0
- package/backend/dist/routes/users.js.map +1 -1
- package/backend/dist/routes/voiceAccess.d.ts +3 -0
- package/backend/dist/routes/voiceAccess.d.ts.map +1 -0
- package/backend/dist/routes/voiceAccess.js +102 -0
- package/backend/dist/routes/voiceAccess.js.map +1 -0
- package/backend/dist/services/apiTokenService.d.ts +2 -2
- package/backend/dist/services/apiTokenService.d.ts.map +1 -1
- package/backend/dist/services/apiTokenService.js +7 -0
- package/backend/dist/services/apiTokenService.js.map +1 -1
- package/backend/dist/services/authService.d.ts +6 -0
- package/backend/dist/services/authService.d.ts.map +1 -1
- package/backend/dist/services/authService.js +9 -0
- package/backend/dist/services/authService.js.map +1 -1
- package/backend/dist/services/authorizationService.d.ts +8 -4
- package/backend/dist/services/authorizationService.d.ts.map +1 -1
- package/backend/dist/services/authorizationService.js +31 -1
- package/backend/dist/services/authorizationService.js.map +1 -1
- package/backend/dist/services/automationSchedulerService.d.ts.map +1 -1
- package/backend/dist/services/automationSchedulerService.js +40 -3
- package/backend/dist/services/automationSchedulerService.js.map +1 -1
- package/backend/dist/services/automationService.d.ts +4 -1
- package/backend/dist/services/automationService.d.ts.map +1 -1
- package/backend/dist/services/automationService.js +25 -2
- package/backend/dist/services/automationService.js.map +1 -1
- package/backend/dist/services/builtinToolsService.d.ts +20 -0
- package/backend/dist/services/builtinToolsService.d.ts.map +1 -0
- package/backend/dist/services/builtinToolsService.js +661 -0
- package/backend/dist/services/builtinToolsService.js.map +1 -0
- package/backend/dist/services/calendarService.d.ts +74 -0
- package/backend/dist/services/calendarService.d.ts.map +1 -0
- package/backend/dist/services/calendarService.js +339 -0
- package/backend/dist/services/calendarService.js.map +1 -0
- package/backend/dist/services/channelService.d.ts +195 -0
- package/backend/dist/services/channelService.d.ts.map +1 -0
- package/backend/dist/services/channelService.js +1057 -0
- package/backend/dist/services/channelService.js.map +1 -0
- package/backend/dist/services/chatRequestService.d.ts.map +1 -1
- package/backend/dist/services/chatRequestService.js +29 -1
- package/backend/dist/services/chatRequestService.js.map +1 -1
- package/backend/dist/services/chatService.d.ts +61 -1
- package/backend/dist/services/chatService.d.ts.map +1 -1
- package/backend/dist/services/chatService.js +218 -1
- package/backend/dist/services/chatService.js.map +1 -1
- package/backend/dist/services/chatToolRuntimeService.d.ts +55 -0
- package/backend/dist/services/chatToolRuntimeService.d.ts.map +1 -0
- package/backend/dist/services/chatToolRuntimeService.js +389 -0
- package/backend/dist/services/chatToolRuntimeService.js.map +1 -0
- package/backend/dist/services/costGovernanceService.d.ts +102 -0
- package/backend/dist/services/costGovernanceService.d.ts.map +1 -0
- package/backend/dist/services/costGovernanceService.js +463 -0
- package/backend/dist/services/costGovernanceService.js.map +1 -0
- package/backend/dist/services/dataArchiveService.d.ts +6 -0
- package/backend/dist/services/dataArchiveService.d.ts.map +1 -1
- package/backend/dist/services/dataArchiveService.js +26 -4
- package/backend/dist/services/dataArchiveService.js.map +1 -1
- package/backend/dist/services/documentMediaExtractionService.d.ts +40 -0
- package/backend/dist/services/documentMediaExtractionService.d.ts.map +1 -0
- package/backend/dist/services/documentMediaExtractionService.js +157 -0
- package/backend/dist/services/documentMediaExtractionService.js.map +1 -0
- package/backend/dist/services/documentService.d.ts +64 -1
- package/backend/dist/services/documentService.d.ts.map +1 -1
- package/backend/dist/services/documentService.js +342 -83
- package/backend/dist/services/documentService.js.map +1 -1
- package/backend/dist/services/durableChatGenerationService.d.ts +9 -0
- package/backend/dist/services/durableChatGenerationService.d.ts.map +1 -1
- package/backend/dist/services/durableChatGenerationService.js +152 -11
- package/backend/dist/services/durableChatGenerationService.js.map +1 -1
- package/backend/dist/services/encryptionService.d.ts +6 -0
- package/backend/dist/services/encryptionService.d.ts.map +1 -1
- package/backend/dist/services/encryptionService.js +12 -0
- package/backend/dist/services/encryptionService.js.map +1 -1
- package/backend/dist/services/evaluationService.d.ts +111 -0
- package/backend/dist/services/evaluationService.d.ts.map +1 -0
- package/backend/dist/services/evaluationService.js +403 -0
- package/backend/dist/services/evaluationService.js.map +1 -0
- package/backend/dist/services/galleryService.d.ts +6 -0
- package/backend/dist/services/galleryService.d.ts.map +1 -1
- package/backend/dist/services/galleryService.js +26 -0
- package/backend/dist/services/galleryService.js.map +1 -1
- package/backend/dist/services/mcpClientService.d.ts +29 -0
- package/backend/dist/services/mcpClientService.d.ts.map +1 -0
- package/backend/dist/services/mcpClientService.js +189 -0
- package/backend/dist/services/mcpClientService.js.map +1 -0
- package/backend/dist/services/mfaService.d.ts +64 -0
- package/backend/dist/services/mfaService.d.ts.map +1 -0
- package/backend/dist/services/mfaService.js +263 -0
- package/backend/dist/services/mfaService.js.map +1 -0
- package/backend/dist/services/noteService.d.ts +71 -0
- package/backend/dist/services/noteService.d.ts.map +1 -0
- package/backend/dist/services/noteService.js +397 -0
- package/backend/dist/services/noteService.js.map +1 -0
- package/backend/dist/services/notificationService.d.ts +60 -0
- package/backend/dist/services/notificationService.d.ts.map +1 -0
- package/backend/dist/services/notificationService.js +340 -0
- package/backend/dist/services/notificationService.js.map +1 -0
- package/backend/dist/services/openApiToolService.d.ts +38 -0
- package/backend/dist/services/openApiToolService.d.ts.map +1 -0
- package/backend/dist/services/openApiToolService.js +254 -0
- package/backend/dist/services/openApiToolService.js.map +1 -0
- package/backend/dist/services/personaService.d.ts +18 -2
- package/backend/dist/services/personaService.d.ts.map +1 -1
- package/backend/dist/services/personaService.js +113 -4
- package/backend/dist/services/personaService.js.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.d.ts +19 -0
- package/backend/dist/services/pluginImageGenerationService.d.ts.map +1 -1
- package/backend/dist/services/pluginImageGenerationService.js +121 -0
- package/backend/dist/services/pluginImageGenerationService.js.map +1 -1
- package/backend/dist/services/pluginService.d.ts +7 -0
- package/backend/dist/services/pluginService.d.ts.map +1 -1
- package/backend/dist/services/pluginService.js +8 -2
- package/backend/dist/services/pluginService.js.map +1 -1
- package/backend/dist/services/preferencesService.d.ts +1 -1
- package/backend/dist/services/preferencesService.d.ts.map +1 -1
- package/backend/dist/services/preferencesService.js +1 -0
- package/backend/dist/services/preferencesService.js.map +1 -1
- package/backend/dist/services/promptService.d.ts +74 -0
- package/backend/dist/services/promptService.d.ts.map +1 -0
- package/backend/dist/services/promptService.js +513 -0
- package/backend/dist/services/promptService.js.map +1 -0
- package/backend/dist/services/recoveryDrillService.d.ts +57 -0
- package/backend/dist/services/recoveryDrillService.d.ts.map +1 -0
- package/backend/dist/services/recoveryDrillService.js +363 -0
- package/backend/dist/services/recoveryDrillService.js.map +1 -0
- package/backend/dist/services/resourceGrantService.d.ts.map +1 -1
- package/backend/dist/services/resourceGrantService.js +62 -17
- package/backend/dist/services/resourceGrantService.js.map +1 -1
- package/backend/dist/services/searchService.d.ts +29 -0
- package/backend/dist/services/searchService.d.ts.map +1 -0
- package/backend/dist/services/searchService.js +0 -0
- package/backend/dist/services/searchService.js.map +1 -0
- package/backend/dist/services/securityAuditService.d.ts.map +1 -1
- package/backend/dist/services/securityAuditService.js +2 -1
- package/backend/dist/services/securityAuditService.js.map +1 -1
- package/backend/dist/services/sharedResourceAccess.d.ts +25 -0
- package/backend/dist/services/sharedResourceAccess.d.ts.map +1 -0
- package/backend/dist/services/sharedResourceAccess.js +59 -0
- package/backend/dist/services/sharedResourceAccess.js.map +1 -0
- package/backend/dist/services/skillService.d.ts +137 -0
- package/backend/dist/services/skillService.d.ts.map +1 -0
- package/backend/dist/services/skillService.js +852 -0
- package/backend/dist/services/skillService.js.map +1 -0
- package/backend/dist/services/toolAccessService.d.ts +9 -0
- package/backend/dist/services/toolAccessService.d.ts.map +1 -0
- package/backend/dist/services/toolAccessService.js +60 -0
- package/backend/dist/services/toolAccessService.js.map +1 -0
- package/backend/dist/services/toolApprovalService.d.ts +34 -0
- package/backend/dist/services/toolApprovalService.d.ts.map +1 -0
- package/backend/dist/services/toolApprovalService.js +188 -0
- package/backend/dist/services/toolApprovalService.js.map +1 -0
- package/backend/dist/services/toolGatewayService.d.ts +53 -0
- package/backend/dist/services/toolGatewayService.d.ts.map +1 -0
- package/backend/dist/services/toolGatewayService.js +249 -0
- package/backend/dist/services/toolGatewayService.js.map +1 -0
- package/backend/dist/services/toolServerService.d.ts +57 -0
- package/backend/dist/services/toolServerService.d.ts.map +1 -0
- package/backend/dist/services/toolServerService.js +521 -0
- package/backend/dist/services/toolServerService.js.map +1 -0
- package/backend/dist/services/voiceAccessService.d.ts +10 -0
- package/backend/dist/services/voiceAccessService.d.ts.map +1 -0
- package/backend/dist/services/voiceAccessService.js +74 -0
- package/backend/dist/services/voiceAccessService.js.map +1 -0
- package/backend/dist/services/voiceProfileService.d.ts +20 -0
- package/backend/dist/services/voiceProfileService.d.ts.map +1 -1
- package/backend/dist/services/voiceProfileService.js +60 -0
- package/backend/dist/services/voiceProfileService.js.map +1 -1
- package/backend/dist/services/webPushService.d.ts +71 -0
- package/backend/dist/services/webPushService.d.ts.map +1 -0
- package/backend/dist/services/webPushService.js +328 -0
- package/backend/dist/services/webPushService.js.map +1 -0
- package/backend/dist/services/webauthnService.d.ts +58 -0
- package/backend/dist/services/webauthnService.d.ts.map +1 -0
- package/backend/dist/services/webauthnService.js +300 -0
- package/backend/dist/services/webauthnService.js.map +1 -0
- package/backend/dist/storage.d.ts +28 -1
- package/backend/dist/storage.d.ts.map +1 -1
- package/backend/dist/storage.js +100 -1
- package/backend/dist/storage.js.map +1 -1
- package/backend/dist/storageMappers.d.ts +2 -2
- package/backend/dist/storageMappers.d.ts.map +1 -1
- package/backend/dist/storageMappers.js.map +1 -1
- package/backend/dist/types/index.d.ts +199 -3
- package/backend/dist/types/index.d.ts.map +1 -1
- package/backend/dist/types/index.js.map +1 -1
- package/backend/dist/types/tools.d.ts +137 -0
- package/backend/dist/types/tools.d.ts.map +1 -0
- package/backend/dist/types/tools.js +25 -0
- package/backend/dist/types/tools.js.map +1 -0
- package/backend/dist/utils/chatDocumentContext.d.ts +26 -1
- package/backend/dist/utils/chatDocumentContext.d.ts.map +1 -1
- package/backend/dist/utils/chatDocumentContext.js +87 -18
- package/backend/dist/utils/chatDocumentContext.js.map +1 -1
- package/backend/dist/utils/documentExtraction.d.ts +97 -0
- package/backend/dist/utils/documentExtraction.d.ts.map +1 -0
- package/backend/dist/utils/documentExtraction.js +651 -0
- package/backend/dist/utils/documentExtraction.js.map +1 -0
- package/backend/dist/utils/hybridRetrieval.d.ts +34 -0
- package/backend/dist/utils/hybridRetrieval.d.ts.map +1 -0
- package/backend/dist/utils/hybridRetrieval.js +119 -0
- package/backend/dist/utils/hybridRetrieval.js.map +1 -0
- package/backend/dist/utils/icsCalendar.d.ts +27 -0
- package/backend/dist/utils/icsCalendar.d.ts.map +1 -0
- package/backend/dist/utils/icsCalendar.js +313 -0
- package/backend/dist/utils/icsCalendar.js.map +1 -0
- package/backend/dist/utils/imageEditUpload.d.ts +29 -0
- package/backend/dist/utils/imageEditUpload.d.ts.map +1 -0
- package/backend/dist/utils/imageEditUpload.js +82 -0
- package/backend/dist/utils/imageEditUpload.js.map +1 -0
- package/backend/dist/utils/logRedaction.d.ts +2 -0
- package/backend/dist/utils/logRedaction.d.ts.map +1 -0
- package/backend/dist/utils/logRedaction.js +66 -0
- package/backend/dist/utils/logRedaction.js.map +1 -0
- package/backend/dist/utils/logger.d.ts +3 -0
- package/backend/dist/utils/logger.d.ts.map +1 -1
- package/backend/dist/utils/logger.js +63 -20
- package/backend/dist/utils/logger.js.map +1 -1
- package/backend/dist/utils/pluginChatAdapter.d.ts +5 -1
- package/backend/dist/utils/pluginChatAdapter.d.ts.map +1 -1
- package/backend/dist/utils/pluginChatAdapter.js +83 -0
- package/backend/dist/utils/pluginChatAdapter.js.map +1 -1
- package/backend/dist/utils/pluginDefinitionTrust.js +1 -1
- package/backend/dist/utils/resourceLimits.d.ts +61 -2
- package/backend/dist/utils/resourceLimits.d.ts.map +1 -1
- package/backend/dist/utils/resourceLimits.js +59 -0
- package/backend/dist/utils/resourceLimits.js.map +1 -1
- package/backend/dist/utils/toolEgress.d.ts +23 -0
- package/backend/dist/utils/toolEgress.d.ts.map +1 -0
- package/backend/dist/utils/toolEgress.js +169 -0
- package/backend/dist/utils/toolEgress.js.map +1 -0
- package/backend/dist/utils/totp.d.ts +19 -0
- package/backend/dist/utils/totp.d.ts.map +1 -0
- package/backend/dist/utils/totp.js +117 -0
- package/backend/dist/utils/totp.js.map +1 -0
- package/backend/dist/utils/webauthn.d.ts +43 -0
- package/backend/dist/utils/webauthn.d.ts.map +1 -0
- package/backend/dist/utils/webauthn.js +294 -0
- package/backend/dist/utils/webauthn.js.map +1 -0
- package/backend/dist/utils/websocketMessages.d.ts +6 -0
- package/backend/dist/utils/websocketMessages.d.ts.map +1 -1
- package/backend/dist/utils/websocketMessages.js +8 -0
- package/backend/dist/utils/websocketMessages.js.map +1 -1
- package/backend/dist/utils/zipArchive.d.ts +32 -0
- package/backend/dist/utils/zipArchive.d.ts.map +1 -0
- package/backend/dist/utils/zipArchive.js +171 -0
- package/backend/dist/utils/zipArchive.js.map +1 -0
- package/backend/dist/websocketServer.d.ts.map +1 -1
- package/backend/dist/websocketServer.js +142 -35
- package/backend/dist/websocketServer.js.map +1 -1
- package/backend/package.json +1 -1
- package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
- package/frontend/dist/assets/index-DBAf_VaS.js +47 -0
- package/frontend/dist/assets/index-kn_Axjts.css +1 -0
- package/frontend/dist/fonts/jetbrains-mono-latin-400-normal.woff2 +0 -0
- package/frontend/dist/fonts/jetbrains-mono-latin-700-normal.woff2 +0 -0
- package/frontend/dist/fonts/jetbrains-mono.css +24 -0
- package/frontend/dist/index.html +27 -20
- package/frontend/dist/js/ArtifactContainer-C9zNtCay.js +1 -0
- package/frontend/dist/js/{ArtifactDemoPage-BeNs3gHp.js → ArtifactDemoPage-C-EBFBCt.js} +1 -1
- package/frontend/dist/js/ArtifactSandboxFrame-CTA1j_d1.js +111 -0
- package/frontend/dist/js/ArtifactSlideOutPanel-BOENbOiv.js +1 -0
- package/frontend/dist/js/AutomationsPage-C58MQ4te.js +1 -0
- package/frontend/dist/js/{Button-BPf_pOxH.js → Button-C0r3J9G_.js} +1 -1
- package/frontend/dist/js/CalendarPage-BcdAZ292.js +1 -0
- package/frontend/dist/js/ChannelsPage-DPr9Yajs.js +1 -0
- package/frontend/dist/js/ChatPage-DsbB748s.js +14 -0
- package/frontend/dist/js/EvaluationsPage-FWIJu2fI.js +2 -0
- package/frontend/dist/js/FirstTimeSetup-Cy-w6xko.js +1 -0
- package/frontend/dist/js/GalleryPage-DDAtxM-x.js +1 -0
- package/frontend/dist/js/HomePage-DLKwmE7n.js +1 -0
- package/frontend/dist/js/LibreClawPage-vKOj-9w9.js +1 -0
- package/frontend/dist/js/{ModelManagerModals-DcLGYN3l.js → ModelManagerModals-BY5TK38_.js} +1 -1
- package/frontend/dist/js/ModelSelector-CoCS6MZ9.js +1 -0
- package/frontend/dist/js/NotesPage-BElIpXgA.js +3 -0
- package/frontend/dist/js/OptimizedSyntaxHighlighter-xgyE3dRA.js +1 -0
- package/frontend/dist/js/PersonasPage-P40jVbfU.js +13 -0
- package/frontend/dist/js/PluginUsagePage-CKUEPCJN.js +1 -0
- package/frontend/dist/js/RichMessageContent-Bm2WaEGi.js +3 -0
- package/frontend/dist/js/SettingsModal-DxSGzx9A.js +19 -0
- package/frontend/dist/js/{SettingsToggle-woG_WebF.js → SettingsToggle-BIVyfGjl.js} +1 -1
- package/frontend/dist/js/SystemPage-BT07dTMT.js +1 -0
- package/frontend/dist/js/UserManagementPage-B9Vz5cm3.js +1 -0
- package/frontend/dist/js/WorkPage-qoN_e_jK.js +6 -0
- package/frontend/dist/js/api-D7Ff5M2Q.js +14 -0
- package/frontend/dist/js/appStore-DmV5wqDz.js +2 -0
- package/frontend/dist/js/ar-YHHTVP8f.js +2 -0
- package/frontend/dist/js/artifactHtml-DDmfpcB0.js +41 -0
- package/frontend/dist/js/{authStore-DbMdvNgJ.js → authStore-BYW8-kP6.js} +3 -3
- package/frontend/dist/js/{babel-BsYoxD-7.js → babel-DSqqk5kt.js} +1 -1
- package/frontend/dist/js/bn-C8VTxBVl.js +2 -0
- package/frontend/dist/js/chatStore-D-NTlArO.js +3 -0
- package/frontend/dist/js/{config-DSOYQ9a3.js → config-BqZ5304Q.js} +1 -1
- package/frontend/dist/js/cs-CCngB5fC.js +2 -0
- package/frontend/dist/js/da-CM2PP2ma.js +2 -0
- package/frontend/dist/js/de-BqVkD-dw.js +2 -0
- package/frontend/dist/js/es-BtWsWBjZ.js +2 -0
- package/frontend/dist/js/{estree-BcnBcOAx.js → estree-DPkpBuOU.js} +3 -3
- package/frontend/dist/js/evaluationsApi-Dnf2dTd-.js +1 -0
- package/frontend/dist/js/fr-C68w9abT.js +2 -0
- package/frontend/dist/js/hi-DtBlcyXZ.js +2 -0
- package/frontend/dist/js/{html-DkY55Jys.js → html-BpGUXG8E.js} +2 -2
- package/frontend/dist/js/id-BWzIu8tn.js +2 -0
- package/frontend/dist/js/is-yeFwu4dJ.js +2 -0
- package/frontend/dist/js/it-AxEMG8Jg.js +2 -0
- package/frontend/dist/js/ja-B-VyokB8.js +2 -0
- package/frontend/dist/js/ko-CvwzYr9k.js +2 -0
- package/frontend/dist/js/{markdown-IZSI9DXw.js → markdown-DCBRWJSK.js} +3 -3
- package/frontend/dist/js/markdown-core-BK7WVOb7.js +32 -0
- package/frontend/dist/js/{markdown-math-DK846gXU.js → markdown-math-e1ByS3KY.js} +5 -5
- package/frontend/dist/js/messageCodeStyles-BQwf7sSz.js +2 -0
- package/frontend/dist/js/ms-BhEwb4b7.js +2 -0
- package/frontend/dist/js/nl-Dq-QRx1L.js +2 -0
- package/frontend/dist/js/pl-BNEy8mQm.js +2 -0
- package/frontend/dist/js/{postcss-BJ0okz7n.js → postcss-Bg15EcFE.js} +1 -1
- package/frontend/dist/js/pt-_3Jl3FdY.js +2 -0
- package/frontend/dist/js/{react-vendor-C5yShNlM.js → react-vendor-BG_HPV6X.js} +1 -1
- package/frontend/dist/js/router-vendor-CbexJIsv.js +1 -0
- package/frontend/dist/js/ru-IhQiJ8ta.js +2 -0
- package/frontend/dist/js/{standalone-Csw3jfJ_.js → standalone-BFrK0R2A.js} +3 -3
- package/frontend/dist/js/sv-DWunXUNz.js +2 -0
- package/frontend/dist/js/{syntax-highlight-3EEX6CGL.js → syntax-highlight-P2zo9o06.js} +4 -4
- package/frontend/dist/js/th-DVnW2yyh.js +2 -0
- package/frontend/dist/js/tr-Do8CFmhR.js +2 -0
- package/frontend/dist/js/{typescript-CnF4UVx7.js → typescript-DYVyvmm_.js} +1 -1
- package/frontend/dist/js/ui-db9meqAB.js +2 -0
- package/frontend/dist/js/ui-vendor-C0DZ8-Cm.js +177 -0
- package/frontend/dist/js/uk-BNPKIZga.js +2 -0
- package/frontend/dist/js/{useTranslation-Bho4HCyg.js → useTranslation-5b5UhAc9.js} +1 -1
- package/frontend/dist/js/{utils-D9W1Lnkn.js → utils-BGrdX9ie.js} +1 -1
- package/frontend/dist/js/{utils-vendor-DWh39_3x.js → utils-vendor-9bQ62WeD.js} +1 -1
- package/frontend/dist/js/vi-CZMFo9je.js +2 -0
- package/frontend/dist/js/{workApi-C3uy9EDT.js → workApi-CcprMH_1.js} +3 -3
- package/frontend/dist/js/{yaml-DzT5hBSH.js → yaml-DUeWcOOH.js} +2 -2
- package/frontend/dist/js/zh-Pg0881v0.js +2 -0
- package/frontend/dist/manifest.webmanifest +32 -0
- package/frontend/dist/sw.js +125 -0
- package/package.json +2 -2
- package/plugins/openai.json +52 -9
- package/frontend/dist/assets/index-6o-Hc2wS.js +0 -41
- package/frontend/dist/assets/index-D-pM957b.css +0 -1
- package/frontend/dist/js/ArtifactContainer-CpUi6ekF.js +0 -1
- package/frontend/dist/js/ArtifactSandboxFrame-qsj_Y3LV.js +0 -151
- package/frontend/dist/js/ArtifactSlideOutPanel-CSFRluWA.js +0 -1
- package/frontend/dist/js/AutomationsPage-KUeWoZNv.js +0 -1
- package/frontend/dist/js/CalendarPage-D9I972w8.js +0 -1
- package/frontend/dist/js/ChatPage-CmBx4oAL.js +0 -16
- package/frontend/dist/js/FirstTimeSetup-Df0YJni3.js +0 -1
- package/frontend/dist/js/GalleryPage-bLCrdJN_.js +0 -1
- package/frontend/dist/js/HomePage-Uc6PEg-U.js +0 -1
- package/frontend/dist/js/LibreClawPage-CG63DHg1.js +0 -1
- package/frontend/dist/js/ModelSelector-yxJC64rM.js +0 -1
- package/frontend/dist/js/ModelsPage-1R_TxgmJ.js +0 -2
- package/frontend/dist/js/NotesPage-L65j5HoW.js +0 -1
- package/frontend/dist/js/OptimizedSyntaxHighlighter-Dz7D1LPB.js +0 -1
- package/frontend/dist/js/PersonasPage-CKeBpHIH.js +0 -13
- package/frontend/dist/js/PluginUsagePage-BX1SKMbW.js +0 -1
- package/frontend/dist/js/RichMessageContent-DiySVYGB.js +0 -3
- package/frontend/dist/js/SettingsModal-68SG1uZ2.js +0 -1
- package/frontend/dist/js/SystemPage-CytpZiQV.js +0 -1
- package/frontend/dist/js/UserManagementPage-BzJBvZiS.js +0 -1
- package/frontend/dist/js/WorkPage-C8gr0QJe.js +0 -6
- package/frontend/dist/js/api-BDtqBtqw.js +0 -14
- package/frontend/dist/js/appStore-0JnCUlEq.js +0 -2
- package/frontend/dist/js/ar-CSpi37Gr.js +0 -2
- package/frontend/dist/js/bn-CyH1BeDD.js +0 -2
- package/frontend/dist/js/chatStore-CHQ2uINS.js +0 -3
- package/frontend/dist/js/cs-Cv2NfRK5.js +0 -2
- package/frontend/dist/js/da-D6D6IvPK.js +0 -2
- package/frontend/dist/js/de-BNoJJTrT.js +0 -2
- package/frontend/dist/js/es-kzo9C7q_.js +0 -2
- package/frontend/dist/js/fr-CjHYvJRp.js +0 -2
- package/frontend/dist/js/hi-BU98AdCQ.js +0 -2
- package/frontend/dist/js/id-CpdedejX.js +0 -2
- package/frontend/dist/js/is-Cp5dDWBH.js +0 -2
- package/frontend/dist/js/it-CuH_cK4U.js +0 -2
- package/frontend/dist/js/ja-BWXXXiHn.js +0 -2
- package/frontend/dist/js/ko-DQgv2M1t.js +0 -2
- package/frontend/dist/js/markdown-core-BmPPZiuD.js +0 -31
- package/frontend/dist/js/messageCodeStyles-BFNR9Wv6.js +0 -2
- package/frontend/dist/js/ms-DCcRoIcX.js +0 -2
- package/frontend/dist/js/nl-CbKR1_EU.js +0 -2
- package/frontend/dist/js/pl-CRyJZccn.js +0 -2
- package/frontend/dist/js/pt-BXYmHFGH.js +0 -2
- package/frontend/dist/js/router-vendor-DGFGM3EP.js +0 -1
- package/frontend/dist/js/ru-M9SyZG4b.js +0 -2
- package/frontend/dist/js/sv-DJ486LTU.js +0 -2
- package/frontend/dist/js/th-Ch7gKtZv.js +0 -2
- package/frontend/dist/js/tr-ClehWhSC.js +0 -2
- package/frontend/dist/js/ui-CC-K19wO.js +0 -2
- package/frontend/dist/js/ui-vendor-B1UgO3vd.js +0 -177
- package/frontend/dist/js/uk-BqAd5zHF.js +0 -2
- package/frontend/dist/js/vi-D9gjlDVB.js +0 -2
- package/frontend/dist/js/zh-DKTyHkiR.js +0 -2
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export declare const MAX_NOTES_PER_USER = 100;
|
|
2
|
+
export declare const MAX_NOTE_REVISIONS_PER_NOTE = 50;
|
|
3
|
+
export declare const MAX_NOTE_ATTACHMENTS_PER_NOTE = 10;
|
|
4
|
+
export declare const MAX_NOTE_ATTACHMENT_BYTES: number;
|
|
5
|
+
export declare const MAX_NOTE_ASSIST_INSTRUCTION_LENGTH = 4000;
|
|
6
|
+
export declare const MAX_PROMPT_QUEUE_ENTRIES = 20;
|
|
7
|
+
export declare const MAX_PROMPT_QUEUE_CONTENT_LENGTH = 8000;
|
|
2
8
|
export declare const MAX_NOTE_TITLE_LENGTH = 200;
|
|
3
9
|
export declare const MAX_NOTE_CONTENT_LENGTH = 200000;
|
|
4
10
|
export declare const MAX_SESSION_FOLDERS_PER_USER = 100;
|
|
@@ -10,8 +16,61 @@ export declare const MAX_AUTOMATIONS_PER_USER = 50;
|
|
|
10
16
|
export declare const MAX_AUTOMATION_NAME_LENGTH = 200;
|
|
11
17
|
export declare const MAX_AUTOMATION_INSTRUCTIONS_LENGTH = 20000;
|
|
12
18
|
export declare const MAX_AUTOMATION_TRIGGERS = 5;
|
|
19
|
+
export declare const MAX_TOOL_SERVERS = 50;
|
|
20
|
+
export declare const MAX_TOOL_SERVER_NAME_LENGTH = 120;
|
|
21
|
+
export declare const MAX_TOOL_SERVER_DESCRIPTION_LENGTH = 2000;
|
|
22
|
+
export declare const MAX_TOOL_SERVER_SPEC_BYTES = 1000000;
|
|
23
|
+
export declare const MAX_TOOL_SERVER_TOOLS = 128;
|
|
24
|
+
export declare const MAX_TOOL_SERVER_SECRET_LENGTH = 4096;
|
|
25
|
+
export declare const MAX_PROMPTS_PER_USER = 200;
|
|
26
|
+
export declare const MAX_PROMPT_SLUG_LENGTH = 64;
|
|
27
|
+
export declare const MAX_PROMPT_TITLE_LENGTH = 200;
|
|
28
|
+
export declare const MAX_PROMPT_DESCRIPTION_LENGTH = 2000;
|
|
29
|
+
export declare const MAX_PROMPT_CONTENT_LENGTH = 50000;
|
|
30
|
+
export declare const MAX_PROMPT_VARIABLES = 20;
|
|
31
|
+
export declare const MAX_PROMPT_TAGS = 20;
|
|
32
|
+
export declare const MAX_PROMPT_VERSIONS = 50;
|
|
33
|
+
export declare const MAX_SKILLS_PER_USER = 100;
|
|
34
|
+
export declare const MAX_SKILL_SLUG_LENGTH = 64;
|
|
35
|
+
export declare const MAX_SKILL_NAME_LENGTH = 200;
|
|
36
|
+
export declare const MAX_SKILL_DESCRIPTION_LENGTH = 1000;
|
|
37
|
+
export declare const MAX_SKILL_INSTRUCTIONS_LENGTH = 100000;
|
|
38
|
+
export declare const MAX_SKILL_VERSIONS = 50;
|
|
39
|
+
export declare const MAX_SKILL_FILES = 32;
|
|
40
|
+
export declare const MAX_SKILL_FILE_PATH_LENGTH = 200;
|
|
41
|
+
export declare const MAX_SKILL_FILE_CONTENT_LENGTH = 200000;
|
|
42
|
+
export declare const MAX_SKILL_FILES_TOTAL_BYTES = 1000000;
|
|
43
|
+
export declare const MAX_CHANNELS_PER_USER = 50;
|
|
44
|
+
export declare const MAX_CHANNELS_LISTED = 200;
|
|
45
|
+
export declare const MAX_CHANNEL_NAME_LENGTH = 80;
|
|
46
|
+
export declare const MAX_CHANNEL_DESCRIPTION_LENGTH = 500;
|
|
47
|
+
export declare const MAX_CHANNEL_MEMBERS = 200;
|
|
48
|
+
export declare const MAX_CHANNEL_MESSAGES = 50000;
|
|
49
|
+
export declare const MAX_CHANNEL_MESSAGE_LENGTH = 8000;
|
|
50
|
+
export declare const MAX_CHANNEL_REACTIONS_PER_MESSAGE = 200;
|
|
51
|
+
export declare const MAX_CHANNEL_EMOJI_LENGTH = 16;
|
|
52
|
+
export declare const MAX_CHANNEL_PAGE_SIZE = 100;
|
|
53
|
+
export declare const MAX_CHANNEL_THREAD_PAGE_SIZE = 200;
|
|
54
|
+
export declare const MAX_CHANNEL_PINNED_LISTED = 100;
|
|
55
|
+
export declare const MAX_CHANNEL_ATTACHMENTS_PER_MESSAGE = 5;
|
|
56
|
+
export declare const MAX_CHANNEL_ATTACHMENT_BYTES: number;
|
|
57
|
+
export declare const MAX_CHANNEL_MENTION_CONTEXT_MESSAGES = 30;
|
|
58
|
+
export declare const MAX_NOTIFICATIONS_PER_USER = 500;
|
|
59
|
+
export declare const MAX_NOTIFICATION_TITLE_LENGTH = 200;
|
|
60
|
+
export declare const MAX_NOTIFICATION_BODY_LENGTH = 1000;
|
|
61
|
+
export declare const MAX_NOTIFICATION_PAGE_SIZE = 100;
|
|
62
|
+
export declare const MAX_WEBHOOK_TARGETS = 20;
|
|
63
|
+
export declare const MAX_WEBHOOK_NAME_LENGTH = 120;
|
|
64
|
+
export declare const MAX_WEBHOOK_URL_LENGTH = 2000;
|
|
65
|
+
export declare const MAX_WEBHOOK_SECRET_LENGTH = 256;
|
|
66
|
+
export declare const MAX_CALENDARS_PER_USER = 20;
|
|
67
|
+
export declare const MAX_CALENDAR_NAME_LENGTH = 80;
|
|
68
|
+
export declare const MAX_CALENDAR_COLOR_LENGTH = 24;
|
|
69
|
+
export declare const MAX_CALENDAR_REMINDER_MINUTES: number;
|
|
70
|
+
export declare const MAX_ICS_IMPORT_BYTES = 2000000;
|
|
71
|
+
export declare const MAX_ICS_IMPORT_EVENTS = 1000;
|
|
13
72
|
export declare class ResourcePolicyError extends Error {
|
|
14
|
-
readonly statusCode: 400 | 409;
|
|
15
|
-
constructor(message: string, statusCode: 400 | 409);
|
|
73
|
+
readonly statusCode: 400 | 404 | 409;
|
|
74
|
+
constructor(message: string, statusCode: 400 | 404 | 409);
|
|
16
75
|
}
|
|
17
76
|
//# sourceMappingURL=resourceLimits.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceLimits.d.ts","sourceRoot":"","sources":["../../src/utils/resourceLimits.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,uBAAuB,SAAU,CAAC;AAC/C,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,4BAA4B,OAAO,CAAC;AACjD,eAAO,MAAM,+BAA+B,MAAM,CAAC;AACnD,eAAO,MAAM,+BAA+B,QAAS,CAAC;AACtD,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,kCAAkC,QAAS,CAAC;AACzD,eAAO,MAAM,uBAAuB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"resourceLimits.d.ts","sourceRoot":"","sources":["../../src/utils/resourceLimits.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
export const MAX_NOTES_PER_USER = 100;
|
|
18
|
+
export const MAX_NOTE_REVISIONS_PER_NOTE = 50;
|
|
19
|
+
export const MAX_NOTE_ATTACHMENTS_PER_NOTE = 10;
|
|
20
|
+
export const MAX_NOTE_ATTACHMENT_BYTES = 10 * 1024 * 1024;
|
|
21
|
+
export const MAX_NOTE_ASSIST_INSTRUCTION_LENGTH = 4000;
|
|
22
|
+
export const MAX_PROMPT_QUEUE_ENTRIES = 20;
|
|
23
|
+
export const MAX_PROMPT_QUEUE_CONTENT_LENGTH = 8000;
|
|
18
24
|
export const MAX_NOTE_TITLE_LENGTH = 200;
|
|
19
25
|
export const MAX_NOTE_CONTENT_LENGTH = 200000;
|
|
20
26
|
export const MAX_SESSION_FOLDERS_PER_USER = 100;
|
|
@@ -26,6 +32,59 @@ export const MAX_AUTOMATIONS_PER_USER = 50;
|
|
|
26
32
|
export const MAX_AUTOMATION_NAME_LENGTH = 200;
|
|
27
33
|
export const MAX_AUTOMATION_INSTRUCTIONS_LENGTH = 20000;
|
|
28
34
|
export const MAX_AUTOMATION_TRIGGERS = 5;
|
|
35
|
+
export const MAX_TOOL_SERVERS = 50;
|
|
36
|
+
export const MAX_TOOL_SERVER_NAME_LENGTH = 120;
|
|
37
|
+
export const MAX_TOOL_SERVER_DESCRIPTION_LENGTH = 2000;
|
|
38
|
+
export const MAX_TOOL_SERVER_SPEC_BYTES = 1000000;
|
|
39
|
+
export const MAX_TOOL_SERVER_TOOLS = 128;
|
|
40
|
+
export const MAX_TOOL_SERVER_SECRET_LENGTH = 4096;
|
|
41
|
+
export const MAX_PROMPTS_PER_USER = 200;
|
|
42
|
+
export const MAX_PROMPT_SLUG_LENGTH = 64;
|
|
43
|
+
export const MAX_PROMPT_TITLE_LENGTH = 200;
|
|
44
|
+
export const MAX_PROMPT_DESCRIPTION_LENGTH = 2000;
|
|
45
|
+
export const MAX_PROMPT_CONTENT_LENGTH = 50000;
|
|
46
|
+
export const MAX_PROMPT_VARIABLES = 20;
|
|
47
|
+
export const MAX_PROMPT_TAGS = 20;
|
|
48
|
+
export const MAX_PROMPT_VERSIONS = 50;
|
|
49
|
+
export const MAX_SKILLS_PER_USER = 100;
|
|
50
|
+
export const MAX_SKILL_SLUG_LENGTH = 64;
|
|
51
|
+
export const MAX_SKILL_NAME_LENGTH = 200;
|
|
52
|
+
export const MAX_SKILL_DESCRIPTION_LENGTH = 1000;
|
|
53
|
+
export const MAX_SKILL_INSTRUCTIONS_LENGTH = 100000;
|
|
54
|
+
export const MAX_SKILL_VERSIONS = 50;
|
|
55
|
+
export const MAX_SKILL_FILES = 32;
|
|
56
|
+
export const MAX_SKILL_FILE_PATH_LENGTH = 200;
|
|
57
|
+
export const MAX_SKILL_FILE_CONTENT_LENGTH = 200000;
|
|
58
|
+
export const MAX_SKILL_FILES_TOTAL_BYTES = 1000000;
|
|
59
|
+
export const MAX_CHANNELS_PER_USER = 50;
|
|
60
|
+
export const MAX_CHANNELS_LISTED = 200;
|
|
61
|
+
export const MAX_CHANNEL_NAME_LENGTH = 80;
|
|
62
|
+
export const MAX_CHANNEL_DESCRIPTION_LENGTH = 500;
|
|
63
|
+
export const MAX_CHANNEL_MEMBERS = 200;
|
|
64
|
+
export const MAX_CHANNEL_MESSAGES = 50000;
|
|
65
|
+
export const MAX_CHANNEL_MESSAGE_LENGTH = 8000;
|
|
66
|
+
export const MAX_CHANNEL_REACTIONS_PER_MESSAGE = 200;
|
|
67
|
+
export const MAX_CHANNEL_EMOJI_LENGTH = 16;
|
|
68
|
+
export const MAX_CHANNEL_PAGE_SIZE = 100;
|
|
69
|
+
export const MAX_CHANNEL_THREAD_PAGE_SIZE = 200;
|
|
70
|
+
export const MAX_CHANNEL_PINNED_LISTED = 100;
|
|
71
|
+
export const MAX_CHANNEL_ATTACHMENTS_PER_MESSAGE = 5;
|
|
72
|
+
export const MAX_CHANNEL_ATTACHMENT_BYTES = 10 * 1024 * 1024;
|
|
73
|
+
export const MAX_CHANNEL_MENTION_CONTEXT_MESSAGES = 30;
|
|
74
|
+
export const MAX_NOTIFICATIONS_PER_USER = 500;
|
|
75
|
+
export const MAX_NOTIFICATION_TITLE_LENGTH = 200;
|
|
76
|
+
export const MAX_NOTIFICATION_BODY_LENGTH = 1000;
|
|
77
|
+
export const MAX_NOTIFICATION_PAGE_SIZE = 100;
|
|
78
|
+
export const MAX_WEBHOOK_TARGETS = 20;
|
|
79
|
+
export const MAX_WEBHOOK_NAME_LENGTH = 120;
|
|
80
|
+
export const MAX_WEBHOOK_URL_LENGTH = 2000;
|
|
81
|
+
export const MAX_WEBHOOK_SECRET_LENGTH = 256;
|
|
82
|
+
export const MAX_CALENDARS_PER_USER = 20;
|
|
83
|
+
export const MAX_CALENDAR_NAME_LENGTH = 80;
|
|
84
|
+
export const MAX_CALENDAR_COLOR_LENGTH = 24;
|
|
85
|
+
export const MAX_CALENDAR_REMINDER_MINUTES = 60 * 24 * 14;
|
|
86
|
+
export const MAX_ICS_IMPORT_BYTES = 2000000;
|
|
87
|
+
export const MAX_ICS_IMPORT_EVENTS = 1000;
|
|
29
88
|
export class ResourcePolicyError extends Error {
|
|
30
89
|
constructor(message, statusCode) {
|
|
31
90
|
super(message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceLimits.js","sourceRoot":"","sources":["../../src/utils/resourceLimits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AACzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAO,CAAC;AAC/C,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAChD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAClD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AACnD,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAM,CAAC;AACtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAC3C,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAC9C,MAAM,CAAC,MAAM,kCAAkC,GAAG,KAAM,CAAC;AACzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"resourceLimits.js","sourceRoot":"","sources":["../../src/utils/resourceLimits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare class ToolEgressError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare const isAllowlistedPrivateHost: (hostname: string) => boolean;
|
|
5
|
+
export interface ToolHttpRequest {
|
|
6
|
+
url: string;
|
|
7
|
+
method: string;
|
|
8
|
+
headers?: Record<string, string>;
|
|
9
|
+
/** Request body; binary bodies (Web Push) send as-is. */
|
|
10
|
+
body?: string | Uint8Array;
|
|
11
|
+
timeoutMs: number;
|
|
12
|
+
maxResponseBytes: number;
|
|
13
|
+
signal?: AbortSignal;
|
|
14
|
+
}
|
|
15
|
+
export interface ToolHttpResponse {
|
|
16
|
+
status: number;
|
|
17
|
+
headers: Record<string, string>;
|
|
18
|
+
bodyText: string;
|
|
19
|
+
truncated: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare const validateToolServerUrl: (rawUrl: string) => URL;
|
|
22
|
+
export declare function secureToolRequest(request: ToolHttpRequest): Promise<ToolHttpResponse>;
|
|
23
|
+
//# sourceMappingURL=toolEgress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolEgress.d.ts","sourceRoot":"","sources":["../../src/utils/toolEgress.ts"],"names":[],"mappings":"AAiDA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAUD,eAAO,MAAM,wBAAwB,aAAc,MAAM,KAAG,OACR,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,qBAAqB,WAAY,MAAM,KAAG,GAgBtD,CAAC;AAgCF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAsF3B"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Libre WebUI
|
|
3
|
+
* Copyright (C) 2025 Kroonen AI, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at:
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Egress guard for tool-server requests. Every request resolves the target
|
|
19
|
+
* host itself, refuses private/loopback/metadata address space, and pins the
|
|
20
|
+
* connection to the resolved address so a DNS rebind between check and use
|
|
21
|
+
* cannot redirect the call. Redirects are refused outright: a registered
|
|
22
|
+
* tool destination is exact. Response reads are size-capped and every call
|
|
23
|
+
* carries a hard timeout combined with the caller's abort signal.
|
|
24
|
+
*
|
|
25
|
+
* An administrator can allow exact internal hostnames through the
|
|
26
|
+
* TOOLS_PRIVATE_NETWORK_ALLOWLIST environment variable (comma-separated,
|
|
27
|
+
* matched case-insensitively against the URL hostname). Allowlisted hosts
|
|
28
|
+
* are still connection-pinned and capped.
|
|
29
|
+
*/
|
|
30
|
+
import { lookup } from 'node:dns/promises';
|
|
31
|
+
import { isIP } from 'node:net';
|
|
32
|
+
import { Agent, fetch } from 'undici';
|
|
33
|
+
import { createPinnedLookup, isPublicIpAddress } from './webpageFetcher.js';
|
|
34
|
+
const ABSOLUTE_MAX_RESPONSE_BYTES = 4 * 1024 * 1024;
|
|
35
|
+
const ABSOLUTE_MAX_TIMEOUT_MS = 120000;
|
|
36
|
+
// Explicit comparisons, not Math.min/Math.max: a NaN request value must land
|
|
37
|
+
// on the ceiling instead of propagating, and the bounds stay visible to
|
|
38
|
+
// static analysis of the setTimeout below.
|
|
39
|
+
const clampFinite = (value, min, max) => {
|
|
40
|
+
if (!Number.isFinite(value))
|
|
41
|
+
return max;
|
|
42
|
+
if (value < min)
|
|
43
|
+
return min;
|
|
44
|
+
if (value > max)
|
|
45
|
+
return max;
|
|
46
|
+
return value;
|
|
47
|
+
};
|
|
48
|
+
export class ToolEgressError extends Error {
|
|
49
|
+
constructor(message) {
|
|
50
|
+
super(message);
|
|
51
|
+
this.name = 'ToolEgressError';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const privateHostAllowlist = () => new Set((process.env.TOOLS_PRIVATE_NETWORK_ALLOWLIST ?? '')
|
|
55
|
+
.split(',')
|
|
56
|
+
.map(entry => entry.trim().toLowerCase())
|
|
57
|
+
.filter(Boolean));
|
|
58
|
+
export const isAllowlistedPrivateHost = (hostname) => privateHostAllowlist().has(hostname.toLowerCase());
|
|
59
|
+
export const validateToolServerUrl = (rawUrl) => {
|
|
60
|
+
let url;
|
|
61
|
+
try {
|
|
62
|
+
url = new URL(rawUrl);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
throw new ToolEgressError('Invalid tool server URL');
|
|
66
|
+
}
|
|
67
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
68
|
+
throw new ToolEgressError('Only http and https tool servers are supported');
|
|
69
|
+
}
|
|
70
|
+
if (url.username || url.password) {
|
|
71
|
+
throw new ToolEgressError('Tool server URLs cannot contain embedded credentials');
|
|
72
|
+
}
|
|
73
|
+
return url;
|
|
74
|
+
};
|
|
75
|
+
const resolveTarget = async (url) => {
|
|
76
|
+
const hostname = url.hostname.replace(/^\[|\]$/g, '');
|
|
77
|
+
const literalKind = isIP(hostname);
|
|
78
|
+
const resolved = literalKind !== 0
|
|
79
|
+
? [{ address: hostname, family: literalKind }]
|
|
80
|
+
: await lookup(hostname, { all: true });
|
|
81
|
+
if (resolved.length === 0) {
|
|
82
|
+
throw new ToolEgressError('Tool server host could not be resolved');
|
|
83
|
+
}
|
|
84
|
+
const allowPrivate = isAllowlistedPrivateHost(url.hostname);
|
|
85
|
+
for (const { address } of resolved) {
|
|
86
|
+
if (!allowPrivate && !isPublicIpAddress(address)) {
|
|
87
|
+
throw new ToolEgressError('Tool server resolves to a private or local address');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const [first] = resolved;
|
|
91
|
+
if (first.family !== 4 && first.family !== 6) {
|
|
92
|
+
throw new ToolEgressError('Unsupported address family');
|
|
93
|
+
}
|
|
94
|
+
return { address: first.address, family: first.family };
|
|
95
|
+
};
|
|
96
|
+
export async function secureToolRequest(request) {
|
|
97
|
+
const url = validateToolServerUrl(request.url);
|
|
98
|
+
const target = await resolveTarget(url);
|
|
99
|
+
const maxBytes = clampFinite(request.maxResponseBytes, 1, ABSOLUTE_MAX_RESPONSE_BYTES);
|
|
100
|
+
const timeoutMs = clampFinite(request.timeoutMs, 1000, ABSOLUTE_MAX_TIMEOUT_MS);
|
|
101
|
+
// The size cap is enforced by the read loop below, which stops at maxBytes
|
|
102
|
+
// and cancels the stream. A dispatcher-level maxResponseSize cannot do the
|
|
103
|
+
// job here: it destroys the request as soon as the limit is crossed, so an
|
|
104
|
+
// oversized body would surface as a transport failure instead of the
|
|
105
|
+
// truncated result the caller is documented to receive.
|
|
106
|
+
const dispatcher = new Agent({
|
|
107
|
+
connect: { lookup: createPinnedLookup(target) },
|
|
108
|
+
});
|
|
109
|
+
const controller = new AbortController();
|
|
110
|
+
const timer = setTimeout(() => controller.abort(new ToolEgressError('Tool request timed out')), timeoutMs);
|
|
111
|
+
const forwardAbort = () => controller.abort(request.signal?.reason);
|
|
112
|
+
request.signal?.addEventListener('abort', forwardAbort, { once: true });
|
|
113
|
+
if (request.signal?.aborted)
|
|
114
|
+
forwardAbort();
|
|
115
|
+
try {
|
|
116
|
+
const response = await fetch(url, {
|
|
117
|
+
method: request.method,
|
|
118
|
+
redirect: 'manual',
|
|
119
|
+
signal: controller.signal,
|
|
120
|
+
dispatcher,
|
|
121
|
+
headers: {
|
|
122
|
+
'User-Agent': 'Libre-WebUI/1.0 (+tool gateway)',
|
|
123
|
+
...request.headers,
|
|
124
|
+
},
|
|
125
|
+
...(request.body !== undefined ? { body: request.body } : {}),
|
|
126
|
+
});
|
|
127
|
+
if (response.status >= 300 && response.status < 400) {
|
|
128
|
+
await response.body?.cancel();
|
|
129
|
+
throw new ToolEgressError('Tool server responded with a redirect; registered destinations are exact');
|
|
130
|
+
}
|
|
131
|
+
const reader = response.body?.getReader();
|
|
132
|
+
const chunks = [];
|
|
133
|
+
let received = 0;
|
|
134
|
+
let truncated = false;
|
|
135
|
+
if (reader) {
|
|
136
|
+
for (;;) {
|
|
137
|
+
const { done, value } = await reader.read();
|
|
138
|
+
if (done)
|
|
139
|
+
break;
|
|
140
|
+
received += value.byteLength;
|
|
141
|
+
if (received > maxBytes) {
|
|
142
|
+
truncated = true;
|
|
143
|
+
const keep = value.byteLength - (received - maxBytes);
|
|
144
|
+
if (keep > 0)
|
|
145
|
+
chunks.push(value.subarray(0, keep));
|
|
146
|
+
await reader.cancel();
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
chunks.push(value);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const headers = {};
|
|
153
|
+
response.headers.forEach((value, key) => {
|
|
154
|
+
headers[key] = value;
|
|
155
|
+
});
|
|
156
|
+
return {
|
|
157
|
+
status: response.status,
|
|
158
|
+
headers,
|
|
159
|
+
bodyText: Buffer.concat(chunks).toString('utf-8'),
|
|
160
|
+
truncated,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
clearTimeout(timer);
|
|
165
|
+
request.signal?.removeEventListener('abort', forwardAbort);
|
|
166
|
+
await dispatcher.close();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=toolEgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolEgress.js","sourceRoot":"","sources":["../../src/utils/toolEgress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const TOTP_STEP_SECONDS = 30;
|
|
2
|
+
export declare const TOTP_DIGITS = 6;
|
|
3
|
+
/** Accept the previous/next step to absorb clock skew. */
|
|
4
|
+
export declare const TOTP_SKEW_STEPS = 1;
|
|
5
|
+
export declare const encodeBase32: (bytes: Buffer) => string;
|
|
6
|
+
export declare const decodeBase32: (encoded: string) => Buffer;
|
|
7
|
+
/** Generate a new 160-bit shared secret, base32-encoded for authenticator apps. */
|
|
8
|
+
export declare const generateTotpSecret: () => string;
|
|
9
|
+
/** The otpauth:// provisioning URI understood by authenticator apps. */
|
|
10
|
+
export declare const buildOtpauthUrl: (secret: string, accountName: string, issuer: string) => string;
|
|
11
|
+
export declare const totpCodeForStep: (secret: string, step: number) => string;
|
|
12
|
+
export declare const currentTotpStep: (nowMs?: number) => number;
|
|
13
|
+
/**
|
|
14
|
+
* Verify a submitted code within the skew window. Returns the matched
|
|
15
|
+
* timestep so the caller can persist it and refuse replays; null when the
|
|
16
|
+
* code does not match any step in the window.
|
|
17
|
+
*/
|
|
18
|
+
export declare const verifyTotpCode: (secret: string, submitted: string, nowMs?: number) => number | null;
|
|
19
|
+
//# sourceMappingURL=totp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp.d.ts","sourceRoot":"","sources":["../../src/utils/totp.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,0DAA0D;AAC1D,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,eAAO,MAAM,YAAY,UAAW,MAAM,KAAG,MAgB5C,CAAC;AAEF,eAAO,MAAM,YAAY,YAAa,MAAM,KAAG,MAkB9C,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,QAAO,MAAuC,CAAC;AAE9E,wEAAwE;AACxE,eAAO,MAAM,eAAe,WAClB,MAAM,eACD,MAAM,UACX,MAAM,KACb,MAUF,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,MAAM,QAAQ,MAAM,KAAG,MAY9D,CAAC;AAEF,eAAO,MAAM,eAAe,sBAAyB,MACP,CAAC;AAW/C;;;;GAIG;AACH,eAAO,MAAM,cAAc,WACjB,MAAM,aACH,MAAM,qBAEhB,MAAM,GAAG,IAYX,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Libre WebUI
|
|
3
|
+
* Copyright (C) 2025 Kroonen AI, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at:
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* RFC 6238 TOTP over RFC 4226 HOTP, implemented directly on node:crypto.
|
|
19
|
+
* Authenticator apps expect HMAC-SHA1, 30-second steps, and 6 digits; those
|
|
20
|
+
* are protocol constants here, not options.
|
|
21
|
+
*/
|
|
22
|
+
import { createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
23
|
+
const BASE32_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
|
24
|
+
export const TOTP_STEP_SECONDS = 30;
|
|
25
|
+
export const TOTP_DIGITS = 6;
|
|
26
|
+
/** Accept the previous/next step to absorb clock skew. */
|
|
27
|
+
export const TOTP_SKEW_STEPS = 1;
|
|
28
|
+
export const encodeBase32 = (bytes) => {
|
|
29
|
+
let bits = 0;
|
|
30
|
+
let value = 0;
|
|
31
|
+
let output = '';
|
|
32
|
+
for (const byte of bytes) {
|
|
33
|
+
value = (value << 8) | byte;
|
|
34
|
+
bits += 8;
|
|
35
|
+
while (bits >= 5) {
|
|
36
|
+
output += BASE32_ALPHABET[(value >>> (bits - 5)) & 31];
|
|
37
|
+
bits -= 5;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (bits > 0) {
|
|
41
|
+
output += BASE32_ALPHABET[(value << (5 - bits)) & 31];
|
|
42
|
+
}
|
|
43
|
+
return output;
|
|
44
|
+
};
|
|
45
|
+
export const decodeBase32 = (encoded) => {
|
|
46
|
+
const normalized = encoded.toUpperCase().replace(/[\s=-]/g, '');
|
|
47
|
+
let bits = 0;
|
|
48
|
+
let value = 0;
|
|
49
|
+
const bytes = [];
|
|
50
|
+
for (const character of normalized) {
|
|
51
|
+
const index = BASE32_ALPHABET.indexOf(character);
|
|
52
|
+
if (index === -1) {
|
|
53
|
+
throw new Error('Invalid base32 character');
|
|
54
|
+
}
|
|
55
|
+
value = (value << 5) | index;
|
|
56
|
+
bits += 5;
|
|
57
|
+
if (bits >= 8) {
|
|
58
|
+
bytes.push((value >>> (bits - 8)) & 0xff);
|
|
59
|
+
bits -= 8;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return Buffer.from(bytes);
|
|
63
|
+
};
|
|
64
|
+
/** Generate a new 160-bit shared secret, base32-encoded for authenticator apps. */
|
|
65
|
+
export const generateTotpSecret = () => encodeBase32(randomBytes(20));
|
|
66
|
+
/** The otpauth:// provisioning URI understood by authenticator apps. */
|
|
67
|
+
export const buildOtpauthUrl = (secret, accountName, issuer) => {
|
|
68
|
+
const label = `${encodeURIComponent(issuer)}:${encodeURIComponent(accountName)}`;
|
|
69
|
+
const query = new URLSearchParams({
|
|
70
|
+
secret,
|
|
71
|
+
issuer,
|
|
72
|
+
algorithm: 'SHA1',
|
|
73
|
+
digits: String(TOTP_DIGITS),
|
|
74
|
+
period: String(TOTP_STEP_SECONDS),
|
|
75
|
+
});
|
|
76
|
+
return `otpauth://totp/${label}?${query.toString()}`;
|
|
77
|
+
};
|
|
78
|
+
export const totpCodeForStep = (secret, step) => {
|
|
79
|
+
const key = decodeBase32(secret);
|
|
80
|
+
const counter = Buffer.alloc(8);
|
|
81
|
+
counter.writeBigUInt64BE(BigInt(step));
|
|
82
|
+
const digest = createHmac('sha1', key).update(counter).digest();
|
|
83
|
+
const offset = digest[digest.length - 1] & 0x0f;
|
|
84
|
+
const binary = ((digest[offset] & 0x7f) << 24) |
|
|
85
|
+
(digest[offset + 1] << 16) |
|
|
86
|
+
(digest[offset + 2] << 8) |
|
|
87
|
+
digest[offset + 3];
|
|
88
|
+
return String(binary % 10 ** TOTP_DIGITS).padStart(TOTP_DIGITS, '0');
|
|
89
|
+
};
|
|
90
|
+
export const currentTotpStep = (nowMs = Date.now()) => Math.floor(nowMs / 1000 / TOTP_STEP_SECONDS);
|
|
91
|
+
const codesEqual = (left, right) => {
|
|
92
|
+
const leftBuffer = Buffer.from(left, 'utf8');
|
|
93
|
+
const rightBuffer = Buffer.from(right, 'utf8');
|
|
94
|
+
return (leftBuffer.length === rightBuffer.length &&
|
|
95
|
+
timingSafeEqual(leftBuffer, rightBuffer));
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Verify a submitted code within the skew window. Returns the matched
|
|
99
|
+
* timestep so the caller can persist it and refuse replays; null when the
|
|
100
|
+
* code does not match any step in the window.
|
|
101
|
+
*/
|
|
102
|
+
export const verifyTotpCode = (secret, submitted, nowMs = Date.now()) => {
|
|
103
|
+
const normalized = submitted.replace(/\s/g, '');
|
|
104
|
+
if (!/^\d{6}$/.test(normalized))
|
|
105
|
+
return null;
|
|
106
|
+
const current = currentTotpStep(nowMs);
|
|
107
|
+
for (let offset = -TOTP_SKEW_STEPS; offset <= TOTP_SKEW_STEPS; offset++) {
|
|
108
|
+
const step = current + offset;
|
|
109
|
+
if (step < 0)
|
|
110
|
+
continue;
|
|
111
|
+
if (codesEqual(totpCodeForStep(secret, step), normalized)) {
|
|
112
|
+
return step;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=totp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"totp.js","sourceRoot":"","sources":["../../src/utils/totp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare class WebAuthnError extends Error {
|
|
2
|
+
}
|
|
3
|
+
type CborValue = number | string | Buffer | CborValue[] | Map<number | string, CborValue> | boolean | null;
|
|
4
|
+
/** Decode one CBOR item and report how many bytes it consumed. */
|
|
5
|
+
export declare const decodeCbor: (buffer: Buffer) => {
|
|
6
|
+
value: CborValue;
|
|
7
|
+
bytesRead: number;
|
|
8
|
+
};
|
|
9
|
+
export interface ParsedAuthenticatorData {
|
|
10
|
+
rpIdHash: Buffer;
|
|
11
|
+
userPresent: boolean;
|
|
12
|
+
userVerified: boolean;
|
|
13
|
+
signCount: number;
|
|
14
|
+
credentialId: Buffer | null;
|
|
15
|
+
/** COSE public key map, present only with attested credential data. */
|
|
16
|
+
publicKey: Map<number | string, CborValue> | null;
|
|
17
|
+
}
|
|
18
|
+
export declare const parseAuthenticatorData: (authData: Buffer) => ParsedAuthenticatorData;
|
|
19
|
+
export interface StoredPublicKey {
|
|
20
|
+
/** COSE algorithm: -7 = ES256, -8 = EdDSA (Ed25519). */
|
|
21
|
+
alg: number;
|
|
22
|
+
/** base64url key parameters. */
|
|
23
|
+
x: string;
|
|
24
|
+
y?: string;
|
|
25
|
+
}
|
|
26
|
+
/** Extract the supported key material from a COSE public-key map. */
|
|
27
|
+
export declare const extractPublicKey: (cose: Map<number | string, CborValue>) => StoredPublicKey;
|
|
28
|
+
/** Verify a WebAuthn assertion signature over authData || sha256(clientData). */
|
|
29
|
+
export declare const verifyAssertionSignature: (stored: StoredPublicKey, authData: Buffer, clientDataJson: Buffer, signature: Buffer) => boolean;
|
|
30
|
+
export interface ParsedClientData {
|
|
31
|
+
type: string;
|
|
32
|
+
challenge: string;
|
|
33
|
+
origin: string;
|
|
34
|
+
}
|
|
35
|
+
export declare const parseClientDataJson: (clientDataJson: Buffer) => ParsedClientData;
|
|
36
|
+
/** The registrable-domain rule: the origin's hostname must equal the RP id
|
|
37
|
+
* or be a subdomain of it. */
|
|
38
|
+
export declare const originMatchesRpId: (origin: string, rpId: string) => boolean;
|
|
39
|
+
/** Parse an attestation object far enough to reach authData ('none' policy). */
|
|
40
|
+
export declare const parseAttestationObject: (attestationObject: Buffer) => Buffer;
|
|
41
|
+
export declare const sha256: (input: string | Buffer) => Buffer;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=webauthn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webauthn.d.ts","sourceRoot":"","sources":["../../src/utils/webauthn.ts"],"names":[],"mappings":"AAkCA,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAI3C,KAAK,SAAS,GACV,MAAM,GACN,MAAM,GACN,MAAM,GACN,SAAS,EAAE,GACX,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,GAC/B,OAAO,GACP,IAAI,CAAC;AAyGT,kEAAkE;AAClE,eAAO,MAAM,UAAU,WACb,MAAM,KACb;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAA4B,CAAC;AAIrE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uEAAuE;IACvE,SAAS,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;CACnD;AAED,eAAO,MAAM,sBAAsB,aACvB,MAAM,KACf,uBAuCF,CAAC;AAIF,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,GAAG,EAAE,MAAM,CAAC;IACZ,gCAAgC;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AASD,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,SACrB,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,KACpC,eA6BF,CAAC;AAkBF,iFAAiF;AACjF,eAAO,MAAM,wBAAwB,WAC3B,eAAe,YACb,MAAM,kBACA,MAAM,aACX,MAAM,KAChB,OAmBF,CAAC;AAIF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,mBAAmB,mBACd,MAAM,KACrB,gBAoBF,CAAC;AAEF;8BAC8B;AAC9B,eAAO,MAAM,iBAAiB,WAAY,MAAM,QAAQ,MAAM,KAAG,OAQhE,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,sBAAuB,MAAM,KAAG,MAUlE,CAAC;AAEF,eAAO,MAAM,MAAM,UAAW,MAAM,GAAG,MAAM,KAAG,MACH,CAAC"}
|