@ankhorage/studio 0.11.11 → 0.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 (100) hide show
  1. package/README.md +2 -1
  2. package/dist/externalApiApi.d.ts +5 -0
  3. package/dist/externalApiApi.d.ts.map +1 -0
  4. package/dist/externalApiApi.js +173 -0
  5. package/dist/externalApiApi.js.map +1 -0
  6. package/dist/externalApiAuthoring.d.ts +4 -0
  7. package/dist/externalApiAuthoring.d.ts.map +1 -0
  8. package/dist/externalApiAuthoring.js +3 -0
  9. package/dist/externalApiAuthoring.js.map +1 -0
  10. package/dist/externalApiAuthoringContracts.d.ts +70 -0
  11. package/dist/externalApiAuthoringContracts.d.ts.map +1 -0
  12. package/dist/externalApiAuthoringContracts.js +2 -0
  13. package/dist/externalApiAuthoringContracts.js.map +1 -0
  14. package/dist/host/dataSources/createProjectEndpointCredentialResolver.d.ts +8 -0
  15. package/dist/host/dataSources/createProjectEndpointCredentialResolver.d.ts.map +1 -0
  16. package/dist/host/dataSources/createProjectEndpointCredentialResolver.js +43 -0
  17. package/dist/host/dataSources/createProjectEndpointCredentialResolver.js.map +1 -0
  18. package/dist/host/dataSources/createTrustedEndpointTestFetch.d.ts +3 -0
  19. package/dist/host/dataSources/createTrustedEndpointTestFetch.d.ts.map +1 -0
  20. package/dist/host/dataSources/createTrustedEndpointTestFetch.js +5 -0
  21. package/dist/host/dataSources/createTrustedEndpointTestFetch.js.map +1 -0
  22. package/dist/host/dataSources/createTrustedExternalApiFetch.d.ts +3 -0
  23. package/dist/host/dataSources/createTrustedExternalApiFetch.d.ts.map +1 -0
  24. package/dist/host/dataSources/createTrustedExternalApiFetch.js +5 -0
  25. package/dist/host/dataSources/createTrustedExternalApiFetch.js.map +1 -0
  26. package/dist/host/dataSources/requestTrustedExternalApi.d.ts +12 -0
  27. package/dist/host/dataSources/requestTrustedExternalApi.d.ts.map +1 -0
  28. package/dist/host/dataSources/requestTrustedExternalApi.js +44 -0
  29. package/dist/host/dataSources/requestTrustedExternalApi.js.map +1 -0
  30. package/dist/host/dataSources/sanitizeExternalApiOperationTestResult.d.ts +4 -0
  31. package/dist/host/dataSources/sanitizeExternalApiOperationTestResult.d.ts.map +1 -0
  32. package/dist/host/dataSources/sanitizeExternalApiOperationTestResult.js +34 -0
  33. package/dist/host/dataSources/sanitizeExternalApiOperationTestResult.js.map +1 -0
  34. package/dist/host/dataSources/studioExternalApiService.d.ts +24 -0
  35. package/dist/host/dataSources/studioExternalApiService.d.ts.map +1 -0
  36. package/dist/host/dataSources/studioExternalApiService.js +163 -0
  37. package/dist/host/dataSources/studioExternalApiService.js.map +1 -0
  38. package/dist/host/http/dataSourceRoutes.d.ts +9 -0
  39. package/dist/host/http/dataSourceRoutes.d.ts.map +1 -0
  40. package/dist/host/http/dataSourceRoutes.js +147 -0
  41. package/dist/host/http/dataSourceRoutes.js.map +1 -0
  42. package/dist/host/http/serverWithSecrets.d.ts +1 -1
  43. package/dist/host/http/serverWithSecrets.d.ts.map +1 -1
  44. package/dist/host/http/serverWithSecrets.js +4 -5
  45. package/dist/host/http/serverWithSecrets.js.map +1 -1
  46. package/dist/host/index.d.ts +4 -0
  47. package/dist/host/index.d.ts.map +1 -1
  48. package/dist/host/index.js +4 -0
  49. package/dist/host/index.js.map +1 -1
  50. package/dist/index.d.ts +2 -1
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +4 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/normalizeExternalApiSourceId.d.ts +9 -0
  55. package/dist/normalizeExternalApiSourceId.d.ts.map +1 -0
  56. package/dist/normalizeExternalApiSourceId.js +12 -0
  57. package/dist/normalizeExternalApiSourceId.js.map +1 -0
  58. package/dist/propertiesAuthoringModel.d.ts +37 -0
  59. package/dist/propertiesAuthoringModel.d.ts.map +1 -0
  60. package/dist/propertiesAuthoringModel.js +52 -0
  61. package/dist/propertiesAuthoringModel.js.map +1 -0
  62. package/dist/ui/admin/pages/ApisAdminPage.d.ts.map +1 -1
  63. package/dist/ui/admin/pages/ApisAdminPage.js +8 -8
  64. package/dist/ui/admin/pages/ApisAdminPage.js.map +1 -1
  65. package/dist/ui/admin/pages/DataSourceCatalogCard.d.ts +5 -0
  66. package/dist/ui/admin/pages/DataSourceCatalogCard.d.ts.map +1 -0
  67. package/dist/ui/admin/pages/DataSourceCatalogCard.js +19 -0
  68. package/dist/ui/admin/pages/DataSourceCatalogCard.js.map +1 -0
  69. package/dist/ui/admin/pages/DataSourceOperationsCard.d.ts +5 -0
  70. package/dist/ui/admin/pages/DataSourceOperationsCard.d.ts.map +1 -0
  71. package/dist/ui/admin/pages/DataSourceOperationsCard.js +46 -0
  72. package/dist/ui/admin/pages/DataSourceOperationsCard.js.map +1 -0
  73. package/dist/ui/admin/pages/ExternalApiAdminPrimitives.d.ts +43 -0
  74. package/dist/ui/admin/pages/ExternalApiAdminPrimitives.d.ts.map +1 -0
  75. package/dist/ui/admin/pages/ExternalApiAdminPrimitives.js +43 -0
  76. package/dist/ui/admin/pages/ExternalApiAdminPrimitives.js.map +1 -0
  77. package/dist/ui/admin/pages/ExternalApiConnectCard.d.ts +2 -0
  78. package/dist/ui/admin/pages/ExternalApiConnectCard.d.ts.map +1 -0
  79. package/dist/ui/admin/pages/ExternalApiConnectCard.js +57 -0
  80. package/dist/ui/admin/pages/ExternalApiConnectCard.js.map +1 -0
  81. package/dist/ui/admin/pages/ManualRestSourceCard.d.ts +2 -0
  82. package/dist/ui/admin/pages/ManualRestSourceCard.d.ts.map +1 -0
  83. package/dist/ui/admin/pages/ManualRestSourceCard.js +59 -0
  84. package/dist/ui/admin/pages/ManualRestSourceCard.js.map +1 -0
  85. package/dist/ui/admin/pages/PropertiesAdminPage.d.ts.map +1 -1
  86. package/dist/ui/admin/pages/PropertiesAdminPage.js +94 -9
  87. package/dist/ui/admin/pages/PropertiesAdminPage.js.map +1 -1
  88. package/dist/ui/admin/pages/adminDataSourceOperations.d.ts +4 -1
  89. package/dist/ui/admin/pages/adminDataSourceOperations.d.ts.map +1 -1
  90. package/dist/ui/admin/pages/adminDataSourceOperations.js +6 -4
  91. package/dist/ui/admin/pages/adminDataSourceOperations.js.map +1 -1
  92. package/dist/upsertExternalApiDataSource.d.ts +7 -0
  93. package/dist/upsertExternalApiDataSource.d.ts.map +1 -0
  94. package/dist/upsertExternalApiDataSource.js +7 -0
  95. package/dist/upsertExternalApiDataSource.js.map +1 -0
  96. package/package.json +14 -3
  97. package/dist/ui/admin/adminPageUtils.d.ts +0 -4
  98. package/dist/ui/admin/adminPageUtils.d.ts.map +0 -1
  99. package/dist/ui/admin/adminPageUtils.js +0 -14
  100. package/dist/ui/admin/adminPageUtils.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button, Card, Input, Select, Text } from '@ankhorage/zora';
3
+ import { useCallback, useState } from 'react';
4
+ import { View } from 'react-native';
5
+ import { createManualRestSource } from '../../../externalApiApi';
6
+ import { useStudio } from '../../../core/StudioContext';
7
+ import { ExternalApiDiagnosticList, ExternalApiField, externalApiAdminStyles, } from './ExternalApiAdminPrimitives';
8
+ const METHOD_OPTIONS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].map((value) => ({
9
+ value,
10
+ label: value,
11
+ }));
12
+ const INTENT_OPTIONS = [
13
+ { value: 'read', label: 'Read' },
14
+ { value: 'create', label: 'Create' },
15
+ { value: 'update', label: 'Update' },
16
+ { value: 'delete', label: 'Delete' },
17
+ { value: 'action', label: 'Action' },
18
+ ];
19
+ export function ManualRestSourceCard() {
20
+ const studio = useStudio();
21
+ const [sourceId, setSourceId] = useState('');
22
+ const [baseUrl, setBaseUrl] = useState('');
23
+ const [endpointId, setEndpointId] = useState('root');
24
+ const [path, setPath] = useState('/');
25
+ const [operationId, setOperationId] = useState('get-root');
26
+ const [method, setMethod] = useState('GET');
27
+ const [intent, setIntent] = useState('read');
28
+ const [result, setResult] = useState(null);
29
+ const [message, setMessage] = useState(null);
30
+ const [busy, setBusy] = useState(false);
31
+ const save = useCallback(async () => {
32
+ setBusy(true);
33
+ setMessage(null);
34
+ try {
35
+ const next = await createManualRestSource(studio.projectId, {
36
+ sourceId,
37
+ baseUrl,
38
+ endpointId,
39
+ path,
40
+ operationId,
41
+ method,
42
+ intent,
43
+ });
44
+ setResult(next);
45
+ if (next.ok) {
46
+ await studio.refetchManifest();
47
+ setMessage(`${next.created ? 'Created' : 'Updated'} manual REST source ${next.sourceId}.`);
48
+ }
49
+ }
50
+ catch (error) {
51
+ setMessage(error instanceof Error ? error.message : 'Manual REST source creation failed.');
52
+ }
53
+ finally {
54
+ setBusy(false);
55
+ }
56
+ }, [baseUrl, endpointId, intent, method, operationId, path, sourceId, studio]);
57
+ return (_jsx(Card, { title: "Manual REST fallback", children: _jsxs(View, { style: externalApiAdminStyles.stack, children: [_jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "Use this when no OpenAPI document exists. Additional operations can be introduced through the same canonical REST definition architecture." }), _jsxs(View, { style: externalApiAdminStyles.columns, children: [_jsx(ExternalApiField, { label: "Data-source ID", children: _jsx(Input, { value: sourceId, autoCapitalize: "none", onChangeText: setSourceId }) }), _jsx(ExternalApiField, { label: "Base URL", children: _jsx(Input, { value: baseUrl, autoCapitalize: "none", onChangeText: setBaseUrl }) })] }), _jsxs(View, { style: externalApiAdminStyles.columns, children: [_jsx(ExternalApiField, { label: "Endpoint ID", children: _jsx(Input, { value: endpointId, autoCapitalize: "none", onChangeText: setEndpointId }) }), _jsx(ExternalApiField, { label: "Path", children: _jsx(Input, { value: path, autoCapitalize: "none", onChangeText: setPath }) }), _jsx(ExternalApiField, { label: "Operation ID", children: _jsx(Input, { value: operationId, autoCapitalize: "none", onChangeText: setOperationId }) })] }), _jsxs(View, { style: externalApiAdminStyles.columns, children: [_jsx(ExternalApiField, { label: "HTTP method", children: _jsx(Select, { value: method, options: METHOD_OPTIONS, onValueChange: setMethod }) }), _jsx(ExternalApiField, { label: "Intent", children: _jsx(Select, { value: intent, options: INTENT_OPTIONS, onValueChange: setIntent }) })] }), _jsx(View, { style: externalApiAdminStyles.actions, children: _jsx(Button, { loading: busy, disabled: !sourceId.trim() || !baseUrl.trim() || !path.trim(), onPress: () => void save(), children: "Save REST source" }) }), message ? _jsx(Text, { variant: "bodySmall", children: message }) : null, result ? _jsx(ExternalApiDiagnosticList, { diagnostics: result.diagnostics }) : null] }) }));
58
+ }
59
+ //# sourceMappingURL=ManualRestSourceCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ManualRestSourceCard.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/ManualRestSourceCard.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PropertiesAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/PropertiesAdminPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,qBAyCjF"}
1
+ {"version":3,"file":"PropertiesAdminPage.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/PropertiesAdminPage.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,qBAuBjF"}
@@ -1,10 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Card, Text } from '@ankhorage/zora';
2
+ import { Card, Text, ZORA_COMPONENT_META } from '@ankhorage/zora';
3
3
  import React from 'react';
4
+ import { Pressable, StyleSheet, View } from 'react-native';
4
5
  import { useStudio } from '../../../core/StudioContext';
5
6
  import { findNodeInManifest, findScreenIdForNode } from '../../../manifestState';
7
+ import { createStudioInstancePropertyPatch, resolveStudioInstancePropertyGroups, } from '../../../propertiesAuthoringModel';
6
8
  import { AdminHeader, AdminScroll, Field, Input, KeyValue } from '../adminPagePrimitives';
7
- import { formatPrimitive } from '../adminPageUtils';
8
9
  export function PropertiesAdminPage({ nodeId }) {
9
10
  const studio = useStudio();
10
11
  const owningScreenId = nodeId && studio.manifest ? findScreenIdForNode(studio.manifest, nodeId) : null;
@@ -16,13 +17,97 @@ export function PropertiesAdminPage({ nodeId }) {
16
17
  studio.selectNode(nodeId);
17
18
  }
18
19
  }, [node, nodeId, owningScreenId, studio]);
19
- return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Properties", description: "Contextual properties for the selected Studio node." }), node ? (_jsxs(Card, { title: node.alias ?? node.type, children: [_jsx(KeyValue, { label: "Node ID", value: node.id }), _jsx(KeyValue, { label: "Type", value: node.type }), _jsx(Field, { label: "Alias", children: _jsx(Input, { value: node.alias ?? '', onChangeText: (alias) => studio.updateNode(node.id, { alias }) }) }), _jsx(NodeProps, { node: node })] })) : (_jsx(Card, { title: "Node unavailable", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "The requested node could not be resolved in the active Studio screen." }) }))] }));
20
+ return (_jsxs(AdminScroll, { children: [_jsx(AdminHeader, { title: "Properties", description: "Edit only the content and behavior explicitly owned by this component instance." }), node ? _jsx(ResolvedProperties, { node: node }) : _jsx(UnavailableNode, {})] }));
20
21
  }
21
- function NodeProps({ node }) {
22
- const entries = Object.entries(node.props ?? {});
23
- if (entries.length === 0) {
24
- return (_jsx(Text, { color: "neutral", emphasis: "muted", children: "This node has no editable primitive props." }));
25
- }
26
- return (_jsx(_Fragment, { children: entries.map(([key, value]) => (_jsx(KeyValue, { label: key, value: formatPrimitive(value) }, key))) }));
22
+ function ResolvedProperties({ node }) {
23
+ const studio = useStudio();
24
+ const componentMeta = new Map(Object.entries(ZORA_COMPONENT_META)).get(node.type);
25
+ const groups = resolveStudioInstancePropertyGroups(node, ZORA_COMPONENT_META);
26
+ const updateProperty = (propertyName, value) => {
27
+ studio.updateNode(node.id, createStudioInstancePropertyPatch(node, propertyName, value));
28
+ };
29
+ return (_jsxs(_Fragment, { children: [_jsxs(Card, { title: componentMeta?.name ?? node.type, children: [_jsx(KeyValue, { label: "Node ID", value: node.id }), _jsx(KeyValue, { label: "Type", value: node.type }), node.alias ? _jsx(KeyValue, { label: "Alias", value: node.alias }) : null] }), groups.map((group) => (_jsx(Card, { title: group.category, children: _jsx(View, { style: styles.fieldStack, children: group.fields.map((field) => (_jsx(InstancePropertyEditor, { field: field, onChange: (value) => updateProperty(field.name, value) }, field.name))) }) }, group.category))), groups.length === 0 ? _jsx(NoInstanceProperties, {}) : null, _jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "Visual design properties are theme-owned and intentionally unavailable as per-instance overrides." })] }));
30
+ }
31
+ function InstancePropertyEditor(props) {
32
+ const { field, onChange } = props;
33
+ return (_jsxs(Field, { label: field.label, children: [field.editor === 'text' ? (_jsx(Input, { value: toInputText(field.value), onChangeText: onChange })) : null, field.editor === 'number' ? _jsx(NumberPropertyInput, { field: field, onChange: onChange }) : null, field.editor === 'boolean' ? (_jsx(BooleanPropertyInput, { field: field, onChange: onChange })) : null, field.editor === 'choice' ? _jsx(ChoicePropertyInput, { field: field, onChange: onChange }) : null, field.editor === 'unsupported' ? (_jsx(Text, { color: "neutral", emphasis: "muted", variant: "bodySmall", children: "This instance property requires a dedicated editor that is not available yet." })) : null] }));
34
+ }
35
+ function NumberPropertyInput(props) {
36
+ const { field, onChange } = props;
37
+ const [draft, setDraft] = React.useState(toInputText(field.value));
38
+ const [error, setError] = React.useState(null);
39
+ React.useEffect(() => {
40
+ setDraft(toInputText(field.value));
41
+ setError(null);
42
+ }, [field.name, field.value]);
43
+ const commit = () => {
44
+ const normalized = draft.trim();
45
+ if (!normalized) {
46
+ setError(null);
47
+ onChange(undefined);
48
+ return;
49
+ }
50
+ const value = Number(normalized);
51
+ if (!Number.isFinite(value)) {
52
+ setError('Enter a valid number.');
53
+ return;
54
+ }
55
+ setError(null);
56
+ onChange(value);
57
+ };
58
+ return (_jsxs(_Fragment, { children: [_jsx(Input, { value: draft, keyboardType: "numeric", onChangeText: setDraft, onBlur: commit, onSubmitEditing: commit }), error ? (_jsx(Text, { color: "danger", variant: "bodySmall", children: error })) : null] }));
59
+ }
60
+ function BooleanPropertyInput(props) {
61
+ const { field, onChange } = props;
62
+ const checked = field.value === true;
63
+ return (_jsx(Pressable, { accessibilityRole: "switch", accessibilityState: { checked }, onPress: () => onChange(!checked), style: [styles.toggle, checked ? styles.choiceSelected : null], children: _jsx(Text, { weight: "semiBold", children: checked ? 'On' : 'Off' }) }));
64
+ }
65
+ function ChoicePropertyInput(props) {
66
+ const { field, onChange } = props;
67
+ return (_jsx(View, { style: styles.choiceRow, children: field.options.map((option) => {
68
+ const selected = field.value === option;
69
+ return (_jsx(Pressable, { accessibilityRole: "radio", accessibilityState: { checked: selected }, onPress: () => onChange(option), style: [styles.choice, selected ? styles.choiceSelected : null], children: _jsx(Text, { weight: selected ? 'semiBold' : 'regular', children: String(option) }) }, `${field.name}:${String(option)}`));
70
+ }) }));
71
+ }
72
+ function UnavailableNode() {
73
+ return (_jsx(Card, { title: "Node unavailable", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "The requested node could not be resolved in the current project manifest." }) }));
74
+ }
75
+ function NoInstanceProperties() {
76
+ return (_jsx(Card, { title: "No instance properties", children: _jsx(Text, { color: "neutral", emphasis: "muted", children: "This component exposes no properties for per-instance authoring." }) }));
77
+ }
78
+ function toInputText(value) {
79
+ return typeof value === 'string' || typeof value === 'number' ? String(value) : '';
27
80
  }
81
+ const styles = StyleSheet.create({
82
+ fieldStack: {
83
+ gap: 14,
84
+ },
85
+ choiceRow: {
86
+ flexDirection: 'row',
87
+ flexWrap: 'wrap',
88
+ gap: 8,
89
+ },
90
+ choice: {
91
+ minHeight: 40,
92
+ justifyContent: 'center',
93
+ borderWidth: 1,
94
+ borderRadius: 8,
95
+ borderColor: 'transparent',
96
+ paddingHorizontal: 12,
97
+ paddingVertical: 8,
98
+ },
99
+ choiceSelected: {
100
+ borderColor: '#4f46e5',
101
+ },
102
+ toggle: {
103
+ minHeight: 44,
104
+ alignSelf: 'flex-start',
105
+ justifyContent: 'center',
106
+ borderWidth: 1,
107
+ borderRadius: 8,
108
+ borderColor: 'transparent',
109
+ paddingHorizontal: 16,
110
+ paddingVertical: 8,
111
+ },
112
+ });
28
113
  //# sourceMappingURL=PropertiesAdminPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PropertiesAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/PropertiesAdminPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PropertiesAdminPage.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/PropertiesAdminPage.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
- import type { DataSourceRegistry } from '@ankhorage/contracts';
1
+ import type { DataSourceRegistry } from '@ankhorage/contracts/data';
2
2
  export interface DataSourceOperationRow {
3
3
  readonly sourceId: string;
4
4
  readonly endpointId: string;
5
5
  readonly operationId: string;
6
+ readonly name?: string;
6
7
  readonly kind: string;
7
8
  readonly protocol: string | null;
9
+ readonly method: string | null;
10
+ readonly path: string | null;
8
11
  }
9
12
  export declare function collectDataSourceOperationRows(dataSources: DataSourceRegistry): DataSourceOperationRow[];
10
13
  //# sourceMappingURL=adminDataSourceOperations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adminDataSourceOperations.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminDataSourceOperations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,kBAAkB,GAC9B,sBAAsB,EAAE,CAa1B"}
1
+ {"version":3,"file":"adminDataSourceOperations.d.ts","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminDataSourceOperations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,kBAAkB,GAC9B,sBAAsB,EAAE,CAe1B"}
@@ -1,11 +1,13 @@
1
- import { readRecord, readString } from '../adminPageUtils';
2
1
  export function collectDataSourceOperationRows(dataSources) {
3
- return Object.entries(dataSources).flatMap(([sourceId, source]) => Object.entries(readRecord(source).endpoints ?? {}).flatMap(([endpointId, endpoint]) => Object.entries(readRecord(endpoint).operations ?? {}).map(([operationId, operation]) => ({
2
+ return Object.entries(dataSources).flatMap(([sourceId, source]) => Object.entries(source.endpoints).flatMap(([endpointId, endpoint]) => Object.entries(endpoint.operations).map(([operationId, operation]) => ({
4
3
  sourceId,
5
4
  endpointId,
6
5
  operationId,
7
- kind: readString(readRecord(operation).intent) ?? 'operation',
8
- protocol: readString(readRecord(operation).protocol) ?? readString(readRecord(endpoint).kind),
6
+ name: operation.name,
7
+ kind: operation.intent,
8
+ protocol: operation.protocol,
9
+ method: operation.method ?? null,
10
+ path: operation.path ?? endpoint.path ?? null,
9
11
  }))));
10
12
  }
11
13
  //# sourceMappingURL=adminDataSourceOperations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adminDataSourceOperations.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminDataSourceOperations.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAU3D,MAAM,UAAU,8BAA8B,CAC5C,WAA+B;IAE/B,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAChE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CACpF,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,QAAQ;QACR,UAAU;QACV,WAAW;QACX,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,WAAW;QAC7D,QAAQ,EACN,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;KACtF,CAAC,CAAC,CACJ,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"adminDataSourceOperations.js","sourceRoot":"","sources":["../../../../src/ui/admin/pages/adminDataSourceOperations.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,8BAA8B,CAC5C,WAA+B;IAE/B,OAAO,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAChE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAClE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,QAAQ;QACR,UAAU;QACV,WAAW;QACX,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,IAAI,EAAE,SAAS,CAAC,MAAM;QACtB,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,IAAI;QAChC,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI;KAC9C,CAAC,CAAC,CACJ,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { DataSourceConfig, DataSourceRegistry } from '@ankhorage/contracts/data';
2
+ export interface ExternalApiDataSourceUpsertResult {
3
+ readonly registry: DataSourceRegistry;
4
+ readonly created: boolean;
5
+ }
6
+ export declare function upsertExternalApiDataSource(registry: DataSourceRegistry, source: DataSourceConfig): ExternalApiDataSourceUpsertResult;
7
+ //# sourceMappingURL=upsertExternalApiDataSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upsertExternalApiDataSource.d.ts","sourceRoot":"","sources":["../src/upsertExternalApiDataSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEtF,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,gBAAgB,GACvB,iCAAiC,CAKnC"}
@@ -0,0 +1,7 @@
1
+ export function upsertExternalApiDataSource(registry, source) {
2
+ return {
3
+ registry: { ...registry, [source.id]: source },
4
+ created: registry[source.id] === undefined,
5
+ };
6
+ }
7
+ //# sourceMappingURL=upsertExternalApiDataSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upsertExternalApiDataSource.js","sourceRoot":"","sources":["../src/upsertExternalApiDataSource.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,2BAA2B,CACzC,QAA4B,EAC5B,MAAwB;IAExB,OAAO;QACL,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE;QAC9C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,SAAS;KAC3C,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/studio",
3
- "version": "0.11.11",
3
+ "version": "0.12.0",
4
4
  "description": "Studio authoring package for Ankhorage apps",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ankhorage/studio#readme",
@@ -140,6 +140,10 @@
140
140
  "types": "./dist/manifestState.d.ts",
141
141
  "import": "./dist/manifestState.js"
142
142
  },
143
+ "./propertiesAuthoringModel": {
144
+ "types": "./dist/propertiesAuthoringModel.d.ts",
145
+ "import": "./dist/propertiesAuthoringModel.js"
146
+ },
143
147
  "./manifestSync": {
144
148
  "types": "./dist/manifestSync.d.ts",
145
149
  "import": "./dist/manifestSync.js"
@@ -175,6 +179,10 @@
175
179
  "./host": {
176
180
  "types": "./dist/host/index.d.ts",
177
181
  "import": "./dist/host/index.js"
182
+ },
183
+ "./externalApiAuthoring": {
184
+ "types": "./dist/externalApiAuthoring.d.ts",
185
+ "import": "./dist/externalApiAuthoring.js"
178
186
  }
179
187
  },
180
188
  "ankh": {
@@ -190,7 +198,9 @@
190
198
  "studio.secrets.list",
191
199
  "studio.secrets.create",
192
200
  "studio.secrets.replace",
193
- "studio.secrets.remove"
201
+ "studio.secrets.remove",
202
+ "studio.data-sources.connect",
203
+ "studio.data-sources.test"
194
204
  ]
195
205
  },
196
206
  "scripts": {
@@ -230,6 +240,7 @@
230
240
  "dependencies": {
231
241
  "@ankhorage/color-theory": "^0.0.8",
232
242
  "@ankhorage/contracts": "^4.0.1",
243
+ "@ankhorage/data-sources": "^0.6.0",
233
244
  "@ankhorage/expo-runtime": "^0.0.11",
234
245
  "@ankhorage/infra": "^1.1.0",
235
246
  "@ankhorage/orchestrator": "^0.2.4",
@@ -240,7 +251,7 @@
240
251
  "@ankhorage/supabase-auth": "^1.1.2",
241
252
  "@ankhorage/supabase-vault": "^0.2.4",
242
253
  "@ankhorage/templates": "^3.0.0",
243
- "@ankhorage/zora": "^2.9.1",
254
+ "@ankhorage/zora": "^2.9.3",
244
255
  "@ankhorage/zora-chess": "^0.1.2",
245
256
  "@ankhorage/zora-tabletop": "^0.0.5",
246
257
  "@fastify/cors": "^11.2.0",
@@ -1,4 +0,0 @@
1
- export declare function readRecord(value: unknown): Record<string, unknown>;
2
- export declare function readString(value: unknown): string | null;
3
- export declare function formatPrimitive(value: unknown): string;
4
- //# sourceMappingURL=adminPageUtils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adminPageUtils.d.ts","sourceRoot":"","sources":["../../../src/ui/admin/adminPageUtils.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAExD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAItD"}
@@ -1,14 +0,0 @@
1
- export function readRecord(value) {
2
- return typeof value === 'object' && value !== null ? value : {};
3
- }
4
- export function readString(value) {
5
- return typeof value === 'string' ? value : null;
6
- }
7
- export function formatPrimitive(value) {
8
- if (typeof value === 'string')
9
- return value;
10
- if (typeof value === 'number' || typeof value === 'boolean')
11
- return String(value);
12
- return JSON.stringify(value);
13
- }
14
- //# sourceMappingURL=adminPageUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adminPageUtils.js","sourceRoot":"","sources":["../../../src/ui/admin/adminPageUtils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}