@ankhorage/studio 2.7.1 → 2.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/apm/update.json +1 -1
- package/dist/app/ProjectDetailScreen.d.ts.map +1 -1
- package/dist/app/ProjectDetailScreen.js +3 -8
- package/dist/app/ProjectDetailScreen.js.map +1 -1
- package/dist/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.d.ts +6 -0
- package/dist/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.js +94 -0
- package/dist/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.js.map +1 -0
- package/dist/features/project-updates/adapters/inbound/registerProjectUpdateRoutes.d.ts +16 -0
- package/dist/features/project-updates/adapters/inbound/registerProjectUpdateRoutes.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/inbound/registerProjectUpdateRoutes.js +269 -0
- package/dist/features/project-updates/adapters/inbound/registerProjectUpdateRoutes.js.map +1 -0
- package/dist/features/project-updates/adapters/inbound/useProjectUpdateDashboard.d.ts +15 -0
- package/dist/features/project-updates/adapters/inbound/useProjectUpdateDashboard.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/inbound/useProjectUpdateDashboard.js +109 -0
- package/dist/features/project-updates/adapters/inbound/useProjectUpdateDashboard.js.map +1 -0
- package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.d.ts +4 -0
- package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.d.ts.map +1 -0
- package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.js +54 -0
- package/dist/features/project-updates/adapters/outbound/createProjectUpdateHostHttpAdapter.js.map +1 -0
- package/dist/features/project-updates/application/ProjectUpdateDashboardService.d.ts +19 -0
- package/dist/features/project-updates/application/ProjectUpdateDashboardService.d.ts.map +1 -0
- package/dist/features/project-updates/application/ProjectUpdateDashboardService.js +51 -0
- package/dist/features/project-updates/application/ProjectUpdateDashboardService.js.map +1 -0
- package/dist/features/project-updates/application/createProjectUpdateDashboardState.d.ts +4 -0
- package/dist/features/project-updates/application/createProjectUpdateDashboardState.d.ts.map +1 -0
- package/dist/features/project-updates/application/createProjectUpdateDashboardState.js +20 -0
- package/dist/features/project-updates/application/createProjectUpdateDashboardState.js.map +1 -0
- package/dist/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.d.ts +14 -0
- package/dist/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.d.ts.map +1 -0
- package/dist/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.js +2 -0
- package/dist/features/project-updates/application/ports/outbound/ProjectUpdateHostPort.js.map +1 -0
- package/dist/features/project-updates/application/reduceProjectUpdateDashboardState.d.ts +4 -0
- package/dist/features/project-updates/application/reduceProjectUpdateDashboardState.d.ts.map +1 -0
- package/dist/features/project-updates/application/reduceProjectUpdateDashboardState.js +53 -0
- package/dist/features/project-updates/application/reduceProjectUpdateDashboardState.js.map +1 -0
- package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.d.ts +126 -0
- package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.d.ts.map +1 -0
- package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.js +153 -0
- package/dist/features/project-updates/application/resolveProjectUpdateDashboardPresentation.js.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.d.ts +4 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.d.ts.map +1 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.js +8 -0
- package/dist/features/project-updates/composition/createStudioProjectUpdateDashboardService.js.map +1 -0
- package/dist/features/project-updates/utils/readProjectUpdateOperationId.d.ts +3 -0
- package/dist/features/project-updates/utils/readProjectUpdateOperationId.d.ts.map +1 -0
- package/dist/features/project-updates/utils/readProjectUpdateOperationId.js +10 -0
- package/dist/features/project-updates/utils/readProjectUpdateOperationId.js.map +1 -0
- package/dist/host/http/server.d.ts +3 -1
- package/dist/host/http/server.d.ts.map +1 -1
- package/dist/host/http/server.js +16 -1
- package/dist/host/http/server.js.map +1 -1
- package/dist/types/project-update-dashboard.d.ts +47 -0
- package/dist/types/project-update-dashboard.d.ts.map +1 -0
- package/dist/types/project-update-dashboard.js +2 -0
- package/dist/types/project-update-dashboard.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
# @ankhorage/studio
|
|
5
5
|
|
|
6
|
-
         
|
|
7
7
|
|
|
8
8
|
Studio authoring package for Ankhorage apps
|
|
9
9
|
|
package/apm/update.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"protocolVersion": 1,
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"owner": { "name": "@ankhorage/studio", "version": "2.7.
|
|
4
|
+
"owner": { "name": "@ankhorage/studio", "version": "2.7.3" },
|
|
5
5
|
"history": {
|
|
6
6
|
"supported": [{ "sourceRange": ">=2.5.7 <3.0.0", "mode": "no-migration" }],
|
|
7
7
|
"unsupported": [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectDetailScreen.d.ts","sourceRoot":"","sources":["../../src/app/ProjectDetailScreen.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ProjectDetailScreen.d.ts","sourceRoot":"","sources":["../../src/app/ProjectDetailScreen.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAmBxC,wBAAgB,mBAAmB,sBAoKlC"}
|
|
@@ -3,13 +3,14 @@ import { Heading, Text } from '@ankhorage/zora';
|
|
|
3
3
|
import { useLocalSearchParams } from 'expo-router';
|
|
4
4
|
import React, { useState } from 'react';
|
|
5
5
|
import { Alert, Linking, View } from 'react-native';
|
|
6
|
+
import { ProjectUpdateDashboardPanel } from '../features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel';
|
|
6
7
|
import { useProjects } from '../hooks/useProjects';
|
|
7
8
|
import { confirmDelete, openProjectUrl } from '../workspacePlatform';
|
|
8
9
|
import { EmptyState, formatCategory, formatDate, InlineMessage, LifecycleAction, LoadingState, MetadataRows, styles, WorkspaceScreen, } from './workspace/WorkspacePrimitives';
|
|
9
10
|
import { replaceWorkspaceRoute } from './workspace/workspaceRouter';
|
|
10
11
|
export function ProjectDetailScreen() {
|
|
11
12
|
const { projectId } = useProjectRouteParams();
|
|
12
|
-
const { projects, isLoading, error, refresh, deleteProject,
|
|
13
|
+
const { projects, isLoading, error, refresh, deleteProject, connectProjectRepository, upProjectInfrastructure, launchProject, } = useProjects();
|
|
13
14
|
const project = projects.find((candidate) => candidate.id === projectId);
|
|
14
15
|
const [activeAction, setActiveAction] = useState(null);
|
|
15
16
|
const [message, setMessage] = useState(null);
|
|
@@ -62,13 +63,7 @@ export function ProjectDetailScreen() {
|
|
|
62
63
|
] }), _jsxs(View, { style: styles.nameSlugRow, children: [_jsx(Heading, { level: 2, text: project.name }), _jsxs(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: ["#", project.id] })] }), _jsx(MetadataRows, { rows: [
|
|
63
64
|
['App category', formatCategory(project.category)],
|
|
64
65
|
['Creation', formatDate(project.created)],
|
|
65
|
-
] })] }), _jsxs(View, { style: styles.lifecyclePanel, children: [_jsx(Heading, { level: 3, text: "
|
|
66
|
-
await syncProject(project.id);
|
|
67
|
-
return 'Project synchronized.';
|
|
68
|
-
}) }), _jsx(LifecycleAction, { iconName: "download-outline", label: "Install packages", detail: "Install dependencies using this generated app as the package root.", loading: activeAction === 'Install packages', disabled: activeAction !== null, onPress: () => void runAction('Install packages', async () => {
|
|
69
|
-
await installProjectPackages(project.id);
|
|
70
|
-
return 'Project packages installed.';
|
|
71
|
-
}) }), _jsx(LifecycleAction, { iconName: "logo-github", label: "Connect GitHub", detail: "Publish the reconciled app snapshot to its private GitHub repository.", loading: activeAction === 'Connect GitHub', disabled: activeAction !== null, onPress: () => void runAction('Connect GitHub', async () => {
|
|
66
|
+
] })] }), _jsx(ProjectUpdateDashboardPanel, { projectId: project.id }), _jsxs(View, { style: styles.lifecyclePanel, children: [_jsx(Heading, { level: 3, text: "Project operations" }), message ? _jsx(InlineMessage, { tone: message.tone, text: message.text }) : null, _jsxs(View, { style: styles.actionStack, children: [_jsx(LifecycleAction, { iconName: "logo-github", label: "Connect GitHub", detail: "Publish the reconciled app snapshot to its private GitHub repository.", loading: activeAction === 'Connect GitHub', disabled: activeAction !== null, onPress: () => void runAction('Connect GitHub', async () => {
|
|
72
67
|
const response = await connectProjectRepository(project.id);
|
|
73
68
|
return response.status === 'already-connected'
|
|
74
69
|
? `GitHub repository already connected at ${response.repository.url}.`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectDetailScreen.js","sourceRoot":"","sources":["../../src/app/ProjectDetailScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAA8B,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,UAAU,EACV,cAAc,EACd,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,UAAU,mBAAmB;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAC9C,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,OAAO,EACP,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"ProjectDetailScreen.js","sourceRoot":"","sources":["../../src/app/ProjectDetailScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,0EAA0E,CAAC;AACvH,OAAO,EAA8B,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EACL,UAAU,EACV,cAAc,EACd,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,MAAM,EACN,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,MAAM,UAAU,mBAAmB;IACjC,MAAM,EAAE,SAAS,EAAE,GAAG,qBAAqB,EAAE,CAAC;IAC9C,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,OAAO,EACP,aAAa,EACb,wBAAwB,EACxB,uBAAuB,EACvB,aAAa,GACd,GAAG,WAAW,EAAE,CAAC;IAClB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;IACzE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAqD,IAAI,CAAC,CAAC;IAEjG,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,MAA6B;QACnE,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE,CAAC;YAC5B,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACtB,UAAU,CAAC;gBACT,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU;aACpE,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAChC,SAAS,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,QAAQ,GAA0B,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,QAAQ,CAAC,OAAO,KAAK,KAAK;YAC/B,CAAC,CAAC,oCAAoC,GAAG,GAAG;YAC5C,CAAC,CAAC,yBAAyB,GAAG,GAAG,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,aAAa,CACX,OAAO,CAAC,IAAI,EACZ,GAAG,EAAE;YACH,KAAK,SAAS,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;gBAC1C,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAChC,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBAC3B,OAAO,WAAW,OAAO,CAAC,IAAI,GAAG,CAAC;YACpC,CAAC,CAAC,CAAC;QACL,CAAC,EACD,KAAK,CAAC,KAAK,CACZ,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,eAAe,IAAC,KAAK,EAAC,gBAAgB,EAAC,QAAQ,EAAE,SAAS,YACxD,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,YAAY,IAAC,KAAK,EAAC,iBAAiB,GAAG,CACzC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,KAAC,UAAU,IACT,KAAK,EAAC,wBAAwB,EAC9B,MAAM,EAAE,KAAK,EACb,WAAW,EAAC,OAAO,EACnB,QAAQ,EAAE,OAAO,GACjB,CACH,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACb,KAAC,UAAU,IACT,KAAK,EAAC,mBAAmB,EACzB,MAAM,EAAC,2DAA2D,EAClE,WAAW,EAAC,kBAAkB,EAC9B,QAAQ,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAC1C,CACH,CAAC,CAAC,CAAC,CACF,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,YAAY,aAC9B,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,aAC7B,KAAC,IAAI,IACH,KAAK,EAAE;gCACL,MAAM,CAAC,WAAW;gCAClB,EAAE,eAAe,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE;6BAC5D,GACD,EACF,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,aAC7B,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,GAAI,EACzC,MAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,SAAS,kBACpD,OAAO,CAAC,EAAE,IACP,IACF,EACP,KAAC,YAAY,IACX,IAAI,EAAE;gCACJ,CAAC,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gCAClD,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;6BAC1C,GACD,IACG,EAEP,KAAC,2BAA2B,IAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAI,EAEtD,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,cAAc,aAChC,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAC,oBAAoB,GAAG,EAC9C,OAAO,CAAC,CAAC,CAAC,KAAC,aAAa,IAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,EAC3E,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,WAAW,aAC7B,KAAC,eAAe,IACd,QAAQ,EAAC,aAAa,EACtB,KAAK,EAAC,gBAAgB,EACtB,MAAM,EAAC,uEAAuE,EAC9E,OAAO,EAAE,YAAY,KAAK,gBAAgB,EAC1C,QAAQ,EAAE,YAAY,KAAK,IAAI,EAC/B,OAAO,EAAE,GAAG,EAAE,CACZ,KAAK,SAAS,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE;wCAC1C,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;wCAC5D,OAAO,QAAQ,CAAC,MAAM,KAAK,mBAAmB;4CAC5C,CAAC,CAAC,0CAA0C,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG;4CACtE,CAAC,CAAC,kCAAkC,QAAQ,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;oCACnE,CAAC,CAAC,GAEJ,EACF,KAAC,eAAe,IACd,QAAQ,EAAC,sBAAsB,EAC/B,KAAK,EAAC,mBAAmB,EACzB,MAAM,EAAC,wEAAwE,EAC/E,OAAO,EAAE,YAAY,KAAK,mBAAmB,EAC7C,QAAQ,EAAE,YAAY,KAAK,IAAI,EAC/B,OAAO,EAAE,GAAG,EAAE,CACZ,KAAK,SAAS,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;wCAC7C,MAAM,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;wCAC1C,OAAO,wCAAwC,CAAC;oCAClD,CAAC,CAAC,GAEJ,EACF,KAAC,eAAe,IACd,QAAQ,EAAC,cAAc,EACvB,KAAK,EAAC,kBAAkB,EACxB,MAAM,EAAC,qEAAqE,EAC5E,OAAO,EAAE,YAAY,KAAK,kBAAkB,EAC5C,QAAQ,EAAE,YAAY,KAAK,IAAI,EAC/B,OAAO,EAAE,oBAAoB,GAC7B,EACF,KAAC,eAAe,IACd,QAAQ,EAAC,eAAe,EACxB,KAAK,EAAC,gBAAgB,EACtB,MAAM,EAAC,oDAAoD,EAC3D,OAAO,EAAE,YAAY,KAAK,gBAAgB,EAC1C,QAAQ,EAAE,YAAY,KAAK,IAAI,EAC/B,WAAW,QACX,OAAO,EAAE,YAAY,GACrB,IACG,IACF,IACF,CACR,GACe,CACnB,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,SAAS,qBAAqB;IAC5B,MAAM,MAAM,GAAG,oBAAoB,EAA0B,CAAC;IAC9D,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,4DAA4D;AAC5D,SAAS,UAAU,CAAC,KAAoC;IACtD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/*** Render the project-scoped APM inspect, review, apply/recovery, and verify Dashboard lifecycle. */
|
|
3
|
+
export declare function ProjectUpdateDashboardPanel(props: {
|
|
4
|
+
readonly projectId: string;
|
|
5
|
+
}): React.JSX.Element;
|
|
6
|
+
//# sourceMappingURL=ProjectUpdateDashboardPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUpdateDashboardPanel.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,sGAAsG;AACtG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,qBAmEhF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { CheckboxGroup, Heading, Text, useZoraTheme } from '@ankhorage/zora';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { StyleSheet, View } from 'react-native';
|
|
5
|
+
import { InlineMessage, LifecycleAction, SegmentedControl, ThemedWorkspaceTextInput, } from '../../../../app/workspace/WorkspacePrimitives';
|
|
6
|
+
import { resolveProjectUpdateDashboardPresentation } from '../../application/resolveProjectUpdateDashboardPresentation';
|
|
7
|
+
import { useProjectUpdateDashboard } from './useProjectUpdateDashboard';
|
|
8
|
+
/*** Render the project-scoped APM inspect, review, apply/recovery, and verify Dashboard lifecycle. */
|
|
9
|
+
export function ProjectUpdateDashboardPanel(props) {
|
|
10
|
+
const { theme } = useZoraTheme();
|
|
11
|
+
const { state, inspectAsync, planAsync, applyAsync, resumeAsync, verifyAsync, setAvailability, setPermissionSelection, setOperationId, } = useProjectUpdateDashboard(props.projectId);
|
|
12
|
+
const presentation = resolveProjectUpdateDashboardPresentation(state);
|
|
13
|
+
return (_jsxs(View, { style: [
|
|
14
|
+
styles.panel,
|
|
15
|
+
{ borderColor: theme.colors.border, backgroundColor: theme.colors.surface },
|
|
16
|
+
], children: [_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 3, text: "Updates" }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "Inspect APM evidence, review the exact plan, authorize effects, then verify the durable operation separately." }), _jsx(SegmentedControl, { value: state.availability, options: AVAILABILITY_OPTIONS, onChange: setAvailability }), _jsx(LifecycleAction, { iconName: "search-outline", label: "Inspect updates", detail: "Read current dependency, migration, projection, and availability evidence.", loading: state.busy === 'status', disabled: state.busy !== null, onPress: () => void inspectAsync() }), state.error ? _jsx(InlineMessage, { tone: "error", text: state.error }) : null] }), presentation.status ? (_jsx(StatusSection, { status: presentation.status, state: state, onPlan: () => void planAsync() })) : null, presentation.plan ? (_jsx(PlanSection, { plan: presentation.plan, state: state, onPermissionSelection: setPermissionSelection, onApply: () => void applyAsync() })) : null, presentation.execution ? _jsx(ExecutionSection, { execution: presentation.execution }) : null, _jsx(RecoverySection, { state: state, onOperationIdChange: setOperationId, onResume: () => void resumeAsync(), onVerify: () => void verifyAsync() }), presentation.verification ? (_jsx(VerificationSection, { verification: presentation.verification })) : null] }));
|
|
17
|
+
}
|
|
18
|
+
const AVAILABILITY_OPTIONS = [
|
|
19
|
+
{ label: 'Refresh registry', value: 'refresh' },
|
|
20
|
+
{ label: 'Offline evidence', value: 'offline' },
|
|
21
|
+
];
|
|
22
|
+
const PERMISSION_OPTIONS = [
|
|
23
|
+
{
|
|
24
|
+
value: 'owner-code',
|
|
25
|
+
label: 'Owner code',
|
|
26
|
+
description: 'Allow reviewed package-owned update steps.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
value: 'lifecycle-scripts',
|
|
30
|
+
label: 'Lifecycle scripts',
|
|
31
|
+
description: 'Allow reviewed package-manager lifecycle scripts when required.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
value: 'external-effects',
|
|
35
|
+
label: 'External effects',
|
|
36
|
+
description: 'Allow reviewed external-service effects when required.',
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
function StatusSection(props) {
|
|
40
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Evidence" }), _jsxs(Text, { variant: "bodySmall", weight: "semiBold", children: [props.status.currency, " \u00B7 ", props.status.complete ? 'complete' : 'incomplete'] }), _jsx(DetailItems, { title: "Dependencies", empty: "No dependency changes are currently reported.", items: props.status.dependencies.map((dependency) => `${dependency.name} · ${dependency.direct ? 'direct' : 'transitive'} · ${dependency.currentVersion} → ${dependency.availableVersion}`) }), _jsx(DetailItems, { title: "Migration & projection evidence", empty: "No extension observations are currently reported.", items: props.status.observations.map((observation) => `${observation.owner} · projection ${observation.projection} · migration ${observation.migration}${observation.reason ? ` · ${observation.reason}` : ''}`) }), _jsx(ReasonItems, { title: "Findings", items: props.status.findings }), _jsx(ReasonItems, { title: "Diagnostics", items: props.status.diagnostics }), _jsx(LifecycleAction, { iconName: "git-compare-outline", label: "Review update plan", detail: "Create a concrete safe-update and repair plan from fresh host evidence.", loading: props.state.busy === 'plan', disabled: props.state.busy !== null, onPress: props.onPlan })] }));
|
|
41
|
+
}
|
|
42
|
+
function PlanSection(props) {
|
|
43
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Reviewed plan" }), _jsxs(Text, { variant: "bodySmall", weight: "semiBold", children: [props.plan.id, " \u00B7 ", props.plan.complete ? 'complete' : 'blocked'] }), _jsx(DetailItems, { title: "Dependency targets", empty: "No dependency version changes.", items: props.plan.targets.map((target) => `${target.name} · ${target.direct ? 'direct' : 'transitive'} · ${target.currentVersion} → ${target.targetVersion} · ${target.reason}`) }), _jsx(DetailItems, { title: "File changes", empty: "No reviewed file changes.", items: props.plan.files.map((file) => `${file.kind} · ${file.path}`) }), _jsx(DetailItems, { title: "Ordered steps", empty: "No executable steps.", items: props.plan.steps.map((step) => `${step.kind} · ${step.reason}`) }), _jsx(EffectItems, { title: "Shipment & follow-up effects", effects: props.plan.effects }), _jsx(ReasonItems, { title: "Plan blockers", items: props.plan.blockers }), _jsx(ReasonItems, { title: "Plan findings", items: props.plan.findings }), props.plan.hostRestartRequired ? (_jsx(InlineMessage, { tone: "info", text: "Studio host upgrade/restart is required. Restart the host, then Inspect updates again and create a fresh plan; this reviewed plan is not executable across the restart boundary." })) : null, props.plan.canApply ? (_jsxs(_Fragment, { children: [_jsxs(View, { style: styles.permissions, children: [_jsx(Text, { weight: "semiBold", children: "Execution permissions" }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: "Every permission is explicit. Leave an effect disabled unless the reviewed plan requires and you approve it." }), _jsx(CheckboxGroup, { value: permissionSelection(props.state.permissions), options: PERMISSION_OPTIONS, orientation: "vertical", gap: "s", onValueChange: props.onPermissionSelection })] }), _jsx(LifecycleAction, { iconName: "play-outline", label: "Apply reviewed plan", detail: "Execute only this reviewed plan through APM's durable lock and journal.", loading: props.state.busy === 'apply', disabled: props.state.busy !== null, onPress: props.onApply })] })) : null] }));
|
|
44
|
+
}
|
|
45
|
+
function ExecutionSection(props) {
|
|
46
|
+
const tone = props.execution.status === 'completed' ? 'success' : 'info';
|
|
47
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Execution" }), _jsx(InlineMessage, { tone: tone, text: `Operation ${props.execution.operationId || 'unknown'}: ${props.execution.status}.` }), _jsx(DetailItems, { title: "Journal steps", empty: "No journal steps are available yet.", items: props.execution.steps.map((step) => `${step.id} · ${step.state} · ${step.attempts} attempt${step.attempts === 1 ? '' : 's'}`) }), _jsx(ReasonItems, { title: "Execution blockers", items: props.execution.blockers }), _jsx(ReasonItems, { title: "Execution diagnostics", items: props.execution.diagnostics }), props.execution.status === 'recovery-required' ? (_jsx(InlineMessage, { tone: "info", text: "Recovery is durable. Keep the operation ID below and resume the same APM journal; do not start a replacement update." })) : null] }));
|
|
48
|
+
}
|
|
49
|
+
function RecoverySection(props) {
|
|
50
|
+
const hasOperation = props.state.operationId.trim().length > 0;
|
|
51
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Recovery & verification" }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: "Durable operation IDs can be resumed after interruption or entered again after reloading the Dashboard. Verification is a separate evidence pass." }), _jsx(ThemedWorkspaceTextInput, { value: props.state.operationId, onChangeText: props.onOperationIdChange, placeholder: "APM operation ID", accessibilityLabel: "APM operation ID", autoCapitalize: "none", autoCorrect: false }), _jsxs(View, { style: styles.actions, children: [_jsx(LifecycleAction, { iconName: "refresh-circle-outline", label: "Resume operation", detail: "Resume the same durable APM journal and its recovery semantics.", loading: props.state.busy === 'resume', disabled: props.state.busy !== null || !hasOperation, onPress: props.onResume }), _jsx(LifecycleAction, { iconName: "checkmark-circle-outline", label: "Verify operation", detail: "Reinspect project and owner evidence for this operation after execution.", loading: props.state.busy === 'verify', disabled: props.state.busy !== null || !hasOperation, onPress: props.onVerify })] })] }));
|
|
52
|
+
}
|
|
53
|
+
function VerificationSection(props) {
|
|
54
|
+
return (_jsxs(View, { style: styles.section, children: [_jsx(Heading, { level: 4, text: "Verification" }), _jsx(InlineMessage, { tone: props.verification.verified ? 'success' : 'info', text: `Operation ${props.verification.operationId || 'unknown'} is ${props.verification.verified ? 'verified' : 'not fully verified'}.` }), _jsx(DetailItems, { title: "Checks", empty: "No verification checks were returned.", items: props.verification.checks.map((check) => `${check.kind} · ${check.status}${check.reason ? ` · ${check.reason}` : ''}${check.nextAction ? ` · next: ${check.nextAction}` : ''}`) }), _jsx(ReasonItems, { title: "Remaining findings", items: props.verification.findings }), _jsx(ReasonItems, { title: "Verification diagnostics", items: props.verification.diagnostics }), _jsx(EffectItems, { title: "Shipment & follow-up", effects: props.verification.followUp })] }));
|
|
55
|
+
}
|
|
56
|
+
function DetailItems(props) {
|
|
57
|
+
return (_jsxs(View, { style: styles.detailList, children: [_jsx(Text, { weight: "semiBold", variant: "bodySmall", children: props.title }), props.items.length === 0 ? (_jsx(Text, { color: "neutral", emphasis: "muted", variant: "caption", children: props.empty })) : (props.items.map((item) => (_jsxs(Text, { variant: "caption", children: ["\u2022 ", item] }, item))))] }));
|
|
58
|
+
}
|
|
59
|
+
function ReasonItems(props) {
|
|
60
|
+
return (_jsx(DetailItems, { title: props.title, empty: `No ${props.title.toLowerCase()}.`, items: props.items.map((item) => `${item.code ? `${item.code} · ` : ''}${item.reason}${item.nextAction ? ` · next: ${item.nextAction}` : ''}`) }));
|
|
61
|
+
}
|
|
62
|
+
function EffectItems(props) {
|
|
63
|
+
return (_jsx(DetailItems, { title: props.title, empty: "No shipment or follow-up effects.", items: props.effects.map((effect) => `${effect.kind} · ${effect.state} · ${effect.reason}`) }));
|
|
64
|
+
}
|
|
65
|
+
function permissionSelection(permissions) {
|
|
66
|
+
return [
|
|
67
|
+
...(permissions.ownerCode ? ['owner-code'] : []),
|
|
68
|
+
...(permissions.lifecycleScripts ? ['lifecycle-scripts'] : []),
|
|
69
|
+
...(permissions.externalEffects ? ['external-effects'] : []),
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
const styles = StyleSheet.create({
|
|
73
|
+
panel: {
|
|
74
|
+
width: '100%',
|
|
75
|
+
flexBasis: '100%',
|
|
76
|
+
borderWidth: 1,
|
|
77
|
+
borderRadius: 10,
|
|
78
|
+
padding: 16,
|
|
79
|
+
gap: 18,
|
|
80
|
+
},
|
|
81
|
+
section: {
|
|
82
|
+
gap: 10,
|
|
83
|
+
},
|
|
84
|
+
detailList: {
|
|
85
|
+
gap: 4,
|
|
86
|
+
},
|
|
87
|
+
permissions: {
|
|
88
|
+
gap: 8,
|
|
89
|
+
},
|
|
90
|
+
actions: {
|
|
91
|
+
gap: 10,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=ProjectUpdateDashboardPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUpdateDashboardPanel.js","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/inbound/ProjectUpdateDashboardPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ApmApplyInput, ApmPlanProjectInput, ApmStatusInput, ApmVerifyInput } from '@ankhorage/apm/types';
|
|
2
|
+
import type { FastifyInstance } from 'fastify';
|
|
3
|
+
interface ProjectUpdateRouteService {
|
|
4
|
+
readonly statusAsync: (input: ApmStatusInput) => Promise<unknown>;
|
|
5
|
+
readonly planAsync: (input: ApmPlanProjectInput) => Promise<unknown>;
|
|
6
|
+
readonly applyAsync: (input: ApmApplyInput) => Promise<unknown>;
|
|
7
|
+
readonly verifyAsync: (input: ApmVerifyInput) => Promise<unknown>;
|
|
8
|
+
}
|
|
9
|
+
interface ProjectUpdateRouteOptions {
|
|
10
|
+
readonly service: ProjectUpdateRouteService;
|
|
11
|
+
readonly resolveProjectRootAsync: (projectId: string) => Promise<string | undefined>;
|
|
12
|
+
}
|
|
13
|
+
/*** Register the authorized HTTP adapter for Studio's composed APM project-update lifecycle. */
|
|
14
|
+
export declare function registerProjectUpdateRoutes(fastify: FastifyInstance, options: ProjectUpdateRouteOptions): void;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=registerProjectUpdateRoutes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerProjectUpdateRoutes.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/inbound/registerProjectUpdateRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAIb,mBAAmB,EAInB,cAAc,EACd,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAE7D,UAAU,yBAAyB;IACjC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACnE;AAED,UAAU,yBAAyB;IACjC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,uBAAuB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACtF;AAED,gGAAgG;AAChG,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,yBAAyB,GACjC,IAAI,CAwEN"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { hasOnlyKeys, isRecord } from '@ankhorage/utility/object';
|
|
2
|
+
/*** Register the authorized HTTP adapter for Studio's composed APM project-update lifecycle. */
|
|
3
|
+
export function registerProjectUpdateRoutes(fastify, options) {
|
|
4
|
+
fastify.get('/api/projects/:id/updates/status', async (request, reply) => {
|
|
5
|
+
const context = await resolveRequestContext(request.params, options, reply);
|
|
6
|
+
if (context === undefined)
|
|
7
|
+
return;
|
|
8
|
+
const query = isRecord(request.query) ? request.query : {};
|
|
9
|
+
if (!hasOnlyKeys(query, ['availability']) || !isAvailability(query.availability)) {
|
|
10
|
+
return sendInvalidRequest(reply);
|
|
11
|
+
}
|
|
12
|
+
const input = {
|
|
13
|
+
rootPath: context.rootPath,
|
|
14
|
+
...(query.availability === undefined ? {} : { availability: query.availability }),
|
|
15
|
+
};
|
|
16
|
+
return invokeReadOnly(reply, () => options.service.statusAsync(input));
|
|
17
|
+
});
|
|
18
|
+
fastify.post('/api/projects/:id/updates/plan', async (request, reply) => {
|
|
19
|
+
const context = await resolveRequestContext(request.params, options, reply);
|
|
20
|
+
if (context === undefined)
|
|
21
|
+
return;
|
|
22
|
+
const body = request.body === undefined ? {} : request.body;
|
|
23
|
+
if (!isPlanRequest(body))
|
|
24
|
+
return sendInvalidRequest(reply);
|
|
25
|
+
const input = {
|
|
26
|
+
rootPath: context.rootPath,
|
|
27
|
+
...(body.availability === undefined ? {} : { availability: body.availability }),
|
|
28
|
+
...(body.policy === undefined ? {} : { policy: body.policy }),
|
|
29
|
+
};
|
|
30
|
+
return invokeLifecycle(reply, () => options.service.planAsync(input));
|
|
31
|
+
});
|
|
32
|
+
fastify.post('/api/projects/:id/updates/apply', async (request, reply) => {
|
|
33
|
+
const context = await resolveRequestContext(request.params, options, reply);
|
|
34
|
+
if (context === undefined)
|
|
35
|
+
return;
|
|
36
|
+
const { body } = request;
|
|
37
|
+
if (!isApplyRequest(body))
|
|
38
|
+
return sendInvalidRequest(reply);
|
|
39
|
+
if (body.plan.rootPath !== context.rootPath) {
|
|
40
|
+
return reply.status(409).send({ error: 'The reviewed plan belongs to another project.' });
|
|
41
|
+
}
|
|
42
|
+
return invokeLifecycle(reply, () => options.service.applyAsync({
|
|
43
|
+
mode: 'start',
|
|
44
|
+
plan: body.plan,
|
|
45
|
+
permissions: body.permissions,
|
|
46
|
+
}));
|
|
47
|
+
});
|
|
48
|
+
fastify.post('/api/projects/:id/updates/resume', async (request, reply) => {
|
|
49
|
+
const context = await resolveRequestContext(request.params, options, reply);
|
|
50
|
+
if (context === undefined)
|
|
51
|
+
return;
|
|
52
|
+
const { body } = request;
|
|
53
|
+
if (!isResumeRequest(body))
|
|
54
|
+
return sendInvalidRequest(reply);
|
|
55
|
+
return invokeLifecycle(reply, () => options.service.applyAsync({
|
|
56
|
+
mode: 'resume',
|
|
57
|
+
rootPath: context.rootPath,
|
|
58
|
+
operationId: body.operationId,
|
|
59
|
+
permissions: body.permissions,
|
|
60
|
+
}));
|
|
61
|
+
});
|
|
62
|
+
fastify.post('/api/projects/:id/updates/verify', async (request, reply) => {
|
|
63
|
+
const context = await resolveRequestContext(request.params, options, reply);
|
|
64
|
+
if (context === undefined)
|
|
65
|
+
return;
|
|
66
|
+
const { body } = request;
|
|
67
|
+
if (!isOperationRequest(body))
|
|
68
|
+
return sendInvalidRequest(reply);
|
|
69
|
+
return invokeLifecycle(reply, () => options.service.verifyAsync({
|
|
70
|
+
rootPath: context.rootPath,
|
|
71
|
+
operationId: body.operationId,
|
|
72
|
+
}));
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/*** Resolve a request's validated project id to its server-owned project root. */
|
|
76
|
+
async function resolveRequestContext(params, options, reply) {
|
|
77
|
+
if (!isRecord(params) || typeof params.id !== 'string' || params.id.length === 0) {
|
|
78
|
+
sendInvalidRequest(reply);
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const rootPath = await options.resolveProjectRootAsync(params.id);
|
|
83
|
+
if (rootPath === undefined) {
|
|
84
|
+
reply.status(404).send({ error: 'Project not found.' });
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
return { rootPath };
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
reply.status(404).send({ error: 'Project not found.' });
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/*** Execute one read-only APM request without leaking host exception details. */
|
|
95
|
+
async function invokeReadOnly(reply, operation) {
|
|
96
|
+
try {
|
|
97
|
+
return await operation();
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return reply.status(500).send({ error: 'Project update request failed.' });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/*** Execute one APM lifecycle request and map incomplete or blocked structured results to conflict. */
|
|
104
|
+
async function invokeLifecycle(reply, operation) {
|
|
105
|
+
try {
|
|
106
|
+
const result = await operation();
|
|
107
|
+
if (isLifecycleConflict(result))
|
|
108
|
+
return reply.status(409).send(result);
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return reply.status(500).send({ error: 'Project update request failed.' });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/*** Detect structured APM plan/apply/verify results that require further user action. */
|
|
116
|
+
function isLifecycleConflict(value) {
|
|
117
|
+
if (!isRecord(value) || typeof value.operation !== 'string')
|
|
118
|
+
return false;
|
|
119
|
+
if (value.operation === 'plan')
|
|
120
|
+
return value.complete === false;
|
|
121
|
+
if (value.operation === 'apply')
|
|
122
|
+
return value.status !== 'completed';
|
|
123
|
+
if (value.operation === 'verify')
|
|
124
|
+
return value.verified === false;
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
/*** Return a stable bad-request response without echoing untrusted request data. */
|
|
128
|
+
function sendInvalidRequest(reply) {
|
|
129
|
+
return reply.status(400).send({ error: 'Invalid project update request.' });
|
|
130
|
+
}
|
|
131
|
+
/*** Validate the optional APM availability mode. */
|
|
132
|
+
function isAvailability(value) {
|
|
133
|
+
return value === undefined || value === 'refresh' || value === 'offline';
|
|
134
|
+
}
|
|
135
|
+
/*** Validate the bounded request body accepted by the plan route. */
|
|
136
|
+
function isPlanRequest(value) {
|
|
137
|
+
return (isRecord(value) &&
|
|
138
|
+
hasOnlyKeys(value, ['availability', 'policy']) &&
|
|
139
|
+
isAvailability(value.availability) &&
|
|
140
|
+
(value.policy === undefined || isPlanPolicy(value.policy)));
|
|
141
|
+
}
|
|
142
|
+
/*** Validate the APM plan policy fields exposed by the host adapter. */
|
|
143
|
+
function isPlanPolicy(value) {
|
|
144
|
+
return (isRecord(value) &&
|
|
145
|
+
hasOnlyKeys(value, [
|
|
146
|
+
'dependencyUpdates',
|
|
147
|
+
'selections',
|
|
148
|
+
'repairInstallations',
|
|
149
|
+
'repairProjections',
|
|
150
|
+
'maxGeneratorIterations',
|
|
151
|
+
]) &&
|
|
152
|
+
(value.dependencyUpdates === undefined ||
|
|
153
|
+
value.dependencyUpdates === 'safe' ||
|
|
154
|
+
value.dependencyUpdates === 'selected' ||
|
|
155
|
+
value.dependencyUpdates === 'none') &&
|
|
156
|
+
(value.selections === undefined ||
|
|
157
|
+
(Array.isArray(value.selections) && value.selections.every(isPlanPackageSelection))) &&
|
|
158
|
+
(value.repairInstallations === undefined || typeof value.repairInstallations === 'boolean') &&
|
|
159
|
+
(value.repairProjections === undefined || typeof value.repairProjections === 'boolean') &&
|
|
160
|
+
(value.maxGeneratorIterations === undefined ||
|
|
161
|
+
(typeof value.maxGeneratorIterations === 'number' &&
|
|
162
|
+
Number.isInteger(value.maxGeneratorIterations) &&
|
|
163
|
+
value.maxGeneratorIterations > 0)));
|
|
164
|
+
}
|
|
165
|
+
/*** Validate one package selection in a host-authored APM plan request. */
|
|
166
|
+
function isPlanPackageSelection(value) {
|
|
167
|
+
if (!isRecord(value) || !hasOnlyKeys(value, ['selector', 'target']))
|
|
168
|
+
return false;
|
|
169
|
+
const { selector } = value;
|
|
170
|
+
if (!isRecord(selector) ||
|
|
171
|
+
!hasOnlyKeys(selector, ['name', 'packageId', 'installRootId', 'ownerPath'])) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
return (typeof selector.name === 'string' &&
|
|
175
|
+
selector.name.length > 0 &&
|
|
176
|
+
isOptionalString(selector.packageId) &&
|
|
177
|
+
isOptionalString(selector.installRootId) &&
|
|
178
|
+
isOptionalString(selector.ownerPath) &&
|
|
179
|
+
isPlanTargetSelection(value.target));
|
|
180
|
+
}
|
|
181
|
+
/*** Validate one compatible/latest/exact APM target selection. */
|
|
182
|
+
function isPlanTargetSelection(value) {
|
|
183
|
+
if (!isRecord(value) || typeof value.kind !== 'string')
|
|
184
|
+
return false;
|
|
185
|
+
if (value.kind === 'compatible')
|
|
186
|
+
return hasOnlyKeys(value, ['kind']);
|
|
187
|
+
if (value.kind === 'latest') {
|
|
188
|
+
return (hasOnlyKeys(value, ['kind', 'allowPrerelease', 'manifestRange']) &&
|
|
189
|
+
isOptionalBoolean(value.allowPrerelease) &&
|
|
190
|
+
isOptionalString(value.manifestRange));
|
|
191
|
+
}
|
|
192
|
+
if (value.kind === 'version') {
|
|
193
|
+
return (hasOnlyKeys(value, [
|
|
194
|
+
'kind',
|
|
195
|
+
'version',
|
|
196
|
+
'allowPrerelease',
|
|
197
|
+
'allowDowngrade',
|
|
198
|
+
'manifestRange',
|
|
199
|
+
]) &&
|
|
200
|
+
typeof value.version === 'string' &&
|
|
201
|
+
value.version.length > 0 &&
|
|
202
|
+
isOptionalBoolean(value.allowPrerelease) &&
|
|
203
|
+
isOptionalBoolean(value.allowDowngrade) &&
|
|
204
|
+
isOptionalString(value.manifestRange));
|
|
205
|
+
}
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
/*** Validate the reviewed start request without accepting a caller-controlled project root. */
|
|
209
|
+
function isApplyRequest(value) {
|
|
210
|
+
return (isRecord(value) &&
|
|
211
|
+
hasOnlyKeys(value, ['plan', 'permissions']) &&
|
|
212
|
+
isPlanResult(value.plan) &&
|
|
213
|
+
isApplyPermissions(value.permissions));
|
|
214
|
+
}
|
|
215
|
+
/*** Validate the durable resume request without accepting a caller-controlled project root. */
|
|
216
|
+
function isResumeRequest(value) {
|
|
217
|
+
return (isRecord(value) &&
|
|
218
|
+
hasOnlyKeys(value, ['operationId', 'permissions']) &&
|
|
219
|
+
isNonEmptyString(value.operationId) &&
|
|
220
|
+
isApplyPermissions(value.permissions));
|
|
221
|
+
}
|
|
222
|
+
/*** Validate the verify request's operation identity. */
|
|
223
|
+
function isOperationRequest(value) {
|
|
224
|
+
if (!isRecord(value))
|
|
225
|
+
return false;
|
|
226
|
+
return hasOnlyKeys(value, ['operationId']) && isNonEmptyString(value.operationId);
|
|
227
|
+
}
|
|
228
|
+
/*** Validate explicit APM execution permissions. */
|
|
229
|
+
function isApplyPermissions(value) {
|
|
230
|
+
return (isRecord(value) &&
|
|
231
|
+
hasOnlyKeys(value, ['ownerCode', 'lifecycleScripts', 'externalEffects']) &&
|
|
232
|
+
typeof value.ownerCode === 'boolean' &&
|
|
233
|
+
typeof value.lifecycleScripts === 'boolean' &&
|
|
234
|
+
typeof value.externalEffects === 'boolean');
|
|
235
|
+
}
|
|
236
|
+
/*** Validate a reviewed APM plan envelope before passing it back to the executor for revalidation. */
|
|
237
|
+
function isPlanResult(value) {
|
|
238
|
+
return (isRecord(value) &&
|
|
239
|
+
value.schemaVersion === 2 &&
|
|
240
|
+
value.operation === 'plan' &&
|
|
241
|
+
isNonEmptyString(value.id) &&
|
|
242
|
+
isNonEmptyString(value.rootPath) &&
|
|
243
|
+
typeof value.complete === 'boolean' &&
|
|
244
|
+
isRecord(value.policy) &&
|
|
245
|
+
isRecord(value.executor) &&
|
|
246
|
+
isRecord(value.inputFingerprint) &&
|
|
247
|
+
Array.isArray(value.targets) &&
|
|
248
|
+
Array.isArray(value.files) &&
|
|
249
|
+
Array.isArray(value.packages) &&
|
|
250
|
+
Array.isArray(value.artifacts) &&
|
|
251
|
+
Array.isArray(value.steps) &&
|
|
252
|
+
Array.isArray(value.effects) &&
|
|
253
|
+
Array.isArray(value.findings) &&
|
|
254
|
+
Array.isArray(value.blockers) &&
|
|
255
|
+
Array.isArray(value.diagnostics));
|
|
256
|
+
}
|
|
257
|
+
/*** Validate an optional string field. */
|
|
258
|
+
function isOptionalString(value) {
|
|
259
|
+
return value === undefined || typeof value === 'string';
|
|
260
|
+
}
|
|
261
|
+
/*** Validate an optional boolean field. */
|
|
262
|
+
function isOptionalBoolean(value) {
|
|
263
|
+
return value === undefined || typeof value === 'boolean';
|
|
264
|
+
}
|
|
265
|
+
/*** Validate a required non-empty string. */
|
|
266
|
+
function isNonEmptyString(value) {
|
|
267
|
+
return typeof value === 'string' && value.length > 0;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=registerProjectUpdateRoutes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerProjectUpdateRoutes.js","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/inbound/registerProjectUpdateRoutes.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAelE,gGAAgG;AAChG,MAAM,UAAU,2BAA2B,CACzC,OAAwB,EACxB,OAAkC;IAElC,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACjF,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,KAAK,GAAmB;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;SAClF,CAAC;QACF,OAAO,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACtE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAwB;YACjC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/E,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;SAC9D,CAAC;QACF,OAAO,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,CACjC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;YACzB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACxE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC7D,OAAO,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,CACjC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;YACzB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACxE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAChE,OAAO,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,CACjC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,qBAAqB,CAClC,MAAe,EACf,OAAkC,EAClC,KAAmB;IAEnB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjF,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACxD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,KAAK,UAAU,cAAc,CAC3B,KAAmB,EACnB,SAAiC;IAEjC,IAAI,CAAC;QACH,OAAO,MAAM,SAAS,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,KAAK,UAAU,eAAe,CAC5B,KAAmB,EACnB,SAAiC;IAEjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,IAAI,mBAAmB,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,yFAAyF;AACzF,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1E,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC;IAChE,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC;IACrE,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oFAAoF;AACpF,SAAS,kBAAkB,CAAC,KAAmB;IAC7C,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,oDAAoD;AACpD,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC;AAC3E,CAAC;AAED,qEAAqE;AACrE,SAAS,aAAa,CAAC,KAAc;IAInC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAC9C,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;QAClC,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,WAAW,CAAC,KAAK,EAAE;YACjB,mBAAmB;YACnB,YAAY;YACZ,qBAAqB;YACrB,mBAAmB;YACnB,wBAAwB;SACzB,CAAC;QACF,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS;YACpC,KAAK,CAAC,iBAAiB,KAAK,MAAM;YAClC,KAAK,CAAC,iBAAiB,KAAK,UAAU;YACtC,KAAK,CAAC,iBAAiB,KAAK,MAAM,CAAC;QACrC,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS;YAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACtF,CAAC,KAAK,CAAC,mBAAmB,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,mBAAmB,KAAK,SAAS,CAAC;QAC3F,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC;QACvF,CAAC,KAAK,CAAC,sBAAsB,KAAK,SAAS;YACzC,CAAC,OAAO,KAAK,CAAC,sBAAsB,KAAK,QAAQ;gBAC/C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC;gBAC9C,KAAK,CAAC,sBAAsB,GAAG,CAAC,CAAC,CAAC,CACvC,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAClF,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3B,IACE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACnB,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,EAC3E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;QACjC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACxB,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC;QACxC,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC;QACpC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CACpC,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,CACL,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;YAChE,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC;YACxC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CACtC,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,CACL,WAAW,CAAC,KAAK,EAAE;YACjB,MAAM;YACN,SAAS;YACT,iBAAiB;YACjB,gBAAgB;YAChB,eAAe;SAChB,CAAC;YACF,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YACjC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACxB,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC;YACxC,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC;YACvC,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CACtC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+FAA+F;AAC/F,SAAS,cAAc,CACrB,KAAc;IAEd,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC3C,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;QACxB,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,SAAS,eAAe,CACtB,KAAc;IAEd,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAClD,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC;QACnC,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACpF,CAAC;AAED,oDAAoD;AACpD,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,WAAW,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;QACxE,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS;QACpC,OAAO,KAAK,CAAC,gBAAgB,KAAK,SAAS;QAC3C,OAAO,KAAK,CAAC,eAAe,KAAK,SAAS,CAC3C,CAAC;AACJ,CAAC;AAED,sGAAsG;AACtG,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,KAAK,CAAC,aAAa,KAAK,CAAC;QACzB,KAAK,CAAC,SAAS,KAAK,MAAM;QAC1B,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChC,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS;QACnC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QACtB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxB,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QAC9B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CACjC,CAAC;AACJ,CAAC;AAED,0CAA0C;AAC1C,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AAC1D,CAAC;AAED,2CAA2C;AAC3C,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC;AAC3D,CAAC;AAED,6CAA6C;AAC7C,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ApmStatusAvailabilityMode } from '@ankhorage/apm/types';
|
|
2
|
+
import type { ProjectUpdatePermissionId } from '../../../../types/project-update-dashboard';
|
|
3
|
+
/*** Bind one selected project to the authorized Dashboard APM lifecycle and its reviewed state. */
|
|
4
|
+
export declare function useProjectUpdateDashboard(projectId: string): {
|
|
5
|
+
state: import("../../../../types/project-update-dashboard").ProjectUpdateDashboardState;
|
|
6
|
+
inspectAsync: () => Promise<void>;
|
|
7
|
+
planAsync: () => Promise<void>;
|
|
8
|
+
applyAsync: () => Promise<void>;
|
|
9
|
+
resumeAsync: () => Promise<void>;
|
|
10
|
+
verifyAsync: () => Promise<void>;
|
|
11
|
+
setAvailability: (availability: ApmStatusAvailabilityMode) => void;
|
|
12
|
+
setPermissionSelection: (selection: readonly ProjectUpdatePermissionId[]) => void;
|
|
13
|
+
setOperationId: (operationId: string) => void;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=useProjectUpdateDashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProjectUpdateDashboard.d.ts","sourceRoot":"","sources":["../../../../../src/features/project-updates/adapters/inbound/useProjectUpdateDashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAG3F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAM5F,mGAAmG;AACnG,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM;;;;;;;oCA0EN,yBAAyB;wCAIrB,SAAS,yBAAyB,EAAE;kCAO1C,MAAM;EAexD"}
|