@ankhorage/studio 1.10.1 → 1.12.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.
Files changed (98) hide show
  1. package/README.md +1 -1
  2. package/dist/canExecuteProjectDeployRelease.d.ts +3 -0
  3. package/dist/canExecuteProjectDeployRelease.d.ts.map +1 -0
  4. package/dist/canExecuteProjectDeployRelease.js +4 -0
  5. package/dist/canExecuteProjectDeployRelease.js.map +1 -0
  6. package/dist/host/deploy/ProjectDeployMutationGuard.d.ts +5 -0
  7. package/dist/host/deploy/ProjectDeployMutationGuard.d.ts.map +1 -0
  8. package/dist/host/deploy/ProjectDeployMutationGuard.js +16 -0
  9. package/dist/host/deploy/ProjectDeployMutationGuard.js.map +1 -0
  10. package/dist/host/deploy/ProjectDeployService.d.ts +22 -2
  11. package/dist/host/deploy/ProjectDeployService.d.ts.map +1 -1
  12. package/dist/host/deploy/ProjectDeployService.js +57 -8
  13. package/dist/host/deploy/ProjectDeployService.js.map +1 -1
  14. package/dist/host/http/deployRoutes.d.ts.map +1 -1
  15. package/dist/host/http/deployRoutes.js +49 -10
  16. package/dist/host/http/deployRoutes.js.map +1 -1
  17. package/dist/projectDeployApi.d.ts +36 -2
  18. package/dist/projectDeployApi.d.ts.map +1 -1
  19. package/dist/projectDeployApi.js +33 -0
  20. package/dist/projectDeployApi.js.map +1 -1
  21. package/dist/projectDeployAssetPicker.d.ts +5 -0
  22. package/dist/projectDeployAssetPicker.d.ts.map +1 -0
  23. package/dist/projectDeployAssetPicker.js +26 -0
  24. package/dist/projectDeployAssetPicker.js.map +1 -0
  25. package/dist/projectDeployClient.d.ts +37 -2
  26. package/dist/projectDeployClient.d.ts.map +1 -1
  27. package/dist/projectDeployClient.js +189 -0
  28. package/dist/projectDeployClient.js.map +1 -1
  29. package/dist/projectDeployMonetizationInspectionResult.d.ts +11 -0
  30. package/dist/projectDeployMonetizationInspectionResult.d.ts.map +1 -0
  31. package/dist/projectDeployMonetizationInspectionResult.js +2 -0
  32. package/dist/projectDeployMonetizationInspectionResult.js.map +1 -0
  33. package/dist/projectDeployReleaseExecutionResponse.d.ts +6 -0
  34. package/dist/projectDeployReleaseExecutionResponse.d.ts.map +1 -0
  35. package/dist/projectDeployReleaseExecutionResponse.js +2 -0
  36. package/dist/projectDeployReleaseExecutionResponse.js.map +1 -0
  37. package/dist/ui/admin/pages/DeployAdminPage.d.ts.map +1 -1
  38. package/dist/ui/admin/pages/DeployAdminPage.js +7 -2
  39. package/dist/ui/admin/pages/DeployAdminPage.js.map +1 -1
  40. package/dist/ui/admin/pages/deploy/DeployControlResultView.d.ts +6 -0
  41. package/dist/ui/admin/pages/deploy/DeployControlResultView.d.ts.map +1 -0
  42. package/dist/ui/admin/pages/deploy/DeployControlResultView.js +9 -0
  43. package/dist/ui/admin/pages/deploy/DeployControlResultView.js.map +1 -0
  44. package/dist/ui/admin/pages/deploy/DeployExecutionResultView.d.ts +7 -0
  45. package/dist/ui/admin/pages/deploy/DeployExecutionResultView.d.ts.map +1 -0
  46. package/dist/ui/admin/pages/deploy/DeployExecutionResultView.js +14 -0
  47. package/dist/ui/admin/pages/deploy/DeployExecutionResultView.js.map +1 -0
  48. package/dist/ui/admin/pages/deploy/DeployHistoryCard.d.ts.map +1 -1
  49. package/dist/ui/admin/pages/deploy/DeployHistoryCard.js +6 -3
  50. package/dist/ui/admin/pages/deploy/DeployHistoryCard.js.map +1 -1
  51. package/dist/ui/admin/pages/deploy/DeployLifecycleControls.d.ts +8 -0
  52. package/dist/ui/admin/pages/deploy/DeployLifecycleControls.d.ts.map +1 -0
  53. package/dist/ui/admin/pages/deploy/DeployLifecycleControls.js +10 -0
  54. package/dist/ui/admin/pages/deploy/DeployLifecycleControls.js.map +1 -0
  55. package/dist/ui/admin/pages/deploy/DeployListingLocaleAuthoringCard.d.ts +8 -0
  56. package/dist/ui/admin/pages/deploy/DeployListingLocaleAuthoringCard.d.ts.map +1 -0
  57. package/dist/ui/admin/pages/deploy/DeployListingLocaleAuthoringCard.js +122 -0
  58. package/dist/ui/admin/pages/deploy/DeployListingLocaleAuthoringCard.js.map +1 -0
  59. package/dist/ui/admin/pages/deploy/DeployMonetizationAuthoringCard.d.ts +8 -0
  60. package/dist/ui/admin/pages/deploy/DeployMonetizationAuthoringCard.d.ts.map +1 -0
  61. package/dist/ui/admin/pages/deploy/DeployMonetizationAuthoringCard.js +37 -0
  62. package/dist/ui/admin/pages/deploy/DeployMonetizationAuthoringCard.js.map +1 -0
  63. package/dist/ui/admin/pages/deploy/DeployMonetizationExecutionView.d.ts +6 -0
  64. package/dist/ui/admin/pages/deploy/DeployMonetizationExecutionView.d.ts.map +1 -0
  65. package/dist/ui/admin/pages/deploy/DeployMonetizationExecutionView.js +15 -0
  66. package/dist/ui/admin/pages/deploy/DeployMonetizationExecutionView.js.map +1 -0
  67. package/dist/ui/admin/pages/deploy/DeployMonetizationPlanView.d.ts +13 -0
  68. package/dist/ui/admin/pages/deploy/DeployMonetizationPlanView.d.ts.map +1 -0
  69. package/dist/ui/admin/pages/deploy/DeployMonetizationPlanView.js +10 -0
  70. package/dist/ui/admin/pages/deploy/DeployMonetizationPlanView.js.map +1 -0
  71. package/dist/ui/admin/pages/deploy/DeployMonetizationSyncCard.d.ts +6 -0
  72. package/dist/ui/admin/pages/deploy/DeployMonetizationSyncCard.d.ts.map +1 -0
  73. package/dist/ui/admin/pages/deploy/DeployMonetizationSyncCard.js +87 -0
  74. package/dist/ui/admin/pages/deploy/DeployMonetizationSyncCard.js.map +1 -0
  75. package/dist/ui/admin/pages/deploy/DeployPlanPreview.d.ts +9 -0
  76. package/dist/ui/admin/pages/deploy/DeployPlanPreview.d.ts.map +1 -0
  77. package/dist/ui/admin/pages/deploy/DeployPlanPreview.js +13 -0
  78. package/dist/ui/admin/pages/deploy/DeployPlanPreview.js.map +1 -0
  79. package/dist/ui/admin/pages/deploy/{DeployReadinessCard.d.ts → DeployPreparedReleaseAuthoringCard.d.ts} +3 -2
  80. package/dist/ui/admin/pages/deploy/DeployPreparedReleaseAuthoringCard.d.ts.map +1 -0
  81. package/dist/ui/admin/pages/deploy/DeployPreparedReleaseAuthoringCard.js +46 -0
  82. package/dist/ui/admin/pages/deploy/DeployPreparedReleaseAuthoringCard.js.map +1 -0
  83. package/dist/ui/admin/pages/deploy/DeployReleaseOperationsCard.d.ts +9 -0
  84. package/dist/ui/admin/pages/deploy/DeployReleaseOperationsCard.d.ts.map +1 -0
  85. package/dist/ui/admin/pages/deploy/DeployReleaseOperationsCard.js +191 -0
  86. package/dist/ui/admin/pages/deploy/DeployReleaseOperationsCard.js.map +1 -0
  87. package/dist/ui/admin/pages/deploy/DeployResumeActions.d.ts +8 -0
  88. package/dist/ui/admin/pages/deploy/DeployResumeActions.d.ts.map +1 -0
  89. package/dist/ui/admin/pages/deploy/DeployResumeActions.js +14 -0
  90. package/dist/ui/admin/pages/deploy/DeployResumeActions.js.map +1 -0
  91. package/dist/ui/admin/pages/deploy/DeployStoreAssetAuthoringCard.d.ts +8 -0
  92. package/dist/ui/admin/pages/deploy/DeployStoreAssetAuthoringCard.d.ts.map +1 -0
  93. package/dist/ui/admin/pages/deploy/DeployStoreAssetAuthoringCard.js +101 -0
  94. package/dist/ui/admin/pages/deploy/DeployStoreAssetAuthoringCard.js.map +1 -0
  95. package/package.json +3 -1
  96. package/dist/ui/admin/pages/deploy/DeployReadinessCard.d.ts.map +0 -1
  97. package/dist/ui/admin/pages/deploy/DeployReadinessCard.js +0 -57
  98. package/dist/ui/admin/pages/deploy/DeployReadinessCard.js.map +0 -1
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Card, ConfirmDialog, Select, Text } from '@ankhorage/zora';
3
+ import React, { useEffect, useState } from 'react';
4
+ import { removeProjectDeployListingLocale, writeProjectDeployListingLocale, } from '../../../../projectDeployApi';
5
+ import { Field, Input, KeyValue } from '../../adminPagePrimitives';
6
+ const NEW_LOCALE = '__new__';
7
+ const EMPTY_DRAFT = {
8
+ locale: '',
9
+ name: '',
10
+ summary: '',
11
+ description: '',
12
+ keywords: '',
13
+ promotionalText: '',
14
+ supportUrl: '',
15
+ marketingUrl: '',
16
+ privacyPolicyUrl: '',
17
+ promoVideoUrl: '',
18
+ };
19
+ export function DeployListingLocaleAuthoringCard(props) {
20
+ const [selected, setSelected] = useState(NEW_LOCALE);
21
+ const [draft, setDraft] = useState(EMPTY_DRAFT);
22
+ const [busy, setBusy] = useState(false);
23
+ const [error, setError] = useState(null);
24
+ const [confirmDelete, setConfirmDelete] = useState(false);
25
+ useEffect(() => {
26
+ if (props.listing.status !== 'ready' || selected === NEW_LOCALE)
27
+ return;
28
+ const locale = props.listing.data.locales.find((candidate) => candidate.locale === selected);
29
+ if (locale)
30
+ setDraft(toDraft(locale));
31
+ }, [props.listing, selected]);
32
+ const options = [
33
+ { value: NEW_LOCALE, label: 'New locale' },
34
+ ...(props.listing.status === 'ready'
35
+ ? props.listing.data.locales.map((locale) => ({
36
+ value: locale.locale,
37
+ label: `${locale.locale} · ${locale.name}`,
38
+ }))
39
+ : []),
40
+ ];
41
+ const selectLocale = (value) => {
42
+ setSelected(value);
43
+ setError(null);
44
+ if (value === NEW_LOCALE)
45
+ setDraft(EMPTY_DRAFT);
46
+ };
47
+ const save = async () => {
48
+ setBusy(true);
49
+ setError(null);
50
+ try {
51
+ await writeProjectDeployListingLocale(props.projectId, toOwnerLocale(draft));
52
+ setSelected(draft.locale.trim());
53
+ props.onMutation();
54
+ }
55
+ catch (caught) {
56
+ setError(readError(caught));
57
+ }
58
+ finally {
59
+ setBusy(false);
60
+ }
61
+ };
62
+ const remove = async () => {
63
+ if (selected === NEW_LOCALE)
64
+ return;
65
+ setConfirmDelete(false);
66
+ setBusy(true);
67
+ setError(null);
68
+ try {
69
+ await removeProjectDeployListingLocale(props.projectId, selected);
70
+ setSelected(NEW_LOCALE);
71
+ setDraft(EMPTY_DRAFT);
72
+ props.onMutation();
73
+ }
74
+ catch (caught) {
75
+ setError(readError(caught));
76
+ }
77
+ finally {
78
+ setBusy(false);
79
+ }
80
+ };
81
+ return (_jsxs(Card, { title: "Store listing locales", description: "Create, update, or remove canonical locale metadata through Deploy's project authoring API.", children: [props.listing.status === 'ready' ? (_jsx(KeyValue, { label: "Listing revision", value: props.listing.data.revision })) : null, _jsx(Field, { label: "Locale entry", children: _jsx(Select, { value: selected, options: options, onValueChange: selectLocale }) }), _jsx(Field, { label: "Locale", children: _jsx(Input, { value: draft.locale, placeholder: "en-US", onChangeText: (locale) => setDraft({ ...draft, locale }) }) }), _jsx(Field, { label: "Store name", children: _jsx(Input, { value: draft.name, onChangeText: (name) => setDraft({ ...draft, name }) }) }), _jsx(Field, { label: "Summary", children: _jsx(Input, { value: draft.summary, onChangeText: (summary) => setDraft({ ...draft, summary }) }) }), _jsx(Field, { label: "Description", children: _jsx(Input, { multiline: true, numberOfLines: 5, value: draft.description, onChangeText: (description) => setDraft({ ...draft, description }) }) }), _jsx(Field, { label: "Keywords (comma separated)", children: _jsx(Input, { value: draft.keywords, onChangeText: (keywords) => setDraft({ ...draft, keywords }) }) }), _jsx(Field, { label: "Promotional text", children: _jsx(Input, { value: draft.promotionalText, onChangeText: (promotionalText) => setDraft({ ...draft, promotionalText }) }) }), _jsx(Field, { label: "Support URL", children: _jsx(Input, { value: draft.supportUrl, onChangeText: (supportUrl) => setDraft({ ...draft, supportUrl }) }) }), _jsx(Field, { label: "Marketing URL", children: _jsx(Input, { value: draft.marketingUrl, onChangeText: (marketingUrl) => setDraft({ ...draft, marketingUrl }) }) }), _jsx(Field, { label: "Privacy policy URL", children: _jsx(Input, { value: draft.privacyPolicyUrl, onChangeText: (privacyPolicyUrl) => setDraft({ ...draft, privacyPolicyUrl }) }) }), _jsx(Field, { label: "Promo video URL", children: _jsx(Input, { value: draft.promoVideoUrl, onChangeText: (promoVideoUrl) => setDraft({ ...draft, promoVideoUrl }) }) }), props.listing.status === 'loading' ? _jsx(Text, { children: "Loading listing\u2026" }) : null, props.listing.status === 'error' ? (_jsx(Text, { color: "danger", children: props.listing.message })) : null, error ? _jsx(Text, { color: "danger", children: error }) : null, _jsx(Button, { disabled: busy || draft.locale.trim() === '' || draft.name.trim() === '', onPress: () => void save(), children: busy ? 'Saving…' : 'Save locale' }), selected !== NEW_LOCALE ? (_jsx(Button, { disabled: busy, variant: "outline", onPress: () => setConfirmDelete(true), children: "Remove locale" })) : null, _jsx(ConfirmDialog, { visible: confirmDelete, title: "Remove store listing locale?", description: `Remove ${selected} through the Deploy owner API? Unrelated locales and assets remain owner-managed.`, confirmLabel: "Remove locale", confirmColor: "danger", cancelLabel: "Cancel", onCancel: () => setConfirmDelete(false), onConfirm: () => void remove() })] }));
82
+ }
83
+ function toDraft(locale) {
84
+ return {
85
+ locale: locale.locale,
86
+ name: locale.name,
87
+ summary: locale.summary ?? '',
88
+ description: locale.description ?? '',
89
+ keywords: locale.keywords?.join(', ') ?? '',
90
+ promotionalText: locale.promotionalText ?? '',
91
+ supportUrl: locale.supportUrl ?? '',
92
+ marketingUrl: locale.marketingUrl ?? '',
93
+ privacyPolicyUrl: locale.privacyPolicyUrl ?? '',
94
+ promoVideoUrl: locale.promoVideoUrl ?? '',
95
+ };
96
+ }
97
+ function toOwnerLocale(draft) {
98
+ const keywords = draft.keywords
99
+ .split(',')
100
+ .map((keyword) => keyword.trim())
101
+ .filter((keyword) => keyword.length > 0);
102
+ return {
103
+ locale: draft.locale.trim(),
104
+ name: draft.name.trim(),
105
+ ...optionalField('summary', draft.summary),
106
+ ...optionalField('description', draft.description),
107
+ ...(keywords.length > 0 ? { keywords } : {}),
108
+ ...optionalField('promotionalText', draft.promotionalText),
109
+ ...optionalField('supportUrl', draft.supportUrl),
110
+ ...optionalField('marketingUrl', draft.marketingUrl),
111
+ ...optionalField('privacyPolicyUrl', draft.privacyPolicyUrl),
112
+ ...optionalField('promoVideoUrl', draft.promoVideoUrl),
113
+ };
114
+ }
115
+ function optionalField(key, value) {
116
+ const trimmed = value.trim();
117
+ return trimmed === '' ? {} : { [key]: trimmed };
118
+ }
119
+ function readError(error) {
120
+ return error instanceof Error ? error.message : String(error);
121
+ }
122
+ //# sourceMappingURL=DeployListingLocaleAuthoringCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployListingLocaleAuthoringCard.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployListingLocaleAuthoringCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import type { ProjectDeployDashboardState } from './deployDashboardTypes';
3
+ export declare function DeployMonetizationAuthoringCard(props: {
4
+ readonly projectId: string;
5
+ readonly monetization: ProjectDeployDashboardState['monetization'];
6
+ readonly onMutation: () => void;
7
+ }): React.JSX.Element;
8
+ //# sourceMappingURL=DeployMonetizationAuthoringCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployMonetizationAuthoringCard.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployMonetizationAuthoringCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,wBAAgB,+BAA+B,CAAC,KAAK,EAAE;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,2BAA2B,CAAC,cAAc,CAAC,CAAC;IACnE,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC,qBAkDA"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Card, Text } from '@ankhorage/zora';
3
+ import React, { useEffect, useState } from 'react';
4
+ import { writeProjectDeployMonetization } from '../../../../projectDeployApi';
5
+ import { Field, Input, KeyValue } from '../../adminPagePrimitives';
6
+ export function DeployMonetizationAuthoringCard(props) {
7
+ const [source, setSource] = useState('[]');
8
+ const [busy, setBusy] = useState(false);
9
+ const [error, setError] = useState(null);
10
+ useEffect(() => {
11
+ if (props.monetization.status !== 'ready')
12
+ return;
13
+ setSource(JSON.stringify(props.monetization.data.products, null, 2));
14
+ }, [props.monetization]);
15
+ const save = async () => {
16
+ setBusy(true);
17
+ setError(null);
18
+ try {
19
+ const parsed = JSON.parse(source);
20
+ if (!Array.isArray(parsed))
21
+ throw new Error('Canonical Deploy products must be a JSON array.');
22
+ await writeProjectDeployMonetization(props.projectId, parsed);
23
+ props.onMutation();
24
+ }
25
+ catch (caught) {
26
+ setError(readError(caught));
27
+ }
28
+ finally {
29
+ setBusy(false);
30
+ }
31
+ };
32
+ return (_jsxs(Card, { title: "Monetization desired state", description: "Edit the exact canonical Deploy product array. Deploy owns product, pricing, subscription validation and persistence.", children: [props.monetization.status === 'ready' ? (_jsx(KeyValue, { label: "Monetization revision", value: props.monetization.data.revision })) : null, _jsx(Field, { label: "Canonical MonetizationProduct[]", children: _jsx(Input, { multiline: true, numberOfLines: 14, value: source, onChangeText: setSource }) }), props.monetization.status === 'loading' ? _jsx(Text, { children: "Loading monetization\u2026" }) : null, props.monetization.status === 'error' ? (_jsx(Text, { color: "danger", children: props.monetization.message })) : null, error ? _jsx(Text, { color: "danger", children: error }) : null, _jsx(Button, { disabled: busy, onPress: () => void save(), children: busy ? 'Saving…' : 'Save monetization desired state' })] }));
33
+ }
34
+ function readError(error) {
35
+ return error instanceof Error ? error.message : String(error);
36
+ }
37
+ //# sourceMappingURL=DeployMonetizationAuthoringCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployMonetizationAuthoringCard.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployMonetizationAuthoringCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ProjectMonetizationExecutionResult } from '@ankhorage/deploy/project';
2
+ import React from 'react';
3
+ export declare function DeployMonetizationExecutionView({ result, }: {
4
+ readonly result: ProjectMonetizationExecutionResult;
5
+ }): React.JSX.Element;
6
+ //# sourceMappingURL=DeployMonetizationExecutionView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployMonetizationExecutionView.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployMonetizationExecutionView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,wBAAgB,+BAA+B,CAAC,EAC9C,MAAM,GACP,EAAE;IACD,QAAQ,CAAC,MAAM,EAAE,kCAAkC,CAAC;CACrD,qBA6BA"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text } from '@ankhorage/zora';
3
+ import React from 'react';
4
+ import { View } from 'react-native';
5
+ import { KeyValue } from '../../adminPagePrimitives';
6
+ export function DeployMonetizationExecutionView({ result, }) {
7
+ if (result.status === 'failed') {
8
+ return (_jsxs(View, { children: [_jsx(Text, { weight: "semiBold", children: "Monetization synchronization failed" }), _jsx(Text, { color: "danger", children: result.failure.code }), _jsx(Text, { color: "danger", children: result.failure.message })] }));
9
+ }
10
+ if (result.status === 'action-required') {
11
+ return (_jsxs(View, { children: [_jsx(Text, { weight: "semiBold", children: "Monetization synchronization requires action" }), result.actions.map((action) => (_jsxs(Text, { color: "danger", variant: "bodySmall", children: [action.code, ": ", action.message] }, `${action.type}:${action.code}`)))] }));
12
+ }
13
+ return (_jsxs(View, { children: [_jsx(Text, { weight: "semiBold", children: "Monetization synchronization completed" }), _jsx(KeyValue, { label: "Verified current revision", value: result.inspection.currentRevision }), _jsx(KeyValue, { label: "Verification plan", value: result.plan.status })] }));
14
+ }
15
+ //# sourceMappingURL=DeployMonetizationExecutionView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployMonetizationExecutionView.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployMonetizationExecutionView.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,UAAU,+BAA+B,CAAC,EAC9C,MAAM,GAGP;IACC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,MAAM,EAAC,UAAU,oDAA2C,EAClE,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,MAAM,CAAC,OAAO,CAAC,IAAI,GAAQ,EACjD,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,MAAM,CAAC,OAAO,CAAC,OAAO,GAAQ,IAC/C,CACR,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACxC,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,MAAM,EAAC,UAAU,6DAAoD,EAC1E,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC9B,MAAC,IAAI,IAAuC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,WAAW,aAC3E,MAAM,CAAC,IAAI,QAAI,MAAM,CAAC,OAAO,KADrB,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAEnC,CACR,CAAC,IACG,CACR,CAAC;IACJ,CAAC;IACD,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,MAAM,EAAC,UAAU,uDAA8C,EACrE,KAAC,QAAQ,IAAC,KAAK,EAAC,2BAA2B,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe,GAAI,EACxF,KAAC,QAAQ,IAAC,KAAK,EAAC,mBAAmB,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,GAAI,IAC5D,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { ProjectDeployMonetizationInspectionResult } from '../../../../projectDeployMonetizationInspectionResult';
3
+ type SuccessfulInspection = Extract<ProjectDeployMonetizationInspectionResult, {
4
+ readonly ok: true;
5
+ }>;
6
+ export declare function DeployMonetizationPlanView(props: {
7
+ readonly result: SuccessfulInspection;
8
+ readonly canExecute: boolean;
9
+ readonly busy: boolean;
10
+ readonly onExecute: () => void;
11
+ }): React.JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=DeployMonetizationPlanView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployMonetizationPlanView.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployMonetizationPlanView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,uDAAuD,CAAC;AAGvH,KAAK,oBAAoB,GAAG,OAAO,CACjC,yCAAyC,EACzC;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAAE,CACtB,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;CAChC,qBAgEA"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Text } from '@ankhorage/zora';
3
+ import React from 'react';
4
+ import { View } from 'react-native';
5
+ import { KeyValue } from '../../adminPagePrimitives';
6
+ export function DeployMonetizationPlanView(props) {
7
+ const { inspection, plan } = props.result;
8
+ return (_jsxs(View, { children: [_jsx(KeyValue, { label: "Plan status", value: plan.status }), _jsx(KeyValue, { label: "Desired revision", value: plan.desiredRevision }), _jsx(KeyValue, { label: "Current revision", value: plan.currentRevision }), _jsx(KeyValue, { label: "Android package", value: inspection.targets.androidPackage ?? 'not selected' }), _jsx(KeyValue, { label: "iOS bundle identifier", value: inspection.targets.iosBundleIdentifier ?? 'not selected' }), inspection.states.map((state) => (_jsxs(View, { children: [_jsxs(Text, { weight: "semiBold", children: [state.target, " observed state"] }), _jsx(KeyValue, { label: "Products", value: String(state.products.length) }), _jsx(KeyValue, { label: "Subscription families", value: String(state.subscriptionFamilies.length) }), state.diagnostics.map((diagnostic) => (_jsxs(Text, { color: diagnostic.severity === 'error' ? 'danger' : 'neutral', variant: "bodySmall", children: [diagnostic.code, ": ", diagnostic.message] }, `${state.target}:${diagnostic.code}:${diagnostic.productId ?? 'target'}`)))] }, state.target))), plan.steps.map((step) => (_jsxs(Text, { variant: "bodySmall", children: [step.target, " \u00B7 ", step.productId, " \u00B7 ", step.operation] }, step.id))), plan.diagnostics.map((diagnostic) => (_jsxs(Text, { color: diagnostic.severity === 'error' ? 'danger' : 'neutral', variant: "bodySmall", children: [diagnostic.code, ": ", diagnostic.message] }, `${diagnostic.code}:${diagnostic.target ?? 'all'}:${diagnostic.productId ?? 'all'}`))), plan.actions.map((action) => (_jsxs(View, { children: [_jsx(Text, { weight: "semiBold", children: action.code }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: action.message })] }, `${action.type}:${action.code}`))), plan.status === 'no-change' ? (_jsx(Text, { children: "No monetization synchronization changes are required." })) : null, _jsx(Button, { disabled: !props.canExecute || props.busy, onPress: props.onExecute, children: "Synchronize monetization" })] }));
9
+ }
10
+ //# sourceMappingURL=DeployMonetizationPlanView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployMonetizationPlanView.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployMonetizationPlanView.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export declare function DeployMonetizationSyncCard(props: {
3
+ readonly projectId: string;
4
+ readonly onComplete: () => void;
5
+ }): React.JSX.Element;
6
+ //# sourceMappingURL=DeployMonetizationSyncCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployMonetizationSyncCard.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployMonetizationSyncCard.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAwBhD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC,qBA2GA"}
@@ -0,0 +1,87 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { APP_DEPLOY_ENVIRONMENT_IDS, } from '@ankhorage/contracts/deploy';
3
+ import { Button, Card, ConfirmDialog, Select, Text } from '@ankhorage/zora';
4
+ import React, { useRef, useState } from 'react';
5
+ import { executeProjectDeployMonetization, inspectProjectDeployMonetization, } from '../../../../projectDeployApi';
6
+ import { Field } from '../../adminPagePrimitives';
7
+ import { DeployMonetizationExecutionView } from './DeployMonetizationExecutionView';
8
+ import { DeployMonetizationPlanView } from './DeployMonetizationPlanView';
9
+ const ENVIRONMENT_OPTIONS = [
10
+ { value: 'unselected', label: 'Choose environment' },
11
+ ...APP_DEPLOY_ENVIRONMENT_IDS.map((value) => ({ value, label: value })),
12
+ ];
13
+ export function DeployMonetizationSyncCard(props) {
14
+ const [environment, setEnvironment] = useState('unselected');
15
+ const [preview, setPreview] = useState(null);
16
+ const [result, setResult] = useState(null);
17
+ const [busy, setBusy] = useState(false);
18
+ const [error, setError] = useState(null);
19
+ const [confirm, setConfirm] = useState(false);
20
+ const mutationInFlightRef = useRef(false);
21
+ const successful = preview !== null && preview.result.ok ? preview.result : null;
22
+ const canExecute = successful?.plan.status === 'changes' && result === null && !busy;
23
+ const inspect = async () => {
24
+ if (environment === 'unselected')
25
+ return;
26
+ const runtime = { environment };
27
+ setBusy(true);
28
+ setError(null);
29
+ setResult(null);
30
+ try {
31
+ const inspected = await inspectProjectDeployMonetization({
32
+ projectId: props.projectId,
33
+ runtime,
34
+ });
35
+ setPreview({ runtime, result: inspected });
36
+ }
37
+ catch (caught) {
38
+ setPreview(null);
39
+ setError(readError(caught));
40
+ }
41
+ finally {
42
+ setBusy(false);
43
+ }
44
+ };
45
+ const execute = async () => {
46
+ const current = preview;
47
+ if (!current?.result.ok || current.result.plan.status !== 'changes')
48
+ return;
49
+ if (mutationInFlightRef.current)
50
+ return;
51
+ mutationInFlightRef.current = true;
52
+ setConfirm(false);
53
+ setBusy(true);
54
+ setError(null);
55
+ try {
56
+ const executed = await executeProjectDeployMonetization({
57
+ projectId: props.projectId,
58
+ runtime: current.runtime,
59
+ inspection: current.result.inspection,
60
+ plan: current.result.plan,
61
+ });
62
+ setResult(executed);
63
+ props.onComplete();
64
+ }
65
+ catch (caught) {
66
+ setError(readError(caught));
67
+ }
68
+ finally {
69
+ mutationInFlightRef.current = false;
70
+ setBusy(false);
71
+ }
72
+ };
73
+ return (_jsxs(Card, { title: "Monetization synchronization", description: "Inspect provider state, preview Deploy's canonical plan, then explicitly confirm synchronization of that exact snapshot.", children: [_jsx(Field, { label: "Credential environment", children: _jsx(Select, { value: environment, options: ENVIRONMENT_OPTIONS, onValueChange: (value) => {
74
+ setEnvironment(value);
75
+ setPreview(null);
76
+ setResult(null);
77
+ setError(null);
78
+ setConfirm(false);
79
+ } }) }), _jsx(Button, { disabled: environment === 'unselected' || busy, variant: "outline", onPress: () => void inspect(), children: busy ? 'Working…' : 'Preview monetization synchronization' }), error ? _jsx(Text, { color: "danger", children: error }) : null, preview && !preview.result.ok ? _jsx(ViewFailure, { result: preview.result }) : null, successful ? (_jsx(DeployMonetizationPlanView, { result: successful, canExecute: canExecute, busy: busy, onExecute: () => setConfirm(true) })) : null, result ? _jsx(DeployMonetizationExecutionView, { result: result }) : null, _jsx(ConfirmDialog, { visible: confirm, title: "Synchronize monetization?", description: `Execute this exact Deploy monetization plan with ${successful?.plan.steps.length ?? 0} step(s)? Deploy will re-inspect for drift before provider mutation and verify afterward.`, confirmLabel: "Synchronize monetization", confirmColor: "danger", cancelLabel: "Cancel", onCancel: () => setConfirm(false), onConfirm: () => void execute() })] }));
80
+ }
81
+ function ViewFailure({ result, }) {
82
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { color: "danger", weight: "semiBold", children: result.failure.code }), _jsx(Text, { color: "danger", children: result.failure.message })] }));
83
+ }
84
+ function readError(error) {
85
+ return error instanceof Error ? error.message : String(error);
86
+ }
87
+ //# sourceMappingURL=DeployMonetizationSyncCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployMonetizationSyncCard.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployMonetizationSyncCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { ProjectDeployReleaseInspectionResult } from '../../../../projectDeployReleaseInspectionResult';
3
+ export declare function DeployPlanPreview(props: {
4
+ readonly result: ProjectDeployReleaseInspectionResult;
5
+ readonly canExecute: boolean;
6
+ readonly busy: boolean;
7
+ readonly onExecute: () => void;
8
+ }): React.JSX.Element;
9
+ //# sourceMappingURL=DeployPlanPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployPlanPreview.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployPlanPreview.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,kDAAkD,CAAC;AAG7G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,CAAC,MAAM,EAAE,oCAAoC,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;CAChC,qBAoDA"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Text } from '@ankhorage/zora';
3
+ import React from 'react';
4
+ import { View } from 'react-native';
5
+ import { KeyValue } from '../../adminPagePrimitives';
6
+ export function DeployPlanPreview(props) {
7
+ if (!props.result.ok) {
8
+ return (_jsxs(View, { children: [_jsx(Text, { color: "danger", weight: "semiBold", children: props.result.failure.code }), _jsx(Text, { color: "danger", children: props.result.failure.message })] }));
9
+ }
10
+ const { inspection, plan } = props.result;
11
+ return (_jsxs(View, { children: [_jsx(KeyValue, { label: "Plan status", value: plan.status }), _jsx(KeyValue, { label: "Desired revision", value: plan.desiredRevision }), _jsx(KeyValue, { label: "Current revision", value: plan.currentRevision }), _jsx(KeyValue, { label: "Required actions", value: String(inspection.actions.length) }), plan.steps.map((step) => (_jsxs(View, { children: [_jsxs(Text, { weight: "semiBold", children: [step.target, " \u00B7 ", step.operation] }), _jsx(Text, { color: step.irreversible ? 'danger' : 'neutral', variant: "bodySmall", children: step.irreversible ? 'Irreversible step' : `Retry: ${step.retry}` })] }, step.id))), plan.diagnostics.map((diagnostic) => (_jsxs(View, { children: [_jsx(Text, { color: diagnostic.severity === 'error' ? 'danger' : 'neutral', weight: "semiBold", children: diagnostic.code }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: diagnostic.message })] }, `${diagnostic.code}:${diagnostic.target ?? 'release'}`))), inspection.actions.map((action) => (_jsxs(View, { children: [_jsx(Text, { weight: "semiBold", children: action.code }), _jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: action.message })] }, `${action.type}:${action.code}`))), plan.status === 'no-change' ? _jsx(Text, { children: "No deployment changes are required." }) : null, _jsx(Button, { disabled: !props.canExecute || props.busy, onPress: props.onExecute, children: "Execute exact plan" })] }));
12
+ }
13
+ //# sourceMappingURL=DeployPlanPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployPlanPreview.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployPlanPreview.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAGpC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAErD,MAAM,UAAU,iBAAiB,CAAC,KAKjC;IACC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACrB,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,MAAM,EAAC,UAAU,YACnC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GACrB,EACP,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,GAAQ,IACrD,CACR,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;IAC1C,OAAO,CACL,MAAC,IAAI,eACH,KAAC,QAAQ,IAAC,KAAK,EAAC,aAAa,EAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAI,EACpD,KAAC,QAAQ,IAAC,KAAK,EAAC,kBAAkB,EAAC,KAAK,EAAE,IAAI,CAAC,eAAe,GAAI,EAClE,KAAC,QAAQ,IAAC,KAAK,EAAC,kBAAkB,EAAC,KAAK,EAAE,IAAI,CAAC,eAAe,GAAI,EAClE,KAAC,QAAQ,IAAC,KAAK,EAAC,kBAAkB,EAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,GAAI,EAC9E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,MAAC,IAAI,eACH,MAAC,IAAI,IAAC,MAAM,EAAC,UAAU,aACpB,IAAI,CAAC,MAAM,cAAK,IAAI,CAAC,SAAS,IAC1B,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAC,WAAW,YACvE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,GAC5D,KANE,IAAI,CAAC,EAAE,CAOX,CACR,CAAC,EACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CACpC,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAC,UAAU,YACnF,UAAU,CAAC,IAAI,GACX,EACP,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,WAAW,YACvD,UAAU,CAAC,OAAO,GACd,KANE,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS,EAAE,CAO1D,CACR,CAAC,EACD,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAClC,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,MAAM,EAAC,UAAU,YAAE,MAAM,CAAC,IAAI,GAAQ,EAC5C,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,OAAO,EAAC,OAAO,EAAC,WAAW,YACvD,MAAM,CAAC,OAAO,GACV,KAJE,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAKnC,CACR,CAAC,EACD,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,KAAC,IAAI,sDAA2C,CAAC,CAAC,CAAC,IAAI,EACtF,KAAC,MAAM,IAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,SAAS,mCAElE,IACJ,CACR,CAAC;AACJ,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import React from 'react';
2
2
  import type { ProjectDeployDashboardState } from './deployDashboardTypes';
3
- export declare function DeployReadinessCard(props: {
3
+ export declare function DeployPreparedReleaseAuthoringCard(props: {
4
4
  readonly projectId: string;
5
5
  readonly release: ProjectDeployDashboardState['release'];
6
+ readonly onMutation: () => void;
6
7
  }): React.JSX.Element;
7
- //# sourceMappingURL=DeployReadinessCard.d.ts.map
8
+ //# sourceMappingURL=DeployPreparedReleaseAuthoringCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployPreparedReleaseAuthoringCard.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployPreparedReleaseAuthoringCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAInD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE1E,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC,qBAqDA"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Card, Text } from '@ankhorage/zora';
3
+ import React, { useEffect, useState } from 'react';
4
+ import { writeProjectDeployRelease } from '../../../../projectDeployApi';
5
+ import { Field, Input, KeyValue } from '../../adminPagePrimitives';
6
+ export function DeployPreparedReleaseAuthoringCard(props) {
7
+ const [source, setSource] = useState('{}');
8
+ const [busy, setBusy] = useState(false);
9
+ const [error, setError] = useState(null);
10
+ useEffect(() => {
11
+ if (props.release.status !== 'ready')
12
+ return;
13
+ const release = {
14
+ version: props.release.data.version,
15
+ targets: props.release.data.targets,
16
+ notes: props.release.data.notes,
17
+ rollout: props.release.data.rollout,
18
+ };
19
+ setSource(JSON.stringify(release, null, 2));
20
+ }, [props.release]);
21
+ const save = async () => {
22
+ setBusy(true);
23
+ setError(null);
24
+ try {
25
+ const parsed = JSON.parse(source);
26
+ if (!isRecord(parsed))
27
+ throw new Error('Canonical ProjectReleaseInput must be a JSON object.');
28
+ await writeProjectDeployRelease(props.projectId, parsed);
29
+ props.onMutation();
30
+ }
31
+ catch (caught) {
32
+ setError(readError(caught));
33
+ }
34
+ finally {
35
+ setBusy(false);
36
+ }
37
+ };
38
+ return (_jsxs(Card, { title: "Prepared release desired state", description: "Author the exact Deploy ProjectReleaseInput. Saving desired state never executes a provider; execution remains inspect \u2192 confirm \u2192 execute below.", children: [props.release.status === 'ready' ? (_jsx(KeyValue, { label: "Prepared release revision", value: props.release.data.revision })) : null, _jsx(Field, { label: "Canonical ProjectReleaseInput", children: _jsx(Input, { multiline: true, numberOfLines: 14, value: source, onChangeText: setSource }) }), props.release.status === 'loading' ? _jsx(Text, { children: "Loading prepared release\u2026" }) : null, props.release.status === 'error' ? (_jsx(Text, { color: "danger", children: props.release.message })) : null, error ? _jsx(Text, { color: "danger", children: error }) : null, _jsx(Button, { disabled: busy, onPress: () => void save(), children: busy ? 'Saving…' : 'Save prepared release' })] }));
39
+ }
40
+ function isRecord(value) {
41
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
42
+ }
43
+ function readError(error) {
44
+ return error instanceof Error ? error.message : String(error);
45
+ }
46
+ //# sourceMappingURL=DeployPreparedReleaseAuthoringCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployPreparedReleaseAuthoringCard.js","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployPreparedReleaseAuthoringCard.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAGnE,MAAM,UAAU,kCAAkC,CAAC,KAIlD;IACC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO;YAAE,OAAO;QAC7C,MAAM,OAAO,GAAwB;YACnC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;YACnC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;YACnC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK;YAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;SACpC,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,MAAM,yBAAyB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAwC,CAAC,CAAC;YAC3F,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,MAAM,EAAE,CAAC;YAChB,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9B,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,IAAI,IACH,KAAK,EAAC,gCAAgC,EACtC,WAAW,EAAC,6JAAmJ,aAE9J,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAClC,KAAC,QAAQ,IAAC,KAAK,EAAC,2BAA2B,EAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAI,CACnF,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,KAAK,IAAC,KAAK,EAAC,+BAA+B,YAC1C,KAAC,KAAK,IAAC,SAAS,QAAC,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,GAAI,GACxE,EACP,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAC,IAAI,iDAAiC,CAAC,CAAC,CAAC,IAAI,EAClF,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAClC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,KAAK,CAAC,OAAO,CAAC,OAAO,GAAQ,CACpD,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,KAAK,GAAQ,CAAC,CAAC,CAAC,IAAI,EACnD,KAAC,MAAM,IAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,YAC/C,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAuB,GACpC,IACJ,CACR,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { ProjectDeployDashboardState } from './deployDashboardTypes';
3
+ export declare function DeployReleaseOperationsCard(props: {
4
+ readonly projectId: string;
5
+ readonly release: ProjectDeployDashboardState['release'];
6
+ readonly history: ProjectDeployDashboardState['history'];
7
+ readonly onMutation: () => void;
8
+ }): React.JSX.Element;
9
+ //# sourceMappingURL=DeployReleaseOperationsCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeployReleaseOperationsCard.d.ts","sourceRoot":"","sources":["../../../../../src/ui/admin/pages/deploy/DeployReleaseOperationsCard.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAchD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAuC1E,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACzD,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;CACjC,qBA8NA"}