@knpkv/control-center 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +309 -0
- package/dist/client/.vite/manifest.json +452 -0
- package/dist/client/assets/ActiveWorkPage-Bvji6Tys.js +2 -0
- package/dist/client/assets/ActiveWorkPage-Bvji6Tys.js.map +1 -0
- package/dist/client/assets/ActiveWorkPage-CxNa23uW.css +1 -0
- package/dist/client/assets/AgentPage-Bom41la2.js +3 -0
- package/dist/client/assets/AgentPage-Bom41la2.js.map +1 -0
- package/dist/client/assets/AgentPage-f6WXQA21.css +1 -0
- package/dist/client/assets/AtlassianOAuthCallbackPage-Cqqgj2o3.css +1 -0
- package/dist/client/assets/AtlassianOAuthCallbackPage-dr-B9-DD.js +2 -0
- package/dist/client/assets/AtlassianOAuthCallbackPage-dr-B9-DD.js.map +1 -0
- package/dist/client/assets/AuthorizedSharePage-C-P-PNfm.js +2 -0
- package/dist/client/assets/AuthorizedSharePage-C-P-PNfm.js.map +1 -0
- package/dist/client/assets/AuthorizedSharePage-DzE_yvHI.css +1 -0
- package/dist/client/assets/BrowserCrypto-BPiuCuW-.js +2 -0
- package/dist/client/assets/BrowserCrypto-BPiuCuW-.js.map +1 -0
- package/dist/client/assets/BrowserSessionHydrator-C8F_LGhg.js +2 -0
- package/dist/client/assets/BrowserSessionHydrator-C8F_LGhg.js.map +1 -0
- package/dist/client/assets/CommandSearch-D6iFcdvj.js +2 -0
- package/dist/client/assets/CommandSearch-D6iFcdvj.js.map +1 -0
- package/dist/client/assets/CommandSearch-Df36xGJc.css +1 -0
- package/dist/client/assets/Dialog-DwSIPb-B-DVn37afM.js +42 -0
- package/dist/client/assets/Dialog-DwSIPb-B-DVn37afM.js.map +1 -0
- package/dist/client/assets/ItemsPage-DsQCbQ11.css +1 -0
- package/dist/client/assets/ItemsPage-x39U11an.js +2 -0
- package/dist/client/assets/ItemsPage-x39U11an.js.map +1 -0
- package/dist/client/assets/PairPage-D5vlz4OG.js +2 -0
- package/dist/client/assets/PairPage-D5vlz4OG.js.map +1 -0
- package/dist/client/assets/PortfolioOverview-DSUabOmm.js +2 -0
- package/dist/client/assets/PortfolioOverview-DSUabOmm.js.map +1 -0
- package/dist/client/assets/PortfolioOverview-nrb6Ebbh.css +1 -0
- package/dist/client/assets/ReleaseRoute-DyDm5s85.js +2 -0
- package/dist/client/assets/ReleaseRoute-DyDm5s85.js.map +1 -0
- package/dist/client/assets/ReleaseRoute-R3GdFaGc.css +1 -0
- package/dist/client/assets/ReleaseWorkset-6gGnZPS8.css +1 -0
- package/dist/client/assets/ReleaseWorkset-BhGacsgb.js +2 -0
- package/dist/client/assets/ReleaseWorkset-BhGacsgb.js.map +1 -0
- package/dist/client/assets/ServicesPage-CoMVH2Si.js +2 -0
- package/dist/client/assets/ServicesPage-CoMVH2Si.js.map +1 -0
- package/dist/client/assets/ServicesPage-D76DN13E.css +1 -0
- package/dist/client/assets/TimelinePage-38jhMz_L.css +1 -0
- package/dist/client/assets/TimelinePage-D8Fj_351.js +2 -0
- package/dist/client/assets/TimelinePage-D8Fj_351.js.map +1 -0
- package/dist/client/assets/WorkspaceEntityLink-BRifdJHn.js +2 -0
- package/dist/client/assets/WorkspaceEntityLink-BRifdJHn.js.map +1 -0
- package/dist/client/assets/WorkspaceEntityRoute-BwpujSqk.css +1 -0
- package/dist/client/assets/WorkspaceEntityRoute-DPci8Q8I.js +30 -0
- package/dist/client/assets/WorkspaceEntityRoute-DPci8Q8I.js.map +1 -0
- package/dist/client/assets/WorkspaceReleaseLayout-CMg2-6IQ.css +1 -0
- package/dist/client/assets/WorkspaceReleaseLayout-DDLdY0rU.js +2 -0
- package/dist/client/assets/WorkspaceReleaseLayout-DDLdY0rU.js.map +1 -0
- package/dist/client/assets/authenticatedMutationClient-D5yD0rch.js +2 -0
- package/dist/client/assets/authenticatedMutationClient-D5yD0rch.js.map +1 -0
- package/dist/client/assets/authorizedShareTransport-Dyj53kJf.js +2 -0
- package/dist/client/assets/authorizedShareTransport-Dyj53kJf.js.map +1 -0
- package/dist/client/assets/client-OmvShYdC.js +12 -0
- package/dist/client/assets/client-OmvShYdC.js.map +1 -0
- package/dist/client/assets/connectionTestTransport-c25QXx7A.js +2 -0
- package/dist/client/assets/connectionTestTransport-c25QXx7A.js.map +1 -0
- package/dist/client/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/client/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
- package/dist/client/assets/index-CkslINEH.css +1 -0
- package/dist/client/assets/index-DLoOV6Hp.js +11 -0
- package/dist/client/assets/index-DLoOV6Hp.js.map +1 -0
- package/dist/client/assets/jsx-runtime-n5LQ9ujS.js +2 -0
- package/dist/client/assets/jsx-runtime-n5LQ9ujS.js.map +1 -0
- package/dist/client/assets/patterns-DEbg7R-A-Cw0A2uKS.js +2 -0
- package/dist/client/assets/patterns-DEbg7R-A-Cw0A2uKS.js.map +1 -0
- package/dist/client/assets/presentPortfolio-CkRqd_zz.js +2 -0
- package/dist/client/assets/presentPortfolio-CkRqd_zz.js.map +1 -0
- package/dist/client/assets/presentWorkspaceItems-BU__8LcC.js +2 -0
- package/dist/client/assets/presentWorkspaceItems-BU__8LcC.js.map +1 -0
- package/dist/client/assets/releasePaths-s-fSbIM-.js +2 -0
- package/dist/client/assets/releasePaths-s-fSbIM-.js.map +1 -0
- package/dist/client/assets/releaseRoutes-DSWkTh-E.js +2 -0
- package/dist/client/assets/releaseRoutes-DSWkTh-E.js.map +1 -0
- package/dist/client/assets/serviceOnboarding-B9pvdyWf.js +2 -0
- package/dist/client/assets/serviceOnboarding-B9pvdyWf.js.map +1 -0
- package/dist/client/assets/useCompactReleasePreview-Ch3XxgJU.js +2 -0
- package/dist/client/assets/useCompactReleasePreview-Ch3XxgJU.js.map +1 -0
- package/dist/client/assets/useWorkspaceItems-D0FuHGto.js +2 -0
- package/dist/client/assets/useWorkspaceItems-D0FuHGto.js.map +1 -0
- package/dist/client/assets/workspaceEntityPaths-xAl2jRFm.js +2 -0
- package/dist/client/assets/workspaceEntityPaths-xAl2jRFm.js.map +1 -0
- package/dist/client/assets/workspaceEntityRoutes-CRcfSq7c.js +2 -0
- package/dist/client/assets/workspaceEntityRoutes-CRcfSq7c.js.map +1 -0
- package/dist/client/build-graph.json +1465 -0
- package/dist/client/index.html +17 -0
- package/dist/server/api/agent.d.ts +652 -0
- package/dist/server/api/agent.d.ts.map +1 -0
- package/dist/server/api/client.d.ts +17 -0
- package/dist/server/api/client.d.ts.map +1 -0
- package/dist/server/api/controlCenterApi.d.ts +16 -0
- package/dist/server/api/controlCenterApi.d.ts.map +1 -0
- package/dist/server/api/deliveryGraph.d.ts +8714 -0
- package/dist/server/api/deliveryGraph.d.ts.map +1 -0
- package/dist/server/api/errors.d.ts +87 -0
- package/dist/server/api/errors.d.ts.map +1 -0
- package/dist/server/api/index.d.ts +14 -0
- package/dist/server/api/index.d.ts.map +1 -0
- package/dist/server/api/index.js +12 -0
- package/dist/server/api/index.js.map +1 -0
- package/dist/server/api/liveEvents.d.ts +1120 -0
- package/dist/server/api/liveEvents.d.ts.map +1 -0
- package/dist/server/api/media.d.ts +30 -0
- package/dist/server/api/media.d.ts.map +1 -0
- package/dist/server/api/plugins.d.ts +1853 -0
- package/dist/server/api/plugins.d.ts.map +1 -0
- package/dist/server/api/portfolio.d.ts +742 -0
- package/dist/server/api/portfolio.d.ts.map +1 -0
- package/dist/server/api/session.d.ts +204 -0
- package/dist/server/api/session.d.ts.map +1 -0
- package/dist/server/api/shares.d.ts +422 -0
- package/dist/server/api/shares.d.ts.map +1 -0
- package/dist/server/api/timeline.d.ts +86 -0
- package/dist/server/api/timeline.d.ts.map +1 -0
- package/dist/server/api/wire.d.ts +4 -0
- package/dist/server/api/wire.d.ts.map +1 -0
- package/dist/server/assets/BindConfig-BjK10BEb.js +15440 -0
- package/dist/server/assets/BindConfig-BjK10BEb.js.map +1 -0
- package/dist/server/assets/controlCenterApi-tZPvRPRH.js +1430 -0
- package/dist/server/assets/controlCenterApi-tZPvRPRH.js.map +1 -0
- package/dist/server/assets/domainEvent-x7yeq-gU.js +2130 -0
- package/dist/server/assets/domainEvent-x7yeq-gU.js.map +1 -0
- package/dist/server/assets/firstPartyServices-Y41P8uke.js +49 -0
- package/dist/server/assets/firstPartyServices-Y41P8uke.js.map +1 -0
- package/dist/server/assets/manualPluginSynchronization-C0aHB4UM.js +1805 -0
- package/dist/server/assets/manualPluginSynchronization-C0aHB4UM.js.map +1 -0
- package/dist/server/assets/portfolioInvalidation-Ds9Xm4_P.js +15463 -0
- package/dist/server/assets/portfolioInvalidation-Ds9Xm4_P.js.map +1 -0
- package/dist/server/assets/readiness-CzU3vjYQ.js +1012 -0
- package/dist/server/assets/readiness-CzU3vjYQ.js.map +1 -0
- package/dist/server/build-graph.json +3948 -0
- package/dist/server/domain/actors.d.ts +147 -0
- package/dist/server/domain/actors.d.ts.map +1 -0
- package/dist/server/domain/authorizedShare.d.ts +24 -0
- package/dist/server/domain/authorizedShare.d.ts.map +1 -0
- package/dist/server/domain/deliveryGraph.d.ts +848 -0
- package/dist/server/domain/deliveryGraph.d.ts.map +1 -0
- package/dist/server/domain/domainEvent.d.ts +50 -0
- package/dist/server/domain/domainEvent.d.ts.map +1 -0
- package/dist/server/domain/firstPartyServices.d.ts +60 -0
- package/dist/server/domain/firstPartyServices.d.ts.map +1 -0
- package/dist/server/domain/freshness.d.ts +367 -0
- package/dist/server/domain/freshness.d.ts.map +1 -0
- package/dist/server/domain/governedAction/bindings.d.ts +264 -0
- package/dist/server/domain/governedAction/bindings.d.ts.map +1 -0
- package/dist/server/domain/governedAction/index.d.ts +6 -0
- package/dist/server/domain/governedAction/index.d.ts.map +1 -0
- package/dist/server/domain/governedAction/lifecycle.d.ts +71 -0
- package/dist/server/domain/governedAction/lifecycle.d.ts.map +1 -0
- package/dist/server/domain/governedAction/model.d.ts +357 -0
- package/dist/server/domain/governedAction/model.d.ts.map +1 -0
- package/dist/server/domain/governedAction/stateMachine.d.ts +450 -0
- package/dist/server/domain/governedAction/stateMachine.d.ts.map +1 -0
- package/dist/server/domain/identifiers.d.ts +110 -0
- package/dist/server/domain/identifiers.d.ts.map +1 -0
- package/dist/server/domain/index.d.ts +26 -0
- package/dist/server/domain/index.d.ts.map +1 -0
- package/dist/server/domain/index.js +52 -0
- package/dist/server/domain/index.js.map +1 -0
- package/dist/server/domain/normalizedIssue.d.ts +223 -0
- package/dist/server/domain/normalizedIssue.d.ts.map +1 -0
- package/dist/server/domain/plugins/actions.d.ts +246 -0
- package/dist/server/domain/plugins/actions.d.ts.map +1 -0
- package/dist/server/domain/plugins/bounds.d.ts +12 -0
- package/dist/server/domain/plugins/bounds.d.ts.map +1 -0
- package/dist/server/domain/plugins/descriptor.d.ts +205 -0
- package/dist/server/domain/plugins/descriptor.d.ts.map +1 -0
- package/dist/server/domain/plugins/discovery.d.ts +39 -0
- package/dist/server/domain/plugins/discovery.d.ts.map +1 -0
- package/dist/server/domain/plugins/events.d.ts +232 -0
- package/dist/server/domain/plugins/events.d.ts.map +1 -0
- package/dist/server/domain/plugins/index.d.ts +11 -0
- package/dist/server/domain/plugins/index.d.ts.map +1 -0
- package/dist/server/domain/readiness/evaluate.d.ts +4 -0
- package/dist/server/domain/readiness/evaluate.d.ts.map +1 -0
- package/dist/server/domain/readiness/index.d.ts +7 -0
- package/dist/server/domain/readiness/index.d.ts.map +1 -0
- package/dist/server/domain/readiness/material.d.ts +114 -0
- package/dist/server/domain/readiness/material.d.ts.map +1 -0
- package/dist/server/domain/readiness/model.d.ts +1736 -0
- package/dist/server/domain/readiness/model.d.ts.map +1 -0
- package/dist/server/domain/readiness/policy.d.ts +73 -0
- package/dist/server/domain/readiness/policy.d.ts.map +1 -0
- package/dist/server/domain/readiness/rollup.d.ts +6 -0
- package/dist/server/domain/readiness/rollup.d.ts.map +1 -0
- package/dist/server/domain/relationshipRepair.d.ts +97 -0
- package/dist/server/domain/relationshipRepair.d.ts.map +1 -0
- package/dist/server/domain/release.d.ts +191 -0
- package/dist/server/domain/release.d.ts.map +1 -0
- package/dist/server/domain/releaseRelay.d.ts +44 -0
- package/dist/server/domain/releaseRelay.d.ts.map +1 -0
- package/dist/server/domain/sourceRevision.d.ts +39 -0
- package/dist/server/domain/sourceRevision.d.ts.map +1 -0
- package/dist/server/domain/timeline.d.ts +105 -0
- package/dist/server/domain/timeline.d.ts.map +1 -0
- package/dist/server/domain/utcTimestamp.d.ts +9 -0
- package/dist/server/domain/utcTimestamp.d.ts.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +7 -0
- package/dist/server/server/DataRootProtocol.d.ts +80 -0
- package/dist/server/server/DataRootProtocol.d.ts.map +1 -0
- package/dist/server/server/agent/AgentJobWorker.d.ts +48 -0
- package/dist/server/server/agent/AgentJobWorker.d.ts.map +1 -0
- package/dist/server/server/agent/AgentRuntimeRegistry.d.ts +17 -0
- package/dist/server/server/agent/AgentRuntimeRegistry.d.ts.map +1 -0
- package/dist/server/server/agent/index.d.ts +4 -0
- package/dist/server/server/agent/index.d.ts.map +1 -0
- package/dist/server/server/api/ApiConfiguration.d.ts +24 -0
- package/dist/server/server/api/ApiConfiguration.d.ts.map +1 -0
- package/dist/server/server/api/ApiMiddleware.d.ts +14 -0
- package/dist/server/server/api/ApiMiddleware.d.ts.map +1 -0
- package/dist/server/server/api/ApplicationServices.d.ts +320 -0
- package/dist/server/server/api/ApplicationServices.d.ts.map +1 -0
- package/dist/server/server/api/ControlCenterApiServer.d.ts +11 -0
- package/dist/server/server/api/ControlCenterApiServer.d.ts.map +1 -0
- package/dist/server/server/api/ErrorMapping.d.ts +29 -0
- package/dist/server/server/api/ErrorMapping.d.ts.map +1 -0
- package/dist/server/server/api/Handlers.d.ts +24 -0
- package/dist/server/server/api/Handlers.d.ts.map +1 -0
- package/dist/server/server/api/LiveStreamAdmission.d.ts +34 -0
- package/dist/server/server/api/LiveStreamAdmission.d.ts.map +1 -0
- package/dist/server/server/api/RequestBoundary.d.ts +17 -0
- package/dist/server/server/api/RequestBoundary.d.ts.map +1 -0
- package/dist/server/server/api/RequestContext.d.ts +38 -0
- package/dist/server/server/api/RequestContext.d.ts.map +1 -0
- package/dist/server/server/api/RequestLimits.d.ts +79 -0
- package/dist/server/server/api/RequestLimits.d.ts.map +1 -0
- package/dist/server/server/api/index.d.ts +9 -0
- package/dist/server/server/api/index.d.ts.map +1 -0
- package/dist/server/server/application/authorizedShares.d.ts +29 -0
- package/dist/server/server/application/authorizedShares.d.ts.map +1 -0
- package/dist/server/server/application/awsResourceDiscovery.d.ts +18 -0
- package/dist/server/server/application/awsResourceDiscovery.d.ts.map +1 -0
- package/dist/server/server/application/connectionOwnership.d.ts +50 -0
- package/dist/server/server/application/connectionOwnership.d.ts.map +1 -0
- package/dist/server/server/application/deliveryGraphInspection.d.ts +59 -0
- package/dist/server/server/application/deliveryGraphInspection.d.ts.map +1 -0
- package/dist/server/server/application/errors.d.ts +10 -0
- package/dist/server/server/application/errors.d.ts.map +1 -0
- package/dist/server/server/application/fakeReleaseNormalization.d.ts +152 -0
- package/dist/server/server/application/fakeReleaseNormalization.d.ts.map +1 -0
- package/dist/server/server/application/index.d.ts +17 -0
- package/dist/server/server/application/index.d.ts.map +1 -0
- package/dist/server/server/application/liveEvents.d.ts +22 -0
- package/dist/server/server/application/liveEvents.d.ts.map +1 -0
- package/dist/server/server/application/manualPluginSynchronization.d.ts +41 -0
- package/dist/server/server/application/manualPluginSynchronization.d.ts.map +1 -0
- package/dist/server/server/application/mediaReads.d.ts +14 -0
- package/dist/server/server/application/mediaReads.d.ts.map +1 -0
- package/dist/server/server/application/normalizedPluginPageMaterialization.d.ts +109 -0
- package/dist/server/server/application/normalizedPluginPageMaterialization.d.ts.map +1 -0
- package/dist/server/server/application/pluginAdministration.d.ts +1318 -0
- package/dist/server/server/application/pluginAdministration.d.ts.map +1 -0
- package/dist/server/server/application/pluginSynchronizationAuthority.d.ts +22 -0
- package/dist/server/server/application/pluginSynchronizationAuthority.d.ts.map +1 -0
- package/dist/server/server/application/portfolioInvalidation.d.ts +35 -0
- package/dist/server/server/application/portfolioInvalidation.d.ts.map +1 -0
- package/dist/server/server/application/portfolioSnapshots.d.ts +12 -0
- package/dist/server/server/application/portfolioSnapshots.d.ts.map +1 -0
- package/dist/server/server/application/readinessDigests.d.ts +3 -0
- package/dist/server/server/application/readinessDigests.d.ts.map +1 -0
- package/dist/server/server/application/relationshipInference.d.ts +57 -0
- package/dist/server/server/application/relationshipInference.d.ts.map +1 -0
- package/dist/server/server/application/relationshipInferenceMaterialization.d.ts +26 -0
- package/dist/server/server/application/relationshipInferenceMaterialization.d.ts.map +1 -0
- package/dist/server/server/application/relationshipRepairProposals.d.ts +41 -0
- package/dist/server/server/application/relationshipRepairProposals.d.ts.map +1 -0
- package/dist/server/server/application/releaseAgent.d.ts +30 -0
- package/dist/server/server/application/releaseAgent.d.ts.map +1 -0
- package/dist/server/server/application/releaseAgentJobs.d.ts +26 -0
- package/dist/server/server/application/releaseAgentJobs.d.ts.map +1 -0
- package/dist/server/server/application/releaseSynchronization.d.ts +55 -0
- package/dist/server/server/application/releaseSynchronization.d.ts.map +1 -0
- package/dist/server/server/application/timelineExportAudits.d.ts +22 -0
- package/dist/server/server/application/timelineExportAudits.d.ts.map +1 -0
- package/dist/server/server/application/timelineExports.d.ts +46 -0
- package/dist/server/server/application/timelineExports.d.ts.map +1 -0
- package/dist/server/server/application/timelineReads.d.ts +29 -0
- package/dist/server/server/application/timelineReads.d.ts.map +1 -0
- package/dist/server/server/auth/Auth.d.ts +169 -0
- package/dist/server/server/auth/Auth.d.ts.map +1 -0
- package/dist/server/server/auth/AuthRepository.d.ts +160 -0
- package/dist/server/server/auth/AuthRepository.d.ts.map +1 -0
- package/dist/server/server/auth/TerminalRecovery.d.ts +35 -0
- package/dist/server/server/auth/TerminalRecovery.d.ts.map +1 -0
- package/dist/server/server/auth/errors.d.ts +31 -0
- package/dist/server/server/auth/errors.d.ts.map +1 -0
- package/dist/server/server/auth/index.d.ts +5 -0
- package/dist/server/server/auth/index.d.ts.map +1 -0
- package/dist/server/server/auth/models.d.ts +63 -0
- package/dist/server/server/auth/models.d.ts.map +1 -0
- package/dist/server/server/cli.d.ts +3 -0
- package/dist/server/server/cli.d.ts.map +1 -0
- package/dist/server/server/cli.js +669 -0
- package/dist/server/server/cli.js.map +1 -0
- package/dist/server/server/cliArguments.d.ts +21 -0
- package/dist/server/server/cliArguments.d.ts.map +1 -0
- package/dist/server/server/cliConfiguration.d.ts +20 -0
- package/dist/server/server/cliConfiguration.d.ts.map +1 -0
- package/dist/server/server/governance/governedActionAuthority.d.ts +54 -0
- package/dist/server/server/governance/governedActionAuthority.d.ts.map +1 -0
- package/dist/server/server/governance/governedActionDigests.d.ts +1348 -0
- package/dist/server/server/governance/governedActionDigests.d.ts.map +1 -0
- package/dist/server/server/governance/internal/GovernedActionExecutionEngine.d.ts +55 -0
- package/dist/server/server/governance/internal/GovernedActionExecutionEngine.d.ts.map +1 -0
- package/dist/server/server/governance/internal/GovernedActionExecutionStore.d.ts +116 -0
- package/dist/server/server/governance/internal/GovernedActionExecutionStore.d.ts.map +1 -0
- package/dist/server/server/governance/internal/GovernedActionPolicyEvaluator.d.ts +120 -0
- package/dist/server/server/governance/internal/GovernedActionPolicyEvaluator.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/begin.d.ts +17 -0
- package/dist/server/server/governance/internal/execution-store/begin.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/current-evidence.d.ts +33 -0
- package/dist/server/server/governance/internal/execution-store/current-evidence.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/current-session.d.ts +29 -0
- package/dist/server/server/governance/internal/execution-store/current-session.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/current-target.d.ts +28 -0
- package/dist/server/server/governance/internal/execution-store/current-target.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/dispatch-inbox.d.ts +20 -0
- package/dist/server/server/governance/internal/execution-store/dispatch-inbox.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/dispatch-outcome.d.ts +78 -0
- package/dist/server/server/governance/internal/execution-store/dispatch-outcome.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/inspect.d.ts +17 -0
- package/dist/server/server/governance/internal/execution-store/inspect.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/live.d.ts +6 -0
- package/dist/server/server/governance/internal/execution-store/live.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/preparation.d.ts +42 -0
- package/dist/server/server/governance/internal/execution-store/preparation.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/provider-outcome-fold.d.ts +33 -0
- package/dist/server/server/governance/internal/execution-store/provider-outcome-fold.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/reconciliation-inbox.d.ts +20 -0
- package/dist/server/server/governance/internal/execution-store/reconciliation-inbox.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/reconciliation-locator.d.ts +5 -0
- package/dist/server/server/governance/internal/execution-store/reconciliation-locator.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/reconciliation-outcome.d.ts +123 -0
- package/dist/server/server/governance/internal/execution-store/reconciliation-outcome.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/record-blocked.d.ts +13 -0
- package/dist/server/server/governance/internal/execution-store/record-blocked.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/record-dispatch.d.ts +12 -0
- package/dist/server/server/governance/internal/execution-store/record-dispatch.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/record-reconciliation.d.ts +12 -0
- package/dist/server/server/governance/internal/execution-store/record-reconciliation.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/record-recovery-unavailable.d.ts +11 -0
- package/dist/server/server/governance/internal/execution-store/record-recovery-unavailable.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/record-unknown.d.ts +11 -0
- package/dist/server/server/governance/internal/execution-store/record-unknown.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/recovery-candidates.d.ts +12 -0
- package/dist/server/server/governance/internal/execution-store/recovery-candidates.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/recovery-claim-expiry.d.ts +9 -0
- package/dist/server/server/governance/internal/execution-store/recovery-claim-expiry.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts +465 -0
- package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts.map +1 -0
- package/dist/server/server/governance/internal/execution-store/tokens.d.ts +52 -0
- package/dist/server/server/governance/internal/execution-store/tokens.d.ts.map +1 -0
- package/dist/server/server/http/StaticApplication.d.ts +8 -0
- package/dist/server/server/http/StaticApplication.d.ts.map +1 -0
- package/dist/server/server/http/index.d.ts +4 -0
- package/dist/server/server/http/index.d.ts.map +1 -0
- package/dist/server/server/http/security/HttpLimits.d.ts +22 -0
- package/dist/server/server/http/security/HttpLimits.d.ts.map +1 -0
- package/dist/server/server/http/security/RequestPolicy.d.ts +26 -0
- package/dist/server/server/http/security/RequestPolicy.d.ts.map +1 -0
- package/dist/server/server/http/security/RichDocument.d.ts +154 -0
- package/dist/server/server/http/security/RichDocument.d.ts.map +1 -0
- package/dist/server/server/http/security/SecurityHeaders.d.ts +7 -0
- package/dist/server/server/http/security/SecurityHeaders.d.ts.map +1 -0
- package/dist/server/server/http/security/StaticAssetStore.d.ts +43 -0
- package/dist/server/server/http/security/StaticAssetStore.d.ts.map +1 -0
- package/dist/server/server/http/security/UrlPolicy.d.ts +30 -0
- package/dist/server/server/http/security/UrlPolicy.d.ts.map +1 -0
- package/dist/server/server/http/security/index.d.ts +8 -0
- package/dist/server/server/http/security/index.d.ts.map +1 -0
- package/dist/server/server/index.d.ts +18 -0
- package/dist/server/server/index.d.ts.map +1 -0
- package/dist/server/server/index.js +583 -0
- package/dist/server/server/index.js.map +1 -0
- package/dist/server/server/observability.d.ts +13 -0
- package/dist/server/server/observability.d.ts.map +1 -0
- package/dist/server/server/persistence/ContentStore.d.ts +86 -0
- package/dist/server/server/persistence/ContentStore.d.ts.map +1 -0
- package/dist/server/server/persistence/Database.d.ts +26 -0
- package/dist/server/server/persistence/Database.d.ts.map +1 -0
- package/dist/server/server/persistence/Persistence.d.ts +7042 -0
- package/dist/server/server/persistence/Persistence.d.ts.map +1 -0
- package/dist/server/server/persistence/PersistenceConfig.d.ts +27 -0
- package/dist/server/server/persistence/PersistenceConfig.d.ts.map +1 -0
- package/dist/server/server/persistence/backup/BackupArchive.d.ts +32 -0
- package/dist/server/server/persistence/backup/BackupArchive.d.ts.map +1 -0
- package/dist/server/server/persistence/backup/BackupArchiveCore.d.ts +23 -0
- package/dist/server/server/persistence/backup/BackupArchiveCore.d.ts.map +1 -0
- package/dist/server/server/persistence/backup/BackupManifest.d.ts +136 -0
- package/dist/server/server/persistence/backup/BackupManifest.d.ts.map +1 -0
- package/dist/server/server/persistence/backup/DatabaseSnapshot.d.ts +53 -0
- package/dist/server/server/persistence/backup/DatabaseSnapshot.d.ts.map +1 -0
- package/dist/server/server/persistence/backup/errors.d.ts +53 -0
- package/dist/server/server/persistence/backup/errors.d.ts.map +1 -0
- package/dist/server/server/persistence/backup/index.d.ts +4 -0
- package/dist/server/server/persistence/backup/index.d.ts.map +1 -0
- package/dist/server/server/persistence/errors.d.ts +99 -0
- package/dist/server/server/persistence/errors.d.ts.map +1 -0
- package/dist/server/server/persistence/governedActionReconciliationLocator.d.ts +14 -0
- package/dist/server/server/persistence/governedActionReconciliationLocator.d.ts.map +1 -0
- package/dist/server/server/persistence/index.d.ts +11 -0
- package/dist/server/server/persistence/index.d.ts.map +1 -0
- package/dist/server/server/persistence/object-store/BlobDigest.d.ts +6 -0
- package/dist/server/server/persistence/object-store/BlobDigest.d.ts.map +1 -0
- package/dist/server/server/persistence/object-store/BlobPath.d.ts +12 -0
- package/dist/server/server/persistence/object-store/BlobPath.d.ts.map +1 -0
- package/dist/server/server/persistence/object-store/BlobPublisher.d.ts +8 -0
- package/dist/server/server/persistence/object-store/BlobPublisher.d.ts.map +1 -0
- package/dist/server/server/persistence/object-store/BlobRef.d.ts +16 -0
- package/dist/server/server/persistence/object-store/BlobRef.d.ts.map +1 -0
- package/dist/server/server/persistence/object-store/BlobStore.d.ts +37 -0
- package/dist/server/server/persistence/object-store/BlobStore.d.ts.map +1 -0
- package/dist/server/server/persistence/object-store/BlobStoreError.d.ts +57 -0
- package/dist/server/server/persistence/object-store/BlobStoreError.d.ts.map +1 -0
- package/dist/server/server/persistence/object-store/BlobStoreTypes.d.ts +28 -0
- package/dist/server/server/persistence/object-store/BlobStoreTypes.d.ts.map +1 -0
- package/dist/server/server/persistence/object-store/OpenedBlob.d.ts +21 -0
- package/dist/server/server/persistence/object-store/OpenedBlob.d.ts.map +1 -0
- package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts +21 -0
- package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/agentJobModels.d.ts +142 -0
- package/dist/server/server/persistence/repositories/agentJobModels.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/agentJobRepository.d.ts +134 -0
- package/dist/server/server/persistence/repositories/agentJobRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/authorizedShareRepository.d.ts +92 -0
- package/dist/server/server/persistence/repositories/authorizedShareRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/contentBlobMetadataRepository.d.ts +67 -0
- package/dist/server/server/persistence/repositories/contentBlobMetadataRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts +2989 -0
- package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts +566 -0
- package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/delivery-graph/integrity.d.ts +16 -0
- package/dist/server/server/persistence/repositories/delivery-graph/integrity.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/delivery-graph/quarantine.d.ts +22 -0
- package/dist/server/server/persistence/repositories/delivery-graph/quarantine.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts +2147 -0
- package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/delivery-graph/release-slice.d.ts +16 -0
- package/dist/server/server/persistence/repositories/delivery-graph/release-slice.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts +683 -0
- package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts +946 -0
- package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts +2121 -0
- package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/domainEventModels.d.ts +89 -0
- package/dist/server/server/persistence/repositories/domainEventModels.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/domainEventRepository.d.ts +85 -0
- package/dist/server/server/persistence/repositories/domainEventRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/entityRepository.d.ts +134 -0
- package/dist/server/server/persistence/repositories/entityRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governed-action/codec.d.ts +1478 -0
- package/dist/server/server/persistence/repositories/governed-action/codec.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governed-action/contract.d.ts +858 -0
- package/dist/server/server/persistence/repositories/governed-action/contract.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governed-action/quarantine.d.ts +22 -0
- package/dist/server/server/persistence/repositories/governed-action/quarantine.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governed-action/read.d.ts +452 -0
- package/dist/server/server/persistence/repositories/governed-action/read.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governed-action/rows.d.ts +115 -0
- package/dist/server/server/persistence/repositories/governed-action/rows.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts +457 -0
- package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts +518 -0
- package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts +702 -0
- package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governed-action/write.d.ts +618 -0
- package/dist/server/server/persistence/repositories/governed-action/write.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/governedActionRepository.d.ts +467 -0
- package/dist/server/server/persistence/repositories/governedActionRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/index.d.ts +26 -0
- package/dist/server/server/persistence/repositories/index.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/internal.d.ts +38 -0
- package/dist/server/server/persistence/repositories/internal.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/models.d.ts +420 -0
- package/dist/server/server/persistence/repositories/models.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/peopleRepository.d.ts +407 -0
- package/dist/server/server/persistence/repositories/peopleRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/persistedRowQuarantine.d.ts +20 -0
- package/dist/server/server/persistence/repositories/persistedRowQuarantine.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/pluginConfigurationModels.d.ts +76 -0
- package/dist/server/server/persistence/repositories/pluginConfigurationModels.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/pluginConfigurationRepository.d.ts +179 -0
- package/dist/server/server/persistence/repositories/pluginConfigurationRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/pluginConnectionRepository.d.ts +123 -0
- package/dist/server/server/persistence/repositories/pluginConnectionRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/pluginRuntimeModels.d.ts +195 -0
- package/dist/server/server/persistence/repositories/pluginRuntimeModels.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/pluginRuntimeRepository.d.ts +431 -0
- package/dist/server/server/persistence/repositories/pluginRuntimeRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/providerAccountRepository.d.ts +150 -0
- package/dist/server/server/persistence/repositories/providerAccountRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/quarantineRepository.d.ts +42 -0
- package/dist/server/server/persistence/repositories/quarantineRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/readiness/assessments.d.ts +2679 -0
- package/dist/server/server/persistence/repositories/readiness/assessments.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/readiness/codec.d.ts +1368 -0
- package/dist/server/server/persistence/repositories/readiness/codec.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/readiness/contract.d.ts +3315 -0
- package/dist/server/server/persistence/repositories/readiness/contract.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/readiness/materialization.d.ts +459 -0
- package/dist/server/server/persistence/repositories/readiness/materialization.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/readiness/quarantine.d.ts +22 -0
- package/dist/server/server/persistence/repositories/readiness/quarantine.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/readiness/queue.d.ts +112 -0
- package/dist/server/server/persistence/repositories/readiness/queue.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/readiness/rows.d.ts +169 -0
- package/dist/server/server/persistence/repositories/readiness/rows.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/readiness/rules.d.ts +85 -0
- package/dist/server/server/persistence/repositories/readiness/rules.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/readinessRepository.d.ts +1722 -0
- package/dist/server/server/persistence/repositories/readinessRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/relationshipRepairProposalRepository.d.ts +294 -0
- package/dist/server/server/persistence/repositories/relationshipRepairProposalRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/releaseRepository.d.ts +1062 -0
- package/dist/server/server/persistence/repositories/releaseRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/timelineExportAuditRepository.d.ts +39 -0
- package/dist/server/server/persistence/repositories/timelineExportAuditRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/timelineRepository.d.ts +84 -0
- package/dist/server/server/persistence/repositories/timelineRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/repositories/workspaceRepository.d.ts +52 -0
- package/dist/server/server/persistence/repositories/workspaceRepository.d.ts.map +1 -0
- package/dist/server/server/persistence/schema.d.ts +17 -0
- package/dist/server/server/persistence/schema.d.ts.map +1 -0
- package/dist/server/server/persistence/schemas.d.ts +14 -0
- package/dist/server/server/persistence/schemas.d.ts.map +1 -0
- package/dist/server/server/plugins/AtlassianBasicAuth.d.ts +2 -0
- package/dist/server/server/plugins/AtlassianBasicAuth.d.ts.map +1 -0
- package/dist/server/server/plugins/PluginCapabilityCodecs.d.ts +357 -0
- package/dist/server/server/plugins/PluginCapabilityCodecs.d.ts.map +1 -0
- package/dist/server/server/plugins/PluginConnection.d.ts +28 -0
- package/dist/server/server/plugins/PluginConnection.d.ts.map +1 -0
- package/dist/server/server/plugins/PluginConnectionMap.d.ts +22 -0
- package/dist/server/server/plugins/PluginConnectionMap.d.ts.map +1 -0
- package/dist/server/server/plugins/PluginDefinition.d.ts +9 -0
- package/dist/server/server/plugins/PluginDefinition.d.ts.map +1 -0
- package/dist/server/server/plugins/PluginDefinitionV1.d.ts +11 -0
- package/dist/server/server/plugins/PluginDefinitionV1.d.ts.map +1 -0
- package/dist/server/server/plugins/PluginExecutor.d.ts +14 -0
- package/dist/server/server/plugins/PluginExecutor.d.ts.map +1 -0
- package/dist/server/server/plugins/atlassian/AtlassianOAuthGrants.d.ts +35 -0
- package/dist/server/server/plugins/atlassian/AtlassianOAuthGrants.d.ts.map +1 -0
- package/dist/server/server/plugins/atlassian/AtlassianProfiles.d.ts +39 -0
- package/dist/server/server/plugins/atlassian/AtlassianProfiles.d.ts.map +1 -0
- package/dist/server/server/plugins/catalog/firstPartyServiceCatalog.d.ts +13 -0
- package/dist/server/server/plugins/catalog/firstPartyServiceCatalog.d.ts.map +1 -0
- package/dist/server/server/plugins/clockify/ClockifyReadPlugin.d.ts +78 -0
- package/dist/server/server/plugins/clockify/ClockifyReadPlugin.d.ts.map +1 -0
- package/dist/server/server/plugins/clockify/ClockifyReadProvider.d.ts +2 -0
- package/dist/server/server/plugins/clockify/ClockifyReadProvider.d.ts.map +1 -0
- package/dist/server/server/plugins/clockify/ClockifyTimeEntryNormalization.d.ts +2 -0
- package/dist/server/server/plugins/clockify/ClockifyTimeEntryNormalization.d.ts.map +1 -0
- package/dist/server/server/plugins/clockify/index.d.ts +3 -0
- package/dist/server/server/plugins/clockify/index.d.ts.map +1 -0
- package/dist/server/server/plugins/codecommit/CodeCommitPluginDefinition.d.ts +4 -0
- package/dist/server/server/plugins/codecommit/CodeCommitPluginDefinition.d.ts.map +1 -0
- package/dist/server/server/plugins/codecommit/index.d.ts +3 -0
- package/dist/server/server/plugins/codecommit/index.d.ts.map +1 -0
- package/dist/server/server/plugins/codepipeline/CodePipelinePluginDefinition.d.ts +4 -0
- package/dist/server/server/plugins/codepipeline/CodePipelinePluginDefinition.d.ts.map +1 -0
- package/dist/server/server/plugins/codepipeline/CodePipelineReadClient.d.ts +2 -0
- package/dist/server/server/plugins/codepipeline/CodePipelineReadClient.d.ts.map +1 -0
- package/dist/server/server/plugins/codepipeline/CodePipelineReadProvider.d.ts +2 -0
- package/dist/server/server/plugins/codepipeline/CodePipelineReadProvider.d.ts.map +1 -0
- package/dist/server/server/plugins/codepipeline/index.d.ts +3 -0
- package/dist/server/server/plugins/codepipeline/index.d.ts.map +1 -0
- package/dist/server/server/plugins/confluence/ConfluencePageAdapter.d.ts +2 -0
- package/dist/server/server/plugins/confluence/ConfluencePageAdapter.d.ts.map +1 -0
- package/dist/server/server/plugins/confluence/ConfluencePageClient.d.ts +2 -0
- package/dist/server/server/plugins/confluence/ConfluencePageClient.d.ts.map +1 -0
- package/dist/server/server/plugins/confluence/ConfluencePagePluginDefinition.d.ts +44 -0
- package/dist/server/server/plugins/confluence/ConfluencePagePluginDefinition.d.ts.map +1 -0
- package/dist/server/server/plugins/confluence/ConfluencePageSchemas.d.ts +2 -0
- package/dist/server/server/plugins/confluence/ConfluencePageSchemas.d.ts.map +1 -0
- package/dist/server/server/plugins/confluence/SafeConfluenceMarkdown.d.ts +2 -0
- package/dist/server/server/plugins/confluence/SafeConfluenceMarkdown.d.ts.map +1 -0
- package/dist/server/server/plugins/failures.d.ts +79 -0
- package/dist/server/server/plugins/failures.d.ts.map +1 -0
- package/dist/server/server/plugins/fake/FakePluginDefinition.d.ts +17 -0
- package/dist/server/server/plugins/fake/FakePluginDefinition.d.ts.map +1 -0
- package/dist/server/server/plugins/fake/FakePluginProbe.d.ts +40 -0
- package/dist/server/server/plugins/fake/FakePluginProbe.d.ts.map +1 -0
- package/dist/server/server/plugins/fake/FakePluginScenario.d.ts +46 -0
- package/dist/server/server/plugins/fake/FakePluginScenario.d.ts.map +1 -0
- package/dist/server/server/plugins/firstPartySynchronization.d.ts +7 -0
- package/dist/server/server/plugins/firstPartySynchronization.d.ts.map +1 -0
- package/dist/server/server/plugins/index.d.ts +21 -0
- package/dist/server/server/plugins/index.d.ts.map +1 -0
- package/dist/server/server/plugins/internal/AuthorizedPluginExecutor.d.ts +8 -0
- package/dist/server/server/plugins/internal/AuthorizedPluginExecutor.d.ts.map +1 -0
- package/dist/server/server/plugins/internal/AuthorizedPluginExecutorMap.d.ts +27 -0
- package/dist/server/server/plugins/internal/AuthorizedPluginExecutorMap.d.ts.map +1 -0
- package/dist/server/server/plugins/internal/FirstPartyPluginRuntimeRegistry.d.ts +2 -0
- package/dist/server/server/plugins/internal/FirstPartyPluginRuntimeRegistry.d.ts.map +1 -0
- package/dist/server/server/plugins/internal/PluginRuntime.d.ts +13 -0
- package/dist/server/server/plugins/internal/PluginRuntime.d.ts.map +1 -0
- package/dist/server/server/plugins/internal/PluginRuntimeAuthority.d.ts +154 -0
- package/dist/server/server/plugins/internal/PluginRuntimeAuthority.d.ts.map +1 -0
- package/dist/server/server/plugins/internal/PluginRuntimeAuthorityRepository.d.ts +131 -0
- package/dist/server/server/plugins/internal/PluginRuntimeAuthorityRepository.d.ts.map +1 -0
- package/dist/server/server/plugins/internal/PluginRuntimeAuthoritySource.d.ts +23 -0
- package/dist/server/server/plugins/internal/PluginRuntimeAuthoritySource.d.ts.map +1 -0
- package/dist/server/server/plugins/internal/PluginRuntimeMap.d.ts +23 -0
- package/dist/server/server/plugins/internal/PluginRuntimeMap.d.ts.map +1 -0
- package/dist/server/server/plugins/internal/PluginRuntimeRegistry.d.ts +21 -0
- package/dist/server/server/plugins/internal/PluginRuntimeRegistry.d.ts.map +1 -0
- package/dist/server/server/plugins/jira/JiraIssueNormalization.d.ts +2 -0
- package/dist/server/server/plugins/jira/JiraIssueNormalization.d.ts.map +1 -0
- package/dist/server/server/plugins/jira/JiraReadPlugin.d.ts +74 -0
- package/dist/server/server/plugins/jira/JiraReadPlugin.d.ts.map +1 -0
- package/dist/server/server/plugins/jira/JiraReadProvider.d.ts +7 -0
- package/dist/server/server/plugins/jira/JiraReadProvider.d.ts.map +1 -0
- package/dist/server/server/plugins/jira/index.d.ts +3 -0
- package/dist/server/server/plugins/jira/index.d.ts.map +1 -0
- package/dist/server/server/plugins/negotiation.d.ts +75 -0
- package/dist/server/server/plugins/negotiation.d.ts.map +1 -0
- package/dist/server/server/plugins/retryPolicy.d.ts +28 -0
- package/dist/server/server/plugins/retryPolicy.d.ts.map +1 -0
- package/dist/server/server/readinessDigests.d.ts +103 -0
- package/dist/server/server/readinessDigests.d.ts.map +1 -0
- package/dist/server/server/runtime/Bootstrap.d.ts +39 -0
- package/dist/server/server/runtime/Bootstrap.d.ts.map +1 -0
- package/dist/server/server/runtime/ControlCenterServer.d.ts +57 -0
- package/dist/server/server/runtime/ControlCenterServer.d.ts.map +1 -0
- package/dist/server/server/runtime/DatabaseDrain.d.ts +6 -0
- package/dist/server/server/runtime/DatabaseDrain.d.ts.map +1 -0
- package/dist/server/server/runtime/DomainEventWakeups.d.ts +22 -0
- package/dist/server/server/runtime/DomainEventWakeups.d.ts.map +1 -0
- package/dist/server/server/runtime/FirstPartyPluginRuntime.d.ts +2 -0
- package/dist/server/server/runtime/FirstPartyPluginRuntime.d.ts.map +1 -0
- package/dist/server/server/runtime/GovernedActionExecutionStartup.d.ts +35 -0
- package/dist/server/server/runtime/GovernedActionExecutionStartup.d.ts.map +1 -0
- package/dist/server/server/runtime/NodeTransport.d.ts +57 -0
- package/dist/server/server/runtime/NodeTransport.d.ts.map +1 -0
- package/dist/server/server/runtime/ReleaseSynchronizationStartup.d.ts +44 -0
- package/dist/server/server/runtime/ReleaseSynchronizationStartup.d.ts.map +1 -0
- package/dist/server/server/runtime/RequestUrlBoundary.d.ts +4 -0
- package/dist/server/server/runtime/RequestUrlBoundary.d.ts.map +1 -0
- package/dist/server/server/runtime/ServerLifecycle.d.ts +74 -0
- package/dist/server/server/runtime/ServerLifecycle.d.ts.map +1 -0
- package/dist/server/server/runtime/index.d.ts +9 -0
- package/dist/server/server/runtime/index.d.ts.map +1 -0
- package/dist/server/server/secrets/SecretRef.d.ts +6 -0
- package/dist/server/server/secrets/SecretRef.d.ts.map +1 -0
- package/dist/server/server/secrets/SecretStore.d.ts +39 -0
- package/dist/server/server/secrets/SecretStore.d.ts.map +1 -0
- package/dist/server/server/secrets/SecretStoreError.d.ts +41 -0
- package/dist/server/server/secrets/SecretStoreError.d.ts.map +1 -0
- package/dist/server/server/secrets/index.d.ts +5 -0
- package/dist/server/server/secrets/index.d.ts.map +1 -0
- package/dist/server/server/security/BindConfig.d.ts +51 -0
- package/dist/server/server/security/BindConfig.d.ts.map +1 -0
- package/dist/server/server/security/RequestSecurity.d.ts +84 -0
- package/dist/server/server/security/RequestSecurity.d.ts.map +1 -0
- package/dist/server/server/security/index.d.ts +3 -0
- package/dist/server/server/security/index.d.ts.map +1 -0
- package/package.json +101 -0
|
@@ -0,0 +1,1430 @@
|
|
|
1
|
+
import { An as ReadinessVerdict, Br as RelationshipRepairProposalId, Cr as EntityId, Ct as ReleaseServiceName, D as DeliveryEntityStatusGroup, Dr as EvidenceId, E as DeliveryEntityService, Fr as PersonId, Gr as ShareId, Hr as ReleaseId, Ir as PluginConnectionId, Kr as WorkspaceId, Lr as ProviderAccountId, Lt as Actor, M as EvidenceItem, Nt as ReleaseRelayProjection, O as DeliveryNode, Or as FollowedResourceId, Pr as JobId, R as LedgerRevision, S as RelationshipRepairReviewDecision, St as ReleaseLifecycle, T as DeliveryEntityProjection, Tr as EventCursor, Vr as RelationshipRepairReviewId, Wr as SessionId, Wt as Role, _ as RelationshipRepairDisposition, _t as PluginConfigurationFieldV1, b as RelationshipRepairRationale, bt as SemanticVersion, cr as hasMaximumPluginJsonBytes, d as TimelineEventDetail, dr as PluginHealth, g as RelationshipRepairApplication, gr as SourceRevision, i as PortfolioInvalidatedEventV1, j as EvidenceClaim, k as DeliveryRelationship, kn as ReadinessStages, l as TimelineCursor, lr as Freshness, mr as ProviderId, p as TimelinePage, pt as NegotiatedPluginCapabilityV1, s as TimelineActorKind, u as TimelineEvent, ur as PluginFailureClass, v as RelationshipRepairProposal, w as DeliveryEntityKind, wr as EnvironmentId, wt as ReleaseVersion, yn as ReadinessFinding, yr as UtcTimestamp, yt as PluginId, zr as RelationshipId } from "./domainEvent-x7yeq-gU.js";
|
|
2
|
+
import { MAXIMUM_AGENT_OUTPUT_TEXT_LENGTH } from "@knpkv/ai-runtime";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
import { HttpApi, HttpApiEndpoint, HttpApiGroup, HttpApiMiddleware, HttpApiSchema, HttpApiSecurity } from "effect/unstable/httpapi";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as Result from "effect/Result";
|
|
7
|
+
import * as SchemaGetter from "effect/SchemaGetter";
|
|
8
|
+
import * as Context from "effect/Context";
|
|
9
|
+
//#region src/api/errors.ts
|
|
10
|
+
var SafeApiMessage = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500));
|
|
11
|
+
/** Correlation identifier shared by one HTTP response header and its typed error body. */
|
|
12
|
+
var CorrelationId = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(128), Schema.isPattern(/^[A-Za-z0-9._:-]+$/u, { expected: "an HTTP-safe correlation identifier" })).pipe(Schema.brand("CorrelationId"));
|
|
13
|
+
var commonErrorFields = {
|
|
14
|
+
correlationId: CorrelationId,
|
|
15
|
+
message: SafeApiMessage
|
|
16
|
+
};
|
|
17
|
+
/** A request failed schema, authority, origin, or CSRF-shape validation. */
|
|
18
|
+
var InvalidRequestApiError = class extends Schema.TaggedErrorClass()("InvalidRequestApiError", {
|
|
19
|
+
...commonErrorFields,
|
|
20
|
+
code: Schema.Literal("invalid-request")
|
|
21
|
+
}, { httpApiStatus: 400 }) {};
|
|
22
|
+
/** The browser did not present a valid active session. */
|
|
23
|
+
var UnauthorizedApiError = class extends Schema.TaggedErrorClass()("UnauthorizedApiError", {
|
|
24
|
+
...commonErrorFields,
|
|
25
|
+
code: Schema.Literal("unauthorized")
|
|
26
|
+
}, { httpApiStatus: 401 }) {};
|
|
27
|
+
/** The active session cannot perform the requested capability. */
|
|
28
|
+
var ForbiddenApiError = class extends Schema.TaggedErrorClass()("ForbiddenApiError", {
|
|
29
|
+
...commonErrorFields,
|
|
30
|
+
code: Schema.Literal("forbidden")
|
|
31
|
+
}, { httpApiStatus: 403 }) {};
|
|
32
|
+
/** An authenticated lookup did not resolve to a visible resource. */
|
|
33
|
+
var NotFoundApiError = class extends Schema.TaggedErrorClass()("NotFoundApiError", {
|
|
34
|
+
...commonErrorFields,
|
|
35
|
+
code: Schema.Literal("not-found")
|
|
36
|
+
}, { httpApiStatus: 404 }) {};
|
|
37
|
+
/** Current durable state conflicts with the requested transition. */
|
|
38
|
+
var ConflictApiError = class extends Schema.TaggedErrorClass()("ConflictApiError", {
|
|
39
|
+
...commonErrorFields,
|
|
40
|
+
code: Schema.Literal("conflict")
|
|
41
|
+
}, { httpApiStatus: 409 }) {};
|
|
42
|
+
/** A bounded request exceeded the public API size limit. */
|
|
43
|
+
var PayloadTooLargeApiError = class extends Schema.TaggedErrorClass()("PayloadTooLargeApiError", {
|
|
44
|
+
...commonErrorFields,
|
|
45
|
+
code: Schema.Literal("payload-too-large")
|
|
46
|
+
}, { httpApiStatus: 413 }) {};
|
|
47
|
+
/** The request did not complete within its bounded server deadline. */
|
|
48
|
+
var RequestTimedOutApiError = class extends Schema.TaggedErrorClass()("RequestTimedOutApiError", {
|
|
49
|
+
...commonErrorFields,
|
|
50
|
+
code: Schema.Literal("request-timed-out")
|
|
51
|
+
}, { httpApiStatus: 408 }) {};
|
|
52
|
+
/** The caller must wait until the optional safe retry instant. */
|
|
53
|
+
var RateLimitedApiError = class extends Schema.TaggedErrorClass()("RateLimitedApiError", {
|
|
54
|
+
...commonErrorFields,
|
|
55
|
+
code: Schema.Literal("rate-limited"),
|
|
56
|
+
retryAt: Schema.NullOr(UtcTimestamp)
|
|
57
|
+
}, { httpApiStatus: 429 }) {};
|
|
58
|
+
/** A required local or provider service is temporarily unavailable. */
|
|
59
|
+
var ServiceUnavailableApiError = class extends Schema.TaggedErrorClass()("ServiceUnavailableApiError", {
|
|
60
|
+
...commonErrorFields,
|
|
61
|
+
code: Schema.Literal("service-unavailable"),
|
|
62
|
+
retryAt: Schema.NullOr(UtcTimestamp)
|
|
63
|
+
}, { httpApiStatus: 503 }) {};
|
|
64
|
+
/** Required response header attached to every successful and failed API response. */
|
|
65
|
+
var CorrelationResponseHeaders = Schema.Struct({ "x-correlation-id": CorrelationId }).annotate({ identifier: "CorrelationResponseHeaders" });
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/api/session.ts
|
|
68
|
+
var LOWERCASE_SECRET_PATTERN = /^[0-9a-f]{64}$/u;
|
|
69
|
+
/** Single-use pairing credential accepted only by the public pairing endpoint. */
|
|
70
|
+
var PairingCode = Schema.String.check(Schema.isPattern(LOWERCASE_SECRET_PATTERN, { expected: "a lowercase 256-bit pairing credential" })).pipe(Schema.brand("PairingCode"));
|
|
71
|
+
/** Mutation proof issued separately from the opaque session cookie. */
|
|
72
|
+
var CsrfToken = Schema.String.check(Schema.isPattern(LOWERCASE_SECRET_PATTERN, { expected: "a lowercase 256-bit CSRF credential" })).pipe(Schema.brand("CsrfToken"));
|
|
73
|
+
/** Secret-free metadata describing an authenticated browser session. */
|
|
74
|
+
var SessionSummary = Schema.Struct({
|
|
75
|
+
sessionId: SessionId,
|
|
76
|
+
workspaceId: WorkspaceId,
|
|
77
|
+
actor: Actor,
|
|
78
|
+
permission: Role,
|
|
79
|
+
createdAt: UtcTimestamp,
|
|
80
|
+
lastSeenAt: UtcTimestamp,
|
|
81
|
+
idleExpiresAt: UtcTimestamp,
|
|
82
|
+
absoluteExpiresAt: UtcTimestamp,
|
|
83
|
+
revokedAt: Schema.NullOr(UtcTimestamp)
|
|
84
|
+
}).annotate({ identifier: "ApiSessionSummary" });
|
|
85
|
+
/** Pairing request whose credential is never represented in a URL. */
|
|
86
|
+
var PairSessionRequest = Schema.Struct({ pairingCode: PairingCode });
|
|
87
|
+
/** Pairing result; the opaque session token is delivered only through the response cookie. */
|
|
88
|
+
var PairSessionResponse = Schema.Struct({
|
|
89
|
+
csrfToken: CsrfToken,
|
|
90
|
+
session: SessionSummary
|
|
91
|
+
});
|
|
92
|
+
/** Authenticated session metadata with a recoverable, session-bound mutation proof. */
|
|
93
|
+
var CurrentSessionResponse = Schema.Struct({
|
|
94
|
+
csrfToken: CsrfToken,
|
|
95
|
+
session: SessionSummary
|
|
96
|
+
});
|
|
97
|
+
/** Bounded session-administration response. */
|
|
98
|
+
var SessionListResponse = Schema.Array(SessionSummary).check(Schema.makeFilter((sessions) => sessions.length <= 100, { expected: "at most 100 sessions" }));
|
|
99
|
+
/** Authenticated session attached to endpoint handlers by cookie middleware. */
|
|
100
|
+
var CurrentSession = class extends Context.Service()("@knpkv/control-center/api/CurrentSession") {};
|
|
101
|
+
/** Public middleware identity for the opaque `cc_session` cookie. */
|
|
102
|
+
var SessionCookieAuth = class extends HttpApiMiddleware.Service()("@knpkv/control-center/api/SessionCookieAuth", {
|
|
103
|
+
error: [
|
|
104
|
+
UnauthorizedApiError,
|
|
105
|
+
ForbiddenApiError,
|
|
106
|
+
ServiceUnavailableApiError
|
|
107
|
+
],
|
|
108
|
+
security: { sessionCookie: HttpApiSecurity.apiKey({
|
|
109
|
+
in: "cookie",
|
|
110
|
+
key: "cc_session"
|
|
111
|
+
}) }
|
|
112
|
+
}) {};
|
|
113
|
+
/** Public middleware identity for the separate mutation CSRF header. */
|
|
114
|
+
var SessionMutationAuth = class extends HttpApiMiddleware.Service()("@knpkv/control-center/api/SessionMutationAuth", {
|
|
115
|
+
error: [
|
|
116
|
+
InvalidRequestApiError,
|
|
117
|
+
ForbiddenApiError,
|
|
118
|
+
ServiceUnavailableApiError
|
|
119
|
+
],
|
|
120
|
+
security: { csrfToken: HttpApiSecurity.apiKey({
|
|
121
|
+
in: "header",
|
|
122
|
+
key: "x-csrf-token"
|
|
123
|
+
}) }
|
|
124
|
+
}) {};
|
|
125
|
+
/** Compatibility name emphasizing the CSRF mechanism used by mutation authorization. */
|
|
126
|
+
var MutationCsrf = SessionMutationAuth;
|
|
127
|
+
var authenticatedErrors$1 = [
|
|
128
|
+
UnauthorizedApiError,
|
|
129
|
+
ForbiddenApiError,
|
|
130
|
+
RequestTimedOutApiError,
|
|
131
|
+
ServiceUnavailableApiError
|
|
132
|
+
];
|
|
133
|
+
var pair = HttpApiEndpoint.post("pair", "/pair", {
|
|
134
|
+
payload: PairSessionRequest,
|
|
135
|
+
success: PairSessionResponse,
|
|
136
|
+
error: [
|
|
137
|
+
InvalidRequestApiError,
|
|
138
|
+
UnauthorizedApiError,
|
|
139
|
+
ConflictApiError,
|
|
140
|
+
RequestTimedOutApiError,
|
|
141
|
+
ServiceUnavailableApiError
|
|
142
|
+
]
|
|
143
|
+
});
|
|
144
|
+
var current = HttpApiEndpoint.get("current", "/current", {
|
|
145
|
+
success: CurrentSessionResponse,
|
|
146
|
+
error: authenticatedErrors$1
|
|
147
|
+
}).middleware(SessionCookieAuth);
|
|
148
|
+
var list$1 = HttpApiEndpoint.get("list", "/", {
|
|
149
|
+
success: SessionListResponse,
|
|
150
|
+
error: authenticatedErrors$1
|
|
151
|
+
}).middleware(SessionCookieAuth);
|
|
152
|
+
var revoke$1 = HttpApiEndpoint.delete("revoke", "/:sessionId", {
|
|
153
|
+
params: Schema.Struct({ sessionId: SessionId }),
|
|
154
|
+
success: HttpApiSchema.NoContent,
|
|
155
|
+
error: authenticatedErrors$1
|
|
156
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
157
|
+
var logout = HttpApiEndpoint.post("logout", "/logout", {
|
|
158
|
+
success: HttpApiSchema.NoContent,
|
|
159
|
+
error: authenticatedErrors$1
|
|
160
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
161
|
+
/** Session pairing, inspection, administration, and logout contract. */
|
|
162
|
+
var SessionApiGroup = class extends HttpApiGroup.make("session").add(pair, current, list$1, revoke$1, logout).prefix("/api/v1/session") {};
|
|
163
|
+
//#endregion
|
|
164
|
+
//#region src/api/plugins.ts
|
|
165
|
+
var MAXIMUM_PLUGIN_CONNECTIONS = 100;
|
|
166
|
+
var MAXIMUM_PROVIDER_ACCOUNTS = 100;
|
|
167
|
+
var MAXIMUM_FOLLOWED_RESOURCES = 100;
|
|
168
|
+
var MAXIMUM_DISCOVERED_AWS_PROFILES = 100;
|
|
169
|
+
var MAXIMUM_DISCOVERED_AWS_RESOURCES = 20;
|
|
170
|
+
var MAXIMUM_DISCOVERED_ATLASSIAN_PROFILES = 100;
|
|
171
|
+
var MAXIMUM_ATLASSIAN_OAUTH_SITES = 100;
|
|
172
|
+
var MAXIMUM_CONFIGURATION_VALUES = 100;
|
|
173
|
+
var MAXIMUM_SECRET_VALUE_LENGTH = 16384;
|
|
174
|
+
var isProviderHttpUrl = Schema.makeFilter((value) => {
|
|
175
|
+
const decoded = Schema.decodeUnknownResult(Schema.URLFromString)(value);
|
|
176
|
+
if (Result.isFailure(decoded)) return false;
|
|
177
|
+
const url = decoded.success;
|
|
178
|
+
return (url.protocol === "https:" || url.protocol === "http:") && url.hostname.length > 0 && url.username.length === 0 && url.password.length === 0 && url.hash.length === 0;
|
|
179
|
+
}, { expected: "an HTTP(S) provider URL without credentials or a fragment" });
|
|
180
|
+
/** Stable field key shared by descriptor metadata and configuration values. */
|
|
181
|
+
var PluginConfigurationKey = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(100)).pipe(Schema.brand("PluginConfigurationKey"));
|
|
182
|
+
/** Opaque reference created through the separate secret-management boundary. */
|
|
183
|
+
var OpaqueSecretReference = Schema.String.check(Schema.isPattern(/^secret_[0-9a-f]{64}$/u, { expected: "an opaque secret reference" })).pipe(Schema.brand("OpaqueSecretReference"));
|
|
184
|
+
var configurationValueFields = { key: PluginConfigurationKey };
|
|
185
|
+
var BoundedConfigurationText = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(4096));
|
|
186
|
+
var BoundedConfigurationUrl = BoundedConfigurationText.check(isProviderHttpUrl);
|
|
187
|
+
var AtlassianCloudSiteUrl = BoundedConfigurationUrl.check(Schema.makeFilter((value) => {
|
|
188
|
+
const decoded = Schema.decodeUnknownResult(Schema.URLFromString)(value);
|
|
189
|
+
if (Result.isFailure(decoded)) return false;
|
|
190
|
+
const url = decoded.success;
|
|
191
|
+
return url.protocol === "https:" && url.port.length === 0 && url.hostname.endsWith(".atlassian.net") && url.hostname.length > 14 && (url.pathname === "" || url.pathname === "/") && url.search.length === 0;
|
|
192
|
+
}, { expected: "an HTTPS Atlassian Cloud site root" }));
|
|
193
|
+
/** Explicit replacement semantics for a redacted secret in a full configuration update. */
|
|
194
|
+
var SecretReferencePatchOperation = Schema.Union([
|
|
195
|
+
Schema.TaggedStruct("keep", {}),
|
|
196
|
+
Schema.TaggedStruct("clear", {}),
|
|
197
|
+
Schema.TaggedStruct("replace", { reference: OpaqueSecretReference })
|
|
198
|
+
]).pipe(Schema.toTaggedUnion("_tag"));
|
|
199
|
+
/** Secret-safe current value; secret fields reveal only whether a reference is configured. */
|
|
200
|
+
var RedactedPluginConfigurationValue = Schema.Union([
|
|
201
|
+
Schema.TaggedStruct("text", {
|
|
202
|
+
...configurationValueFields,
|
|
203
|
+
value: BoundedConfigurationText
|
|
204
|
+
}),
|
|
205
|
+
Schema.TaggedStruct("url", {
|
|
206
|
+
...configurationValueFields,
|
|
207
|
+
value: BoundedConfigurationUrl
|
|
208
|
+
}),
|
|
209
|
+
Schema.TaggedStruct("boolean", {
|
|
210
|
+
...configurationValueFields,
|
|
211
|
+
value: Schema.Boolean
|
|
212
|
+
}),
|
|
213
|
+
Schema.TaggedStruct("integer", {
|
|
214
|
+
...configurationValueFields,
|
|
215
|
+
value: Schema.Int
|
|
216
|
+
}),
|
|
217
|
+
Schema.TaggedStruct("select", {
|
|
218
|
+
...configurationValueFields,
|
|
219
|
+
value: BoundedConfigurationText
|
|
220
|
+
}),
|
|
221
|
+
Schema.TaggedStruct("secret-reference", {
|
|
222
|
+
...configurationValueFields,
|
|
223
|
+
state: Schema.Literals(["configured", "missing"])
|
|
224
|
+
})
|
|
225
|
+
]).pipe(Schema.toTaggedUnion("_tag"));
|
|
226
|
+
/** Typed configuration update; secret bytes remain outside this endpoint. */
|
|
227
|
+
var PluginConfigurationPatchValue = Schema.Union([
|
|
228
|
+
Schema.TaggedStruct("text", {
|
|
229
|
+
...configurationValueFields,
|
|
230
|
+
value: BoundedConfigurationText
|
|
231
|
+
}),
|
|
232
|
+
Schema.TaggedStruct("url", {
|
|
233
|
+
...configurationValueFields,
|
|
234
|
+
value: BoundedConfigurationUrl
|
|
235
|
+
}),
|
|
236
|
+
Schema.TaggedStruct("boolean", {
|
|
237
|
+
...configurationValueFields,
|
|
238
|
+
value: Schema.Boolean
|
|
239
|
+
}),
|
|
240
|
+
Schema.TaggedStruct("integer", {
|
|
241
|
+
...configurationValueFields,
|
|
242
|
+
value: Schema.Int
|
|
243
|
+
}),
|
|
244
|
+
Schema.TaggedStruct("select", {
|
|
245
|
+
...configurationValueFields,
|
|
246
|
+
value: BoundedConfigurationText
|
|
247
|
+
}),
|
|
248
|
+
Schema.TaggedStruct("secret-reference", {
|
|
249
|
+
...configurationValueFields,
|
|
250
|
+
operation: SecretReferencePatchOperation
|
|
251
|
+
})
|
|
252
|
+
]).pipe(Schema.toTaggedUnion("_tag"));
|
|
253
|
+
var boundedConfigurationValues = (value) => Schema.Array(value).check(Schema.makeFilter((values) => values.length <= MAXIMUM_CONFIGURATION_VALUES, { expected: `at most ${MAXIMUM_CONFIGURATION_VALUES} plugin configuration values` }), Schema.makeFilter((values) => new Set(values.map(({ key }) => key)).size === values.length, { expected: "unique plugin configuration keys" }));
|
|
254
|
+
/** Redacted current configuration with its compare-and-swap revision. */
|
|
255
|
+
var PluginConfiguration = Schema.Struct({
|
|
256
|
+
pluginConnectionId: PluginConnectionId,
|
|
257
|
+
revision: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
|
|
258
|
+
values: boundedConfigurationValues(RedactedPluginConfigurationValue),
|
|
259
|
+
updatedAt: Schema.NullOr(UtcTimestamp)
|
|
260
|
+
}).annotate({ identifier: "PluginConfiguration" });
|
|
261
|
+
/** Bounded compare-and-swap update request for one plugin connection. */
|
|
262
|
+
var PatchPluginConfigurationRequest = Schema.Struct({
|
|
263
|
+
expectedRevision: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
|
|
264
|
+
values: boundedConfigurationValues(PluginConfigurationPatchValue)
|
|
265
|
+
}).annotate({ identifier: "PatchPluginConfigurationRequest" });
|
|
266
|
+
/** Secret-free plugin connection row used by navigation and portfolio views. */
|
|
267
|
+
var NullableProviderAccountId = Schema.NullOr(ProviderAccountId);
|
|
268
|
+
var NullableFollowedResourceId = Schema.NullOr(FollowedResourceId);
|
|
269
|
+
var PluginConnectionSummary = Schema.Struct({
|
|
270
|
+
pluginConnectionId: PluginConnectionId,
|
|
271
|
+
providerAccountId: Schema.optional(NullableProviderAccountId).pipe(Schema.decodeTo(Schema.toType(NullableProviderAccountId), {
|
|
272
|
+
decode: SchemaGetter.withDefault(Effect.succeed(null)),
|
|
273
|
+
encode: SchemaGetter.required()
|
|
274
|
+
})),
|
|
275
|
+
followedResourceId: Schema.optional(NullableFollowedResourceId).pipe(Schema.decodeTo(Schema.toType(NullableFollowedResourceId), {
|
|
276
|
+
decode: SchemaGetter.withDefault(Effect.succeed(null)),
|
|
277
|
+
encode: SchemaGetter.required()
|
|
278
|
+
})),
|
|
279
|
+
providerId: ProviderId,
|
|
280
|
+
displayName: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)),
|
|
281
|
+
isEnabled: Schema.Boolean,
|
|
282
|
+
supportsSynchronization: Schema.optional(Schema.Boolean).pipe(Schema.decodeTo(Schema.Boolean, {
|
|
283
|
+
decode: SchemaGetter.withDefault(Effect.succeed(false)),
|
|
284
|
+
encode: SchemaGetter.required()
|
|
285
|
+
})),
|
|
286
|
+
health: Schema.NullOr(PluginHealth),
|
|
287
|
+
updatedAt: UtcTimestamp
|
|
288
|
+
}).annotate({ identifier: "PluginConnectionSummary" });
|
|
289
|
+
/** Secret-free provider resource shown inside its owning account. */
|
|
290
|
+
var FollowedResourceSummary = Schema.Struct({
|
|
291
|
+
followedResourceId: FollowedResourceId,
|
|
292
|
+
providerId: ProviderId,
|
|
293
|
+
displayName: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)),
|
|
294
|
+
providerImmutableId: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(512)),
|
|
295
|
+
isEnabled: Schema.Boolean
|
|
296
|
+
}).annotate({ identifier: "FollowedResourceSummary" });
|
|
297
|
+
/** One provider account and the resources this workspace follows within it. */
|
|
298
|
+
var ProviderAccountSummary = Schema.Struct({
|
|
299
|
+
providerAccountId: ProviderAccountId,
|
|
300
|
+
providerFamily: Schema.Literals([
|
|
301
|
+
"aws",
|
|
302
|
+
"atlassian",
|
|
303
|
+
"clockify"
|
|
304
|
+
]),
|
|
305
|
+
displayName: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)),
|
|
306
|
+
providerImmutableId: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(512)),
|
|
307
|
+
resources: Schema.Array(FollowedResourceSummary).check(Schema.makeFilter((resources) => resources.length <= MAXIMUM_FOLLOWED_RESOURCES, { expected: `at most ${MAXIMUM_FOLLOWED_RESOURCES} followed resources per provider account` }))
|
|
308
|
+
}).annotate({ identifier: "ProviderAccountSummary" });
|
|
309
|
+
var CatalogFieldText = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500));
|
|
310
|
+
/** Secret-free setup field shown before a first-party provider has runtime state. */
|
|
311
|
+
var PluginServiceCatalogField = Schema.Struct({
|
|
312
|
+
key: PluginConfigurationKey,
|
|
313
|
+
label: CatalogFieldText,
|
|
314
|
+
description: CatalogFieldText,
|
|
315
|
+
kind: Schema.Literals([
|
|
316
|
+
"text",
|
|
317
|
+
"url",
|
|
318
|
+
"integer",
|
|
319
|
+
"secret"
|
|
320
|
+
]),
|
|
321
|
+
scope: Schema.Literals(["adapter", "credential"]),
|
|
322
|
+
required: Schema.Boolean,
|
|
323
|
+
defaultValue: Schema.NullOr(Schema.String.check(Schema.isMaxLength(4096))),
|
|
324
|
+
isReadOnly: Schema.Boolean,
|
|
325
|
+
minimum: Schema.NullOr(Schema.Int),
|
|
326
|
+
maximum: Schema.NullOr(Schema.Int)
|
|
327
|
+
}).annotate({ identifier: "PluginServiceCatalogField" });
|
|
328
|
+
/** One fixed first-party service available whether or not it is configured. */
|
|
329
|
+
var PluginServiceCatalogEntry = Schema.Struct({
|
|
330
|
+
providerId: ProviderId,
|
|
331
|
+
displayName: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)),
|
|
332
|
+
description: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500)),
|
|
333
|
+
configurationFields: Schema.Array(PluginServiceCatalogField).check(Schema.isNonEmpty(), Schema.makeFilter((fields) => fields.length <= MAXIMUM_CONFIGURATION_VALUES, { expected: `at most ${MAXIMUM_CONFIGURATION_VALUES} catalog configuration fields` }))
|
|
334
|
+
}).annotate({ identifier: "PluginServiceCatalogEntry" });
|
|
335
|
+
/** One local AWS CLI profile available to first-party AWS adapters. */
|
|
336
|
+
var DiscoveredAwsProfile = Schema.Struct({
|
|
337
|
+
profile: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)),
|
|
338
|
+
region: Schema.NullOr(Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(100)))
|
|
339
|
+
}).annotate({ identifier: "DiscoveredAwsProfile" });
|
|
340
|
+
/** Bounded local AWS profile discovery response. */
|
|
341
|
+
var AwsProfileDiscoveryResponse = Schema.Array(DiscoveredAwsProfile).check(Schema.makeFilter((profiles) => profiles.length <= MAXIMUM_DISCOVERED_AWS_PROFILES, { expected: `at most ${MAXIMUM_DISCOVERED_AWS_PROFILES} discovered AWS profiles` }));
|
|
342
|
+
/** Validated local AWS credential selector for one explicit discovery request. */
|
|
343
|
+
var AwsResourceDiscoveryRequest = Schema.Struct({
|
|
344
|
+
profile: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200), Schema.isPattern(/^[A-Za-z0-9_+=,.@ -]+$/u, { expected: "a valid AWS profile name" })),
|
|
345
|
+
region: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(100), Schema.isPattern(/^[a-z]{2}(?:-[a-z0-9]+)+-[0-9]+$/u, { expected: "a valid AWS region" }))
|
|
346
|
+
}).annotate({ identifier: "AwsResourceDiscoveryRequest" });
|
|
347
|
+
var AwsResourceName = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(100));
|
|
348
|
+
var AwsResourceNames = Schema.Array(AwsResourceName).check(Schema.makeFilter((names) => names.length <= MAXIMUM_DISCOVERED_AWS_RESOURCES, { expected: `at most ${MAXIMUM_DISCOVERED_AWS_RESOURCES} discovered AWS resources` }), Schema.makeFilter((names) => new Set(names).size === names.length, { expected: "unique AWS resource names" }));
|
|
349
|
+
/** Safe per-service AWS resource discovery result. */
|
|
350
|
+
var AwsServiceResourceDiscovery = Schema.Union([Schema.TaggedStruct("available", {
|
|
351
|
+
names: AwsResourceNames,
|
|
352
|
+
truncated: Schema.Boolean
|
|
353
|
+
}), Schema.TaggedStruct("failed", { failureClass: Schema.Literals([
|
|
354
|
+
"authorization",
|
|
355
|
+
"malformed-response",
|
|
356
|
+
"rate-limit",
|
|
357
|
+
"timeout",
|
|
358
|
+
"unavailable"
|
|
359
|
+
]) })]).pipe(Schema.toTaggedUnion("_tag"), Schema.annotate({ identifier: "AwsServiceResourceDiscovery" }));
|
|
360
|
+
/** Identity-verified, secret-free AWS resource discovery response. */
|
|
361
|
+
var AwsResourceDiscoveryResponse = Schema.Struct({
|
|
362
|
+
accountId: Schema.String.check(Schema.isPattern(/^[0-9]{12}$/u, { expected: "a 12-digit AWS account id" })),
|
|
363
|
+
codeCommit: AwsServiceResourceDiscovery,
|
|
364
|
+
codePipeline: AwsServiceResourceDiscovery
|
|
365
|
+
}).annotate({ identifier: "AwsResourceDiscoveryResponse" });
|
|
366
|
+
/** One local OAuth profile available to first-party Atlassian adapters. */
|
|
367
|
+
var DiscoveredAtlassianProfile = Schema.Struct({
|
|
368
|
+
profileId: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500)),
|
|
369
|
+
name: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500)),
|
|
370
|
+
siteUrl: BoundedConfigurationUrl,
|
|
371
|
+
cloudId: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500)),
|
|
372
|
+
accountName: Schema.NullOr(Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500))),
|
|
373
|
+
accountEmail: Schema.NullOr(Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500))),
|
|
374
|
+
status: Schema.Literals(["valid", "expired"]),
|
|
375
|
+
providers: Schema.Array(Schema.Literals(["jira", "confluence"])).check(Schema.isNonEmpty())
|
|
376
|
+
}).annotate({ identifier: "DiscoveredAtlassianProfile" });
|
|
377
|
+
/** Bounded local Atlassian OAuth profile discovery response. */
|
|
378
|
+
var AtlassianProfileDiscoveryResponse = Schema.Array(DiscoveredAtlassianProfile).check(Schema.makeFilter((profiles) => profiles.length <= MAXIMUM_DISCOVERED_ATLASSIAN_PROFILES, { expected: `at most ${MAXIMUM_DISCOVERED_ATLASSIAN_PROFILES} discovered Atlassian profiles` }));
|
|
379
|
+
/** Single-use browser OAuth grant identifier; it is also the provider state parameter. */
|
|
380
|
+
var AtlassianOAuthGrantId = Schema.String.check(Schema.isPattern(/^[A-Za-z0-9_-]{43}$/u, { expected: "a base64url-encoded 256-bit OAuth state" })).pipe(Schema.brand("AtlassianOAuthGrantId"));
|
|
381
|
+
/** Atlassian product requested by one browser OAuth grant. */
|
|
382
|
+
var AtlassianOAuthProvider = Schema.Literals(["jira", "confluence"]);
|
|
383
|
+
/** One or both distinct Atlassian products requested by an OAuth grant. */
|
|
384
|
+
var AtlassianOAuthProviderIntent = Schema.Array(AtlassianOAuthProvider).check(Schema.isNonEmpty(), Schema.makeFilter((providers) => providers.length <= 2, { expected: "at most two Atlassian OAuth providers" }), Schema.makeFilter((providers) => new Set(providers).size === providers.length, { expected: "distinct Atlassian OAuth providers" }));
|
|
385
|
+
/** OAuth app credentials entered once in Control Center and retained only by its server. */
|
|
386
|
+
var AtlassianOAuthClientConfiguration = Schema.Struct({
|
|
387
|
+
clientId: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500)),
|
|
388
|
+
clientSecret: Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(MAXIMUM_SECRET_VALUE_LENGTH))
|
|
389
|
+
}).annotate({ identifier: "AtlassianOAuthClientConfiguration" });
|
|
390
|
+
/** Owner request to start OAuth for the products currently being configured. */
|
|
391
|
+
var CreateAtlassianOAuthGrantRequest = Schema.Struct({
|
|
392
|
+
providers: AtlassianOAuthProviderIntent,
|
|
393
|
+
configuration: Schema.optional(AtlassianOAuthClientConfiguration)
|
|
394
|
+
}).annotate({ identifier: "CreateAtlassianOAuthGrantRequest" });
|
|
395
|
+
/** Safe result of preparing the browser authorization redirect. */
|
|
396
|
+
var AtlassianOAuthGrantStartResponse = Schema.Union([Schema.TaggedStruct("ready", {
|
|
397
|
+
authorizationUrl: Schema.String.check(isProviderHttpUrl),
|
|
398
|
+
callbackUrl: BoundedConfigurationUrl
|
|
399
|
+
}), Schema.TaggedStruct("configuration-required", { callbackUrl: BoundedConfigurationUrl })]).pipe(Schema.toTaggedUnion("_tag"), Schema.annotate({ identifier: "AtlassianOAuthGrantStartResponse" }));
|
|
400
|
+
/** Authorization code returned by Atlassian to the same authenticated browser. */
|
|
401
|
+
var ExchangeAtlassianOAuthGrantRequest = Schema.Struct({ code: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(4096)) }).annotate({ identifier: "ExchangeAtlassianOAuthGrantRequest" });
|
|
402
|
+
/** One accessible Atlassian site awaiting explicit selection. */
|
|
403
|
+
var AtlassianOAuthSite = Schema.Struct({
|
|
404
|
+
cloudId: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500)),
|
|
405
|
+
name: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500)),
|
|
406
|
+
siteUrl: AtlassianCloudSiteUrl
|
|
407
|
+
}).annotate({ identifier: "AtlassianOAuthSite" });
|
|
408
|
+
/** Secret-free account and site choices returned after code exchange. */
|
|
409
|
+
var AtlassianOAuthGrantExchangeResponse = Schema.Struct({
|
|
410
|
+
grantId: AtlassianOAuthGrantId,
|
|
411
|
+
accountName: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500)),
|
|
412
|
+
accountEmail: Schema.NullOr(Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500))),
|
|
413
|
+
sites: Schema.Array(AtlassianOAuthSite).check(Schema.isNonEmpty(), Schema.makeFilter((sites) => sites.length <= MAXIMUM_ATLASSIAN_OAUTH_SITES, { expected: `at most ${MAXIMUM_ATLASSIAN_OAUTH_SITES} accessible Atlassian sites` }))
|
|
414
|
+
}).annotate({ identifier: "AtlassianOAuthGrantExchangeResponse" });
|
|
415
|
+
/** Explicit site choice that completes a pending browser OAuth grant. */
|
|
416
|
+
var CompleteAtlassianOAuthGrantRequest = Schema.Struct({ cloudId: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(500)) }).annotate({ identifier: "CompleteAtlassianOAuthGrantRequest" });
|
|
417
|
+
/** Bounded plugin-navigation and portfolio response retained for v1 clients. */
|
|
418
|
+
var PluginListResponse = Schema.Array(PluginConnectionSummary).check(Schema.makeFilter((plugins) => plugins.length <= MAXIMUM_PLUGIN_CONNECTIONS, { expected: `at most ${MAXIMUM_PLUGIN_CONNECTIONS} plugin connections` }));
|
|
419
|
+
var ProviderAccountSummaries = Schema.Array(ProviderAccountSummary).check(Schema.makeFilter((accounts) => accounts.length <= MAXIMUM_PROVIDER_ACCOUNTS, { expected: `at most ${MAXIMUM_PROVIDER_ACCOUNTS} provider accounts` }));
|
|
420
|
+
/** Bounded Services overview with the fixed catalog and durable connections. */
|
|
421
|
+
var PluginOverviewResponse = Schema.Struct({
|
|
422
|
+
catalog: Schema.Array(PluginServiceCatalogEntry).check(Schema.makeFilter((entries) => entries.length === 5, { expected: "the five first-party services" })),
|
|
423
|
+
connections: Schema.Array(PluginConnectionSummary).check(Schema.makeFilter((plugins) => plugins.length <= MAXIMUM_PLUGIN_CONNECTIONS, { expected: `at most ${MAXIMUM_PLUGIN_CONNECTIONS} plugin connections` })),
|
|
424
|
+
accounts: Schema.optional(ProviderAccountSummaries).pipe(Schema.decodeTo(Schema.toType(ProviderAccountSummaries), {
|
|
425
|
+
decode: SchemaGetter.withDefault(Effect.succeed([])),
|
|
426
|
+
encode: SchemaGetter.required()
|
|
427
|
+
}))
|
|
428
|
+
}).annotate({ identifier: "PluginOverviewResponse" });
|
|
429
|
+
var createValueFields = { key: PluginConfigurationKey };
|
|
430
|
+
/** Typed setup input; only the secret variant carries transport-only secret text. */
|
|
431
|
+
var CreatePluginConnectionValue = Schema.Union([
|
|
432
|
+
Schema.TaggedStruct("text", {
|
|
433
|
+
...createValueFields,
|
|
434
|
+
value: BoundedConfigurationText
|
|
435
|
+
}),
|
|
436
|
+
Schema.TaggedStruct("url", {
|
|
437
|
+
...createValueFields,
|
|
438
|
+
value: BoundedConfigurationUrl
|
|
439
|
+
}),
|
|
440
|
+
Schema.TaggedStruct("integer", {
|
|
441
|
+
...createValueFields,
|
|
442
|
+
value: Schema.Int
|
|
443
|
+
}),
|
|
444
|
+
Schema.TaggedStruct("secret", {
|
|
445
|
+
...createValueFields,
|
|
446
|
+
value: Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(MAXIMUM_SECRET_VALUE_LENGTH))
|
|
447
|
+
})
|
|
448
|
+
]).pipe(Schema.toTaggedUnion("_tag"));
|
|
449
|
+
/** Bounded owner request to create, configure, enable, and immediately test a connection. */
|
|
450
|
+
var CreatePluginConnectionRequest = Schema.Struct({
|
|
451
|
+
pluginConnectionId: PluginConnectionId,
|
|
452
|
+
providerId: ProviderId,
|
|
453
|
+
displayName: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)),
|
|
454
|
+
values: boundedConfigurationValues(CreatePluginConnectionValue)
|
|
455
|
+
}).annotate({ identifier: "CreatePluginConnectionRequest" });
|
|
456
|
+
/** Current health for one authenticated plugin connection lookup. */
|
|
457
|
+
var PluginHealthResponse = Schema.Struct({
|
|
458
|
+
pluginConnectionId: PluginConnectionId,
|
|
459
|
+
health: PluginHealth
|
|
460
|
+
}).annotate({ identifier: "PluginHealthResponse" });
|
|
461
|
+
var ConnectionIdentityText = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(512));
|
|
462
|
+
/** Secret-free provider identity proven by a live connection test. */
|
|
463
|
+
var PluginConnectionIdentity = Schema.Struct({
|
|
464
|
+
kind: Schema.Literals([
|
|
465
|
+
"user",
|
|
466
|
+
"account",
|
|
467
|
+
"workspace"
|
|
468
|
+
]),
|
|
469
|
+
label: ConnectionIdentityText,
|
|
470
|
+
displayName: ConnectionIdentityText,
|
|
471
|
+
providerImmutableId: ConnectionIdentityText
|
|
472
|
+
}).annotate({ identifier: "PluginConnectionIdentity" });
|
|
473
|
+
var connectionTestTiming = {
|
|
474
|
+
pluginConnectionId: PluginConnectionId,
|
|
475
|
+
providerId: ProviderId,
|
|
476
|
+
checkedAt: UtcTimestamp,
|
|
477
|
+
latencyMilliseconds: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))
|
|
478
|
+
};
|
|
479
|
+
/** Normalized result of live health and identity discovery against one connection. */
|
|
480
|
+
var PluginConnectionTestResult = Schema.Union([Schema.TaggedStruct("healthy", {
|
|
481
|
+
...connectionTestTiming,
|
|
482
|
+
identity: PluginConnectionIdentity
|
|
483
|
+
}), Schema.TaggedStruct("failed", {
|
|
484
|
+
...connectionTestTiming,
|
|
485
|
+
failureClass: PluginFailureClass,
|
|
486
|
+
retryAt: Schema.NullOr(UtcTimestamp),
|
|
487
|
+
safeMessage: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200))
|
|
488
|
+
})]).pipe(Schema.toTaggedUnion("_tag"), Schema.annotate({ identifier: "PluginConnectionTestResult" }));
|
|
489
|
+
/** Durable result of the most recent bounded synchronization invocation. */
|
|
490
|
+
var PluginSynchronizationResult = Schema.Literals([
|
|
491
|
+
"never",
|
|
492
|
+
"running",
|
|
493
|
+
"synchronized",
|
|
494
|
+
"source-unavailable",
|
|
495
|
+
"interrupted"
|
|
496
|
+
]);
|
|
497
|
+
/** Secret-free durable synchronization state for one negotiated connection stream. */
|
|
498
|
+
var PluginSynchronizationState = Schema.Struct({
|
|
499
|
+
pluginConnectionId: PluginConnectionId,
|
|
500
|
+
providerId: ProviderId,
|
|
501
|
+
streamKey: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(100)),
|
|
502
|
+
lastAttemptAt: Schema.NullOr(UtcTimestamp),
|
|
503
|
+
lastSuccessAt: Schema.NullOr(UtcTimestamp),
|
|
504
|
+
result: PluginSynchronizationResult,
|
|
505
|
+
pagesCommitted: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))
|
|
506
|
+
}).annotate({ identifier: "PluginSynchronizationState" });
|
|
507
|
+
/** Redacted result of durable setup and its immediate live identity check. */
|
|
508
|
+
var CreatePluginConnectionResponse = Schema.Struct({
|
|
509
|
+
connection: PluginConnectionSummary,
|
|
510
|
+
configuration: PluginConfiguration,
|
|
511
|
+
test: PluginConnectionTestResult
|
|
512
|
+
}).annotate({ identifier: "CreatePluginConnectionResponse" });
|
|
513
|
+
var MAXIMUM_BATCH_PLUGIN_CONNECTIONS = 40;
|
|
514
|
+
/** Bounded setup batch owned by one authenticated workspace. */
|
|
515
|
+
var CreatePluginConnectionsRequest = Schema.Struct({ connections: Schema.Array(CreatePluginConnectionRequest).check(Schema.makeFilter((connections) => connections.length >= 1 && connections.length <= MAXIMUM_BATCH_PLUGIN_CONNECTIONS, { expected: `between 1 and ${MAXIMUM_BATCH_PLUGIN_CONNECTIONS} plugin connections` }), Schema.makeFilter((connections) => new Set(connections.map(({ pluginConnectionId }) => pluginConnectionId)).size === connections.length, { expected: "unique plugin connection identifiers" })) }).annotate({ identifier: "CreatePluginConnectionsRequest" });
|
|
516
|
+
var PluginConnectionSetupFailureClass = Schema.Literals([
|
|
517
|
+
"conflict",
|
|
518
|
+
"invalid-request",
|
|
519
|
+
"not-found",
|
|
520
|
+
"rate-limited",
|
|
521
|
+
"service-unavailable"
|
|
522
|
+
]);
|
|
523
|
+
/** One ordered result from a multi-connection setup request. */
|
|
524
|
+
var CreatePluginConnectionBatchResult = Schema.Union([Schema.TaggedStruct("succeeded", { response: CreatePluginConnectionResponse }), Schema.TaggedStruct("failed", {
|
|
525
|
+
pluginConnectionId: PluginConnectionId,
|
|
526
|
+
failureClass: PluginConnectionSetupFailureClass
|
|
527
|
+
})]).pipe(Schema.toTaggedUnion("_tag"));
|
|
528
|
+
/** Ordered redacted results for a bounded setup batch. */
|
|
529
|
+
var CreatePluginConnectionsResponse = Schema.Struct({ results: Schema.Array(CreatePluginConnectionBatchResult).check(Schema.makeFilter((results) => results.length >= 1 && results.length <= MAXIMUM_BATCH_PLUGIN_CONNECTIONS, { expected: `between 1 and ${MAXIMUM_BATCH_PLUGIN_CONNECTIONS} plugin connection results` })) }).annotate({ identifier: "CreatePluginConnectionsResponse" });
|
|
530
|
+
/** Owner-only transition for independently enabling or disabling one connection. */
|
|
531
|
+
var SetPluginConnectionEnabledRequest = Schema.Struct({ isEnabled: Schema.Boolean }).annotate({ identifier: "SetPluginConnectionEnabledRequest" });
|
|
532
|
+
/** Secret-free configuration contract exposed to settings views. */
|
|
533
|
+
var PluginConfigurationMetadata = Schema.Struct({
|
|
534
|
+
pluginConnectionId: PluginConnectionId,
|
|
535
|
+
pluginId: PluginId,
|
|
536
|
+
contractVersion: SemanticVersion,
|
|
537
|
+
adapterVersion: SemanticVersion,
|
|
538
|
+
configurationFields: Schema.Array(PluginConfigurationFieldV1).check(Schema.makeFilter((fields) => fields.length <= 100, { expected: "at most 100 configuration fields" })),
|
|
539
|
+
capabilities: Schema.Array(NegotiatedPluginCapabilityV1).check(Schema.makeFilter((capabilities) => capabilities.length <= 32, { expected: "at most 32 negotiated plugin capabilities" }))
|
|
540
|
+
}).annotate({ identifier: "PluginConfigurationMetadata" });
|
|
541
|
+
var pluginReadErrors = [
|
|
542
|
+
UnauthorizedApiError,
|
|
543
|
+
ForbiddenApiError,
|
|
544
|
+
RateLimitedApiError,
|
|
545
|
+
RequestTimedOutApiError,
|
|
546
|
+
ServiceUnavailableApiError
|
|
547
|
+
];
|
|
548
|
+
var list = HttpApiEndpoint.get("list", "/", {
|
|
549
|
+
success: PluginListResponse,
|
|
550
|
+
error: pluginReadErrors
|
|
551
|
+
}).middleware(SessionCookieAuth);
|
|
552
|
+
var overview = HttpApiEndpoint.get("overview", "/overview", {
|
|
553
|
+
success: PluginOverviewResponse,
|
|
554
|
+
error: pluginReadErrors
|
|
555
|
+
}).middleware(SessionCookieAuth);
|
|
556
|
+
var discoverAwsProfiles = HttpApiEndpoint.get("discoverAwsProfiles", "/discovery/aws-profiles", {
|
|
557
|
+
success: AwsProfileDiscoveryResponse,
|
|
558
|
+
error: pluginReadErrors
|
|
559
|
+
}).middleware(SessionCookieAuth);
|
|
560
|
+
var discoverAwsResources = HttpApiEndpoint.post("discoverAwsResources", "/discovery/aws-resources", {
|
|
561
|
+
payload: AwsResourceDiscoveryRequest,
|
|
562
|
+
success: AwsResourceDiscoveryResponse,
|
|
563
|
+
error: [...pluginReadErrors, InvalidRequestApiError]
|
|
564
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
565
|
+
var discoverAtlassianProfiles = HttpApiEndpoint.get("discoverAtlassianProfiles", "/discovery/atlassian-profiles", {
|
|
566
|
+
success: AtlassianProfileDiscoveryResponse,
|
|
567
|
+
error: pluginReadErrors
|
|
568
|
+
}).middleware(SessionCookieAuth);
|
|
569
|
+
var createAtlassianOAuthGrant = HttpApiEndpoint.post("createAtlassianOAuthGrant", "/oauth/atlassian/grants", {
|
|
570
|
+
payload: CreateAtlassianOAuthGrantRequest,
|
|
571
|
+
success: AtlassianOAuthGrantStartResponse,
|
|
572
|
+
error: [
|
|
573
|
+
...pluginReadErrors,
|
|
574
|
+
InvalidRequestApiError,
|
|
575
|
+
ConflictApiError
|
|
576
|
+
]
|
|
577
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
578
|
+
var exchangeAtlassianOAuthGrant = HttpApiEndpoint.post("exchangeAtlassianOAuthGrant", "/oauth/atlassian/grants/:grantId/exchange", {
|
|
579
|
+
params: Schema.Struct({ grantId: AtlassianOAuthGrantId }),
|
|
580
|
+
payload: ExchangeAtlassianOAuthGrantRequest,
|
|
581
|
+
success: AtlassianOAuthGrantExchangeResponse,
|
|
582
|
+
error: [
|
|
583
|
+
...pluginReadErrors,
|
|
584
|
+
InvalidRequestApiError,
|
|
585
|
+
NotFoundApiError,
|
|
586
|
+
ConflictApiError
|
|
587
|
+
]
|
|
588
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
589
|
+
var completeAtlassianOAuthGrant = HttpApiEndpoint.post("completeAtlassianOAuthGrant", "/oauth/atlassian/grants/:grantId/complete", {
|
|
590
|
+
params: Schema.Struct({ grantId: AtlassianOAuthGrantId }),
|
|
591
|
+
payload: CompleteAtlassianOAuthGrantRequest,
|
|
592
|
+
success: DiscoveredAtlassianProfile,
|
|
593
|
+
error: [
|
|
594
|
+
...pluginReadErrors,
|
|
595
|
+
InvalidRequestApiError,
|
|
596
|
+
NotFoundApiError,
|
|
597
|
+
ConflictApiError
|
|
598
|
+
]
|
|
599
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
600
|
+
var createConnection = HttpApiEndpoint.post("createConnection", "/connections", {
|
|
601
|
+
payload: CreatePluginConnectionRequest,
|
|
602
|
+
success: CreatePluginConnectionResponse,
|
|
603
|
+
error: [
|
|
604
|
+
...pluginReadErrors,
|
|
605
|
+
InvalidRequestApiError,
|
|
606
|
+
NotFoundApiError,
|
|
607
|
+
ConflictApiError,
|
|
608
|
+
PayloadTooLargeApiError
|
|
609
|
+
]
|
|
610
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
611
|
+
var createConnections = HttpApiEndpoint.post("createConnections", "/connections/batch", {
|
|
612
|
+
payload: CreatePluginConnectionsRequest,
|
|
613
|
+
success: CreatePluginConnectionsResponse,
|
|
614
|
+
error: [
|
|
615
|
+
...pluginReadErrors,
|
|
616
|
+
InvalidRequestApiError,
|
|
617
|
+
ConflictApiError,
|
|
618
|
+
PayloadTooLargeApiError
|
|
619
|
+
]
|
|
620
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
621
|
+
var setConnectionEnabled = HttpApiEndpoint.patch("setConnectionEnabled", "/connections/:pluginConnectionId", {
|
|
622
|
+
params: Schema.Struct({ pluginConnectionId: PluginConnectionId }),
|
|
623
|
+
payload: SetPluginConnectionEnabledRequest,
|
|
624
|
+
success: PluginConnectionSummary,
|
|
625
|
+
error: [
|
|
626
|
+
...pluginReadErrors,
|
|
627
|
+
InvalidRequestApiError,
|
|
628
|
+
NotFoundApiError,
|
|
629
|
+
ConflictApiError,
|
|
630
|
+
PayloadTooLargeApiError
|
|
631
|
+
]
|
|
632
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
633
|
+
var health = HttpApiEndpoint.get("health", "/:pluginConnectionId/health", {
|
|
634
|
+
params: Schema.Struct({ pluginConnectionId: PluginConnectionId }),
|
|
635
|
+
success: PluginHealthResponse,
|
|
636
|
+
error: [...pluginReadErrors, NotFoundApiError]
|
|
637
|
+
}).middleware(SessionCookieAuth);
|
|
638
|
+
var testConnection = HttpApiEndpoint.post("testConnection", "/:pluginConnectionId/test", {
|
|
639
|
+
params: Schema.Struct({ pluginConnectionId: PluginConnectionId }),
|
|
640
|
+
success: PluginConnectionTestResult,
|
|
641
|
+
error: [...pluginReadErrors, NotFoundApiError]
|
|
642
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
643
|
+
var synchronization = HttpApiEndpoint.get("synchronization", "/:pluginConnectionId/synchronization", {
|
|
644
|
+
params: Schema.Struct({ pluginConnectionId: PluginConnectionId }),
|
|
645
|
+
success: PluginSynchronizationState,
|
|
646
|
+
error: [
|
|
647
|
+
...pluginReadErrors,
|
|
648
|
+
InvalidRequestApiError,
|
|
649
|
+
NotFoundApiError
|
|
650
|
+
]
|
|
651
|
+
}).middleware(SessionCookieAuth);
|
|
652
|
+
var synchronizeConnection = HttpApiEndpoint.post("synchronizeConnection", "/:pluginConnectionId/sync", {
|
|
653
|
+
params: Schema.Struct({ pluginConnectionId: PluginConnectionId }),
|
|
654
|
+
success: PluginSynchronizationState,
|
|
655
|
+
error: [
|
|
656
|
+
...pluginReadErrors,
|
|
657
|
+
InvalidRequestApiError,
|
|
658
|
+
NotFoundApiError
|
|
659
|
+
]
|
|
660
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
661
|
+
var configurationMetadata = HttpApiEndpoint.get("configurationMetadata", "/:pluginConnectionId/configuration-metadata", {
|
|
662
|
+
params: Schema.Struct({ pluginConnectionId: PluginConnectionId }),
|
|
663
|
+
success: PluginConfigurationMetadata,
|
|
664
|
+
error: [...pluginReadErrors, NotFoundApiError]
|
|
665
|
+
}).middleware(SessionCookieAuth);
|
|
666
|
+
var configuration = HttpApiEndpoint.get("configuration", "/:pluginConnectionId/configuration", {
|
|
667
|
+
params: Schema.Struct({ pluginConnectionId: PluginConnectionId }),
|
|
668
|
+
success: PluginConfiguration,
|
|
669
|
+
error: [...pluginReadErrors, NotFoundApiError]
|
|
670
|
+
}).middleware(SessionCookieAuth);
|
|
671
|
+
var patchConfiguration = HttpApiEndpoint.patch("patchConfiguration", "/:pluginConnectionId/configuration", {
|
|
672
|
+
params: Schema.Struct({ pluginConnectionId: PluginConnectionId }),
|
|
673
|
+
payload: PatchPluginConfigurationRequest,
|
|
674
|
+
success: PluginConfiguration,
|
|
675
|
+
error: [
|
|
676
|
+
...pluginReadErrors,
|
|
677
|
+
InvalidRequestApiError,
|
|
678
|
+
NotFoundApiError,
|
|
679
|
+
ConflictApiError,
|
|
680
|
+
PayloadTooLargeApiError
|
|
681
|
+
]
|
|
682
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
683
|
+
/** Authenticated plugin list, health, and secret-free configuration contract. */
|
|
684
|
+
var PluginsApiGroup = class extends HttpApiGroup.make("plugins").add(list, overview, discoverAwsProfiles, discoverAwsResources, discoverAtlassianProfiles, createAtlassianOAuthGrant, exchangeAtlassianOAuthGrant, completeAtlassianOAuthGrant, createConnection, createConnections, setConnectionEnabled, health, testConnection, synchronization, synchronizeConnection, configurationMetadata, configuration, patchConfiguration).prefix("/api/v1/plugins") {};
|
|
685
|
+
//#endregion
|
|
686
|
+
//#region src/api/portfolio.ts
|
|
687
|
+
var MAXIMUM_PORTFOLIO_RELEASES = 200;
|
|
688
|
+
var MAXIMUM_TARGET_ENVIRONMENTS = 50;
|
|
689
|
+
var MAXIMUM_SNAPSHOT_JSON_BYTES = 1024 * 1024;
|
|
690
|
+
var MAXIMUM_COUNT = 1e6;
|
|
691
|
+
var MAXIMUM_RELEASE_COLLABORATORS = 50;
|
|
692
|
+
var BoundedCount = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0), Schema.isLessThanOrEqualTo(MAXIMUM_COUNT));
|
|
693
|
+
/** Compact relationship totals for one release delivery graph. */
|
|
694
|
+
var PortfolioRelationshipCounts = Schema.Struct({
|
|
695
|
+
issues: BoundedCount,
|
|
696
|
+
pullRequests: BoundedCount,
|
|
697
|
+
pipelineExecutions: BoundedCount,
|
|
698
|
+
truncated: Schema.Boolean
|
|
699
|
+
}).annotate({ identifier: "PortfolioRelationshipCounts" });
|
|
700
|
+
/** Current server-owned readiness facts required by the bird's-eye portfolio. */
|
|
701
|
+
var PortfolioReadinessSummary = Schema.Struct({
|
|
702
|
+
authority: Schema.Literals(["authoritative", "pending"]),
|
|
703
|
+
verdict: ReadinessVerdict,
|
|
704
|
+
stages: ReadinessStages,
|
|
705
|
+
blockerCount: BoundedCount,
|
|
706
|
+
warningCount: BoundedCount,
|
|
707
|
+
gapCount: BoundedCount,
|
|
708
|
+
primaryFinding: Schema.NullOr(ReadinessFinding),
|
|
709
|
+
evaluatedAt: UtcTimestamp
|
|
710
|
+
}).annotate({ identifier: "PortfolioReadinessSummary" });
|
|
711
|
+
/** Release-scoped human responsibility shown in the compact portfolio. */
|
|
712
|
+
var PortfolioReleaseRole = Schema.Literals(["release-owner", "release-approver"]);
|
|
713
|
+
/** Named human collaborator resolved from durable workspace identity. */
|
|
714
|
+
var PortfolioReleaseCollaborator = Schema.Struct({
|
|
715
|
+
personId: PersonId,
|
|
716
|
+
displayName: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)),
|
|
717
|
+
avatarFallback: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(4)),
|
|
718
|
+
role: PortfolioReleaseRole
|
|
719
|
+
}).annotate({ identifier: "PortfolioReleaseCollaborator" });
|
|
720
|
+
var BoundedReleaseCollaborators = Schema.Array(PortfolioReleaseCollaborator).check(Schema.makeFilter((collaborators) => collaborators.length <= MAXIMUM_RELEASE_COLLABORATORS, { expected: `at most ${MAXIMUM_RELEASE_COLLABORATORS} release collaborators` }), Schema.makeFilter((collaborators) => new Set(collaborators.map(({ personId, role }) => `${personId}\u0000${role}`)).size === collaborators.length, { expected: "unique person and release-role pairs" }));
|
|
721
|
+
/** Compact release projection for the authenticated bird's-eye portfolio. */
|
|
722
|
+
var PortfolioReleaseSummary = Schema.Struct({
|
|
723
|
+
releaseId: ReleaseId,
|
|
724
|
+
serviceName: ReleaseServiceName,
|
|
725
|
+
version: ReleaseVersion,
|
|
726
|
+
lifecycle: ReleaseLifecycle,
|
|
727
|
+
relay: ReleaseRelayProjection,
|
|
728
|
+
freshness: Freshness,
|
|
729
|
+
targetEnvironmentIds: Schema.Array(EnvironmentId).check(Schema.isUnique(), Schema.makeFilter((environments) => environments.length <= MAXIMUM_TARGET_ENVIRONMENTS, { expected: `at most ${MAXIMUM_TARGET_ENVIRONMENTS} target environments` })),
|
|
730
|
+
collaborators: BoundedReleaseCollaborators,
|
|
731
|
+
collaboratorCount: BoundedCount,
|
|
732
|
+
readiness: Schema.NullOr(PortfolioReadinessSummary),
|
|
733
|
+
relationships: PortfolioRelationshipCounts,
|
|
734
|
+
sourceRevisionCount: BoundedCount,
|
|
735
|
+
updatedAt: UtcTimestamp
|
|
736
|
+
}).annotate({ identifier: "PortfolioReleaseSummary" });
|
|
737
|
+
/** Bounded, point-in-time portfolio projection for one authenticated workspace. */
|
|
738
|
+
var PortfolioSnapshot = Schema.Struct({
|
|
739
|
+
workspaceId: WorkspaceId,
|
|
740
|
+
eventCursor: EventCursor,
|
|
741
|
+
generatedAt: UtcTimestamp,
|
|
742
|
+
releases: Schema.Array(PortfolioReleaseSummary).check(Schema.makeFilter((releases) => releases.length <= MAXIMUM_PORTFOLIO_RELEASES, { expected: `at most ${MAXIMUM_PORTFOLIO_RELEASES} releases` }), Schema.makeFilter((releases) => new Set(releases.map(({ releaseId }) => releaseId)).size === releases.length, { expected: "unique release identifiers" })),
|
|
743
|
+
plugins: Schema.Array(PluginConnectionSummary).check(Schema.makeFilter((plugins) => plugins.length <= 100, { expected: "at most 100 plugin connections" }), Schema.makeFilter((plugins) => new Set(plugins.map(({ pluginConnectionId }) => pluginConnectionId)).size === plugins.length, { expected: "unique plugin connection identifiers" }))
|
|
744
|
+
}).check(hasMaximumPluginJsonBytes(MAXIMUM_SNAPSHOT_JSON_BYTES)).annotate({ identifier: "PortfolioSnapshot" });
|
|
745
|
+
var snapshot = HttpApiEndpoint.get("snapshot", "/snapshot", {
|
|
746
|
+
success: PortfolioSnapshot,
|
|
747
|
+
error: [
|
|
748
|
+
UnauthorizedApiError,
|
|
749
|
+
ForbiddenApiError,
|
|
750
|
+
RequestTimedOutApiError,
|
|
751
|
+
ServiceUnavailableApiError
|
|
752
|
+
]
|
|
753
|
+
}).middleware(SessionCookieAuth);
|
|
754
|
+
/** Authenticated point-in-time portfolio contract. */
|
|
755
|
+
var PortfolioApiGroup = class extends HttpApiGroup.make("portfolio").add(snapshot).prefix("/api/v1/portfolio") {};
|
|
756
|
+
//#endregion
|
|
757
|
+
//#region src/api/wire.ts
|
|
758
|
+
var CANONICAL_NONNEGATIVE_INTEGER_PATTERN = /^(?:0|[1-9][0-9]*)$/u;
|
|
759
|
+
var MAXIMUM_SAFE_INTEGER_DIGITS = String(Number.MAX_SAFE_INTEGER).length;
|
|
760
|
+
var NonNegativeSafeInteger = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));
|
|
761
|
+
/** Canonical unsigned-decimal HTTP representation of a nonnegative safe integer. */
|
|
762
|
+
var CanonicalNonNegativeIntegerFromString = Schema.String.check(Schema.isMaxLength(MAXIMUM_SAFE_INTEGER_DIGITS), Schema.isPattern(CANONICAL_NONNEGATIVE_INTEGER_PATTERN, { expected: "a canonical unsigned-decimal integer" })).pipe(Schema.decodeTo(NonNegativeSafeInteger, {
|
|
763
|
+
decode: SchemaGetter.transform((value) => Number(value)),
|
|
764
|
+
encode: SchemaGetter.transform((value) => String(value))
|
|
765
|
+
}));
|
|
766
|
+
//#endregion
|
|
767
|
+
//#region src/api/agent.ts
|
|
768
|
+
var MAXIMUM_PROMPT_LENGTH = 8e3;
|
|
769
|
+
var MAXIMUM_HISTORY_MESSAGES = 12;
|
|
770
|
+
var MAXIMUM_HISTORY_MESSAGE_LENGTH = 12e3;
|
|
771
|
+
var MAXIMUM_HISTORY_CONTENT_LENGTH = 64e3;
|
|
772
|
+
var MAXIMUM_REPLY_LENGTH = 32e3;
|
|
773
|
+
var MAXIMUM_DURABLE_PROMPT_LENGTH = 5e3;
|
|
774
|
+
var MAXIMUM_THREAD_EVENT_PAGE_SIZE = 128;
|
|
775
|
+
/** Bounded current instruction sent to the release-aware model. */
|
|
776
|
+
var AgentPrompt = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(MAXIMUM_PROMPT_LENGTH));
|
|
777
|
+
var BoundedHistoryContent = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(MAXIMUM_HISTORY_MESSAGE_LENGTH));
|
|
778
|
+
/** Supported local command-line model providers. */
|
|
779
|
+
var AgentProvider = Schema.Literals(["codex", "claude"]);
|
|
780
|
+
/** Provider-neutral configured runtime identity accepted by durable jobs. */
|
|
781
|
+
var DurableAgentProviderId = Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)).pipe(Schema.brand("DurableAgentProviderId"));
|
|
782
|
+
/** Prompt guaranteed to fit the durable user-message event envelope. */
|
|
783
|
+
var DurableAgentPrompt = Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(MAXIMUM_DURABLE_PROMPT_LENGTH));
|
|
784
|
+
/** Release-agent provider alias retained for discoverability beside the turn schemas. */
|
|
785
|
+
var ReleaseAgentProvider = AgentProvider;
|
|
786
|
+
/** One bounded prior turn supplied to preserve release-thread context. */
|
|
787
|
+
var AgentHistoryMessage = Schema.Struct({
|
|
788
|
+
role: Schema.Literals(["user", "assistant"]),
|
|
789
|
+
content: BoundedHistoryContent
|
|
790
|
+
}).annotate({ identifier: "ReleaseAgentHistoryMessage" });
|
|
791
|
+
/** History-message alias retained for discoverability beside the turn schemas. */
|
|
792
|
+
var ReleaseAgentHistoryMessage = AgentHistoryMessage;
|
|
793
|
+
var ReleaseAgentHistory = Schema.Array(AgentHistoryMessage).check(Schema.makeFilter((history) => history.length <= MAXIMUM_HISTORY_MESSAGES, { expected: `at most ${MAXIMUM_HISTORY_MESSAGES} release-agent history messages` }), Schema.makeFilter((history) => history.reduce((length, message) => length + message.content.length, 0) <= MAXIMUM_HISTORY_CONTENT_LENGTH, { expected: `at most ${MAXIMUM_HISTORY_CONTENT_LENGTH} release-agent history characters` }));
|
|
794
|
+
/** Bounded browser request for one release-aware model turn. */
|
|
795
|
+
var ReleaseAgentTurnRequest = Schema.Struct({
|
|
796
|
+
provider: AgentProvider,
|
|
797
|
+
prompt: AgentPrompt,
|
|
798
|
+
history: ReleaseAgentHistory
|
|
799
|
+
}).annotate({ identifier: "ReleaseAgentTurnRequest" });
|
|
800
|
+
/** Model reply plus the authoritative release projection used for the turn. */
|
|
801
|
+
var ReleaseAgentTurnResponse = Schema.Struct({
|
|
802
|
+
releaseId: ReleaseId,
|
|
803
|
+
provider: AgentProvider,
|
|
804
|
+
reply: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(MAXIMUM_REPLY_LENGTH)),
|
|
805
|
+
release: PortfolioReleaseSummary,
|
|
806
|
+
eventCursor: EventCursor
|
|
807
|
+
}).check(Schema.makeFilter(({ release, releaseId }) => release.releaseId === releaseId, { expected: "release-agent response identity to match its release projection" })).annotate({ identifier: "ReleaseAgentTurnResponse" });
|
|
808
|
+
/** Cursor of the last durable release-thread event observed by a client. */
|
|
809
|
+
var ReleaseAgentThreadCursor = Schema.Int.check(Schema.isBetween({
|
|
810
|
+
minimum: 0,
|
|
811
|
+
maximum: Number.MAX_SAFE_INTEGER
|
|
812
|
+
})).pipe(Schema.brand("ReleaseAgentThreadCursor"));
|
|
813
|
+
/** Canonical query-string representation of a durable release-thread cursor. */
|
|
814
|
+
var ReleaseAgentThreadCursorFromString = CanonicalNonNegativeIntegerFromString.pipe(Schema.decodeTo(ReleaseAgentThreadCursor));
|
|
815
|
+
/** Bounded caller-selected page size for durable release-thread replay. */
|
|
816
|
+
var ReleaseAgentThreadEventLimitFromString = CanonicalNonNegativeIntegerFromString.pipe(Schema.check(Schema.isGreaterThanOrEqualTo(1), Schema.isLessThanOrEqualTo(MAXIMUM_THREAD_EVENT_PAGE_SIZE)));
|
|
817
|
+
var releaseAgentThreadEventFields = {
|
|
818
|
+
eventSequence: ReleaseAgentThreadCursor.check(Schema.isGreaterThan(0)),
|
|
819
|
+
jobId: JobId,
|
|
820
|
+
occurredAt: UtcTimestamp
|
|
821
|
+
};
|
|
822
|
+
var ReleaseAgentUserMessageEvent = Schema.TaggedStruct("user-message", {
|
|
823
|
+
...releaseAgentThreadEventFields,
|
|
824
|
+
prompt: DurableAgentPrompt
|
|
825
|
+
});
|
|
826
|
+
var ReleaseAgentJobQueuedEvent = Schema.TaggedStruct("job-queued", {
|
|
827
|
+
...releaseAgentThreadEventFields,
|
|
828
|
+
providerId: DurableAgentProviderId
|
|
829
|
+
});
|
|
830
|
+
var ReleaseAgentJobStartedEvent = Schema.TaggedStruct("job-started", releaseAgentThreadEventFields);
|
|
831
|
+
var ReleaseAgentAssistantOutputEvent = Schema.TaggedStruct("assistant-output", {
|
|
832
|
+
...releaseAgentThreadEventFields,
|
|
833
|
+
text: Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(MAXIMUM_AGENT_OUTPUT_TEXT_LENGTH))
|
|
834
|
+
});
|
|
835
|
+
var ReleaseAgentProgressEvent = Schema.TaggedStruct("progress", {
|
|
836
|
+
...releaseAgentThreadEventFields,
|
|
837
|
+
text: Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(MAXIMUM_AGENT_OUTPUT_TEXT_LENGTH))
|
|
838
|
+
});
|
|
839
|
+
var ReleaseAgentUsageEvent = Schema.TaggedStruct("usage", {
|
|
840
|
+
...releaseAgentThreadEventFields,
|
|
841
|
+
inputTokens: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
|
|
842
|
+
outputTokens: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0))
|
|
843
|
+
});
|
|
844
|
+
var ReleaseAgentJobCompletedEvent = Schema.TaggedStruct("job-completed", {
|
|
845
|
+
...releaseAgentThreadEventFields,
|
|
846
|
+
outcome: Schema.Literals([
|
|
847
|
+
"success",
|
|
848
|
+
"cancelled",
|
|
849
|
+
"max-steps"
|
|
850
|
+
])
|
|
851
|
+
});
|
|
852
|
+
var ReleaseAgentJobFailedEvent = Schema.TaggedStruct("job-failed", {
|
|
853
|
+
...releaseAgentThreadEventFields,
|
|
854
|
+
retryable: Schema.Boolean
|
|
855
|
+
});
|
|
856
|
+
var ReleaseAgentCancellationRequestedEvent = Schema.TaggedStruct("cancel-requested", {
|
|
857
|
+
...releaseAgentThreadEventFields,
|
|
858
|
+
requestedAt: UtcTimestamp
|
|
859
|
+
});
|
|
860
|
+
/** One browser-safe event from the durable release thread. */
|
|
861
|
+
var ReleaseAgentThreadEvent = Schema.Union([
|
|
862
|
+
ReleaseAgentUserMessageEvent,
|
|
863
|
+
ReleaseAgentJobQueuedEvent,
|
|
864
|
+
ReleaseAgentJobStartedEvent,
|
|
865
|
+
ReleaseAgentAssistantOutputEvent,
|
|
866
|
+
ReleaseAgentProgressEvent,
|
|
867
|
+
ReleaseAgentUsageEvent,
|
|
868
|
+
ReleaseAgentJobCompletedEvent,
|
|
869
|
+
ReleaseAgentJobFailedEvent,
|
|
870
|
+
ReleaseAgentCancellationRequestedEvent
|
|
871
|
+
]).pipe(Schema.toTaggedUnion("_tag"));
|
|
872
|
+
/** Bounded request to enqueue one durable read-only release-agent job. */
|
|
873
|
+
var EnqueueReleaseAgentJobRequest = Schema.Struct({
|
|
874
|
+
providerId: DurableAgentProviderId,
|
|
875
|
+
prompt: DurableAgentPrompt
|
|
876
|
+
}).annotate({ identifier: "EnqueueReleaseAgentJobRequest" });
|
|
877
|
+
/** Durable identity returned after the job and its initial events commit. */
|
|
878
|
+
var EnqueueReleaseAgentJobResponse = Schema.Struct({
|
|
879
|
+
releaseId: ReleaseId,
|
|
880
|
+
jobId: JobId,
|
|
881
|
+
state: Schema.Literal("queued")
|
|
882
|
+
}).annotate({ identifier: "EnqueueReleaseAgentJobResponse" });
|
|
883
|
+
/** Ordered, bounded release-thread replay page. */
|
|
884
|
+
var ReleaseAgentThreadPage = Schema.Struct({
|
|
885
|
+
releaseId: ReleaseId,
|
|
886
|
+
events: Schema.Array(ReleaseAgentThreadEvent).check(Schema.makeFilter((events) => events.length <= MAXIMUM_THREAD_EVENT_PAGE_SIZE, { expected: `at most ${MAXIMUM_THREAD_EVENT_PAGE_SIZE} release-agent thread events` })),
|
|
887
|
+
nextCursor: ReleaseAgentThreadCursor
|
|
888
|
+
}).annotate({ identifier: "ReleaseAgentThreadPage" });
|
|
889
|
+
var turn = HttpApiEndpoint.post("turn", "/releases/:releaseId/turns", {
|
|
890
|
+
params: Schema.Struct({ releaseId: ReleaseId }),
|
|
891
|
+
payload: ReleaseAgentTurnRequest,
|
|
892
|
+
success: ReleaseAgentTurnResponse,
|
|
893
|
+
error: [
|
|
894
|
+
InvalidRequestApiError,
|
|
895
|
+
UnauthorizedApiError,
|
|
896
|
+
ForbiddenApiError,
|
|
897
|
+
NotFoundApiError,
|
|
898
|
+
RequestTimedOutApiError,
|
|
899
|
+
RateLimitedApiError,
|
|
900
|
+
PayloadTooLargeApiError,
|
|
901
|
+
ServiceUnavailableApiError
|
|
902
|
+
]
|
|
903
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
904
|
+
var enqueueJob = HttpApiEndpoint.post("enqueueJob", "/releases/:releaseId/jobs", {
|
|
905
|
+
params: Schema.Struct({ releaseId: ReleaseId }),
|
|
906
|
+
payload: EnqueueReleaseAgentJobRequest,
|
|
907
|
+
success: EnqueueReleaseAgentJobResponse.pipe(HttpApiSchema.status(202)),
|
|
908
|
+
error: [
|
|
909
|
+
InvalidRequestApiError,
|
|
910
|
+
UnauthorizedApiError,
|
|
911
|
+
ForbiddenApiError,
|
|
912
|
+
NotFoundApiError,
|
|
913
|
+
RequestTimedOutApiError,
|
|
914
|
+
PayloadTooLargeApiError,
|
|
915
|
+
RateLimitedApiError,
|
|
916
|
+
ServiceUnavailableApiError
|
|
917
|
+
]
|
|
918
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
919
|
+
var replayThread = HttpApiEndpoint.get("replayThread", "/releases/:releaseId/thread/events", {
|
|
920
|
+
params: Schema.Struct({ releaseId: ReleaseId }),
|
|
921
|
+
query: Schema.Struct({
|
|
922
|
+
after: Schema.optionalKey(ReleaseAgentThreadCursorFromString),
|
|
923
|
+
limit: Schema.optionalKey(ReleaseAgentThreadEventLimitFromString)
|
|
924
|
+
}),
|
|
925
|
+
success: ReleaseAgentThreadPage,
|
|
926
|
+
error: [
|
|
927
|
+
InvalidRequestApiError,
|
|
928
|
+
UnauthorizedApiError,
|
|
929
|
+
ForbiddenApiError,
|
|
930
|
+
NotFoundApiError,
|
|
931
|
+
RequestTimedOutApiError,
|
|
932
|
+
RateLimitedApiError,
|
|
933
|
+
ServiceUnavailableApiError
|
|
934
|
+
]
|
|
935
|
+
}).middleware(SessionCookieAuth);
|
|
936
|
+
/** Authenticated release-aware synchronous and durable agent contract. */
|
|
937
|
+
var AgentApiGroup = class extends HttpApiGroup.make("agent").add(turn).add(enqueueJob).add(replayThread).prefix("/api/v1/agent") {};
|
|
938
|
+
var MAXIMUM_RELATIONSHIP_HISTORY = 200;
|
|
939
|
+
var MAXIMUM_EVIDENCE_CLAIMS = 200;
|
|
940
|
+
var boundedArray = (schema, maximum) => Schema.Array(schema).check(Schema.isMaxLength(maximum));
|
|
941
|
+
/** One persisted entity projection with its ledger observation time. */
|
|
942
|
+
var InspectedEntityProjection = Schema.Struct({
|
|
943
|
+
projection: DeliveryEntityProjection,
|
|
944
|
+
recordedAt: UtcTimestamp
|
|
945
|
+
}).annotate({ identifier: "InspectedEntityProjection" });
|
|
946
|
+
/** Bounded deterministic graph prefix; `truncated` explicitly reports incomplete material. */
|
|
947
|
+
var ReleaseDeliveryGraphInspection = Schema.Struct({
|
|
948
|
+
releaseId: ReleaseId,
|
|
949
|
+
environmentId: Schema.NullOr(EnvironmentId),
|
|
950
|
+
truncated: Schema.Boolean,
|
|
951
|
+
nodes: boundedArray(DeliveryNode, 500),
|
|
952
|
+
entityProjections: boundedArray(InspectedEntityProjection, 500),
|
|
953
|
+
relationships: boundedArray(DeliveryRelationship, 500),
|
|
954
|
+
evidenceClaims: boundedArray(EvidenceClaim, 500),
|
|
955
|
+
evidenceItems: boundedArray(EvidenceItem, 500)
|
|
956
|
+
}).annotate({ identifier: "ReleaseDeliveryGraphInspection" });
|
|
957
|
+
var WorkspaceEntityReleaseIds = Schema.Array(ReleaseId).check(Schema.isUnique(), Schema.isMaxLength(500), Schema.makeFilter((releaseIds) => releaseIds.every((releaseId, index) => {
|
|
958
|
+
const previous = releaseIds[index - 1];
|
|
959
|
+
return index === 0 || previous !== void 0 && previous < releaseId;
|
|
960
|
+
}), { expected: "sorted workspace entity release identifiers" }));
|
|
961
|
+
/** Compact canonical human identity assigned to one current workspace entity. */
|
|
962
|
+
var WorkspaceEntityOwner = Schema.Struct({
|
|
963
|
+
avatarFallback: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(4)),
|
|
964
|
+
displayName: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200)),
|
|
965
|
+
personId: PersonId,
|
|
966
|
+
roles: boundedArray(Role, 16).check(Schema.isMinLength(1))
|
|
967
|
+
}).annotate({ identifier: "WorkspaceEntityOwner" });
|
|
968
|
+
var WorkspaceEntityOwners = boundedArray(WorkspaceEntityOwner, 20);
|
|
969
|
+
var WorkspaceOwnerOptions = boundedArray(WorkspaceEntityOwner, 200);
|
|
970
|
+
/** One current workspace entity projection and every bounded current release membership. */
|
|
971
|
+
var WorkspaceEntityProjection = Schema.Struct({
|
|
972
|
+
canonicalReleaseId: Schema.NullOr(ReleaseId),
|
|
973
|
+
owners: WorkspaceEntityOwners,
|
|
974
|
+
ownersTruncated: Schema.Boolean,
|
|
975
|
+
releaseIds: WorkspaceEntityReleaseIds,
|
|
976
|
+
releaseMembershipsTruncated: Schema.Boolean,
|
|
977
|
+
projection: DeliveryEntityProjection,
|
|
978
|
+
recordedAt: UtcTimestamp
|
|
979
|
+
}).check(Schema.makeFilter(({ canonicalReleaseId, releaseIds }) => canonicalReleaseId === (releaseIds[0] ?? null), { expected: "canonical release identifier to be the first current release membership" }), Schema.makeFilter(({ releaseIds, releaseMembershipsTruncated }) => !releaseMembershipsTruncated || releaseIds.length === 500, { expected: "truncated workspace release memberships to contain the complete bounded prefix" }), Schema.makeFilter(({ owners, ownersTruncated }) => !ownersTruncated || owners.length === 20, { expected: "truncated workspace owners to contain the complete bounded prefix" })).annotate({ identifier: "WorkspaceEntityProjection" });
|
|
980
|
+
/** Bounded workspace-wide index of current present normalized entities. */
|
|
981
|
+
var WorkspaceEntityProjectionIndex = Schema.Struct({
|
|
982
|
+
matchedCount: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
|
|
983
|
+
ownerOptions: WorkspaceOwnerOptions,
|
|
984
|
+
ownerOptionsTruncated: Schema.Boolean,
|
|
985
|
+
totalCount: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
|
|
986
|
+
truncated: Schema.Boolean,
|
|
987
|
+
items: boundedArray(WorkspaceEntityProjection, 500)
|
|
988
|
+
}).check(Schema.makeFilter(({ ownerOptions, ownerOptionsTruncated }) => !ownerOptionsTruncated || ownerOptions.length === 200, { expected: "truncated workspace owner options to contain the complete bounded prefix" })).annotate({ identifier: "WorkspaceEntityProjectionIndex" });
|
|
989
|
+
/** Complete bounded graph closure surrounding one exact normalized entity. */
|
|
990
|
+
var WorkspaceEntityGraph = Schema.Struct({
|
|
991
|
+
truncated: Schema.Boolean,
|
|
992
|
+
nodes: boundedArray(DeliveryNode, 200),
|
|
993
|
+
relatedEntityProjections: boundedArray(InspectedEntityProjection, 100),
|
|
994
|
+
relationships: boundedArray(DeliveryRelationship, 100),
|
|
995
|
+
evidenceClaims: boundedArray(EvidenceClaim, 200),
|
|
996
|
+
evidenceItems: boundedArray(EvidenceItem, 200)
|
|
997
|
+
}).annotate({ identifier: "WorkspaceEntityGraph" });
|
|
998
|
+
/** Bounded attributable activity for one exact normalized entity. */
|
|
999
|
+
var WorkspaceEntityActivity = Schema.Struct({
|
|
1000
|
+
truncated: Schema.Boolean,
|
|
1001
|
+
events: boundedArray(TimelineEvent, 20)
|
|
1002
|
+
}).annotate({ identifier: "WorkspaceEntityActivity" });
|
|
1003
|
+
/** Canonical provider-neutral full-page read model for one workspace entity. */
|
|
1004
|
+
var WorkspaceEntityInspection = Schema.Struct({
|
|
1005
|
+
entity: WorkspaceEntityProjection,
|
|
1006
|
+
source: SourceRevision,
|
|
1007
|
+
isSourceCurrent: Schema.Boolean,
|
|
1008
|
+
freshness: Schema.NullOr(Freshness),
|
|
1009
|
+
graph: WorkspaceEntityGraph,
|
|
1010
|
+
activity: WorkspaceEntityActivity
|
|
1011
|
+
}).annotate({ identifier: "WorkspaceEntityInspection" });
|
|
1012
|
+
/** Bounded immutable lifecycle history for one relationship, newest first. */
|
|
1013
|
+
var RelationshipHistoryInspection = Schema.Struct({
|
|
1014
|
+
relationshipId: RelationshipId,
|
|
1015
|
+
revisions: boundedArray(DeliveryRelationship, MAXIMUM_RELATIONSHIP_HISTORY)
|
|
1016
|
+
}).annotate({ identifier: "RelationshipHistoryInspection" });
|
|
1017
|
+
/** One immutable evidence item and every bounded claim attributed to it. */
|
|
1018
|
+
var EvidenceInspection = Schema.Struct({
|
|
1019
|
+
evidence: EvidenceItem,
|
|
1020
|
+
claims: boundedArray(EvidenceClaim, MAXIMUM_EVIDENCE_CLAIMS)
|
|
1021
|
+
}).annotate({ identifier: "EvidenceInspection" });
|
|
1022
|
+
/** Read-only repair suggestion derived from one current incomplete relationship. */
|
|
1023
|
+
var RelationshipRepairCandidate = Schema.Struct({
|
|
1024
|
+
relationship: DeliveryRelationship,
|
|
1025
|
+
suggestedDisposition: Schema.Literals([
|
|
1026
|
+
"link",
|
|
1027
|
+
"verify",
|
|
1028
|
+
"reject"
|
|
1029
|
+
]),
|
|
1030
|
+
explanation: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(1e3)),
|
|
1031
|
+
impact: Schema.Struct({
|
|
1032
|
+
releaseId: ReleaseId,
|
|
1033
|
+
environmentId: Schema.NullOr(EnvironmentId)
|
|
1034
|
+
}),
|
|
1035
|
+
requiredPermission: Schema.Literal("workspace-owner")
|
|
1036
|
+
}).annotate({ identifier: "RelationshipRepairCandidate" });
|
|
1037
|
+
/** Bounded candidate discovery result; discovery never mutates the relationship ledger. */
|
|
1038
|
+
var RelationshipRepairCandidates = Schema.Struct({
|
|
1039
|
+
releaseId: ReleaseId,
|
|
1040
|
+
environmentId: Schema.NullOr(EnvironmentId),
|
|
1041
|
+
truncated: Schema.Boolean,
|
|
1042
|
+
candidates: boundedArray(RelationshipRepairCandidate, 500)
|
|
1043
|
+
}).annotate({ identifier: "RelationshipRepairCandidates" });
|
|
1044
|
+
/** Non-mutating proposal input with the optimistic precondition required by a future apply step. */
|
|
1045
|
+
var RelationshipRepairProposalDraft = Schema.Struct({
|
|
1046
|
+
candidate: RelationshipRepairCandidate,
|
|
1047
|
+
precondition: Schema.Struct({
|
|
1048
|
+
relationshipId: RelationshipId,
|
|
1049
|
+
expectedRevision: LedgerRevision
|
|
1050
|
+
}),
|
|
1051
|
+
proposal: Schema.Struct({
|
|
1052
|
+
disposition: Schema.Literals([
|
|
1053
|
+
"link",
|
|
1054
|
+
"verify",
|
|
1055
|
+
"reject"
|
|
1056
|
+
]),
|
|
1057
|
+
rationale: Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(1e3))
|
|
1058
|
+
})
|
|
1059
|
+
}).annotate({ identifier: "RelationshipRepairProposalDraft" });
|
|
1060
|
+
/** Idempotent intent for creating a durable proposal from one exact repair candidate. */
|
|
1061
|
+
var CreateRelationshipRepairProposalRequest = Schema.Struct({
|
|
1062
|
+
proposalId: RelationshipRepairProposal.fields.proposalId,
|
|
1063
|
+
environmentId: RelationshipRepairProposal.fields.environmentId,
|
|
1064
|
+
expectedRevision: RelationshipRepairProposal.fields.expectedRevision,
|
|
1065
|
+
disposition: RelationshipRepairDisposition,
|
|
1066
|
+
rationale: RelationshipRepairRationale
|
|
1067
|
+
}).annotate({ identifier: "CreateRelationshipRepairProposalRequest" });
|
|
1068
|
+
/** Bounded newest-first proposal page for one release/environment scope. */
|
|
1069
|
+
var RelationshipRepairProposalList = Schema.Struct({
|
|
1070
|
+
releaseId: ReleaseId,
|
|
1071
|
+
environmentId: Schema.NullOr(EnvironmentId),
|
|
1072
|
+
status: Schema.NullOr(RelationshipRepairProposal.fields.status),
|
|
1073
|
+
truncated: Schema.Boolean,
|
|
1074
|
+
proposals: boundedArray(RelationshipRepairProposal, 128),
|
|
1075
|
+
applications: boundedArray(RelationshipRepairApplication, 128)
|
|
1076
|
+
}).annotate({ identifier: "RelationshipRepairProposalList" });
|
|
1077
|
+
/** Idempotent immutable review command for one pending proposal. */
|
|
1078
|
+
var ReviewRelationshipRepairProposalRequest = Schema.Struct({
|
|
1079
|
+
reviewId: RelationshipRepairReviewId,
|
|
1080
|
+
decision: RelationshipRepairReviewDecision,
|
|
1081
|
+
rationale: RelationshipRepairRationale
|
|
1082
|
+
}).annotate({ identifier: "ReviewRelationshipRepairProposalRequest" });
|
|
1083
|
+
/** Applied proposal together with the immutable relationship revision it appended. */
|
|
1084
|
+
var ApplyRelationshipRepairProposalResponse = Schema.Struct({
|
|
1085
|
+
application: RelationshipRepairApplication,
|
|
1086
|
+
relationship: DeliveryRelationship
|
|
1087
|
+
}).annotate({ identifier: "ApplyRelationshipRepairProposalResponse" });
|
|
1088
|
+
var readErrors = [
|
|
1089
|
+
UnauthorizedApiError,
|
|
1090
|
+
ForbiddenApiError,
|
|
1091
|
+
NotFoundApiError,
|
|
1092
|
+
RequestTimedOutApiError,
|
|
1093
|
+
ServiceUnavailableApiError
|
|
1094
|
+
];
|
|
1095
|
+
var releaseSlice = HttpApiEndpoint.get("releaseSlice", "/api/v1/relationships/releases/:releaseId", {
|
|
1096
|
+
params: { releaseId: ReleaseId },
|
|
1097
|
+
query: { environmentId: Schema.optionalKey(EnvironmentId) },
|
|
1098
|
+
success: ReleaseDeliveryGraphInspection,
|
|
1099
|
+
error: readErrors
|
|
1100
|
+
}).middleware(SessionCookieAuth);
|
|
1101
|
+
var workspaceEntityProjections = HttpApiEndpoint.get("workspaceEntityProjections", "/api/v1/items", {
|
|
1102
|
+
query: {
|
|
1103
|
+
q: Schema.optionalKey(Schema.String.check(Schema.isTrimmed(), Schema.isNonEmpty(), Schema.isMaxLength(200))),
|
|
1104
|
+
owner: Schema.optionalKey(PersonId),
|
|
1105
|
+
service: Schema.optionalKey(DeliveryEntityService),
|
|
1106
|
+
status: Schema.optionalKey(DeliveryEntityStatusGroup),
|
|
1107
|
+
type: Schema.optionalKey(DeliveryEntityKind)
|
|
1108
|
+
},
|
|
1109
|
+
success: WorkspaceEntityProjectionIndex,
|
|
1110
|
+
error: readErrors
|
|
1111
|
+
}).middleware(SessionCookieAuth);
|
|
1112
|
+
var workspaceEntity = HttpApiEndpoint.get("workspaceEntity", "/api/v1/items/:entityId", {
|
|
1113
|
+
params: { entityId: EntityId },
|
|
1114
|
+
success: WorkspaceEntityInspection,
|
|
1115
|
+
error: readErrors
|
|
1116
|
+
}).middleware(SessionCookieAuth);
|
|
1117
|
+
var relationship = HttpApiEndpoint.get("relationship", "/api/v1/relationships/:relationshipId", {
|
|
1118
|
+
params: { relationshipId: RelationshipId },
|
|
1119
|
+
query: { revision: Schema.optionalKey(CanonicalNonNegativeIntegerFromString.pipe(Schema.decodeTo(LedgerRevision))) },
|
|
1120
|
+
success: DeliveryRelationship,
|
|
1121
|
+
error: readErrors
|
|
1122
|
+
}).middleware(SessionCookieAuth);
|
|
1123
|
+
var repairCandidates = HttpApiEndpoint.get("repairCandidates", "/api/v1/relationships/releases/:releaseId/repair-candidates", {
|
|
1124
|
+
params: { releaseId: ReleaseId },
|
|
1125
|
+
query: { environmentId: Schema.optionalKey(EnvironmentId) },
|
|
1126
|
+
success: RelationshipRepairCandidates,
|
|
1127
|
+
error: readErrors
|
|
1128
|
+
}).middleware(SessionCookieAuth);
|
|
1129
|
+
var repairProposalDraft = HttpApiEndpoint.get("repairProposalDraft", "/api/v1/relationships/releases/:releaseId/repair-candidates/:relationshipId/proposal-draft", {
|
|
1130
|
+
params: {
|
|
1131
|
+
releaseId: ReleaseId,
|
|
1132
|
+
relationshipId: RelationshipId
|
|
1133
|
+
},
|
|
1134
|
+
query: {
|
|
1135
|
+
environmentId: Schema.optionalKey(EnvironmentId),
|
|
1136
|
+
revision: CanonicalNonNegativeIntegerFromString.pipe(Schema.decodeTo(LedgerRevision))
|
|
1137
|
+
},
|
|
1138
|
+
success: RelationshipRepairProposalDraft,
|
|
1139
|
+
error: readErrors
|
|
1140
|
+
}).middleware(SessionCookieAuth);
|
|
1141
|
+
var createRepairProposal = HttpApiEndpoint.post("createRepairProposal", "/api/v1/relationships/releases/:releaseId/repair-candidates/:relationshipId/proposals", {
|
|
1142
|
+
params: {
|
|
1143
|
+
releaseId: ReleaseId,
|
|
1144
|
+
relationshipId: RelationshipId
|
|
1145
|
+
},
|
|
1146
|
+
payload: CreateRelationshipRepairProposalRequest,
|
|
1147
|
+
success: RelationshipRepairProposal,
|
|
1148
|
+
error: [
|
|
1149
|
+
...readErrors,
|
|
1150
|
+
InvalidRequestApiError,
|
|
1151
|
+
ConflictApiError,
|
|
1152
|
+
PayloadTooLargeApiError
|
|
1153
|
+
]
|
|
1154
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
1155
|
+
var listRepairProposals = HttpApiEndpoint.get("listRepairProposals", "/api/v1/relationships/releases/:releaseId/repair-proposals", {
|
|
1156
|
+
params: { releaseId: ReleaseId },
|
|
1157
|
+
query: {
|
|
1158
|
+
environmentId: Schema.optionalKey(EnvironmentId),
|
|
1159
|
+
status: Schema.optionalKey(RelationshipRepairProposal.fields.status)
|
|
1160
|
+
},
|
|
1161
|
+
success: RelationshipRepairProposalList,
|
|
1162
|
+
error: readErrors
|
|
1163
|
+
}).middleware(SessionCookieAuth);
|
|
1164
|
+
var getRepairProposal = HttpApiEndpoint.get("getRepairProposal", "/api/v1/relationships/repair-proposals/:proposalId", {
|
|
1165
|
+
params: { proposalId: RelationshipRepairProposalId },
|
|
1166
|
+
success: RelationshipRepairProposal,
|
|
1167
|
+
error: readErrors
|
|
1168
|
+
}).middleware(SessionCookieAuth);
|
|
1169
|
+
var reviewRepairProposal = HttpApiEndpoint.post("reviewRepairProposal", "/api/v1/relationships/repair-proposals/:proposalId/reviews", {
|
|
1170
|
+
params: { proposalId: RelationshipRepairProposalId },
|
|
1171
|
+
payload: ReviewRelationshipRepairProposalRequest,
|
|
1172
|
+
success: RelationshipRepairProposal,
|
|
1173
|
+
error: [
|
|
1174
|
+
...readErrors,
|
|
1175
|
+
InvalidRequestApiError,
|
|
1176
|
+
ConflictApiError,
|
|
1177
|
+
PayloadTooLargeApiError
|
|
1178
|
+
]
|
|
1179
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
1180
|
+
var applyRepairProposal = HttpApiEndpoint.post("applyRepairProposal", "/api/v1/relationships/repair-proposals/:proposalId/applications", {
|
|
1181
|
+
params: { proposalId: RelationshipRepairProposalId },
|
|
1182
|
+
success: ApplyRelationshipRepairProposalResponse,
|
|
1183
|
+
error: [
|
|
1184
|
+
...readErrors,
|
|
1185
|
+
InvalidRequestApiError,
|
|
1186
|
+
ConflictApiError
|
|
1187
|
+
]
|
|
1188
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
1189
|
+
var relationshipHistory = HttpApiEndpoint.get("relationshipHistory", "/api/v1/relationships/:relationshipId/history", {
|
|
1190
|
+
params: { relationshipId: RelationshipId },
|
|
1191
|
+
success: RelationshipHistoryInspection,
|
|
1192
|
+
error: readErrors
|
|
1193
|
+
}).middleware(SessionCookieAuth);
|
|
1194
|
+
var evidence = HttpApiEndpoint.get("evidence", "/api/v1/evidence/:evidenceId", {
|
|
1195
|
+
params: { evidenceId: EvidenceId },
|
|
1196
|
+
success: EvidenceInspection,
|
|
1197
|
+
error: readErrors
|
|
1198
|
+
}).middleware(SessionCookieAuth);
|
|
1199
|
+
/** Authenticated, workspace-safe delivery relationship and evidence inspection. */
|
|
1200
|
+
var DeliveryGraphApiGroup = class extends HttpApiGroup.make("deliveryGraph").add(workspaceEntityProjections, workspaceEntity, releaseSlice, repairCandidates, repairProposalDraft, createRepairProposal, listRepairProposals, getRepairProposal, reviewRepairProposal, applyRepairProposal, relationship, relationshipHistory, evidence) {};
|
|
1201
|
+
//#endregion
|
|
1202
|
+
//#region src/api/liveEvents.ts
|
|
1203
|
+
/** URL/header representation of a nonnegative workspace event cursor. */
|
|
1204
|
+
var EventCursorFromString = CanonicalNonNegativeIntegerFromString.pipe(Schema.decodeTo(EventCursor));
|
|
1205
|
+
/** Replay boundary telling a client to replace local state with an authoritative snapshot. */
|
|
1206
|
+
var StreamResetRequired = Schema.Struct({
|
|
1207
|
+
reason: Schema.Literals([
|
|
1208
|
+
"retention",
|
|
1209
|
+
"cursor-ahead",
|
|
1210
|
+
"gap",
|
|
1211
|
+
"replay-budget"
|
|
1212
|
+
]),
|
|
1213
|
+
requestedCursor: EventCursor,
|
|
1214
|
+
headCursor: EventCursor,
|
|
1215
|
+
prunedThroughCursor: EventCursor
|
|
1216
|
+
}).annotate({ identifier: "StreamResetRequired" });
|
|
1217
|
+
/** Keepalive payload that reports the latest durable cursor without advancing EventSource state. */
|
|
1218
|
+
var StreamHeartbeat = Schema.Struct({
|
|
1219
|
+
eventCursor: EventCursor,
|
|
1220
|
+
sentAt: UtcTimestamp
|
|
1221
|
+
}).annotate({ identifier: "StreamHeartbeat" });
|
|
1222
|
+
/** Authoritative portfolio replacement emitted first and after replay reset. */
|
|
1223
|
+
var PortfolioSnapshotLiveEvent = Schema.Struct({
|
|
1224
|
+
id: EventCursorFromString,
|
|
1225
|
+
event: Schema.Literal("portfolio.snapshot"),
|
|
1226
|
+
data: Schema.fromJsonString(PortfolioSnapshot)
|
|
1227
|
+
}).annotate({ identifier: "PortfolioSnapshotLiveEvent" });
|
|
1228
|
+
/** Durable notification that a browser should refresh its portfolio projection. */
|
|
1229
|
+
var PortfolioInvalidatedLiveEvent = Schema.Struct({
|
|
1230
|
+
id: EventCursorFromString,
|
|
1231
|
+
event: Schema.Literal("portfolio.invalidated"),
|
|
1232
|
+
data: Schema.fromJsonString(PortfolioInvalidatedEventV1)
|
|
1233
|
+
}).annotate({ identifier: "PortfolioInvalidatedLiveEvent" });
|
|
1234
|
+
/** Replay-gap instruction; it deliberately has no SSE ID so it cannot advance resume state. */
|
|
1235
|
+
var StreamResetRequiredLiveEvent = Schema.Struct({
|
|
1236
|
+
id: Schema.optionalKey(Schema.Undefined),
|
|
1237
|
+
event: Schema.Literal("stream.reset-required"),
|
|
1238
|
+
data: Schema.fromJsonString(StreamResetRequired)
|
|
1239
|
+
}).annotate({ identifier: "StreamResetRequiredLiveEvent" });
|
|
1240
|
+
/** Keepalive event; it deliberately has no SSE ID so it cannot advance resume state. */
|
|
1241
|
+
var StreamHeartbeatLiveEvent = Schema.Struct({
|
|
1242
|
+
id: Schema.optionalKey(Schema.Undefined),
|
|
1243
|
+
event: Schema.Literal("stream.heartbeat"),
|
|
1244
|
+
data: Schema.fromJsonString(StreamHeartbeat)
|
|
1245
|
+
}).annotate({ identifier: "StreamHeartbeatLiveEvent" });
|
|
1246
|
+
/** Closed browser-safe union emitted by the authenticated live event stream. */
|
|
1247
|
+
var ControlCenterLiveEvent = Schema.Union([
|
|
1248
|
+
PortfolioSnapshotLiveEvent,
|
|
1249
|
+
PortfolioInvalidatedLiveEvent,
|
|
1250
|
+
StreamResetRequiredLiveEvent,
|
|
1251
|
+
StreamHeartbeatLiveEvent
|
|
1252
|
+
]).annotate({ identifier: "ControlCenterLiveEvent" });
|
|
1253
|
+
var stream = HttpApiEndpoint.get("stream", "/api/v1/events", {
|
|
1254
|
+
query: { after: Schema.optionalKey(EventCursorFromString) },
|
|
1255
|
+
headers: { "last-event-id": Schema.optionalKey(EventCursorFromString) },
|
|
1256
|
+
success: HttpApiSchema.StreamSse({ events: ControlCenterLiveEvent }),
|
|
1257
|
+
error: [
|
|
1258
|
+
InvalidRequestApiError,
|
|
1259
|
+
UnauthorizedApiError,
|
|
1260
|
+
ForbiddenApiError,
|
|
1261
|
+
RateLimitedApiError,
|
|
1262
|
+
RequestTimedOutApiError,
|
|
1263
|
+
ServiceUnavailableApiError
|
|
1264
|
+
]
|
|
1265
|
+
}).middleware(SessionCookieAuth);
|
|
1266
|
+
/** Authenticated resumable stream of workspace-local Control Center events. */
|
|
1267
|
+
var LiveEventsApiGroup = class extends HttpApiGroup.make("liveEvents").add(stream) {};
|
|
1268
|
+
//#endregion
|
|
1269
|
+
//#region src/api/media.ts
|
|
1270
|
+
/** Workspace-scoped opaque media reference that reveals neither provider URLs nor local storage keys. */
|
|
1271
|
+
var OpaqueMediaId = Schema.String.check(Schema.isPattern(/^media_[0-9a-f]{64}$/u, { expected: "an opaque SHA-256 media identifier" })).pipe(Schema.brand("OpaqueMediaId"));
|
|
1272
|
+
/** Closed set of inert raster formats accepted at the authenticated media boundary. */
|
|
1273
|
+
var SafeMediaContentType = Schema.Literals([
|
|
1274
|
+
"image/avif",
|
|
1275
|
+
"image/jpeg",
|
|
1276
|
+
"image/png",
|
|
1277
|
+
"image/webp"
|
|
1278
|
+
]);
|
|
1279
|
+
/** Security and metadata headers required on authenticated opaque media responses. */
|
|
1280
|
+
var MediaResponseHeaders = Schema.Struct({
|
|
1281
|
+
"x-correlation-id": CorrelationId,
|
|
1282
|
+
"content-type": SafeMediaContentType,
|
|
1283
|
+
"content-length": CanonicalNonNegativeIntegerFromString,
|
|
1284
|
+
"cache-control": Schema.Literal("private, no-store"),
|
|
1285
|
+
"x-content-type-options": Schema.Literal("nosniff")
|
|
1286
|
+
}).annotate({ identifier: "MediaResponseHeaders" });
|
|
1287
|
+
var read = HttpApiEndpoint.get("read", "/:mediaId", {
|
|
1288
|
+
params: Schema.Struct({ mediaId: OpaqueMediaId }),
|
|
1289
|
+
success: HttpApiSchema.StreamUint8Array({ contentType: "application/octet-stream" }),
|
|
1290
|
+
error: [
|
|
1291
|
+
UnauthorizedApiError,
|
|
1292
|
+
ForbiddenApiError,
|
|
1293
|
+
NotFoundApiError,
|
|
1294
|
+
RequestTimedOutApiError,
|
|
1295
|
+
ServiceUnavailableApiError
|
|
1296
|
+
]
|
|
1297
|
+
}).middleware(SessionCookieAuth);
|
|
1298
|
+
/** Authenticated, workspace-resolved opaque media contract. */
|
|
1299
|
+
var MediaApiGroup = class extends HttpApiGroup.make("media").add(read).prefix("/api/v1/media") {};
|
|
1300
|
+
//#endregion
|
|
1301
|
+
//#region src/api/shares.ts
|
|
1302
|
+
/** Owner-authored intent for one exact entity share grant. */
|
|
1303
|
+
var CreateAuthorizedShareRequest = Schema.Struct({
|
|
1304
|
+
shareId: ShareId,
|
|
1305
|
+
entityId: EntityId,
|
|
1306
|
+
granteePersonId: PersonId,
|
|
1307
|
+
expiresAt: UtcTimestamp
|
|
1308
|
+
});
|
|
1309
|
+
/** Secret-free grant metadata returned to authenticated callers. */
|
|
1310
|
+
var AuthorizedShareSummary = Schema.Struct({
|
|
1311
|
+
shareId: ShareId,
|
|
1312
|
+
entityId: EntityId,
|
|
1313
|
+
granteePersonId: PersonId,
|
|
1314
|
+
createdAt: UtcTimestamp,
|
|
1315
|
+
expiresAt: UtcTimestamp,
|
|
1316
|
+
revokedAt: Schema.NullOr(UtcTimestamp)
|
|
1317
|
+
}).annotate({ identifier: "AuthorizedShareSummary" });
|
|
1318
|
+
/** Exact current entity projection resolved without relationships or release context. */
|
|
1319
|
+
var AuthorizedShareResolution = Schema.Struct({
|
|
1320
|
+
share: AuthorizedShareSummary,
|
|
1321
|
+
item: InspectedEntityProjection
|
|
1322
|
+
}).annotate({ identifier: "AuthorizedShareResolution" });
|
|
1323
|
+
var authenticatedErrors = [
|
|
1324
|
+
UnauthorizedApiError,
|
|
1325
|
+
ForbiddenApiError,
|
|
1326
|
+
RequestTimedOutApiError,
|
|
1327
|
+
ServiceUnavailableApiError
|
|
1328
|
+
];
|
|
1329
|
+
var create = HttpApiEndpoint.post("create", "/", {
|
|
1330
|
+
payload: CreateAuthorizedShareRequest,
|
|
1331
|
+
success: AuthorizedShareSummary,
|
|
1332
|
+
error: [
|
|
1333
|
+
...authenticatedErrors,
|
|
1334
|
+
InvalidRequestApiError,
|
|
1335
|
+
NotFoundApiError,
|
|
1336
|
+
ConflictApiError
|
|
1337
|
+
]
|
|
1338
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
1339
|
+
var resolve = HttpApiEndpoint.get("resolve", "/:workspaceId/:shareId", {
|
|
1340
|
+
params: Schema.Struct({
|
|
1341
|
+
workspaceId: WorkspaceId,
|
|
1342
|
+
shareId: ShareId
|
|
1343
|
+
}),
|
|
1344
|
+
success: AuthorizedShareResolution,
|
|
1345
|
+
error: [...authenticatedErrors, NotFoundApiError]
|
|
1346
|
+
}).middleware(SessionCookieAuth);
|
|
1347
|
+
var revoke = HttpApiEndpoint.delete("revoke", "/:workspaceId/:shareId", {
|
|
1348
|
+
params: Schema.Struct({
|
|
1349
|
+
workspaceId: WorkspaceId,
|
|
1350
|
+
shareId: ShareId
|
|
1351
|
+
}),
|
|
1352
|
+
success: HttpApiSchema.NoContent,
|
|
1353
|
+
error: [...authenticatedErrors, NotFoundApiError]
|
|
1354
|
+
}).middleware(SessionCookieAuth).middleware(SessionMutationAuth);
|
|
1355
|
+
/** Exact-scope authenticated entity-share contract. */
|
|
1356
|
+
var SharesApiGroup = class extends HttpApiGroup.make("shares").add(create, resolve, revoke).prefix("/api/v1/shares") {};
|
|
1357
|
+
//#endregion
|
|
1358
|
+
//#region src/api/timeline.ts
|
|
1359
|
+
var TimelinePageSizeFromString = CanonicalNonNegativeIntegerFromString.pipe(Schema.check(Schema.isGreaterThanOrEqualTo(1), Schema.isLessThanOrEqualTo(100)));
|
|
1360
|
+
/** Hard caller-selected event bound for one Timeline download. */
|
|
1361
|
+
var TimelineExportLimitFromString = CanonicalNonNegativeIntegerFromString.pipe(Schema.check(Schema.isGreaterThanOrEqualTo(1), Schema.isLessThanOrEqualTo(1e3)));
|
|
1362
|
+
/** Content types emitted by the bounded Timeline download endpoints. */
|
|
1363
|
+
var TimelineExportContentType = Schema.Literals(["application/json; charset=utf-8", "text/csv; charset=utf-8"]);
|
|
1364
|
+
/** Security, download, and truncation headers on a Timeline export response. */
|
|
1365
|
+
var TimelineExportResponseHeaders = Schema.Struct({
|
|
1366
|
+
"cache-control": Schema.Literal("private, no-store"),
|
|
1367
|
+
"content-disposition": Schema.Literals(["attachment; filename=\"timeline-export.csv\"", "attachment; filename=\"timeline-export.json\""]),
|
|
1368
|
+
"content-type": TimelineExportContentType,
|
|
1369
|
+
"x-content-type-options": Schema.Literal("nosniff"),
|
|
1370
|
+
"x-timeline-export-count": CanonicalNonNegativeIntegerFromString,
|
|
1371
|
+
"x-timeline-export-limit": TimelineExportLimitFromString,
|
|
1372
|
+
"x-timeline-export-truncated": Schema.Literals(["false", "true"])
|
|
1373
|
+
}).annotate({ identifier: "TimelineExportResponseHeaders" });
|
|
1374
|
+
var exportQuery = {
|
|
1375
|
+
actor: Schema.optionalKey(TimelineActorKind),
|
|
1376
|
+
from: Schema.optionalKey(UtcTimestamp),
|
|
1377
|
+
limit: TimelineExportLimitFromString,
|
|
1378
|
+
to: Schema.optionalKey(UtcTimestamp)
|
|
1379
|
+
};
|
|
1380
|
+
var timelineErrors = [
|
|
1381
|
+
InvalidRequestApiError,
|
|
1382
|
+
UnauthorizedApiError,
|
|
1383
|
+
ForbiddenApiError,
|
|
1384
|
+
RequestTimedOutApiError,
|
|
1385
|
+
ServiceUnavailableApiError
|
|
1386
|
+
];
|
|
1387
|
+
var page = HttpApiEndpoint.get("page", "/api/v1/timeline", {
|
|
1388
|
+
query: {
|
|
1389
|
+
actor: Schema.optionalKey(TimelineActorKind),
|
|
1390
|
+
beforeEventKey: Schema.optionalKey(Schema.String.check(Schema.isNonEmpty(), Schema.isMaxLength(1024))),
|
|
1391
|
+
beforeOccurredAt: Schema.optionalKey(UtcTimestamp),
|
|
1392
|
+
from: Schema.optionalKey(UtcTimestamp),
|
|
1393
|
+
limit: Schema.optionalKey(TimelinePageSizeFromString),
|
|
1394
|
+
to: Schema.optionalKey(UtcTimestamp)
|
|
1395
|
+
},
|
|
1396
|
+
success: TimelinePage,
|
|
1397
|
+
error: timelineErrors
|
|
1398
|
+
}).middleware(SessionCookieAuth);
|
|
1399
|
+
var detail = HttpApiEndpoint.get("detail", "/api/v1/timeline/events/:eventKey", {
|
|
1400
|
+
params: { eventKey: TimelineCursor.fields.eventKey },
|
|
1401
|
+
success: TimelineEventDetail,
|
|
1402
|
+
error: [
|
|
1403
|
+
InvalidRequestApiError,
|
|
1404
|
+
UnauthorizedApiError,
|
|
1405
|
+
ForbiddenApiError,
|
|
1406
|
+
NotFoundApiError,
|
|
1407
|
+
RequestTimedOutApiError,
|
|
1408
|
+
ServiceUnavailableApiError
|
|
1409
|
+
]
|
|
1410
|
+
}).middleware(SessionCookieAuth);
|
|
1411
|
+
var exportCsv = HttpApiEndpoint.get("exportCsv", "/api/v1/timeline/export.csv", {
|
|
1412
|
+
query: exportQuery,
|
|
1413
|
+
success: HttpApiSchema.StreamUint8Array({ contentType: "text/csv; charset=utf-8" }),
|
|
1414
|
+
error: timelineErrors
|
|
1415
|
+
}).middleware(SessionCookieAuth);
|
|
1416
|
+
var exportJson = HttpApiEndpoint.get("exportJson", "/api/v1/timeline/export.json", {
|
|
1417
|
+
query: exportQuery,
|
|
1418
|
+
success: HttpApiSchema.StreamUint8Array({ contentType: "application/json; charset=utf-8" }),
|
|
1419
|
+
error: timelineErrors
|
|
1420
|
+
}).middleware(SessionCookieAuth);
|
|
1421
|
+
/** Authenticated, workspace-scoped durable activity Timeline. */
|
|
1422
|
+
var TimelineApiGroup = class extends HttpApiGroup.make("timeline").add(page).add(detail).add(exportCsv).add(exportJson) {};
|
|
1423
|
+
//#endregion
|
|
1424
|
+
//#region src/api/controlCenterApi.ts
|
|
1425
|
+
/** Browser-safe authenticated HTTP contract shared by the generated client and server implementation. */
|
|
1426
|
+
var ControlCenterApi = class extends HttpApi.make("ControlCenterApi").add(SessionApiGroup).add(SharesApiGroup).add(PluginsApiGroup).add(PortfolioApiGroup).add(DeliveryGraphApiGroup).add(MediaApiGroup).add(LiveEventsApiGroup).add(TimelineApiGroup).add(AgentApiGroup) {};
|
|
1427
|
+
//#endregion
|
|
1428
|
+
export { PortfolioReadinessSummary as $, PairSessionResponse as $t, RelationshipRepairProposalDraft as A, PluginConfiguration as At, DurableAgentProviderId as B, PluginOverviewResponse as Bt, CreateRelationshipRepairProposalRequest as C, CreatePluginConnectionsRequest as Ct, RelationshipHistoryInspection as D, ExchangeAtlassianOAuthGrantRequest as Dt, InspectedEntityProjection as E, DiscoveredAwsProfile as Et, AgentApiGroup as F, PluginConnectionSetupFailureClass as Ft, ReleaseAgentThreadCursor as G, PluginsApiGroup as Gt, EnqueueReleaseAgentJobResponse as H, PluginServiceCatalogField as Ht, AgentHistoryMessage as I, PluginConnectionSummary as It, ReleaseAgentThreadEventLimitFromString as J, CsrfToken as Jt, ReleaseAgentThreadCursorFromString as K, RedactedPluginConfigurationValue as Kt, AgentPrompt as L, PluginConnectionTestResult as Lt, WorkspaceEntityActivity as M, PluginConfigurationMetadata as Mt, WorkspaceEntityGraph as N, PluginConfigurationPatchValue as Nt, RelationshipRepairCandidate as O, OpaqueSecretReference as Ot, WorkspaceEntityInspection as P, PluginConnectionIdentity as Pt, PortfolioApiGroup as Q, PairSessionRequest as Qt, AgentProvider as R, PluginHealthResponse as Rt, StreamResetRequiredLiveEvent as S, CreatePluginConnectionValue as St, EvidenceInspection as T, DiscoveredAtlassianProfile as Tt, ReleaseAgentHistoryMessage as U, PluginSynchronizationResult as Ut, EnqueueReleaseAgentJobRequest as V, PluginServiceCatalogEntry as Vt, ReleaseAgentProvider as W, PluginSynchronizationState as Wt, ReleaseAgentTurnRequest as X, CurrentSessionResponse as Xt, ReleaseAgentThreadPage as Y, CurrentSession as Yt, ReleaseAgentTurnResponse as Z, MutationCsrf as Zt, PortfolioInvalidatedLiveEvent as _, CompleteAtlassianOAuthGrantRequest as _t, TimelineExportResponseHeaders as a, SessionSummary as an, AtlassianOAuthClientConfiguration as at, StreamHeartbeatLiveEvent as b, CreatePluginConnectionRequest as bt, CreateAuthorizedShareRequest as c, CorrelationResponseHeaders as cn, AtlassianOAuthGrantStartResponse as ct, MediaResponseHeaders as d, NotFoundApiError as dn, AtlassianOAuthSite as dt, PairingCode as en, PortfolioRelationshipCounts as et, OpaqueMediaId as f, PayloadTooLargeApiError as fn, AtlassianProfileDiscoveryResponse as ft, LiveEventsApiGroup as g, UnauthorizedApiError as gn, AwsServiceResourceDiscovery as gt, EventCursorFromString as h, ServiceUnavailableApiError as hn, AwsResourceDiscoveryResponse as ht, TimelineExportLimitFromString as i, SessionMutationAuth as in, PortfolioSnapshot as it, ReleaseDeliveryGraphInspection as j, PluginConfigurationKey as jt, RelationshipRepairCandidates as k, PatchPluginConfigurationRequest as kt, SharesApiGroup as l, ForbiddenApiError as ln, AtlassianOAuthProvider as lt, ControlCenterLiveEvent as m, RequestTimedOutApiError as mn, AwsResourceDiscoveryRequest as mt, TimelineApiGroup as n, SessionCookieAuth as nn, PortfolioReleaseRole as nt, AuthorizedShareResolution as o, ConflictApiError as on, AtlassianOAuthGrantExchangeResponse as ot, SafeMediaContentType as p, RateLimitedApiError as pn, AwsProfileDiscoveryResponse as pt, ReleaseAgentThreadEvent as q, SetPluginConnectionEnabledRequest as qt, TimelineExportContentType as r, SessionListResponse as rn, PortfolioReleaseSummary as rt, AuthorizedShareSummary as s, CorrelationId as sn, AtlassianOAuthGrantId as st, ControlCenterApi as t, SessionApiGroup as tn, PortfolioReleaseCollaborator as tt, MediaApiGroup as u, InvalidRequestApiError as un, AtlassianOAuthProviderIntent as ut, PortfolioSnapshotLiveEvent as v, CreateAtlassianOAuthGrantRequest as vt, DeliveryGraphApiGroup as w, CreatePluginConnectionsResponse as wt, StreamResetRequired as x, CreatePluginConnectionResponse as xt, StreamHeartbeat as y, CreatePluginConnectionBatchResult as yt, DurableAgentPrompt as z, PluginListResponse as zt };
|
|
1429
|
+
|
|
1430
|
+
//# sourceMappingURL=controlCenterApi-tZPvRPRH.js.map
|