@adaptive-ds/project-registry 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +40 -0
- package/dist/access/Actor.d.ts +7 -0
- package/dist/access/Actor.d.ts.map +1 -0
- package/dist/access/Actor.js +2 -0
- package/dist/access/Actor.js.map +1 -0
- package/dist/access/ProjectAccess.d.ts +8 -0
- package/dist/access/ProjectAccess.d.ts.map +1 -0
- package/dist/access/ProjectAccess.js +2 -0
- package/dist/access/ProjectAccess.js.map +1 -0
- package/dist/access/ProjectAccessCreateOptions.d.ts +27 -0
- package/dist/access/ProjectAccessCreateOptions.d.ts.map +1 -0
- package/dist/access/ProjectAccessCreateOptions.js +2 -0
- package/dist/access/ProjectAccessCreateOptions.js.map +1 -0
- package/dist/access/Role.d.ts +2 -0
- package/dist/access/Role.d.ts.map +1 -0
- package/dist/access/Role.js +2 -0
- package/dist/access/Role.js.map +1 -0
- package/dist/access/SuperadminOperation.d.ts +2 -0
- package/dist/access/SuperadminOperation.d.ts.map +1 -0
- package/dist/access/SuperadminOperation.js +2 -0
- package/dist/access/SuperadminOperation.js.map +1 -0
- package/dist/access/projectAccessCreate.d.ts +4 -0
- package/dist/access/projectAccessCreate.d.ts.map +1 -0
- package/dist/access/projectAccessCreate.js +180 -0
- package/dist/access/projectAccessCreate.js.map +1 -0
- package/dist/access/projectAuthorize.d.ts +5 -0
- package/dist/access/projectAuthorize.d.ts.map +1 -0
- package/dist/access/projectAuthorize.js +34 -0
- package/dist/access/projectAuthorize.js.map +1 -0
- package/dist/access/roleResolve.d.ts +4 -0
- package/dist/access/roleResolve.d.ts.map +1 -0
- package/dist/access/roleResolve.js +21 -0
- package/dist/access/roleResolve.js.map +1 -0
- package/dist/access/serviceAuthorize.d.ts +5 -0
- package/dist/access/serviceAuthorize.d.ts.map +1 -0
- package/dist/access/serviceAuthorize.js +10 -0
- package/dist/access/serviceAuthorize.js.map +1 -0
- package/dist/access/superadminAuthorize.d.ts +5 -0
- package/dist/access/superadminAuthorize.d.ts.map +1 -0
- package/dist/access/superadminAuthorize.js +24 -0
- package/dist/access/superadminAuthorize.js.map +1 -0
- package/dist/access/visibleUserList.d.ts +6 -0
- package/dist/access/visibleUserList.d.ts.map +1 -0
- package/dist/access/visibleUserList.js +51 -0
- package/dist/access/visibleUserList.js.map +1 -0
- package/dist/access-log/ProjectAccessLogRecord.d.ts +8 -0
- package/dist/access-log/ProjectAccessLogRecord.d.ts.map +1 -0
- package/dist/access-log/ProjectAccessLogRecord.js +2 -0
- package/dist/access-log/ProjectAccessLogRecord.js.map +1 -0
- package/dist/access-log/ProjectAccessLogSource.d.ts +22 -0
- package/dist/access-log/ProjectAccessLogSource.d.ts.map +1 -0
- package/dist/access-log/ProjectAccessLogSource.js +2 -0
- package/dist/access-log/ProjectAccessLogSource.js.map +1 -0
- package/dist/access-log/projectAccessLogCaddyRetention.d.ts +5 -0
- package/dist/access-log/projectAccessLogCaddyRetention.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogCaddyRetention.js +5 -0
- package/dist/access-log/projectAccessLogCaddyRetention.js.map +1 -0
- package/dist/access-log/projectAccessLogCursor.d.ts +22 -0
- package/dist/access-log/projectAccessLogCursor.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogCursor.js +148 -0
- package/dist/access-log/projectAccessLogCursor.js.map +1 -0
- package/dist/access-log/projectAccessLogId.d.ts +3 -0
- package/dist/access-log/projectAccessLogId.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogId.js +6 -0
- package/dist/access-log/projectAccessLogId.js.map +1 -0
- package/dist/access-log/projectAccessLogListUseCase.d.ts +14 -0
- package/dist/access-log/projectAccessLogListUseCase.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogListUseCase.js +74 -0
- package/dist/access-log/projectAccessLogListUseCase.js.map +1 -0
- package/dist/access-log/projectAccessLogOpenat2.d.ts +12 -0
- package/dist/access-log/projectAccessLogOpenat2.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogOpenat2.js +123 -0
- package/dist/access-log/projectAccessLogOpenat2.js.map +1 -0
- package/dist/access-log/projectAccessLogParser.d.ts +4 -0
- package/dist/access-log/projectAccessLogParser.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogParser.js +88 -0
- package/dist/access-log/projectAccessLogParser.js.map +1 -0
- package/dist/access-log/projectAccessLogPath.d.ts +4 -0
- package/dist/access-log/projectAccessLogPath.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogPath.js +11 -0
- package/dist/access-log/projectAccessLogPath.js.map +1 -0
- package/dist/access-log/projectAccessLogRetentionMaximumActiveProjectIds.d.ts +2 -0
- package/dist/access-log/projectAccessLogRetentionMaximumActiveProjectIds.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogRetentionMaximumActiveProjectIds.js +2 -0
- package/dist/access-log/projectAccessLogRetentionMaximumActiveProjectIds.js.map +1 -0
- package/dist/access-log/projectAccessLogRetentionReconcile.d.ts +19 -0
- package/dist/access-log/projectAccessLogRetentionReconcile.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogRetentionReconcile.js +1365 -0
- package/dist/access-log/projectAccessLogRetentionReconcile.js.map +1 -0
- package/dist/access-log/projectAccessLogRootSchema.d.ts +3 -0
- package/dist/access-log/projectAccessLogRootSchema.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogRootSchema.js +4 -0
- package/dist/access-log/projectAccessLogRootSchema.js.map +1 -0
- package/dist/access-log/projectAccessLogRootValidate.d.ts +3 -0
- package/dist/access-log/projectAccessLogRootValidate.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogRootValidate.js +18 -0
- package/dist/access-log/projectAccessLogRootValidate.js.map +1 -0
- package/dist/access-log/projectAccessLogSourceFileCreate.d.ts +22 -0
- package/dist/access-log/projectAccessLogSourceFileCreate.d.ts.map +1 -0
- package/dist/access-log/projectAccessLogSourceFileCreate.js +871 -0
- package/dist/access-log/projectAccessLogSourceFileCreate.js.map +1 -0
- package/dist/api/projectRegistryApiHandlerCreate.d.ts +18 -0
- package/dist/api/projectRegistryApiHandlerCreate.d.ts.map +1 -0
- package/dist/api/projectRegistryApiHandlerCreate.js +738 -0
- package/dist/api/projectRegistryApiHandlerCreate.js.map +1 -0
- package/dist/caddy/CaddyAdminLoadOptions.d.ts +10 -0
- package/dist/caddy/CaddyAdminLoadOptions.d.ts.map +1 -0
- package/dist/caddy/CaddyAdminLoadOptions.js +2 -0
- package/dist/caddy/CaddyAdminLoadOptions.js.map +1 -0
- package/dist/caddy/CaddyApplication.d.ts +12 -0
- package/dist/caddy/CaddyApplication.d.ts.map +1 -0
- package/dist/caddy/CaddyApplication.js +2 -0
- package/dist/caddy/CaddyApplication.js.map +1 -0
- package/dist/caddy/CaddyApplicationOptions.d.ts +24 -0
- package/dist/caddy/CaddyApplicationOptions.d.ts.map +1 -0
- package/dist/caddy/CaddyApplicationOptions.js +2 -0
- package/dist/caddy/CaddyApplicationOptions.js.map +1 -0
- package/dist/caddy/CaddyApplicationQueue.d.ts +4 -0
- package/dist/caddy/CaddyApplicationQueue.d.ts.map +1 -0
- package/dist/caddy/CaddyApplicationQueue.js +2 -0
- package/dist/caddy/CaddyApplicationQueue.js.map +1 -0
- package/dist/caddy/CaddyApplicationResult.d.ts +8 -0
- package/dist/caddy/CaddyApplicationResult.d.ts.map +1 -0
- package/dist/caddy/CaddyApplicationResult.js +2 -0
- package/dist/caddy/CaddyApplicationResult.js.map +1 -0
- package/dist/caddy/CaddyApplicationStatus.d.ts +11 -0
- package/dist/caddy/CaddyApplicationStatus.d.ts.map +1 -0
- package/dist/caddy/CaddyApplicationStatus.js +2 -0
- package/dist/caddy/CaddyApplicationStatus.js.map +1 -0
- package/dist/caddy/CaddyClock.d.ts +2 -0
- package/dist/caddy/CaddyClock.d.ts.map +1 -0
- package/dist/caddy/CaddyClock.js +2 -0
- package/dist/caddy/CaddyClock.js.map +1 -0
- package/dist/caddy/CaddyConfig.d.ts +38 -0
- package/dist/caddy/CaddyConfig.d.ts.map +1 -0
- package/dist/caddy/CaddyConfig.js +2 -0
- package/dist/caddy/CaddyConfig.js.map +1 -0
- package/dist/caddy/CaddyConfigInspectUseCaseOptions.d.ts +6 -0
- package/dist/caddy/CaddyConfigInspectUseCaseOptions.d.ts.map +1 -0
- package/dist/caddy/CaddyConfigInspectUseCaseOptions.js +2 -0
- package/dist/caddy/CaddyConfigInspectUseCaseOptions.js.map +1 -0
- package/dist/caddy/CaddyConfigInspection.d.ts +10 -0
- package/dist/caddy/CaddyConfigInspection.d.ts.map +1 -0
- package/dist/caddy/CaddyConfigInspection.js +2 -0
- package/dist/caddy/CaddyConfigInspection.js.map +1 -0
- package/dist/caddy/CaddyConfigSummaryEntry.d.ts +9 -0
- package/dist/caddy/CaddyConfigSummaryEntry.d.ts.map +1 -0
- package/dist/caddy/CaddyConfigSummaryEntry.js +2 -0
- package/dist/caddy/CaddyConfigSummaryEntry.js.map +1 -0
- package/dist/caddy/CaddyConfigValidateOptions.d.ts +10 -0
- package/dist/caddy/CaddyConfigValidateOptions.d.ts.map +1 -0
- package/dist/caddy/CaddyConfigValidateOptions.js +2 -0
- package/dist/caddy/CaddyConfigValidateOptions.js.map +1 -0
- package/dist/caddy/CaddyDocsUrlsUseCaseOptions.d.ts +8 -0
- package/dist/caddy/CaddyDocsUrlsUseCaseOptions.d.ts.map +1 -0
- package/dist/caddy/CaddyDocsUrlsUseCaseOptions.js +2 -0
- package/dist/caddy/CaddyDocsUrlsUseCaseOptions.js.map +1 -0
- package/dist/caddy/CaddyFetch.d.ts +2 -0
- package/dist/caddy/CaddyFetch.d.ts.map +1 -0
- package/dist/caddy/CaddyFetch.js +2 -0
- package/dist/caddy/CaddyFetch.js.map +1 -0
- package/dist/caddy/CaddyInspectionOptions.d.ts +10 -0
- package/dist/caddy/CaddyInspectionOptions.d.ts.map +1 -0
- package/dist/caddy/CaddyInspectionOptions.js +2 -0
- package/dist/caddy/CaddyInspectionOptions.js.map +1 -0
- package/dist/caddy/CaddyProcessRunOptions.d.ts +5 -0
- package/dist/caddy/CaddyProcessRunOptions.d.ts.map +1 -0
- package/dist/caddy/CaddyProcessRunOptions.js +2 -0
- package/dist/caddy/CaddyProcessRunOptions.js.map +1 -0
- package/dist/caddy/CaddyProcessRunner.d.ts +8 -0
- package/dist/caddy/CaddyProcessRunner.d.ts.map +1 -0
- package/dist/caddy/CaddyProcessRunner.js +2 -0
- package/dist/caddy/CaddyProcessRunner.js.map +1 -0
- package/dist/caddy/CaddyProjectListAccess.d.ts +7 -0
- package/dist/caddy/CaddyProjectListAccess.d.ts.map +1 -0
- package/dist/caddy/CaddyProjectListAccess.js +2 -0
- package/dist/caddy/CaddyProjectListAccess.js.map +1 -0
- package/dist/caddy/CaddyTimer.d.ts +8 -0
- package/dist/caddy/CaddyTimer.d.ts.map +1 -0
- package/dist/caddy/CaddyTimer.js +2 -0
- package/dist/caddy/CaddyTimer.js.map +1 -0
- package/dist/caddy/caddyAdminLoad.d.ts +6 -0
- package/dist/caddy/caddyAdminLoad.d.ts.map +1 -0
- package/dist/caddy/caddyAdminLoad.js +222 -0
- package/dist/caddy/caddyAdminLoad.js.map +1 -0
- package/dist/caddy/caddyAdminReload.d.ts +3 -0
- package/dist/caddy/caddyAdminReload.d.ts.map +1 -0
- package/dist/caddy/caddyAdminReload.js +5 -0
- package/dist/caddy/caddyAdminReload.js.map +1 -0
- package/dist/caddy/caddyApplicationCreate.d.ts +6 -0
- package/dist/caddy/caddyApplicationCreate.d.ts.map +1 -0
- package/dist/caddy/caddyApplicationCreate.js +776 -0
- package/dist/caddy/caddyApplicationCreate.js.map +1 -0
- package/dist/caddy/caddyApplicationQueueCreate.d.ts +3 -0
- package/dist/caddy/caddyApplicationQueueCreate.d.ts.map +1 -0
- package/dist/caddy/caddyApplicationQueueCreate.js +11 -0
- package/dist/caddy/caddyApplicationQueueCreate.js.map +1 -0
- package/dist/caddy/caddyConfigGenerate.d.ts +4 -0
- package/dist/caddy/caddyConfigGenerate.d.ts.map +1 -0
- package/dist/caddy/caddyConfigGenerate.js +390 -0
- package/dist/caddy/caddyConfigGenerate.js.map +1 -0
- package/dist/caddy/caddyConfigInspect.d.ts +4 -0
- package/dist/caddy/caddyConfigInspect.d.ts.map +1 -0
- package/dist/caddy/caddyConfigInspect.js +61 -0
- package/dist/caddy/caddyConfigInspect.js.map +1 -0
- package/dist/caddy/caddyConfigInspectUseCase.d.ts +5 -0
- package/dist/caddy/caddyConfigInspectUseCase.d.ts.map +1 -0
- package/dist/caddy/caddyConfigInspectUseCase.js +19 -0
- package/dist/caddy/caddyConfigInspectUseCase.js.map +1 -0
- package/dist/caddy/caddyConfigOptionsFromEnv.d.ts +4 -0
- package/dist/caddy/caddyConfigOptionsFromEnv.d.ts.map +1 -0
- package/dist/caddy/caddyConfigOptionsFromEnv.js +44 -0
- package/dist/caddy/caddyConfigOptionsFromEnv.js.map +1 -0
- package/dist/caddy/caddyConfigOptionsSchema.d.ts +47 -0
- package/dist/caddy/caddyConfigOptionsSchema.d.ts.map +1 -0
- package/dist/caddy/caddyConfigOptionsSchema.js +24 -0
- package/dist/caddy/caddyConfigOptionsSchema.js.map +1 -0
- package/dist/caddy/caddyConfigSelect.d.ts +5 -0
- package/dist/caddy/caddyConfigSelect.d.ts.map +1 -0
- package/dist/caddy/caddyConfigSelect.js +128 -0
- package/dist/caddy/caddyConfigSelect.js.map +1 -0
- package/dist/caddy/caddyConfigSerialize.d.ts +3 -0
- package/dist/caddy/caddyConfigSerialize.d.ts.map +1 -0
- package/dist/caddy/caddyConfigSerialize.js +121 -0
- package/dist/caddy/caddyConfigSerialize.js.map +1 -0
- package/dist/caddy/caddyConfigSummary.d.ts +4 -0
- package/dist/caddy/caddyConfigSummary.d.ts.map +1 -0
- package/dist/caddy/caddyConfigSummary.js +47 -0
- package/dist/caddy/caddyConfigSummary.js.map +1 -0
- package/dist/caddy/caddyConfigValidate.d.ts +6 -0
- package/dist/caddy/caddyConfigValidate.d.ts.map +1 -0
- package/dist/caddy/caddyConfigValidate.js +214 -0
- package/dist/caddy/caddyConfigValidate.js.map +1 -0
- package/dist/caddy/caddyDocsTemplate.d.ts +2 -0
- package/dist/caddy/caddyDocsTemplate.d.ts.map +1 -0
- package/dist/caddy/caddyDocsTemplate.js +6 -0
- package/dist/caddy/caddyDocsTemplate.js.map +1 -0
- package/dist/caddy/caddyProcessRun.d.ts +13 -0
- package/dist/caddy/caddyProcessRun.d.ts.map +1 -0
- package/dist/caddy/caddyProcessRun.js +128 -0
- package/dist/caddy/caddyProcessRun.js.map +1 -0
- package/dist/caddy/caddyProcessRunnerAsUser.d.ts +3 -0
- package/dist/caddy/caddyProcessRunnerAsUser.d.ts.map +1 -0
- package/dist/caddy/caddyProcessRunnerAsUser.js +5 -0
- package/dist/caddy/caddyProcessRunnerAsUser.js.map +1 -0
- package/dist/caddy/caddyVisibleProjects.d.ts +5 -0
- package/dist/caddy/caddyVisibleProjects.d.ts.map +1 -0
- package/dist/caddy/caddyVisibleProjects.js +54 -0
- package/dist/caddy/caddyVisibleProjects.js.map +1 -0
- package/dist/caddy/projectDocsUrls.d.ts +6 -0
- package/dist/caddy/projectDocsUrls.d.ts.map +1 -0
- package/dist/caddy/projectDocsUrls.js +47 -0
- package/dist/caddy/projectDocsUrls.js.map +1 -0
- package/dist/caddy/projectDocsUrlsUseCase.d.ts +5 -0
- package/dist/caddy/projectDocsUrlsUseCase.d.ts.map +1 -0
- package/dist/caddy/projectDocsUrlsUseCase.js +38 -0
- package/dist/caddy/projectDocsUrlsUseCase.js.map +1 -0
- package/dist/cli/ProjectRegistryCliCaddyOptions.d.ts +14 -0
- package/dist/cli/ProjectRegistryCliCaddyOptions.d.ts.map +1 -0
- package/dist/cli/ProjectRegistryCliCaddyOptions.js +2 -0
- package/dist/cli/ProjectRegistryCliCaddyOptions.js.map +1 -0
- package/dist/cli/ProjectRegistryCliFetch.d.ts +4 -0
- package/dist/cli/ProjectRegistryCliFetch.d.ts.map +1 -0
- package/dist/cli/ProjectRegistryCliFetch.js +2 -0
- package/dist/cli/ProjectRegistryCliFetch.js.map +1 -0
- package/dist/cli/ProjectRegistryCliInvocation.d.ts +59 -0
- package/dist/cli/ProjectRegistryCliInvocation.d.ts.map +1 -0
- package/dist/cli/ProjectRegistryCliInvocation.js +2 -0
- package/dist/cli/ProjectRegistryCliInvocation.js.map +1 -0
- package/dist/cli/projectNameFromPath.d.ts +8 -0
- package/dist/cli/projectNameFromPath.d.ts.map +1 -0
- package/dist/cli/projectNameFromPath.js +29 -0
- package/dist/cli/projectNameFromPath.js.map +1 -0
- package/dist/cli/projectRegistryCliArgumentsParse.d.ts +4 -0
- package/dist/cli/projectRegistryCliArgumentsParse.d.ts.map +1 -0
- package/dist/cli/projectRegistryCliArgumentsParse.js +386 -0
- package/dist/cli/projectRegistryCliArgumentsParse.js.map +1 -0
- package/dist/cli/projectRegistryCliHelp.d.ts +2 -0
- package/dist/cli/projectRegistryCliHelp.d.ts.map +1 -0
- package/dist/cli/projectRegistryCliHelp.js +38 -0
- package/dist/cli/projectRegistryCliHelp.js.map +1 -0
- package/dist/cli/projectRegistryCliOutputFormat.d.ts +4 -0
- package/dist/cli/projectRegistryCliOutputFormat.d.ts.map +1 -0
- package/dist/cli/projectRegistryCliOutputFormat.js +208 -0
- package/dist/cli/projectRegistryCliOutputFormat.js.map +1 -0
- package/dist/cli/projectRegistryCliRequest.d.ts +9 -0
- package/dist/cli/projectRegistryCliRequest.d.ts.map +1 -0
- package/dist/cli/projectRegistryCliRequest.js +75 -0
- package/dist/cli/projectRegistryCliRequest.js.map +1 -0
- package/dist/cli/projectRegistryCliRun.d.ts +10 -0
- package/dist/cli/projectRegistryCliRun.d.ts.map +1 -0
- package/dist/cli/projectRegistryCliRun.js +200 -0
- package/dist/cli/projectRegistryCliRun.js.map +1 -0
- package/dist/cli/projectRegistryCliSocketResolve.d.ts +3 -0
- package/dist/cli/projectRegistryCliSocketResolve.d.ts.map +1 -0
- package/dist/cli/projectRegistryCliSocketResolve.js +21 -0
- package/dist/cli/projectRegistryCliSocketResolve.js.map +1 -0
- package/dist/cli/projectRegistryCliVersion.d.ts +2 -0
- package/dist/cli/projectRegistryCliVersion.d.ts.map +1 -0
- package/dist/cli/projectRegistryCliVersion.js +2 -0
- package/dist/cli/projectRegistryCliVersion.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -0
- package/dist/daemon.d.ts +3 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +40 -0
- package/dist/daemon.js.map +1 -0
- package/dist/identity/IdentityDirectory.d.ts +8 -0
- package/dist/identity/IdentityDirectory.d.ts.map +1 -0
- package/dist/identity/IdentityDirectory.js +2 -0
- package/dist/identity/IdentityDirectory.js.map +1 -0
- package/dist/identity/IdentityDirectoryUser.d.ts +5 -0
- package/dist/identity/IdentityDirectoryUser.d.ts.map +1 -0
- package/dist/identity/IdentityDirectoryUser.js +2 -0
- package/dist/identity/IdentityDirectoryUser.js.map +1 -0
- package/dist/identity/MappedUser.d.ts +7 -0
- package/dist/identity/MappedUser.d.ts.map +1 -0
- package/dist/identity/MappedUser.js +2 -0
- package/dist/identity/MappedUser.js.map +1 -0
- package/dist/identity/PosixUserDirectory.d.ts +5 -0
- package/dist/identity/PosixUserDirectory.d.ts.map +1 -0
- package/dist/identity/PosixUserDirectory.js +2 -0
- package/dist/identity/PosixUserDirectory.js.map +1 -0
- package/dist/identity/VisibleUser.d.ts +7 -0
- package/dist/identity/VisibleUser.d.ts.map +1 -0
- package/dist/identity/VisibleUser.js +2 -0
- package/dist/identity/VisibleUser.js.map +1 -0
- package/dist/identity/VisibleUserDirectoryListOptions.d.ts +12 -0
- package/dist/identity/VisibleUserDirectoryListOptions.d.ts.map +1 -0
- package/dist/identity/VisibleUserDirectoryListOptions.js +2 -0
- package/dist/identity/VisibleUserDirectoryListOptions.js.map +1 -0
- package/dist/identity/posixUserDirectoryCreate.d.ts +4 -0
- package/dist/identity/posixUserDirectoryCreate.d.ts.map +1 -0
- package/dist/identity/posixUserDirectoryCreate.js +47 -0
- package/dist/identity/posixUserDirectoryCreate.js.map +1 -0
- package/dist/identity/preferredUsernameMap.d.ts +7 -0
- package/dist/identity/preferredUsernameMap.d.ts.map +1 -0
- package/dist/identity/preferredUsernameMap.js +19 -0
- package/dist/identity/preferredUsernameMap.js.map +1 -0
- package/dist/identity/userRoleResolve.d.ts +8 -0
- package/dist/identity/userRoleResolve.d.ts.map +1 -0
- package/dist/identity/userRoleResolve.js +31 -0
- package/dist/identity/userRoleResolve.js.map +1 -0
- package/dist/identity/visibleUserDirectoryList.d.ts +6 -0
- package/dist/identity/visibleUserDirectoryList.d.ts.map +1 -0
- package/dist/identity/visibleUserDirectoryList.js +70 -0
- package/dist/identity/visibleUserDirectoryList.js.map +1 -0
- package/dist/index.d.ts +192 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/project/Project.d.ts +2 -0
- package/dist/project/Project.d.ts.map +1 -0
- package/dist/project/Project.js +2 -0
- package/dist/project/Project.js.map +1 -0
- package/dist/project/ProjectMutationOptions.d.ts +5 -0
- package/dist/project/ProjectMutationOptions.d.ts.map +1 -0
- package/dist/project/ProjectMutationOptions.js +2 -0
- package/dist/project/ProjectMutationOptions.js.map +1 -0
- package/dist/project/ProjectUseCaseOptions.d.ts +9 -0
- package/dist/project/ProjectUseCaseOptions.d.ts.map +1 -0
- package/dist/project/ProjectUseCaseOptions.js +2 -0
- package/dist/project/ProjectUseCaseOptions.js.map +1 -0
- package/dist/project/projectCollisions.d.ts +10 -0
- package/dist/project/projectCollisions.d.ts.map +1 -0
- package/dist/project/projectCollisions.js +67 -0
- package/dist/project/projectCollisions.js.map +1 -0
- package/dist/project/projectCreate.d.ts +6 -0
- package/dist/project/projectCreate.d.ts.map +1 -0
- package/dist/project/projectCreate.js +40 -0
- package/dist/project/projectCreate.js.map +1 -0
- package/dist/project/projectDelete.d.ts +7 -0
- package/dist/project/projectDelete.d.ts.map +1 -0
- package/dist/project/projectDelete.js +24 -0
- package/dist/project/projectDelete.js.map +1 -0
- package/dist/project/projectDomainNormalize.d.ts +2 -0
- package/dist/project/projectDomainNormalize.d.ts.map +1 -0
- package/dist/project/projectDomainNormalize.js +4 -0
- package/dist/project/projectDomainNormalize.js.map +1 -0
- package/dist/project/projectEdit.d.ts +7 -0
- package/dist/project/projectEdit.d.ts.map +1 -0
- package/dist/project/projectEdit.js +85 -0
- package/dist/project/projectEdit.js.map +1 -0
- package/dist/project/projectGet.d.ts +5 -0
- package/dist/project/projectGet.d.ts.map +1 -0
- package/dist/project/projectGet.js +12 -0
- package/dist/project/projectGet.js.map +1 -0
- package/dist/project/projectGetUseCase.d.ts +6 -0
- package/dist/project/projectGetUseCase.d.ts.map +1 -0
- package/dist/project/projectGetUseCase.js +19 -0
- package/dist/project/projectGetUseCase.js.map +1 -0
- package/dist/project/projectHeaderUpSchema.d.ts +3 -0
- package/dist/project/projectHeaderUpSchema.d.ts.map +1 -0
- package/dist/project/projectHeaderUpSchema.js +28 -0
- package/dist/project/projectHeaderUpSchema.js.map +1 -0
- package/dist/project/projectHistory.d.ts +6 -0
- package/dist/project/projectHistory.d.ts.map +1 -0
- package/dist/project/projectHistory.js +11 -0
- package/dist/project/projectHistory.js.map +1 -0
- package/dist/project/projectInputSchema.d.ts +36 -0
- package/dist/project/projectInputSchema.d.ts.map +1 -0
- package/dist/project/projectInputSchema.js +42 -0
- package/dist/project/projectInputSchema.js.map +1 -0
- package/dist/project/projectKey.d.ts +4 -0
- package/dist/project/projectKey.d.ts.map +1 -0
- package/dist/project/projectKey.js +4 -0
- package/dist/project/projectKey.js.map +1 -0
- package/dist/project/projectKeyEqual.d.ts +3 -0
- package/dist/project/projectKeyEqual.d.ts.map +1 -0
- package/dist/project/projectKeyEqual.js +4 -0
- package/dist/project/projectKeyEqual.js.map +1 -0
- package/dist/project/projectList.d.ts +4 -0
- package/dist/project/projectList.d.ts.map +1 -0
- package/dist/project/projectList.js +6 -0
- package/dist/project/projectList.js.map +1 -0
- package/dist/project/projectListUseCase.d.ts +12 -0
- package/dist/project/projectListUseCase.d.ts.map +1 -0
- package/dist/project/projectListUseCase.js +78 -0
- package/dist/project/projectListUseCase.js.map +1 -0
- package/dist/project/projectMutationExpectedRevision.d.ts +4 -0
- package/dist/project/projectMutationExpectedRevision.d.ts.map +1 -0
- package/dist/project/projectMutationExpectedRevision.js +21 -0
- package/dist/project/projectMutationExpectedRevision.js.map +1 -0
- package/dist/project/projectNormalize.d.ts +12 -0
- package/dist/project/projectNormalize.d.ts.map +1 -0
- package/dist/project/projectNormalize.js +174 -0
- package/dist/project/projectNormalize.js.map +1 -0
- package/dist/project/projectOwnerAuthorize.d.ts +5 -0
- package/dist/project/projectOwnerAuthorize.d.ts.map +1 -0
- package/dist/project/projectOwnerAuthorize.js +12 -0
- package/dist/project/projectOwnerAuthorize.js.map +1 -0
- package/dist/project/projectPortCollision.d.ts +4 -0
- package/dist/project/projectPortCollision.d.ts.map +1 -0
- package/dist/project/projectPortCollision.js +12 -0
- package/dist/project/projectPortCollision.js.map +1 -0
- package/dist/project/projectPortNext.d.ts +9 -0
- package/dist/project/projectPortNext.d.ts.map +1 -0
- package/dist/project/projectPortNext.js +32 -0
- package/dist/project/projectPortNext.js.map +1 -0
- package/dist/project/projectRevisionValidate.d.ts +4 -0
- package/dist/project/projectRevisionValidate.d.ts.map +1 -0
- package/dist/project/projectRevisionValidate.js +9 -0
- package/dist/project/projectRevisionValidate.js.map +1 -0
- package/dist/project/projectSchema.d.ts +36 -0
- package/dist/project/projectSchema.d.ts.map +1 -0
- package/dist/project/projectSchema.js +43 -0
- package/dist/project/projectSchema.js.map +1 -0
- package/dist/project/projectSort.d.ts +3 -0
- package/dist/project/projectSort.d.ts.map +1 -0
- package/dist/project/projectSort.js +24 -0
- package/dist/project/projectSort.js.map +1 -0
- package/dist/project/projectValidate.d.ts +10 -0
- package/dist/project/projectValidate.d.ts.map +1 -0
- package/dist/project/projectValidate.js +26 -0
- package/dist/project/projectValidate.js.map +1 -0
- package/dist/project-store/ProjectRepository.d.ts +20 -0
- package/dist/project-store/ProjectRepository.d.ts.map +1 -0
- package/dist/project-store/ProjectRepository.js +2 -0
- package/dist/project-store/ProjectRepository.js.map +1 -0
- package/dist/project-store/ProjectRepositoryEntry.d.ts +7 -0
- package/dist/project-store/ProjectRepositoryEntry.d.ts.map +1 -0
- package/dist/project-store/ProjectRepositoryEntry.js +2 -0
- package/dist/project-store/ProjectRepositoryEntry.js.map +1 -0
- package/dist/project-store/ProjectRepositoryMutation.d.ts +18 -0
- package/dist/project-store/ProjectRepositoryMutation.d.ts.map +1 -0
- package/dist/project-store/ProjectRepositoryMutation.js +2 -0
- package/dist/project-store/ProjectRepositoryMutation.js.map +1 -0
- package/dist/project-store/ProjectRepositoryMutationOptions.d.ts +6 -0
- package/dist/project-store/ProjectRepositoryMutationOptions.d.ts.map +1 -0
- package/dist/project-store/ProjectRepositoryMutationOptions.js +2 -0
- package/dist/project-store/ProjectRepositoryMutationOptions.js.map +1 -0
- package/dist/project-store/ProjectRepositoryOptions.d.ts +8 -0
- package/dist/project-store/ProjectRepositoryOptions.d.ts.map +1 -0
- package/dist/project-store/ProjectRepositoryOptions.js +7 -0
- package/dist/project-store/ProjectRepositoryOptions.js.map +1 -0
- package/dist/project-store/ProjectRepositoryReadiness.d.ts +8 -0
- package/dist/project-store/ProjectRepositoryReadiness.d.ts.map +1 -0
- package/dist/project-store/ProjectRepositoryReadiness.js +2 -0
- package/dist/project-store/ProjectRepositoryReadiness.js.map +1 -0
- package/dist/project-store/ProjectRepositoryRevision.d.ts +2 -0
- package/dist/project-store/ProjectRepositoryRevision.d.ts.map +1 -0
- package/dist/project-store/ProjectRepositoryRevision.js +2 -0
- package/dist/project-store/ProjectRepositoryRevision.js.map +1 -0
- package/dist/project-store/ProjectRepositorySnapshot.d.ts +7 -0
- package/dist/project-store/ProjectRepositorySnapshot.d.ts.map +1 -0
- package/dist/project-store/ProjectRepositorySnapshot.js +2 -0
- package/dist/project-store/ProjectRepositorySnapshot.js.map +1 -0
- package/dist/project-store/projectRepositoryOpen.d.ts +4 -0
- package/dist/project-store/projectRepositoryOpen.d.ts.map +1 -0
- package/dist/project-store/projectRepositoryOpen.js +813 -0
- package/dist/project-store/projectRepositoryOpen.js.map +1 -0
- package/dist/project-store/projectRepositoryOwnerPath.d.ts +3 -0
- package/dist/project-store/projectRepositoryOwnerPath.d.ts.map +1 -0
- package/dist/project-store/projectRepositoryOwnerPath.js +25 -0
- package/dist/project-store/projectRepositoryOwnerPath.js.map +1 -0
- package/dist/project-store/projectRepositoryPath.d.ts +4 -0
- package/dist/project-store/projectRepositoryPath.d.ts.map +1 -0
- package/dist/project-store/projectRepositoryPath.js +21 -0
- package/dist/project-store/projectRepositoryPath.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemon.d.ts +19 -0
- package/dist/runtime/ProjectRegistryDaemon.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemon.js +2 -0
- package/dist/runtime/ProjectRegistryDaemon.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonBrowserAuth.d.ts +14 -0
- package/dist/runtime/ProjectRegistryDaemonBrowserAuth.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonBrowserAuth.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonBrowserAuth.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonConfig.d.ts +38 -0
- package/dist/runtime/ProjectRegistryDaemonConfig.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonConfig.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonConfig.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonFileStat.d.ts +7 -0
- package/dist/runtime/ProjectRegistryDaemonFileStat.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonFileStat.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonFileStat.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonFilesystem.d.ts +13 -0
- package/dist/runtime/ProjectRegistryDaemonFilesystem.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonFilesystem.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonFilesystem.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonHealth.d.ts +6 -0
- package/dist/runtime/ProjectRegistryDaemonHealth.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonHealth.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonHealth.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonMappedUser.d.ts +6 -0
- package/dist/runtime/ProjectRegistryDaemonMappedUser.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonMappedUser.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonMappedUser.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonMappedUsersResolve.d.ts +4 -0
- package/dist/runtime/ProjectRegistryDaemonMappedUsersResolve.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonMappedUsersResolve.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonMappedUsersResolve.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonOptions.d.ts +39 -0
- package/dist/runtime/ProjectRegistryDaemonOptions.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonOptions.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonOptions.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonPosix.d.ts +7 -0
- package/dist/runtime/ProjectRegistryDaemonPosix.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonPosix.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonPosix.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonReadiness.d.ts +11 -0
- package/dist/runtime/ProjectRegistryDaemonReadiness.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonReadiness.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonReadiness.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonRequestContext.d.ts +10 -0
- package/dist/runtime/ProjectRegistryDaemonRequestContext.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonRequestContext.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonRequestContext.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonRequestHandler.d.ts +3 -0
- package/dist/runtime/ProjectRegistryDaemonRequestHandler.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonRequestHandler.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonRequestHandler.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonServer.d.ts +6 -0
- package/dist/runtime/ProjectRegistryDaemonServer.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonServer.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonServer.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonServerFactory.d.ts +4 -0
- package/dist/runtime/ProjectRegistryDaemonServerFactory.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonServerFactory.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonServerFactory.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonServerOptions.d.ts +7 -0
- package/dist/runtime/ProjectRegistryDaemonServerOptions.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonServerOptions.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonServerOptions.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonSignals.d.ts +4 -0
- package/dist/runtime/ProjectRegistryDaemonSignals.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonSignals.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonSignals.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonSocketAccessResolve.d.ts +4 -0
- package/dist/runtime/ProjectRegistryDaemonSocketAccessResolve.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonSocketAccessResolve.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonSocketAccessResolve.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonSocketRefresh.d.ts +7 -0
- package/dist/runtime/ProjectRegistryDaemonSocketRefresh.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonSocketRefresh.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonSocketRefresh.js.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonState.d.ts +2 -0
- package/dist/runtime/ProjectRegistryDaemonState.d.ts.map +1 -0
- package/dist/runtime/ProjectRegistryDaemonState.js +2 -0
- package/dist/runtime/ProjectRegistryDaemonState.js.map +1 -0
- package/dist/runtime/clockNowResolve.d.ts +3 -0
- package/dist/runtime/clockNowResolve.d.ts.map +1 -0
- package/dist/runtime/clockNowResolve.js +18 -0
- package/dist/runtime/clockNowResolve.js.map +1 -0
- package/dist/runtime/projectRegistryDaemonConfigFromEnv.d.ts +4 -0
- package/dist/runtime/projectRegistryDaemonConfigFromEnv.d.ts.map +1 -0
- package/dist/runtime/projectRegistryDaemonConfigFromEnv.js +158 -0
- package/dist/runtime/projectRegistryDaemonConfigFromEnv.js.map +1 -0
- package/dist/runtime/projectRegistryDaemonConfigSchema.d.ts +57 -0
- package/dist/runtime/projectRegistryDaemonConfigSchema.d.ts.map +1 -0
- package/dist/runtime/projectRegistryDaemonConfigSchema.js +79 -0
- package/dist/runtime/projectRegistryDaemonConfigSchema.js.map +1 -0
- package/dist/runtime/projectRegistryDaemonConfigValidate.d.ts +4 -0
- package/dist/runtime/projectRegistryDaemonConfigValidate.d.ts.map +1 -0
- package/dist/runtime/projectRegistryDaemonConfigValidate.js +59 -0
- package/dist/runtime/projectRegistryDaemonConfigValidate.js.map +1 -0
- package/dist/runtime/projectRegistryDaemonCreate.d.ts +5 -0
- package/dist/runtime/projectRegistryDaemonCreate.d.ts.map +1 -0
- package/dist/runtime/projectRegistryDaemonCreate.js +1251 -0
- package/dist/runtime/projectRegistryDaemonCreate.js.map +1 -0
- package/dist/runtime/projectRegistryDaemonFilesystemDefault.d.ts +3 -0
- package/dist/runtime/projectRegistryDaemonFilesystemDefault.d.ts.map +1 -0
- package/dist/runtime/projectRegistryDaemonFilesystemDefault.js +62 -0
- package/dist/runtime/projectRegistryDaemonFilesystemDefault.js.map +1 -0
- package/dist/runtime/projectRegistryDaemonOpen.d.ts +5 -0
- package/dist/runtime/projectRegistryDaemonOpen.d.ts.map +1 -0
- package/dist/runtime/projectRegistryDaemonOpen.js +132 -0
- package/dist/runtime/projectRegistryDaemonOpen.js.map +1 -0
- package/dist/runtime/projectRegistryDaemonPosixDefault.d.ts +3 -0
- package/dist/runtime/projectRegistryDaemonPosixDefault.d.ts.map +1 -0
- package/dist/runtime/projectRegistryDaemonPosixDefault.js +30 -0
- package/dist/runtime/projectRegistryDaemonPosixDefault.js.map +1 -0
- package/dist/runtime/projectRegistryDaemonServerDefault.d.ts +3 -0
- package/dist/runtime/projectRegistryDaemonServerDefault.d.ts.map +1 -0
- package/dist/runtime/projectRegistryDaemonServerDefault.js +20 -0
- package/dist/runtime/projectRegistryDaemonServerDefault.js.map +1 -0
- package/dist/runtime/projectRegistryDaemonSignalsDefault.d.ts +3 -0
- package/dist/runtime/projectRegistryDaemonSignalsDefault.d.ts.map +1 -0
- package/dist/runtime/projectRegistryDaemonSignalsDefault.js +9 -0
- package/dist/runtime/projectRegistryDaemonSignalsDefault.js.map +1 -0
- package/dist/runtime/promiseBoundedRace.d.ts +6 -0
- package/dist/runtime/promiseBoundedRace.d.ts.map +1 -0
- package/dist/runtime/promiseBoundedRace.js +52 -0
- package/dist/runtime/promiseBoundedRace.js.map +1 -0
- package/dist/runtime/randomBytesResultResolve.d.ts +3 -0
- package/dist/runtime/randomBytesResultResolve.d.ts.map +1 -0
- package/dist/runtime/randomBytesResultResolve.js +25 -0
- package/dist/runtime/randomBytesResultResolve.js.map +1 -0
- package/dist/runtime/timeExpiryResolve.d.ts +3 -0
- package/dist/runtime/timeExpiryResolve.d.ts.map +1 -0
- package/dist/runtime/timeExpiryResolve.js +15 -0
- package/dist/runtime/timeExpiryResolve.js.map +1 -0
- package/dist/runtime/timeMillisecondsValidate.d.ts +2 -0
- package/dist/runtime/timeMillisecondsValidate.d.ts.map +1 -0
- package/dist/runtime/timeMillisecondsValidate.js +4 -0
- package/dist/runtime/timeMillisecondsValidate.js.map +1 -0
- package/dist/runtime/timeSecondsValidate.d.ts +2 -0
- package/dist/runtime/timeSecondsValidate.d.ts.map +1 -0
- package/dist/runtime/timeSecondsValidate.js +5 -0
- package/dist/runtime/timeSecondsValidate.js.map +1 -0
- package/dist/session/Clock.d.ts +2 -0
- package/dist/session/Clock.d.ts.map +1 -0
- package/dist/session/Clock.js +2 -0
- package/dist/session/Clock.js.map +1 -0
- package/dist/session/CsrfTokenStore.d.ts +7 -0
- package/dist/session/CsrfTokenStore.d.ts.map +1 -0
- package/dist/session/CsrfTokenStore.js +2 -0
- package/dist/session/CsrfTokenStore.js.map +1 -0
- package/dist/session/CsrfTokenStoreOptions.d.ts +9 -0
- package/dist/session/CsrfTokenStoreOptions.d.ts.map +1 -0
- package/dist/session/CsrfTokenStoreOptions.js +2 -0
- package/dist/session/CsrfTokenStoreOptions.js.map +1 -0
- package/dist/session/RandomBytes.d.ts +3 -0
- package/dist/session/RandomBytes.d.ts.map +1 -0
- package/dist/session/RandomBytes.js +2 -0
- package/dist/session/RandomBytes.js.map +1 -0
- package/dist/session/SessionActorResolveOptions.d.ts +15 -0
- package/dist/session/SessionActorResolveOptions.d.ts.map +1 -0
- package/dist/session/SessionActorResolveOptions.js +2 -0
- package/dist/session/SessionActorResolveOptions.js.map +1 -0
- package/dist/session/SessionCookieOptions.d.ts +5 -0
- package/dist/session/SessionCookieOptions.d.ts.map +1 -0
- package/dist/session/SessionCookieOptions.js +2 -0
- package/dist/session/SessionCookieOptions.js.map +1 -0
- package/dist/session/SessionCreateInput.d.ts +6 -0
- package/dist/session/SessionCreateInput.d.ts.map +1 -0
- package/dist/session/SessionCreateInput.js +2 -0
- package/dist/session/SessionCreateInput.js.map +1 -0
- package/dist/session/SessionLogoutOptions.d.ts +12 -0
- package/dist/session/SessionLogoutOptions.d.ts.map +1 -0
- package/dist/session/SessionLogoutOptions.js +2 -0
- package/dist/session/SessionLogoutOptions.js.map +1 -0
- package/dist/session/SessionRecord.d.ts +9 -0
- package/dist/session/SessionRecord.d.ts.map +1 -0
- package/dist/session/SessionRecord.js +2 -0
- package/dist/session/SessionRecord.js.map +1 -0
- package/dist/session/SessionStore.d.ts +11 -0
- package/dist/session/SessionStore.d.ts.map +1 -0
- package/dist/session/SessionStore.js +2 -0
- package/dist/session/SessionStore.js.map +1 -0
- package/dist/session/SessionStoreOptions.d.ts +11 -0
- package/dist/session/SessionStoreOptions.d.ts.map +1 -0
- package/dist/session/SessionStoreOptions.js +2 -0
- package/dist/session/SessionStoreOptions.js.map +1 -0
- package/dist/session/TokenReferenceStore.d.ts +10 -0
- package/dist/session/TokenReferenceStore.d.ts.map +1 -0
- package/dist/session/TokenReferenceStore.js +2 -0
- package/dist/session/TokenReferenceStore.js.map +1 -0
- package/dist/session/TokenReferenceStoreOptions.d.ts +8 -0
- package/dist/session/TokenReferenceStoreOptions.d.ts.map +1 -0
- package/dist/session/TokenReferenceStoreOptions.js +2 -0
- package/dist/session/TokenReferenceStoreOptions.js.map +1 -0
- package/dist/session/TokenReferenceTokens.d.ts +6 -0
- package/dist/session/TokenReferenceTokens.d.ts.map +1 -0
- package/dist/session/TokenReferenceTokens.js +2 -0
- package/dist/session/TokenReferenceTokens.js.map +1 -0
- package/dist/session/csrfTokenIssue.d.ts +4 -0
- package/dist/session/csrfTokenIssue.d.ts.map +1 -0
- package/dist/session/csrfTokenIssue.js +4 -0
- package/dist/session/csrfTokenIssue.js.map +1 -0
- package/dist/session/csrfTokenStoreCreate.d.ts +4 -0
- package/dist/session/csrfTokenStoreCreate.d.ts.map +1 -0
- package/dist/session/csrfTokenStoreCreate.js +179 -0
- package/dist/session/csrfTokenStoreCreate.js.map +1 -0
- package/dist/session/csrfTokenValidate.d.ts +4 -0
- package/dist/session/csrfTokenValidate.d.ts.map +1 -0
- package/dist/session/csrfTokenValidate.js +16 -0
- package/dist/session/csrfTokenValidate.js.map +1 -0
- package/dist/session/randomBytesGenerate.d.ts +3 -0
- package/dist/session/randomBytesGenerate.d.ts.map +1 -0
- package/dist/session/randomBytesGenerate.js +16 -0
- package/dist/session/randomBytesGenerate.js.map +1 -0
- package/dist/session/sessionActorResolve.d.ts +5 -0
- package/dist/session/sessionActorResolve.d.ts.map +1 -0
- package/dist/session/sessionActorResolve.js +98 -0
- package/dist/session/sessionActorResolve.js.map +1 -0
- package/dist/session/sessionCookieClear.d.ts +4 -0
- package/dist/session/sessionCookieClear.d.ts.map +1 -0
- package/dist/session/sessionCookieClear.js +20 -0
- package/dist/session/sessionCookieClear.js.map +1 -0
- package/dist/session/sessionCookieParse.d.ts +4 -0
- package/dist/session/sessionCookieParse.d.ts.map +1 -0
- package/dist/session/sessionCookieParse.js +42 -0
- package/dist/session/sessionCookieParse.js.map +1 -0
- package/dist/session/sessionCookieSerialize.d.ts +4 -0
- package/dist/session/sessionCookieSerialize.d.ts.map +1 -0
- package/dist/session/sessionCookieSerialize.js +28 -0
- package/dist/session/sessionCookieSerialize.js.map +1 -0
- package/dist/session/sessionLogout.d.ts +8 -0
- package/dist/session/sessionLogout.d.ts.map +1 -0
- package/dist/session/sessionLogout.js +74 -0
- package/dist/session/sessionLogout.js.map +1 -0
- package/dist/session/sessionRecordValidate.d.ts +4 -0
- package/dist/session/sessionRecordValidate.d.ts.map +1 -0
- package/dist/session/sessionRecordValidate.js +44 -0
- package/dist/session/sessionRecordValidate.js.map +1 -0
- package/dist/session/sessionRequestResolve.d.ts +9 -0
- package/dist/session/sessionRequestResolve.d.ts.map +1 -0
- package/dist/session/sessionRequestResolve.js +23 -0
- package/dist/session/sessionRequestResolve.js.map +1 -0
- package/dist/session/sessionStoreCreate.d.ts +4 -0
- package/dist/session/sessionStoreCreate.d.ts.map +1 -0
- package/dist/session/sessionStoreCreate.js +220 -0
- package/dist/session/sessionStoreCreate.js.map +1 -0
- package/dist/session/tokenReferenceIdValidate.d.ts +3 -0
- package/dist/session/tokenReferenceIdValidate.d.ts.map +1 -0
- package/dist/session/tokenReferenceIdValidate.js +10 -0
- package/dist/session/tokenReferenceIdValidate.js.map +1 -0
- package/dist/session/tokenReferenceStoreCreate.d.ts +4 -0
- package/dist/session/tokenReferenceStoreCreate.d.ts.map +1 -0
- package/dist/session/tokenReferenceStoreCreate.js +96 -0
- package/dist/session/tokenReferenceStoreCreate.js.map +1 -0
- package/dist/session/tokenReferenceTokensValidate.d.ts +4 -0
- package/dist/session/tokenReferenceTokensValidate.d.ts.map +1 -0
- package/dist/session/tokenReferenceTokensValidate.js +26 -0
- package/dist/session/tokenReferenceTokensValidate.js.map +1 -0
- package/dist/ui/assets/index-C5h9COjm.css +1 -0
- package/dist/ui/assets/index-CwUhaCYM.js +1 -0
- package/dist/ui/index.html +13 -0
- package/dist/web-server/MutationSecurityOptions.d.ts +11 -0
- package/dist/web-server/MutationSecurityOptions.d.ts.map +1 -0
- package/dist/web-server/MutationSecurityOptions.js +2 -0
- package/dist/web-server/MutationSecurityOptions.js.map +1 -0
- package/dist/web-server/mutationOriginValidate.d.ts +3 -0
- package/dist/web-server/mutationOriginValidate.d.ts.map +1 -0
- package/dist/web-server/mutationOriginValidate.js +30 -0
- package/dist/web-server/mutationOriginValidate.js.map +1 -0
- package/dist/web-server/mutationSecurityValidate.d.ts +4 -0
- package/dist/web-server/mutationSecurityValidate.d.ts.map +1 -0
- package/dist/web-server/mutationSecurityValidate.js +27 -0
- package/dist/web-server/mutationSecurityValidate.js.map +1 -0
- package/dist/zitadel/LoginTransaction.d.ts +9 -0
- package/dist/zitadel/LoginTransaction.d.ts.map +1 -0
- package/dist/zitadel/LoginTransaction.js +2 -0
- package/dist/zitadel/LoginTransaction.js.map +1 -0
- package/dist/zitadel/LoginTransactionStore.d.ts +7 -0
- package/dist/zitadel/LoginTransactionStore.d.ts.map +1 -0
- package/dist/zitadel/LoginTransactionStore.js +2 -0
- package/dist/zitadel/LoginTransactionStore.js.map +1 -0
- package/dist/zitadel/LoginTransactionStoreOptions.d.ts +6 -0
- package/dist/zitadel/LoginTransactionStoreOptions.d.ts.map +1 -0
- package/dist/zitadel/LoginTransactionStoreOptions.js +2 -0
- package/dist/zitadel/LoginTransactionStoreOptions.js.map +1 -0
- package/dist/zitadel/ZitadelCallbackOptions.d.ts +28 -0
- package/dist/zitadel/ZitadelCallbackOptions.d.ts.map +1 -0
- package/dist/zitadel/ZitadelCallbackOptions.js +2 -0
- package/dist/zitadel/ZitadelCallbackOptions.js.map +1 -0
- package/dist/zitadel/ZitadelCallbackResult.d.ts +8 -0
- package/dist/zitadel/ZitadelCallbackResult.d.ts.map +1 -0
- package/dist/zitadel/ZitadelCallbackResult.js +2 -0
- package/dist/zitadel/ZitadelCallbackResult.js.map +1 -0
- package/dist/zitadel/ZitadelDiscoveryDocument.d.ts +7 -0
- package/dist/zitadel/ZitadelDiscoveryDocument.d.ts.map +1 -0
- package/dist/zitadel/ZitadelDiscoveryDocument.js +2 -0
- package/dist/zitadel/ZitadelDiscoveryDocument.js.map +1 -0
- package/dist/zitadel/ZitadelHttp.d.ts +2 -0
- package/dist/zitadel/ZitadelHttp.d.ts.map +1 -0
- package/dist/zitadel/ZitadelHttp.js +2 -0
- package/dist/zitadel/ZitadelHttp.js.map +1 -0
- package/dist/zitadel/ZitadelHttpOptions.d.ts +6 -0
- package/dist/zitadel/ZitadelHttpOptions.d.ts.map +1 -0
- package/dist/zitadel/ZitadelHttpOptions.js +2 -0
- package/dist/zitadel/ZitadelHttpOptions.js.map +1 -0
- package/dist/zitadel/ZitadelIdentityClaims.d.ts +6 -0
- package/dist/zitadel/ZitadelIdentityClaims.d.ts.map +1 -0
- package/dist/zitadel/ZitadelIdentityClaims.js +2 -0
- package/dist/zitadel/ZitadelIdentityClaims.js.map +1 -0
- package/dist/zitadel/ZitadelIdentityDirectoryOptions.d.ts +11 -0
- package/dist/zitadel/ZitadelIdentityDirectoryOptions.d.ts.map +1 -0
- package/dist/zitadel/ZitadelIdentityDirectoryOptions.js +2 -0
- package/dist/zitadel/ZitadelIdentityDirectoryOptions.js.map +1 -0
- package/dist/zitadel/ZitadelJwk.d.ts +12 -0
- package/dist/zitadel/ZitadelJwk.d.ts.map +1 -0
- package/dist/zitadel/ZitadelJwk.js +2 -0
- package/dist/zitadel/ZitadelJwk.js.map +1 -0
- package/dist/zitadel/ZitadelJwks.d.ts +5 -0
- package/dist/zitadel/ZitadelJwks.d.ts.map +1 -0
- package/dist/zitadel/ZitadelJwks.js +2 -0
- package/dist/zitadel/ZitadelJwks.js.map +1 -0
- package/dist/zitadel/ZitadelLoginStartOptions.d.ts +17 -0
- package/dist/zitadel/ZitadelLoginStartOptions.d.ts.map +1 -0
- package/dist/zitadel/ZitadelLoginStartOptions.js +2 -0
- package/dist/zitadel/ZitadelLoginStartOptions.js.map +1 -0
- package/dist/zitadel/ZitadelLoginStartResult.d.ts +6 -0
- package/dist/zitadel/ZitadelLoginStartResult.d.ts.map +1 -0
- package/dist/zitadel/ZitadelLoginStartResult.js +2 -0
- package/dist/zitadel/ZitadelLoginStartResult.js.map +1 -0
- package/dist/zitadel/ZitadelOidcConfig.d.ts +10 -0
- package/dist/zitadel/ZitadelOidcConfig.d.ts.map +1 -0
- package/dist/zitadel/ZitadelOidcConfig.js +2 -0
- package/dist/zitadel/ZitadelOidcConfig.js.map +1 -0
- package/dist/zitadel/ZitadelPreAuthCookieOptions.d.ts +4 -0
- package/dist/zitadel/ZitadelPreAuthCookieOptions.d.ts.map +1 -0
- package/dist/zitadel/ZitadelPreAuthCookieOptions.js +2 -0
- package/dist/zitadel/ZitadelPreAuthCookieOptions.js.map +1 -0
- package/dist/zitadel/ZitadelTokenExchangeOptions.d.ts +17 -0
- package/dist/zitadel/ZitadelTokenExchangeOptions.d.ts.map +1 -0
- package/dist/zitadel/ZitadelTokenExchangeOptions.js +2 -0
- package/dist/zitadel/ZitadelTokenExchangeOptions.js.map +1 -0
- package/dist/zitadel/ZitadelTokens.d.ts +7 -0
- package/dist/zitadel/ZitadelTokens.d.ts.map +1 -0
- package/dist/zitadel/ZitadelTokens.js +2 -0
- package/dist/zitadel/ZitadelTokens.js.map +1 -0
- package/dist/zitadel/zitadelCallbackHandle.d.ts +5 -0
- package/dist/zitadel/zitadelCallbackHandle.d.ts.map +1 -0
- package/dist/zitadel/zitadelCallbackHandle.js +255 -0
- package/dist/zitadel/zitadelCallbackHandle.js.map +1 -0
- package/dist/zitadel/zitadelConfigValidate.d.ts +4 -0
- package/dist/zitadel/zitadelConfigValidate.d.ts.map +1 -0
- package/dist/zitadel/zitadelConfigValidate.js +88 -0
- package/dist/zitadel/zitadelConfigValidate.js.map +1 -0
- package/dist/zitadel/zitadelDiscoveryFetch.d.ts +7 -0
- package/dist/zitadel/zitadelDiscoveryFetch.d.ts.map +1 -0
- package/dist/zitadel/zitadelDiscoveryFetch.js +55 -0
- package/dist/zitadel/zitadelDiscoveryFetch.js.map +1 -0
- package/dist/zitadel/zitadelDiscoveryValidate.d.ts +4 -0
- package/dist/zitadel/zitadelDiscoveryValidate.d.ts.map +1 -0
- package/dist/zitadel/zitadelDiscoveryValidate.js +43 -0
- package/dist/zitadel/zitadelDiscoveryValidate.js.map +1 -0
- package/dist/zitadel/zitadelHttpJsonFetch.d.ts +8 -0
- package/dist/zitadel/zitadelHttpJsonFetch.d.ts.map +1 -0
- package/dist/zitadel/zitadelHttpJsonFetch.js +118 -0
- package/dist/zitadel/zitadelHttpJsonFetch.js.map +1 -0
- package/dist/zitadel/zitadelIdTokenValidate.d.ts +7 -0
- package/dist/zitadel/zitadelIdTokenValidate.d.ts.map +1 -0
- package/dist/zitadel/zitadelIdTokenValidate.js +170 -0
- package/dist/zitadel/zitadelIdTokenValidate.js.map +1 -0
- package/dist/zitadel/zitadelIdentityDirectoryCreate.d.ts +5 -0
- package/dist/zitadel/zitadelIdentityDirectoryCreate.d.ts.map +1 -0
- package/dist/zitadel/zitadelIdentityDirectoryCreate.js +268 -0
- package/dist/zitadel/zitadelIdentityDirectoryCreate.js.map +1 -0
- package/dist/zitadel/zitadelJwksFetch.d.ts +6 -0
- package/dist/zitadel/zitadelJwksFetch.d.ts.map +1 -0
- package/dist/zitadel/zitadelJwksFetch.js +36 -0
- package/dist/zitadel/zitadelJwksFetch.js.map +1 -0
- package/dist/zitadel/zitadelJwksValidate.d.ts +4 -0
- package/dist/zitadel/zitadelJwksValidate.d.ts.map +1 -0
- package/dist/zitadel/zitadelJwksValidate.js +69 -0
- package/dist/zitadel/zitadelJwksValidate.js.map +1 -0
- package/dist/zitadel/zitadelLoginStart.d.ts +5 -0
- package/dist/zitadel/zitadelLoginStart.d.ts.map +1 -0
- package/dist/zitadel/zitadelLoginStart.js +102 -0
- package/dist/zitadel/zitadelLoginStart.js.map +1 -0
- package/dist/zitadel/zitadelLoginTransactionStoreCreate.d.ts +4 -0
- package/dist/zitadel/zitadelLoginTransactionStoreCreate.d.ts.map +1 -0
- package/dist/zitadel/zitadelLoginTransactionStoreCreate.js +82 -0
- package/dist/zitadel/zitadelLoginTransactionStoreCreate.js.map +1 -0
- package/dist/zitadel/zitadelPreAuthCookieClear.d.ts +3 -0
- package/dist/zitadel/zitadelPreAuthCookieClear.d.ts.map +1 -0
- package/dist/zitadel/zitadelPreAuthCookieClear.js +6 -0
- package/dist/zitadel/zitadelPreAuthCookieClear.js.map +1 -0
- package/dist/zitadel/zitadelPreAuthCookieHash.d.ts +3 -0
- package/dist/zitadel/zitadelPreAuthCookieHash.d.ts.map +1 -0
- package/dist/zitadel/zitadelPreAuthCookieHash.js +20 -0
- package/dist/zitadel/zitadelPreAuthCookieHash.js.map +1 -0
- package/dist/zitadel/zitadelPreAuthCookieParse.d.ts +3 -0
- package/dist/zitadel/zitadelPreAuthCookieParse.d.ts.map +1 -0
- package/dist/zitadel/zitadelPreAuthCookieParse.js +33 -0
- package/dist/zitadel/zitadelPreAuthCookieParse.js.map +1 -0
- package/dist/zitadel/zitadelPreAuthCookieSerialize.d.ts +4 -0
- package/dist/zitadel/zitadelPreAuthCookieSerialize.d.ts.map +1 -0
- package/dist/zitadel/zitadelPreAuthCookieSerialize.js +20 -0
- package/dist/zitadel/zitadelPreAuthCookieSerialize.js.map +1 -0
- package/dist/zitadel/zitadelTokenExchange.d.ts +5 -0
- package/dist/zitadel/zitadelTokenExchange.d.ts.map +1 -0
- package/dist/zitadel/zitadelTokenExchange.js +92 -0
- package/dist/zitadel/zitadelTokenExchange.js.map +1 -0
- package/package.json +137 -0
|
@@ -0,0 +1,871 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { lstat, open, opendir } from "node:fs/promises";
|
|
4
|
+
import { basename, dirname, join } from "node:path";
|
|
5
|
+
import { Readable } from "node:stream";
|
|
6
|
+
import { createGunzip } from "node:zlib";
|
|
7
|
+
import * as a from "valibot";
|
|
8
|
+
import { createResult, createResultError } from "#result";
|
|
9
|
+
import { projectAccessLogCaddyRetention } from "./projectAccessLogCaddyRetention.js";
|
|
10
|
+
import { projectAccessLogCursorCreate, } from "./projectAccessLogCursor.js";
|
|
11
|
+
import { projectAccessLogId } from "./projectAccessLogId.js";
|
|
12
|
+
import { projectAccessLogParser } from "./projectAccessLogParser.js";
|
|
13
|
+
import { projectAccessLogPath } from "./projectAccessLogPath.js";
|
|
14
|
+
import { projectAccessLogRootSchema } from "./projectAccessLogRootSchema.js";
|
|
15
|
+
const defaultMaxRecords = 100;
|
|
16
|
+
const maximumMaxRecords = 1_000;
|
|
17
|
+
const defaultMaxLineBytes = 128 * 1024;
|
|
18
|
+
const maximumMaxLineBytes = 1024 * 1024;
|
|
19
|
+
const defaultMaxScannedBytes = 64 * 1024 * 1024;
|
|
20
|
+
const maximumMaxScannedBytes = 128 * 1024 * 1024;
|
|
21
|
+
const defaultMaxDecompressedBytes = 64 * 1024 * 1024;
|
|
22
|
+
const maximumMaxDecompressedBytes = 128 * 1024 * 1024;
|
|
23
|
+
const readChunkBytes = 64 * 1024;
|
|
24
|
+
const archiveNameSchema = a.pipe(a.string(), a.regex(/^access-[A-Za-z0-9_.-]+\.jsonl(?:\.gz)?$/));
|
|
25
|
+
const maximumArchiveBases = projectAccessLogCaddyRetention.rollKeep;
|
|
26
|
+
const maximumArchiveEntries = maximumArchiveBases * 2;
|
|
27
|
+
const maximumDirectoryEntries = maximumArchiveEntries + 2; // active log plus repository-owned retention metadata
|
|
28
|
+
const noFollowFlag = constants.O_NOFOLLOW ?? 0;
|
|
29
|
+
const nonBlockingFlag = constants.O_NONBLOCK ?? 0;
|
|
30
|
+
const directoryFlag = constants.O_DIRECTORY ?? 0;
|
|
31
|
+
const descriptorDirectoryFlags = constants.O_RDONLY | directoryFlag | noFollowFlag;
|
|
32
|
+
const descriptorFileFlags = constants.O_RDONLY | noFollowFlag | nonBlockingFlag;
|
|
33
|
+
const descriptorTraversalAvailable = noFollowFlag !== 0 && directoryFlag !== 0 && nonBlockingFlag !== 0;
|
|
34
|
+
class ScanResultError extends Error {
|
|
35
|
+
result;
|
|
36
|
+
constructor(result) {
|
|
37
|
+
super(result.errorMessage);
|
|
38
|
+
this.result = result;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function sourceError(code, message, errorData) {
|
|
42
|
+
const result = createResultError("projectAccessLogSourceFile", message, errorData);
|
|
43
|
+
return { ...result, code };
|
|
44
|
+
}
|
|
45
|
+
function errorCode(error) {
|
|
46
|
+
if (typeof error !== "object" || error === null || !("code" in error))
|
|
47
|
+
return undefined;
|
|
48
|
+
const code = error.code;
|
|
49
|
+
return typeof code === "string" ? code : undefined;
|
|
50
|
+
}
|
|
51
|
+
function limitResolve(value, defaultValue, maximumValue) {
|
|
52
|
+
const resolved = value ?? defaultValue;
|
|
53
|
+
if (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > maximumValue)
|
|
54
|
+
return undefined;
|
|
55
|
+
return resolved;
|
|
56
|
+
}
|
|
57
|
+
function limitsResolve(options) {
|
|
58
|
+
const maxRecords = limitResolve(options?.maxRecords, defaultMaxRecords, maximumMaxRecords);
|
|
59
|
+
const maxLineBytes = limitResolve(options?.maxLineBytes, defaultMaxLineBytes, maximumMaxLineBytes);
|
|
60
|
+
const maxScannedBytes = limitResolve(options?.maxScannedBytes, defaultMaxScannedBytes, maximumMaxScannedBytes);
|
|
61
|
+
const maxDecompressedBytes = limitResolve(options?.maxDecompressedBytes, defaultMaxDecompressedBytes, maximumMaxDecompressedBytes);
|
|
62
|
+
if (maxRecords === undefined ||
|
|
63
|
+
maxLineBytes === undefined ||
|
|
64
|
+
maxScannedBytes === undefined ||
|
|
65
|
+
maxDecompressedBytes === undefined) {
|
|
66
|
+
return sourceError("access-log.invalid-input", "access log source limits are invalid");
|
|
67
|
+
}
|
|
68
|
+
return createResult({ maxRecords, maxLineBytes, maxScannedBytes, maxDecompressedBytes });
|
|
69
|
+
}
|
|
70
|
+
function statFingerprint(stat, kind) {
|
|
71
|
+
if (kind === "active")
|
|
72
|
+
return `active:${stat.dev}:${stat.ino}:${stat.birthtimeMs}`;
|
|
73
|
+
return `archive:${stat.dev}:${stat.ino}:${stat.size}:${stat.mtimeMs}:${stat.ctimeMs}:${stat.birthtimeMs}`;
|
|
74
|
+
}
|
|
75
|
+
function statIsRegular(stat) {
|
|
76
|
+
return stat.isFile();
|
|
77
|
+
}
|
|
78
|
+
function archiveCandidateFileCompare(left, right) {
|
|
79
|
+
// Caddy roll names are ASCII; relational comparison is locale-independent.
|
|
80
|
+
if (left.base !== right.base)
|
|
81
|
+
return left.base < right.base ? 1 : -1;
|
|
82
|
+
if (left.encoding === right.encoding)
|
|
83
|
+
return 0;
|
|
84
|
+
return left.encoding === "plain" ? -1 : 1;
|
|
85
|
+
}
|
|
86
|
+
function descriptorChildPath(directory, name) {
|
|
87
|
+
// The proc descriptor link anchors resolution to the already-open directory; no configured pathname is reopened.
|
|
88
|
+
return `/proc/self/fd/${directory.fd}/${name}`;
|
|
89
|
+
}
|
|
90
|
+
async function fileHandleClose(handle) {
|
|
91
|
+
if (handle === undefined)
|
|
92
|
+
return;
|
|
93
|
+
try {
|
|
94
|
+
await handle.close();
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// The read result is already determined; a close failure must not leak an exception.
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async function sourceDirectoriesClose(directories) {
|
|
101
|
+
await fileHandleClose(directories.project);
|
|
102
|
+
await fileHandleClose(directories.projects);
|
|
103
|
+
await fileHandleClose(directories.root);
|
|
104
|
+
}
|
|
105
|
+
async function directoryOpenRelative(parent, name, path) {
|
|
106
|
+
if (!descriptorTraversalAvailable)
|
|
107
|
+
return sourceError("access-log.storage-unavailable", "descriptor-relative access is unavailable", path);
|
|
108
|
+
try {
|
|
109
|
+
return createResult(await open(descriptorChildPath(parent, name), descriptorDirectoryFlags));
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (errorCode(error) === "ENOENT")
|
|
113
|
+
return createResult(undefined);
|
|
114
|
+
if (errorCode(error) === "ELOOP")
|
|
115
|
+
return sourceError("access-log.symlink", "access log path is a symbolic link", path);
|
|
116
|
+
if (errorCode(error) === "ENOTDIR") {
|
|
117
|
+
try {
|
|
118
|
+
if ((await lstat(descriptorChildPath(parent, name))).isSymbolicLink())
|
|
119
|
+
return sourceError("access-log.symlink", "access log path is a symbolic link", path);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// The failed open already prevents access; retain the safe non-directory result if classification races.
|
|
123
|
+
}
|
|
124
|
+
return sourceError("access-log.non-regular-file", "access log path is not a directory", path);
|
|
125
|
+
}
|
|
126
|
+
return sourceError("access-log.storage-unavailable", "access log directory could not be opened", path);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async function rootDirectoryOpen(root) {
|
|
130
|
+
if (!descriptorTraversalAvailable)
|
|
131
|
+
return sourceError("access-log.storage-unavailable", "descriptor-relative access is unavailable", root);
|
|
132
|
+
let current;
|
|
133
|
+
let retained = false;
|
|
134
|
+
let currentPath = "/";
|
|
135
|
+
try {
|
|
136
|
+
current = await open("/", descriptorDirectoryFlags);
|
|
137
|
+
for (const part of root.split("/").filter((value) => value.length > 0)) {
|
|
138
|
+
const nextR = await directoryOpenRelative(current, part, join(currentPath, part));
|
|
139
|
+
await fileHandleClose(current);
|
|
140
|
+
current = undefined;
|
|
141
|
+
if (!nextR.success)
|
|
142
|
+
return nextR;
|
|
143
|
+
if (nextR.data === undefined)
|
|
144
|
+
return createResult(undefined);
|
|
145
|
+
current = nextR.data;
|
|
146
|
+
currentPath = join(currentPath, part);
|
|
147
|
+
}
|
|
148
|
+
retained = true;
|
|
149
|
+
return createResult(current);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (errorCode(error) === "ENOENT")
|
|
153
|
+
return createResult(undefined);
|
|
154
|
+
if (errorCode(error) === "ELOOP")
|
|
155
|
+
return sourceError("access-log.symlink", "access log path is a symbolic link", root);
|
|
156
|
+
if (errorCode(error) === "ENOTDIR")
|
|
157
|
+
return sourceError("access-log.non-regular-file", "access log path is not a directory", root);
|
|
158
|
+
return sourceError("access-log.storage-unavailable", "access log directory could not be opened", root);
|
|
159
|
+
}
|
|
160
|
+
finally {
|
|
161
|
+
if (!retained)
|
|
162
|
+
await fileHandleClose(current);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
async function sourceFileMetadataResolve(directory, kind, encoding, name, path) {
|
|
166
|
+
let handle;
|
|
167
|
+
try {
|
|
168
|
+
const listedStat = await lstat(descriptorChildPath(directory, name));
|
|
169
|
+
if (listedStat.isSymbolicLink())
|
|
170
|
+
return sourceError("access-log.symlink", "access log is a symbolic link", path);
|
|
171
|
+
if (!statIsRegular(listedStat)) {
|
|
172
|
+
return sourceError("access-log.non-regular-file", kind === "active" ? "active access log is not a regular file" : "access log archive is not a regular file", path);
|
|
173
|
+
}
|
|
174
|
+
handle = await open(descriptorChildPath(directory, name), descriptorFileFlags);
|
|
175
|
+
const stat = await handle.stat();
|
|
176
|
+
if (!statIsRegular(stat)) {
|
|
177
|
+
return sourceError("access-log.non-regular-file", kind === "active" ? "active access log is not a regular file" : "access log archive is not a regular file", path);
|
|
178
|
+
}
|
|
179
|
+
return createResult({ encoding, kind, name, path, fingerprint: statFingerprint(stat, kind), directory });
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
if (errorCode(error) === "ENOENT") {
|
|
183
|
+
if (kind === "archive")
|
|
184
|
+
return sourceError("access-log.rotation-race", "access log changed while being listed", path);
|
|
185
|
+
return createResult(undefined);
|
|
186
|
+
}
|
|
187
|
+
if (errorCode(error) === "ELOOP")
|
|
188
|
+
return sourceError("access-log.symlink", "access log is a symbolic link", path);
|
|
189
|
+
return sourceError("access-log.storage-unavailable", "access log could not be inspected", path);
|
|
190
|
+
}
|
|
191
|
+
finally {
|
|
192
|
+
await fileHandleClose(handle);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
async function sourceFileOpen(sourceFile) {
|
|
196
|
+
try {
|
|
197
|
+
return createResult(await open(descriptorChildPath(sourceFile.directory, sourceFile.name), descriptorFileFlags));
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (errorCode(error) === "ENOENT")
|
|
201
|
+
return sourceError("access-log.rotation-race", "access log changed while being read", sourceFile.path);
|
|
202
|
+
if (errorCode(error) === "ELOOP")
|
|
203
|
+
return sourceError("access-log.symlink", "access log is a symbolic link", sourceFile.path);
|
|
204
|
+
return sourceError("access-log.storage-unavailable", "access log could not be opened", sourceFile.path);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
async function sourceFileCurrentStat(sourceFile) {
|
|
208
|
+
try {
|
|
209
|
+
return createResult(await lstat(descriptorChildPath(sourceFile.directory, sourceFile.name)));
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
if (errorCode(error) === "ENOENT")
|
|
213
|
+
return createResult(undefined);
|
|
214
|
+
return sourceError("access-log.storage-unavailable", "access log could not be inspected", sourceFile.path);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async function sourceFilesResolve(root, project) {
|
|
218
|
+
const activePathR = projectAccessLogPath(root, project);
|
|
219
|
+
if (!activePathR.success)
|
|
220
|
+
return sourceError("access-log.invalid-input", activePathR.errorMessage);
|
|
221
|
+
const projectDirectory = dirname(activePathR.data);
|
|
222
|
+
const projectsDirectory = dirname(projectDirectory);
|
|
223
|
+
const rootR = await rootDirectoryOpen(root);
|
|
224
|
+
if (!rootR.success)
|
|
225
|
+
return rootR;
|
|
226
|
+
if (rootR.data === undefined)
|
|
227
|
+
return createResult(undefined);
|
|
228
|
+
const rootDirectory = rootR.data;
|
|
229
|
+
const projectsR = await directoryOpenRelative(rootDirectory, basename(projectsDirectory), projectsDirectory);
|
|
230
|
+
if (!projectsR.success) {
|
|
231
|
+
await fileHandleClose(rootDirectory);
|
|
232
|
+
return projectsR;
|
|
233
|
+
}
|
|
234
|
+
if (projectsR.data === undefined) {
|
|
235
|
+
await fileHandleClose(rootDirectory);
|
|
236
|
+
return createResult(undefined);
|
|
237
|
+
}
|
|
238
|
+
const projectsHandle = projectsR.data;
|
|
239
|
+
const projectR = await directoryOpenRelative(projectsHandle, basename(projectDirectory), projectDirectory);
|
|
240
|
+
if (!projectR.success) {
|
|
241
|
+
await fileHandleClose(projectsHandle);
|
|
242
|
+
await fileHandleClose(rootDirectory);
|
|
243
|
+
return projectR;
|
|
244
|
+
}
|
|
245
|
+
if (projectR.data === undefined) {
|
|
246
|
+
await fileHandleClose(projectsHandle);
|
|
247
|
+
await fileHandleClose(rootDirectory);
|
|
248
|
+
return createResult(undefined);
|
|
249
|
+
}
|
|
250
|
+
const directories = { root: rootDirectory, projects: projectsHandle, project: projectR.data };
|
|
251
|
+
let retained = false;
|
|
252
|
+
try {
|
|
253
|
+
const files = [];
|
|
254
|
+
const activeR = await sourceFileMetadataResolve(directories.project, "active", "plain", "access.jsonl", activePathR.data);
|
|
255
|
+
if (!activeR.success)
|
|
256
|
+
return activeR;
|
|
257
|
+
if (activeR.data !== undefined)
|
|
258
|
+
files.push(activeR.data);
|
|
259
|
+
let entriesDirectory;
|
|
260
|
+
try {
|
|
261
|
+
entriesDirectory = await opendir(descriptorChildPath(directories.project, "."));
|
|
262
|
+
}
|
|
263
|
+
catch {
|
|
264
|
+
return sourceError("access-log.storage-unavailable", "access log directory could not be read", projectDirectory);
|
|
265
|
+
}
|
|
266
|
+
const archiveCandidates = new Map();
|
|
267
|
+
let directoryEntryCount = 0;
|
|
268
|
+
let archiveEntryCount = 0;
|
|
269
|
+
try {
|
|
270
|
+
for await (const entry of entriesDirectory) {
|
|
271
|
+
directoryEntryCount += 1;
|
|
272
|
+
if (directoryEntryCount > maximumDirectoryEntries) {
|
|
273
|
+
return sourceError("access-log.resource-limit", "access log directory entry limit exceeded", projectDirectory);
|
|
274
|
+
}
|
|
275
|
+
if (!a.safeParse(archiveNameSchema, entry.name).success)
|
|
276
|
+
continue;
|
|
277
|
+
archiveEntryCount += 1;
|
|
278
|
+
if (archiveEntryCount > maximumArchiveEntries) {
|
|
279
|
+
return sourceError("access-log.resource-limit", "access log archive limit exceeded", projectDirectory);
|
|
280
|
+
}
|
|
281
|
+
const archiveBase = entry.name.endsWith(".gz") ? entry.name.slice(0, -3) : entry.name;
|
|
282
|
+
const candidate = archiveCandidates.get(archiveBase) ?? {};
|
|
283
|
+
if (entry.name.endsWith(".gz"))
|
|
284
|
+
candidate.gzip = entry.name;
|
|
285
|
+
else
|
|
286
|
+
candidate.plain = entry.name;
|
|
287
|
+
if (!archiveCandidates.has(archiveBase) && archiveCandidates.size >= maximumArchiveBases) {
|
|
288
|
+
return sourceError("access-log.resource-limit", "access log archive retention limit exceeded", projectDirectory);
|
|
289
|
+
}
|
|
290
|
+
archiveCandidates.set(archiveBase, candidate);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
return sourceError("access-log.storage-unavailable", "access log directory could not be read", projectDirectory);
|
|
295
|
+
}
|
|
296
|
+
finally {
|
|
297
|
+
try {
|
|
298
|
+
await entriesDirectory.close();
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
// The read result is already determined; a close failure must not leak an exception.
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const archiveFiles = [...archiveCandidates.entries()]
|
|
305
|
+
.flatMap(([base, candidate]) => [
|
|
306
|
+
...(candidate.plain === undefined ? [] : [{ base, encoding: "plain", name: candidate.plain }]),
|
|
307
|
+
...(candidate.gzip === undefined ? [] : [{ base, encoding: "gzip", name: candidate.gzip }]),
|
|
308
|
+
])
|
|
309
|
+
.sort(archiveCandidateFileCompare);
|
|
310
|
+
for (let archiveIndex = 0; archiveIndex < archiveFiles.length;) {
|
|
311
|
+
const archiveCandidate = archiveFiles[archiveIndex];
|
|
312
|
+
if (archiveCandidate === undefined) {
|
|
313
|
+
archiveIndex += 1;
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
const archiveBase = archiveCandidate.base;
|
|
317
|
+
let plain;
|
|
318
|
+
let gzip;
|
|
319
|
+
while (archiveIndex < archiveFiles.length) {
|
|
320
|
+
const candidate = archiveFiles[archiveIndex];
|
|
321
|
+
if (candidate === undefined || candidate.base !== archiveBase)
|
|
322
|
+
break;
|
|
323
|
+
const path = join(projectDirectory, candidate.name);
|
|
324
|
+
const archiveR = await sourceFileMetadataResolve(directories.project, "archive", candidate.encoding, candidate.name, path);
|
|
325
|
+
if (!archiveR.success)
|
|
326
|
+
return archiveR;
|
|
327
|
+
if (archiveR.data === undefined)
|
|
328
|
+
return sourceError("access-log.rotation-race", "access log changed while being listed", path);
|
|
329
|
+
if (candidate.encoding === "plain")
|
|
330
|
+
plain = archiveR.data;
|
|
331
|
+
else
|
|
332
|
+
gzip = archiveR.data;
|
|
333
|
+
archiveIndex += 1;
|
|
334
|
+
}
|
|
335
|
+
// Prefer the plain file while Caddy is transitioning an archive to gzip.
|
|
336
|
+
const archive = plain ?? gzip;
|
|
337
|
+
if (archive !== undefined)
|
|
338
|
+
files.push(archive);
|
|
339
|
+
}
|
|
340
|
+
retained = true;
|
|
341
|
+
return createResult({ files, directories });
|
|
342
|
+
}
|
|
343
|
+
finally {
|
|
344
|
+
if (!retained)
|
|
345
|
+
await sourceDirectoriesClose(directories);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
function lineDigest(line) {
|
|
349
|
+
return createHash("sha256").update(line).digest("hex");
|
|
350
|
+
}
|
|
351
|
+
function linePartsAppend(parts, currentLength, part, maximumLineBytes) {
|
|
352
|
+
const nextLength = currentLength + part.length;
|
|
353
|
+
if (nextLength > maximumLineBytes + 1)
|
|
354
|
+
return sourceError("access-log.resource-limit", "access log line is too large");
|
|
355
|
+
if (part.length > 0)
|
|
356
|
+
parts.push(part);
|
|
357
|
+
return createResult(nextLength);
|
|
358
|
+
}
|
|
359
|
+
function lineDataResolve(parts, reverse, currentLength, maximumLineBytes) {
|
|
360
|
+
if (currentLength === 0)
|
|
361
|
+
return createResult(new Uint8Array());
|
|
362
|
+
const data = parts.length === 1
|
|
363
|
+
? parts[0]
|
|
364
|
+
: (() => {
|
|
365
|
+
const value = Buffer.allocUnsafe(currentLength);
|
|
366
|
+
let offset = 0;
|
|
367
|
+
const indexes = reverse
|
|
368
|
+
? Array.from({ length: parts.length }, (_, index) => parts.length - index - 1)
|
|
369
|
+
: Array.from({ length: parts.length }, (_, index) => index);
|
|
370
|
+
for (const index of indexes) {
|
|
371
|
+
const part = parts[index];
|
|
372
|
+
if (part === undefined)
|
|
373
|
+
continue;
|
|
374
|
+
value.set(part, offset);
|
|
375
|
+
offset += part.length;
|
|
376
|
+
}
|
|
377
|
+
return value;
|
|
378
|
+
})();
|
|
379
|
+
const end = data.length > 0 && data[data.length - 1] === 0x0d ? data.length - 1 : data.length;
|
|
380
|
+
if (end > maximumLineBytes)
|
|
381
|
+
return sourceError("access-log.resource-limit", "access log line is too large");
|
|
382
|
+
return createResult(data.subarray(0, end));
|
|
383
|
+
}
|
|
384
|
+
function scanFailureCreate(code, message) {
|
|
385
|
+
const error = new Error(message);
|
|
386
|
+
error.code = code;
|
|
387
|
+
return error;
|
|
388
|
+
}
|
|
389
|
+
async function sourceFileFinalVerify(sourceFile) {
|
|
390
|
+
const finalStatR = await sourceFileCurrentStat(sourceFile);
|
|
391
|
+
if (!finalStatR.success)
|
|
392
|
+
return finalStatR;
|
|
393
|
+
if (finalStatR.data === undefined || finalStatR.data.isSymbolicLink()) {
|
|
394
|
+
return finalStatR.data?.isSymbolicLink()
|
|
395
|
+
? sourceError("access-log.symlink", "access log became a symbolic link", sourceFile.path)
|
|
396
|
+
: sourceError("access-log.rotation-race", "access log changed while being read", sourceFile.path);
|
|
397
|
+
}
|
|
398
|
+
if (!statIsRegular(finalStatR.data))
|
|
399
|
+
return sourceError("access-log.non-regular-file", "access log is not a regular file", sourceFile.path);
|
|
400
|
+
if (statFingerprint(finalStatR.data, sourceFile.kind) !== sourceFile.fingerprint)
|
|
401
|
+
return sourceError("access-log.rotation-race", "access log changed while being read", sourceFile.path);
|
|
402
|
+
return createResult(undefined);
|
|
403
|
+
}
|
|
404
|
+
async function activeFileScan(sourceFile, limits, budget, capacity, before) {
|
|
405
|
+
let handle;
|
|
406
|
+
try {
|
|
407
|
+
const handleR = await sourceFileOpen(sourceFile);
|
|
408
|
+
if (!handleR.success)
|
|
409
|
+
return handleR;
|
|
410
|
+
handle = handleR.data;
|
|
411
|
+
const openedStat = await handle.stat();
|
|
412
|
+
if (!statIsRegular(openedStat))
|
|
413
|
+
return sourceError("access-log.non-regular-file", "access log is not a regular file", sourceFile.path);
|
|
414
|
+
if (statFingerprint(openedStat, sourceFile.kind) !== sourceFile.fingerprint) {
|
|
415
|
+
return sourceError("access-log.rotation-race", "access log changed while being opened", sourceFile.path);
|
|
416
|
+
}
|
|
417
|
+
const records = [];
|
|
418
|
+
const decoder = new TextDecoder("utf-8", { fatal: true });
|
|
419
|
+
let malformedLines = 0;
|
|
420
|
+
let lineRank = 0;
|
|
421
|
+
let anchorSeen = before === undefined;
|
|
422
|
+
let anchorFailure;
|
|
423
|
+
let stop = false;
|
|
424
|
+
let lineEnd;
|
|
425
|
+
let lineEndOffset = openedStat.size;
|
|
426
|
+
let lineParts = [];
|
|
427
|
+
let lineLength = 0;
|
|
428
|
+
let position = 0;
|
|
429
|
+
const processLine = (line, offset) => {
|
|
430
|
+
const currentLine = lineRank;
|
|
431
|
+
lineRank += 1;
|
|
432
|
+
if (before !== undefined && before.offset !== undefined && offset > before.offset)
|
|
433
|
+
return createResult(false);
|
|
434
|
+
const digest = lineDigest(line);
|
|
435
|
+
if (before !== undefined && before.offset !== undefined && offset === before.offset) {
|
|
436
|
+
if (digest !== before.anchorDigest) {
|
|
437
|
+
anchorFailure = sourceError("access-log.cursor-expired", "access log cursor line has expired");
|
|
438
|
+
return createResult(true);
|
|
439
|
+
}
|
|
440
|
+
let lineValue;
|
|
441
|
+
try {
|
|
442
|
+
lineValue = decoder.decode(line);
|
|
443
|
+
}
|
|
444
|
+
catch {
|
|
445
|
+
anchorFailure = sourceError("access-log.cursor-expired", "access log cursor line has expired");
|
|
446
|
+
return createResult(true);
|
|
447
|
+
}
|
|
448
|
+
if (!projectAccessLogParser(lineValue).success) {
|
|
449
|
+
anchorFailure = sourceError("access-log.cursor-expired", "access log cursor line has expired");
|
|
450
|
+
return createResult(true);
|
|
451
|
+
}
|
|
452
|
+
anchorSeen = true;
|
|
453
|
+
return createResult(false);
|
|
454
|
+
}
|
|
455
|
+
let lineValue;
|
|
456
|
+
try {
|
|
457
|
+
lineValue = decoder.decode(line);
|
|
458
|
+
}
|
|
459
|
+
catch {
|
|
460
|
+
malformedLines += 1;
|
|
461
|
+
return createResult(false);
|
|
462
|
+
}
|
|
463
|
+
const parsedR = projectAccessLogParser(lineValue);
|
|
464
|
+
if (!parsedR.success) {
|
|
465
|
+
malformedLines += 1;
|
|
466
|
+
return createResult(false);
|
|
467
|
+
}
|
|
468
|
+
records.push({ record: parsedR.data, source: sourceFile, line: currentLine, offset, anchorDigest: digest });
|
|
469
|
+
return createResult(records.length >= capacity);
|
|
470
|
+
};
|
|
471
|
+
while (position < openedStat.size && !stop) {
|
|
472
|
+
const remaining = limits.maxScannedBytes - budget.scannedBytes;
|
|
473
|
+
if (remaining <= 0)
|
|
474
|
+
return sourceError("access-log.resource-limit", "access log scanned-byte limit exceeded", sourceFile.path);
|
|
475
|
+
const chunkEnd = openedStat.size - position;
|
|
476
|
+
const size = Math.min(readChunkBytes, chunkEnd, remaining);
|
|
477
|
+
const start = openedStat.size - position - size;
|
|
478
|
+
const chunk = Buffer.allocUnsafe(size);
|
|
479
|
+
const readR = await handle.read(chunk, 0, size, start);
|
|
480
|
+
if (readR.bytesRead === 0)
|
|
481
|
+
return sourceError("access-log.rotation-race", "access log changed while being read", sourceFile.path);
|
|
482
|
+
if (readR.bytesRead !== size)
|
|
483
|
+
return sourceError("access-log.rotation-race", "access log changed while being read", sourceFile.path);
|
|
484
|
+
budget.scannedBytes += readR.bytesRead;
|
|
485
|
+
position += readR.bytesRead;
|
|
486
|
+
if (position === readR.bytesRead && chunk[chunk.length - 1] !== 0x0a)
|
|
487
|
+
lineEnd = "eof";
|
|
488
|
+
let index = chunk.length;
|
|
489
|
+
while (index > 0 && !stop) {
|
|
490
|
+
let lineBreak = index - 1;
|
|
491
|
+
while (lineBreak >= 0 && chunk[lineBreak] !== 0x0a)
|
|
492
|
+
lineBreak -= 1;
|
|
493
|
+
const appendR = linePartsAppend(lineParts, lineLength, chunk.subarray(lineBreak + 1, index), limits.maxLineBytes);
|
|
494
|
+
if (!appendR.success)
|
|
495
|
+
return appendR;
|
|
496
|
+
lineLength = appendR.data;
|
|
497
|
+
if (lineBreak < 0) {
|
|
498
|
+
index = 0;
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
if (lineEnd === undefined) {
|
|
502
|
+
lineParts = [];
|
|
503
|
+
lineLength = 0;
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
const lineR = lineDataResolve(lineParts, true, lineLength, limits.maxLineBytes);
|
|
507
|
+
if (!lineR.success)
|
|
508
|
+
return lineR;
|
|
509
|
+
const processR = processLine(lineR.data, lineEndOffset - lineLength);
|
|
510
|
+
if (!processR.success)
|
|
511
|
+
return processR;
|
|
512
|
+
stop = processR.data;
|
|
513
|
+
lineParts = [];
|
|
514
|
+
lineLength = 0;
|
|
515
|
+
}
|
|
516
|
+
lineEnd = openedStat.size - position + lineBreak;
|
|
517
|
+
lineEndOffset = lineEnd;
|
|
518
|
+
index = lineBreak;
|
|
519
|
+
}
|
|
520
|
+
if (!stop) {
|
|
521
|
+
const appendR = linePartsAppend(lineParts, lineLength, chunk.subarray(0, index), limits.maxLineBytes);
|
|
522
|
+
if (!appendR.success)
|
|
523
|
+
return appendR;
|
|
524
|
+
lineLength = appendR.data;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
if (!stop && lineEnd !== undefined) {
|
|
528
|
+
const lineR = lineDataResolve(lineParts, true, lineLength, limits.maxLineBytes);
|
|
529
|
+
if (!lineR.success)
|
|
530
|
+
return lineR;
|
|
531
|
+
const processR = processLine(lineR.data, lineEndOffset - lineLength);
|
|
532
|
+
if (!processR.success)
|
|
533
|
+
return processR;
|
|
534
|
+
stop = processR.data;
|
|
535
|
+
}
|
|
536
|
+
const finalR = await sourceFileFinalVerify(sourceFile);
|
|
537
|
+
if (!finalR.success)
|
|
538
|
+
return finalR;
|
|
539
|
+
if (anchorFailure !== undefined)
|
|
540
|
+
return anchorFailure;
|
|
541
|
+
if (before !== undefined && !anchorSeen)
|
|
542
|
+
return sourceError("access-log.cursor-expired", "access log cursor line has expired");
|
|
543
|
+
return createResult({ records, malformedLines });
|
|
544
|
+
}
|
|
545
|
+
catch (error) {
|
|
546
|
+
if (errorCode(error) === "ELOOP")
|
|
547
|
+
return sourceError("access-log.symlink", "access log is a symbolic link", sourceFile.path);
|
|
548
|
+
if (errorCode(error) === "ENOENT")
|
|
549
|
+
return sourceError("access-log.rotation-race", "access log changed while being read", sourceFile.path);
|
|
550
|
+
return sourceError("access-log.storage-unavailable", "access log could not be read", sourceFile.path);
|
|
551
|
+
}
|
|
552
|
+
finally {
|
|
553
|
+
await fileHandleClose(handle);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
async function* sourceFileChunkIterator(handle, size, limits, budget) {
|
|
557
|
+
let position = 0;
|
|
558
|
+
while (position < size) {
|
|
559
|
+
const remaining = limits.maxScannedBytes - budget.scannedBytes;
|
|
560
|
+
if (remaining <= 0)
|
|
561
|
+
throw scanFailureCreate("access-log.resource-limit", "access log scanned-byte limit exceeded");
|
|
562
|
+
const readSize = Math.min(readChunkBytes, size - position, remaining);
|
|
563
|
+
const chunk = Buffer.allocUnsafe(readSize);
|
|
564
|
+
const readR = await handle.read(chunk, 0, readSize, position);
|
|
565
|
+
if (readR.bytesRead === 0)
|
|
566
|
+
throw scanFailureCreate("access-log.rotation-race", "access log changed while being read");
|
|
567
|
+
budget.scannedBytes += readR.bytesRead;
|
|
568
|
+
position += readR.bytesRead;
|
|
569
|
+
yield chunk.subarray(0, readR.bytesRead);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
async function archiveFileScan(sourceFile, limits, budget, capacity, before) {
|
|
573
|
+
if (sourceFile.encoding === "gzip" && budget.decompressedBytes >= limits.maxDecompressedBytes) {
|
|
574
|
+
return sourceError("access-log.resource-limit", "access log decompressed-byte limit exceeded", sourceFile.path);
|
|
575
|
+
}
|
|
576
|
+
let handle;
|
|
577
|
+
try {
|
|
578
|
+
const handleR = await sourceFileOpen(sourceFile);
|
|
579
|
+
if (!handleR.success)
|
|
580
|
+
return handleR;
|
|
581
|
+
handle = handleR.data;
|
|
582
|
+
const openedStat = await handle.stat();
|
|
583
|
+
if (!statIsRegular(openedStat))
|
|
584
|
+
return sourceError("access-log.non-regular-file", "access log is not a regular file", sourceFile.path);
|
|
585
|
+
if (statFingerprint(openedStat, sourceFile.kind) !== sourceFile.fingerprint) {
|
|
586
|
+
return sourceError("access-log.rotation-race", "access log changed while being opened", sourceFile.path);
|
|
587
|
+
}
|
|
588
|
+
const records = [];
|
|
589
|
+
const decoder = new TextDecoder("utf-8", { fatal: true });
|
|
590
|
+
let malformedLines = 0;
|
|
591
|
+
let lineIndex = 0;
|
|
592
|
+
let anchorSeen = before === undefined;
|
|
593
|
+
let anchorFailure;
|
|
594
|
+
let stop = false;
|
|
595
|
+
let lineParts = [];
|
|
596
|
+
let lineLength = 0;
|
|
597
|
+
const processLine = (line) => {
|
|
598
|
+
const currentLine = lineIndex;
|
|
599
|
+
lineIndex += 1;
|
|
600
|
+
if (before !== undefined && currentLine > before.line)
|
|
601
|
+
return false;
|
|
602
|
+
const digest = lineDigest(line);
|
|
603
|
+
if (before !== undefined && currentLine === before.line) {
|
|
604
|
+
if (digest !== before.anchorDigest) {
|
|
605
|
+
anchorFailure = sourceError("access-log.cursor-expired", "access log cursor line has expired");
|
|
606
|
+
return true;
|
|
607
|
+
}
|
|
608
|
+
let lineValue;
|
|
609
|
+
try {
|
|
610
|
+
lineValue = decoder.decode(line);
|
|
611
|
+
}
|
|
612
|
+
catch {
|
|
613
|
+
anchorFailure = sourceError("access-log.cursor-expired", "access log cursor line has expired");
|
|
614
|
+
return true;
|
|
615
|
+
}
|
|
616
|
+
if (!projectAccessLogParser(lineValue).success) {
|
|
617
|
+
anchorFailure = sourceError("access-log.cursor-expired", "access log cursor line has expired");
|
|
618
|
+
return true;
|
|
619
|
+
}
|
|
620
|
+
anchorSeen = true;
|
|
621
|
+
return true;
|
|
622
|
+
}
|
|
623
|
+
let lineValue;
|
|
624
|
+
try {
|
|
625
|
+
lineValue = decoder.decode(line);
|
|
626
|
+
}
|
|
627
|
+
catch {
|
|
628
|
+
malformedLines += 1;
|
|
629
|
+
return false;
|
|
630
|
+
}
|
|
631
|
+
const parsedR = projectAccessLogParser(lineValue);
|
|
632
|
+
if (!parsedR.success) {
|
|
633
|
+
malformedLines += 1;
|
|
634
|
+
return false;
|
|
635
|
+
}
|
|
636
|
+
if (records.length >= capacity)
|
|
637
|
+
records.shift();
|
|
638
|
+
records.push({ record: parsedR.data, source: sourceFile, line: currentLine, anchorDigest: digest });
|
|
639
|
+
return false;
|
|
640
|
+
};
|
|
641
|
+
const source = Readable.from(sourceFileChunkIterator(handle, openedStat.size, limits, budget));
|
|
642
|
+
const gunzip = sourceFile.encoding === "gzip" ? createGunzip({ chunkSize: readChunkBytes }) : undefined;
|
|
643
|
+
const decompressed = gunzip === undefined ? source : source.pipe(gunzip);
|
|
644
|
+
try {
|
|
645
|
+
for await (const chunk of decompressed) {
|
|
646
|
+
if (sourceFile.encoding === "gzip") {
|
|
647
|
+
budget.decompressedBytes += chunk.length;
|
|
648
|
+
if (budget.decompressedBytes > limits.maxDecompressedBytes)
|
|
649
|
+
throw new ScanResultError(sourceError("access-log.resource-limit", "access log decompressed-byte limit exceeded", sourceFile.path));
|
|
650
|
+
}
|
|
651
|
+
let index = 0;
|
|
652
|
+
while (index < chunk.length) {
|
|
653
|
+
const lineBreak = chunk.indexOf(0x0a, index);
|
|
654
|
+
const end = lineBreak < 0 ? chunk.length : lineBreak;
|
|
655
|
+
const appendR = linePartsAppend(lineParts, lineLength, chunk.subarray(index, end), limits.maxLineBytes);
|
|
656
|
+
if (!appendR.success)
|
|
657
|
+
throw new ScanResultError(appendR);
|
|
658
|
+
lineLength = appendR.data;
|
|
659
|
+
if (lineBreak < 0)
|
|
660
|
+
break;
|
|
661
|
+
const lineR = lineDataResolve(lineParts, false, lineLength, limits.maxLineBytes);
|
|
662
|
+
if (!lineR.success)
|
|
663
|
+
throw new ScanResultError(lineR);
|
|
664
|
+
stop = processLine(lineR.data);
|
|
665
|
+
lineParts = [];
|
|
666
|
+
lineLength = 0;
|
|
667
|
+
index = lineBreak + 1;
|
|
668
|
+
if (stop)
|
|
669
|
+
break;
|
|
670
|
+
}
|
|
671
|
+
if (stop)
|
|
672
|
+
break;
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
catch (error) {
|
|
676
|
+
if (error instanceof ScanResultError)
|
|
677
|
+
return error.result;
|
|
678
|
+
if (errorCode(error) === "access-log.resource-limit")
|
|
679
|
+
return sourceError("access-log.resource-limit", "access log scanned-byte limit exceeded", sourceFile.path);
|
|
680
|
+
if (errorCode(error) === "access-log.rotation-race")
|
|
681
|
+
return sourceError("access-log.rotation-race", "access log changed while being read", sourceFile.path);
|
|
682
|
+
if (errorCode(error) === "ELOOP")
|
|
683
|
+
return sourceError("access-log.symlink", "access log is a symbolic link", sourceFile.path);
|
|
684
|
+
return sourceError("access-log.storage-unavailable", "access log archive could not be decompressed", sourceFile.path);
|
|
685
|
+
}
|
|
686
|
+
finally {
|
|
687
|
+
source.destroy();
|
|
688
|
+
gunzip?.destroy();
|
|
689
|
+
}
|
|
690
|
+
if (lineLength > 0) {
|
|
691
|
+
const lineR = lineDataResolve(lineParts, false, lineLength, limits.maxLineBytes);
|
|
692
|
+
if (!lineR.success)
|
|
693
|
+
return lineR;
|
|
694
|
+
processLine(lineR.data);
|
|
695
|
+
}
|
|
696
|
+
const finalR = await sourceFileFinalVerify(sourceFile);
|
|
697
|
+
if (!finalR.success)
|
|
698
|
+
return finalR;
|
|
699
|
+
if (anchorFailure !== undefined)
|
|
700
|
+
return anchorFailure;
|
|
701
|
+
if (before !== undefined && !anchorSeen)
|
|
702
|
+
return sourceError("access-log.cursor-expired", "access log cursor line has expired");
|
|
703
|
+
return createResult({ records, malformedLines });
|
|
704
|
+
}
|
|
705
|
+
catch (error) {
|
|
706
|
+
if (errorCode(error) === "ELOOP")
|
|
707
|
+
return sourceError("access-log.symlink", "access log is a symbolic link", sourceFile.path);
|
|
708
|
+
if (errorCode(error) === "ENOENT")
|
|
709
|
+
return sourceError("access-log.rotation-race", "access log changed while being read", sourceFile.path);
|
|
710
|
+
return sourceError("access-log.storage-unavailable", "access log could not be read", sourceFile.path);
|
|
711
|
+
}
|
|
712
|
+
finally {
|
|
713
|
+
await fileHandleClose(handle);
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
function readOptionsValidate(options, maxRecords) {
|
|
717
|
+
if (options !== undefined && (typeof options !== "object" || options === null || Array.isArray(options))) {
|
|
718
|
+
return sourceError("access-log.invalid-input", "access log read options are invalid");
|
|
719
|
+
}
|
|
720
|
+
const limit = options?.limit ?? maxRecords;
|
|
721
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > maxRecords) {
|
|
722
|
+
return sourceError("access-log.invalid-input", "access log limit is invalid");
|
|
723
|
+
}
|
|
724
|
+
if (options?.before !== undefined && (typeof options.before !== "string" || options.before.length > 4096)) {
|
|
725
|
+
return sourceError("access-log.invalid-input", "access log cursor is invalid");
|
|
726
|
+
}
|
|
727
|
+
return createResult({ limit, before: options?.before });
|
|
728
|
+
}
|
|
729
|
+
function projectKeyValidate(project) {
|
|
730
|
+
try {
|
|
731
|
+
return (typeof project === "object" &&
|
|
732
|
+
project !== null &&
|
|
733
|
+
!Array.isArray(project) &&
|
|
734
|
+
typeof project.owner === "string" &&
|
|
735
|
+
project.owner.length > 0 &&
|
|
736
|
+
typeof project.name === "string" &&
|
|
737
|
+
project.name.length > 0);
|
|
738
|
+
}
|
|
739
|
+
catch {
|
|
740
|
+
return false;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
function cursorFailure(result) {
|
|
744
|
+
if (result.success)
|
|
745
|
+
return sourceError("access-log.invalid-cursor", "access log cursor is invalid");
|
|
746
|
+
if (result.code === "access-log.cursor-expired")
|
|
747
|
+
return sourceError("access-log.cursor-expired", result.errorMessage);
|
|
748
|
+
return sourceError("access-log.invalid-cursor", result.errorMessage);
|
|
749
|
+
}
|
|
750
|
+
export function projectAccessLogSourceFileCreate(options) {
|
|
751
|
+
const normalizedOptions = typeof options === "string" ? { root: options } : options;
|
|
752
|
+
if (typeof normalizedOptions !== "object" ||
|
|
753
|
+
normalizedOptions === null ||
|
|
754
|
+
typeof normalizedOptions.root !== "string") {
|
|
755
|
+
return sourceError("access-log.invalid-input", "access log source options are invalid");
|
|
756
|
+
}
|
|
757
|
+
const rootR = a.safeParse(projectAccessLogRootSchema, normalizedOptions.root);
|
|
758
|
+
if (!rootR.success)
|
|
759
|
+
return sourceError("access-log.invalid-input", a.summarize(rootR.issues));
|
|
760
|
+
const limitsR = limitsResolve(normalizedOptions.limits ?? {
|
|
761
|
+
maxRecords: normalizedOptions.maxRecords,
|
|
762
|
+
maxLineBytes: normalizedOptions.maxLineBytes,
|
|
763
|
+
maxScannedBytes: normalizedOptions.maxScannedBytes,
|
|
764
|
+
maxDecompressedBytes: normalizedOptions.maxDecompressedBytes,
|
|
765
|
+
});
|
|
766
|
+
if (!limitsR.success)
|
|
767
|
+
return limitsR;
|
|
768
|
+
const cursor = normalizedOptions.cursor ??
|
|
769
|
+
projectAccessLogCursorCreate({
|
|
770
|
+
clock: normalizedOptions.clock,
|
|
771
|
+
lifetimeMs: normalizedOptions.cursorLifetimeMs,
|
|
772
|
+
});
|
|
773
|
+
const root = rootR.output;
|
|
774
|
+
const limits = limitsR.data;
|
|
775
|
+
const source = {
|
|
776
|
+
async read(project, options = {}) {
|
|
777
|
+
if (!projectKeyValidate(project))
|
|
778
|
+
return sourceError("access-log.invalid-input", "access log project is invalid");
|
|
779
|
+
const readOptionsR = readOptionsValidate(options, limits.maxRecords);
|
|
780
|
+
if (!readOptionsR.success)
|
|
781
|
+
return readOptionsR;
|
|
782
|
+
const cursorR = readOptionsR.data.before === undefined ? createResult(undefined) : cursor.decode(readOptionsR.data.before);
|
|
783
|
+
if (!cursorR.success)
|
|
784
|
+
return cursorFailure(cursorR);
|
|
785
|
+
const projectId = projectAccessLogId(project);
|
|
786
|
+
if (cursorR.data !== undefined && cursorR.data.projectId !== projectId) {
|
|
787
|
+
return sourceError("access-log.invalid-cursor", "access log cursor does not belong to this project");
|
|
788
|
+
}
|
|
789
|
+
if (cursorR.data !== undefined && cursorR.data.anchorDigest === undefined) {
|
|
790
|
+
return sourceError("access-log.cursor-expired", "access log cursor anchor has expired");
|
|
791
|
+
}
|
|
792
|
+
const filesR = await sourceFilesResolve(root, project);
|
|
793
|
+
if (!filesR.success)
|
|
794
|
+
return filesR;
|
|
795
|
+
if (filesR.data === undefined)
|
|
796
|
+
return createResult({ records: [], next: undefined, partial: false, malformedLines: 0 });
|
|
797
|
+
const files = filesR.data.files;
|
|
798
|
+
try {
|
|
799
|
+
const before = cursorR.data;
|
|
800
|
+
let beforeIndex = -1;
|
|
801
|
+
if (before !== undefined) {
|
|
802
|
+
beforeIndex = files.findIndex((file) => file.name === before.source);
|
|
803
|
+
if (beforeIndex < 0)
|
|
804
|
+
return sourceError("access-log.cursor-expired", "access log cursor source has expired");
|
|
805
|
+
if (files[beforeIndex]?.fingerprint !== before.sourceFingerprint) {
|
|
806
|
+
return sourceError("access-log.cursor-expired", "access log cursor source has expired");
|
|
807
|
+
}
|
|
808
|
+
if (files[beforeIndex]?.kind === "active" && before.offset === undefined) {
|
|
809
|
+
return sourceError("access-log.cursor-expired", "access log cursor offset has expired");
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
const budget = { scannedBytes: 0, decompressedBytes: 0 };
|
|
813
|
+
const records = [];
|
|
814
|
+
let malformedLines = 0;
|
|
815
|
+
for (let fileIndex = 0; fileIndex < files.length; fileIndex += 1) {
|
|
816
|
+
const file = files[fileIndex];
|
|
817
|
+
if (file === undefined)
|
|
818
|
+
continue;
|
|
819
|
+
if (before !== undefined && fileIndex < beforeIndex)
|
|
820
|
+
continue;
|
|
821
|
+
const capacity = readOptionsR.data.limit + 1 - records.length;
|
|
822
|
+
if (capacity <= 0)
|
|
823
|
+
break;
|
|
824
|
+
const fileBefore = before !== undefined && fileIndex === beforeIndex ? before : undefined;
|
|
825
|
+
const scanR = file.kind === "active"
|
|
826
|
+
? await activeFileScan(file, limits, budget, capacity, fileBefore)
|
|
827
|
+
: await archiveFileScan(file, limits, budget, capacity, fileBefore);
|
|
828
|
+
if (!scanR.success)
|
|
829
|
+
return scanR;
|
|
830
|
+
malformedLines += scanR.data.malformedLines;
|
|
831
|
+
const scannedRecords = file.kind === "archive" ? [...scanR.data.records].reverse() : scanR.data.records;
|
|
832
|
+
for (const scannedRecord of scannedRecords) {
|
|
833
|
+
if (records.length >= readOptionsR.data.limit + 1)
|
|
834
|
+
break;
|
|
835
|
+
records.push(scannedRecord);
|
|
836
|
+
}
|
|
837
|
+
if (records.length >= readOptionsR.data.limit + 1)
|
|
838
|
+
break;
|
|
839
|
+
}
|
|
840
|
+
let next;
|
|
841
|
+
if (records.length > readOptionsR.data.limit) {
|
|
842
|
+
const nextAnchor = records[readOptionsR.data.limit - 1];
|
|
843
|
+
if (nextAnchor === undefined)
|
|
844
|
+
return sourceError("access-log.invalid-input", "access log cursor anchor is invalid");
|
|
845
|
+
const nextR = cursor.encode({
|
|
846
|
+
anchorDigest: nextAnchor.anchorDigest,
|
|
847
|
+
projectId,
|
|
848
|
+
source: nextAnchor.source.name,
|
|
849
|
+
sourceFingerprint: nextAnchor.source.fingerprint,
|
|
850
|
+
line: nextAnchor.line,
|
|
851
|
+
...(nextAnchor.offset === undefined ? {} : { offset: nextAnchor.offset }),
|
|
852
|
+
});
|
|
853
|
+
if (!nextR.success)
|
|
854
|
+
return sourceError("access-log.invalid-input", nextR.errorMessage);
|
|
855
|
+
next = nextR.data;
|
|
856
|
+
}
|
|
857
|
+
return createResult({
|
|
858
|
+
records: records.slice(0, readOptionsR.data.limit).map((scannedRecord) => scannedRecord.record),
|
|
859
|
+
next,
|
|
860
|
+
partial: malformedLines > 0,
|
|
861
|
+
malformedLines,
|
|
862
|
+
});
|
|
863
|
+
}
|
|
864
|
+
finally {
|
|
865
|
+
await sourceDirectoriesClose(filesR.data.directories);
|
|
866
|
+
}
|
|
867
|
+
},
|
|
868
|
+
};
|
|
869
|
+
return createResult(source);
|
|
870
|
+
}
|
|
871
|
+
//# sourceMappingURL=projectAccessLogSourceFileCreate.js.map
|