@dxos/plugin-script 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446
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/dist/lib/browser/DeploymentDialog-AEPYJKPO.mjs +12 -0
- package/dist/lib/browser/{ScriptContainer-6DYV7D65.mjs → ScriptContainer-R25PRK2D.mjs} +19 -31
- package/dist/lib/browser/ScriptContainer-R25PRK2D.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-BFBTQPSP.mjs → app-graph-builder-RRLY67QC.mjs} +10 -10
- package/dist/lib/browser/app-graph-builder-RRLY67QC.mjs.map +7 -0
- package/dist/lib/browser/{artifact-definition-PD4UAAQZ.mjs → artifact-definition-WXFYD2V5.mjs} +38 -44
- package/dist/lib/browser/artifact-definition-WXFYD2V5.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BONEXAIK.mjs → chunk-2CGZFDCR.mjs} +10 -10
- package/dist/lib/browser/chunk-2CGZFDCR.mjs.map +7 -0
- package/dist/lib/browser/{chunk-A4VOGQ2P.mjs → chunk-4VD3K3PY.mjs} +2 -2
- package/dist/lib/browser/{chunk-YNOCAJYT.mjs → chunk-CSZXPLYY.mjs} +3 -3
- package/dist/lib/browser/chunk-CSZXPLYY.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FFDJENAN.mjs → chunk-KLEOGVXY.mjs} +156 -87
- package/dist/lib/browser/chunk-KLEOGVXY.mjs.map +7 -0
- package/dist/lib/browser/{chunk-INL55MFV.mjs → chunk-MQZQB5VD.mjs} +10 -10
- package/dist/lib/browser/chunk-MQZQB5VD.mjs.map +7 -0
- package/dist/lib/browser/chunk-R2CHVWJ2.mjs +41 -0
- package/dist/lib/browser/chunk-R2CHVWJ2.mjs.map +7 -0
- package/dist/lib/browser/chunk-SUCBNCEQ.mjs +87 -0
- package/dist/lib/browser/chunk-SUCBNCEQ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-KJMVDGRB.mjs → chunk-WSK3YQXI.mjs} +1 -2
- package/dist/lib/browser/{chunk-KJMVDGRB.mjs.map → chunk-WSK3YQXI.mjs.map} +2 -2
- package/dist/lib/browser/{compiler-O4FJK7RR.mjs → compiler-56LTBEQB.mjs} +3 -3
- package/dist/lib/browser/index.mjs +15 -16
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-SXO6X6XQ.mjs → intent-resolver-WCVXKRBR.mjs} +14 -14
- package/dist/lib/browser/intent-resolver-WCVXKRBR.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-TZGE7EGC.mjs → react-surface-WXZVPNGI.mjs} +12 -12
- package/dist/lib/browser/react-surface-WXZVPNGI.mjs.map +7 -0
- package/dist/lib/browser/{settings-EOKSUGB6.mjs → settings-Z7B37V2I.mjs} +5 -5
- package/dist/lib/browser/settings-Z7B37V2I.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +2 -2
- package/dist/lib/node/{DeploymentDialog-43SI7XFL.cjs → DeploymentDialog-O4MU4OMF.cjs} +10 -10
- package/dist/lib/node/DeploymentDialog-O4MU4OMF.cjs.map +7 -0
- package/dist/lib/node/{ScriptContainer-H56OW5FC.cjs → ScriptContainer-5KY6ZOQD.cjs} +22 -32
- package/dist/lib/node/ScriptContainer-5KY6ZOQD.cjs.map +7 -0
- package/dist/lib/node/{app-graph-builder-IKOX7GHW.cjs → app-graph-builder-6I2BWD46.cjs} +17 -17
- package/dist/lib/node/app-graph-builder-6I2BWD46.cjs.map +7 -0
- package/dist/lib/node/{artifact-definition-C644EAYM.cjs → artifact-definition-6NVXEHJD.cjs} +47 -53
- package/dist/lib/node/artifact-definition-6NVXEHJD.cjs.map +7 -0
- package/dist/lib/node/{chunk-VHSIOCS5.cjs → chunk-65MIJR3Q.cjs} +17 -17
- package/dist/lib/node/chunk-65MIJR3Q.cjs.map +7 -0
- package/dist/lib/node/{chunk-7NNN3IUQ.cjs → chunk-F4DP7WON.cjs} +160 -93
- package/dist/lib/node/chunk-F4DP7WON.cjs.map +7 -0
- package/dist/lib/node/{chunk-KFJQVOGS.cjs → chunk-JICWAOWZ.cjs} +6 -6
- package/dist/lib/node/{chunk-HPBQHRM3.cjs → chunk-SLDJM45C.cjs} +18 -18
- package/dist/lib/node/chunk-SLDJM45C.cjs.map +7 -0
- package/dist/lib/node/{chunk-K7PPLRVQ.cjs → chunk-VYBEBLDO.cjs} +14 -14
- package/dist/lib/node/chunk-VYBEBLDO.cjs.map +7 -0
- package/dist/lib/node/chunk-X7MHLHHS.cjs +91 -0
- package/dist/lib/node/chunk-X7MHLHHS.cjs.map +7 -0
- package/dist/lib/node/{chunk-SXJGHLK6.cjs → chunk-XFZPWFEG.cjs} +19 -18
- package/dist/lib/node/chunk-XFZPWFEG.cjs.map +7 -0
- package/dist/lib/node/{chunk-NO5Y74F3.cjs → chunk-YJQZHKKA.cjs} +4 -5
- package/dist/lib/node/{chunk-NO5Y74F3.cjs.map → chunk-YJQZHKKA.cjs.map} +2 -2
- package/dist/lib/node/{compiler-FBC6ELQN.cjs → compiler-W2RU3M7U.cjs} +7 -7
- package/dist/lib/node/index.cjs +44 -45
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-PDSMZM2T.cjs → intent-resolver-J4NBDNFH.cjs} +21 -21
- package/dist/lib/node/intent-resolver-J4NBDNFH.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-BHHJQZ7P.cjs → react-surface-27KTUBIZ.cjs} +38 -38
- package/dist/lib/node/react-surface-27KTUBIZ.cjs.map +7 -0
- package/dist/lib/node/{settings-425QHVGC.cjs → settings-EI6VPNKN.cjs} +9 -9
- package/dist/lib/node/settings-EI6VPNKN.cjs.map +7 -0
- package/dist/lib/node/types.cjs +5 -5
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{DeploymentDialog-2RRUJEBC.mjs → DeploymentDialog-SSQSWLHX.mjs} +5 -5
- package/dist/lib/node-esm/{ScriptContainer-762FHDZ4.mjs → ScriptContainer-W2F4FGDV.mjs} +19 -31
- package/dist/lib/node-esm/ScriptContainer-W2F4FGDV.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-KZGKGSP6.mjs → app-graph-builder-H5XLRVX3.mjs} +10 -10
- package/dist/lib/node-esm/app-graph-builder-H5XLRVX3.mjs.map +7 -0
- package/dist/lib/node-esm/{artifact-definition-J6UM6BQF.mjs → artifact-definition-KQ64AYBP.mjs} +38 -44
- package/dist/lib/node-esm/artifact-definition-KQ64AYBP.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-A3TXZHGD.mjs → chunk-4MTPYMV2.mjs} +10 -10
- package/dist/lib/node-esm/chunk-4MTPYMV2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HKJUN636.mjs → chunk-EB5DSAD4.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-F47OE6ZM.mjs → chunk-F4HA5C34.mjs} +10 -10
- package/dist/lib/node-esm/chunk-F4HA5C34.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs → chunk-FDEAVT67.mjs} +1 -2
- package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs.map → chunk-FDEAVT67.mjs.map} +2 -2
- package/dist/lib/node-esm/{chunk-V733VFCJ.mjs → chunk-MU3JKVL2.mjs} +3 -3
- package/dist/lib/node-esm/chunk-MU3JKVL2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NYA7KDN6.mjs → chunk-PBGVTGL2.mjs} +156 -87
- package/dist/lib/node-esm/chunk-PBGVTGL2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-QDYGTY4L.mjs +89 -0
- package/dist/lib/node-esm/chunk-QDYGTY4L.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-VMQPOPKV.mjs → chunk-RW2APVMV.mjs} +14 -13
- package/dist/lib/node-esm/chunk-RW2APVMV.mjs.map +7 -0
- package/dist/lib/node-esm/{compiler-3NG4T5LH.mjs → compiler-VT5C2Z3T.mjs} +3 -3
- package/dist/lib/node-esm/index.mjs +15 -16
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-WSAVLQY5.mjs → intent-resolver-PDZ2A26X.mjs} +14 -14
- package/dist/lib/node-esm/intent-resolver-PDZ2A26X.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-W7BM4PDK.mjs → react-surface-UCUVDVSH.mjs} +12 -12
- package/dist/lib/node-esm/react-surface-UCUVDVSH.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-BWSKKIVQ.mjs → settings-HU5UEFRF.mjs} +5 -5
- package/dist/lib/node-esm/settings-HU5UEFRF.mjs.map +7 -0
- package/dist/lib/node-esm/types.mjs +2 -2
- package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +179 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +177 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +2 -2
- package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
- package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScriptContainer.d.ts +1 -1
- package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +1 -1
- package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
- package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +1 -1
- package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
- package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/hooks/deploy.d.ts +19 -22
- package/dist/types/src/hooks/deploy.d.ts.map +1 -1
- package/dist/types/src/hooks/format.d.ts +5 -2
- package/dist/types/src/hooks/format.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/template.d.ts +5 -2
- package/dist/types/src/hooks/template.d.ts.map +1 -1
- package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
- package/dist/types/src/hooks/useToolbarAction.d.ts +13 -0
- package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -0
- package/dist/types/src/hooks/useToolbarState.d.ts +1 -1
- package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/templates/chat.d.ts +1 -1
- package/dist/types/src/templates/chat.d.ts.map +1 -1
- package/dist/types/src/templates/chess.d.ts.map +1 -1
- package/dist/types/src/templates/data-generator.d.ts +7 -0
- package/dist/types/src/templates/data-generator.d.ts.map +1 -1
- package/dist/types/src/templates/discord.d.ts.map +1 -1
- package/dist/types/src/templates/echo.d.ts +1 -1
- package/dist/types/src/templates/echo.d.ts.map +1 -1
- package/dist/types/src/templates/email.d.ts +1 -1
- package/dist/types/src/templates/email.d.ts.map +1 -1
- package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
- package/dist/types/src/templates/forex.d.ts.map +1 -1
- package/dist/types/src/templates/gmail.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +110 -2
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +26 -27
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util/deploy.d.ts.map +1 -1
- package/dist/types/src/util/functions.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +50 -56
- package/src/ScriptPlugin.tsx +2 -4
- package/src/capabilities/app-graph-builder.ts +29 -46
- package/src/capabilities/artifact-definition.ts +32 -35
- package/src/capabilities/intent-resolver.ts +7 -7
- package/src/capabilities/react-surface.tsx +5 -5
- package/src/capabilities/settings.ts +2 -2
- package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +1 -1
- package/src/components/DeploymentDialog/DeploymentDialog.tsx +2 -2
- package/src/components/ScriptContainer.tsx +2 -2
- package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +1 -1
- package/src/components/ScriptToolbar/ScriptToolbar.tsx +10 -16
- package/src/components/Settings/ScriptObjectSettings.tsx +5 -5
- package/src/hooks/deploy.ts +55 -61
- package/src/hooks/format.ts +26 -26
- package/src/hooks/index.ts +1 -0
- package/src/hooks/template.ts +32 -24
- package/src/hooks/useToolbarAction.ts +50 -0
- package/src/hooks/useToolbarState.ts +2 -2
- package/src/meta.ts +0 -1
- package/src/templates/chat.ts +9 -3
- package/src/templates/chess.ts +6 -1
- package/src/templates/data-generator.ts +45 -20
- package/src/templates/discord.ts +10 -10
- package/src/templates/echo.ts +12 -1
- package/src/templates/email.ts +14 -8
- package/src/templates/forex-effect.ts +6 -2
- package/src/templates/forex.ts +5 -1
- package/src/templates/gmail.ts +26 -33
- package/src/translations.ts +1 -1
- package/src/types.ts +14 -13
- package/src/util/deploy.ts +10 -6
- package/dist/lib/browser/DeploymentDialog-W7PY33VN.mjs +0 -12
- package/dist/lib/browser/ScriptContainer-6DYV7D65.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-BFBTQPSP.mjs.map +0 -7
- package/dist/lib/browser/artifact-definition-PD4UAAQZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-6MLJJI73.mjs +0 -40
- package/dist/lib/browser/chunk-6MLJJI73.mjs.map +0 -7
- package/dist/lib/browser/chunk-BONEXAIK.mjs.map +0 -7
- package/dist/lib/browser/chunk-FFDJENAN.mjs.map +0 -7
- package/dist/lib/browser/chunk-INL55MFV.mjs.map +0 -7
- package/dist/lib/browser/chunk-RTVU4RZW.mjs +0 -87
- package/dist/lib/browser/chunk-RTVU4RZW.mjs.map +0 -7
- package/dist/lib/browser/chunk-YNOCAJYT.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-SXO6X6XQ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-TZGE7EGC.mjs.map +0 -7
- package/dist/lib/browser/settings-EOKSUGB6.mjs.map +0 -7
- package/dist/lib/node/DeploymentDialog-43SI7XFL.cjs.map +0 -7
- package/dist/lib/node/ScriptContainer-H56OW5FC.cjs.map +0 -7
- package/dist/lib/node/app-graph-builder-IKOX7GHW.cjs.map +0 -7
- package/dist/lib/node/artifact-definition-C644EAYM.cjs.map +0 -7
- package/dist/lib/node/chunk-7NNN3IUQ.cjs.map +0 -7
- package/dist/lib/node/chunk-HPBQHRM3.cjs.map +0 -7
- package/dist/lib/node/chunk-K7PPLRVQ.cjs.map +0 -7
- package/dist/lib/node/chunk-SXJGHLK6.cjs.map +0 -7
- package/dist/lib/node/chunk-VHSIOCS5.cjs.map +0 -7
- package/dist/lib/node/chunk-VNSZBEJW.cjs +0 -91
- package/dist/lib/node/chunk-VNSZBEJW.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-PDSMZM2T.cjs.map +0 -7
- package/dist/lib/node/react-surface-BHHJQZ7P.cjs.map +0 -7
- package/dist/lib/node/settings-425QHVGC.cjs.map +0 -7
- package/dist/lib/node-esm/ScriptContainer-762FHDZ4.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-KZGKGSP6.mjs.map +0 -7
- package/dist/lib/node-esm/artifact-definition-J6UM6BQF.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-A3TXZHGD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-F47OE6ZM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NYA7KDN6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-V733VFCJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-VMQPOPKV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YCTECQLY.mjs +0 -89
- package/dist/lib/node-esm/chunk-YCTECQLY.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-WSAVLQY5.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-W7BM4PDK.mjs.map +0 -7
- package/dist/lib/node-esm/settings-BWSKKIVQ.mjs.map +0 -7
- /package/dist/lib/browser/{DeploymentDialog-W7PY33VN.mjs.map → DeploymentDialog-AEPYJKPO.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-A4VOGQ2P.mjs.map → chunk-4VD3K3PY.mjs.map} +0 -0
- /package/dist/lib/browser/{compiler-O4FJK7RR.mjs.map → compiler-56LTBEQB.mjs.map} +0 -0
- /package/dist/lib/node/{chunk-KFJQVOGS.cjs.map → chunk-JICWAOWZ.cjs.map} +0 -0
- /package/dist/lib/node/{compiler-FBC6ELQN.cjs.map → compiler-W2RU3M7U.cjs.map} +0 -0
- /package/dist/lib/node-esm/{DeploymentDialog-2RRUJEBC.mjs.map → DeploymentDialog-SSQSWLHX.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-HKJUN636.mjs.map → chunk-EB5DSAD4.mjs.map} +0 -0
- /package/dist/lib/node-esm/{compiler-3NG4T5LH.mjs.map → compiler-VT5C2Z3T.mjs.map} +0 -0
package/src/hooks/template.ts
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { useCallback } from 'react';
|
|
6
|
+
|
|
7
|
+
import { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions/types';
|
|
6
8
|
import { getMeta } from '@dxos/live-object';
|
|
7
9
|
import { createMenuItemGroup, createMenuAction } from '@dxos/react-ui-menu';
|
|
8
10
|
|
|
@@ -18,34 +20,19 @@ const createTemplateSelectGroup = () => {
|
|
|
18
20
|
});
|
|
19
21
|
};
|
|
20
22
|
|
|
21
|
-
const createTemplateSelectActions = (
|
|
23
|
+
const createTemplateSelectActions = () => {
|
|
22
24
|
return templates.map((template) => {
|
|
23
|
-
return createMenuAction<TemplateActionProperties>(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const metaKeys = getMeta(script).keys;
|
|
29
|
-
const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);
|
|
30
|
-
if (oldPresetIndex >= 0) {
|
|
31
|
-
metaKeys.splice(oldPresetIndex, 1);
|
|
32
|
-
}
|
|
33
|
-
if (template.presetId) {
|
|
34
|
-
metaKeys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
label: template.name,
|
|
39
|
-
value: template.id,
|
|
40
|
-
type: 'template',
|
|
41
|
-
},
|
|
42
|
-
);
|
|
25
|
+
return createMenuAction<TemplateActionProperties>(`template--${template.id}`, {
|
|
26
|
+
label: template.name,
|
|
27
|
+
value: template.id,
|
|
28
|
+
type: 'template',
|
|
29
|
+
});
|
|
43
30
|
});
|
|
44
31
|
};
|
|
45
32
|
|
|
46
|
-
export const createTemplateSelect = (
|
|
33
|
+
export const createTemplateSelect = () => {
|
|
47
34
|
const templateSelectGroup = createTemplateSelectGroup();
|
|
48
|
-
const templateSelectActions = createTemplateSelectActions(
|
|
35
|
+
const templateSelectActions = createTemplateSelectActions();
|
|
49
36
|
return {
|
|
50
37
|
nodes: [templateSelectGroup, ...templateSelectActions],
|
|
51
38
|
edges: [
|
|
@@ -54,3 +41,24 @@ export const createTemplateSelect = (script: ScriptType) => {
|
|
|
54
41
|
],
|
|
55
42
|
};
|
|
56
43
|
};
|
|
44
|
+
|
|
45
|
+
export const useTemplateSelectHandler = ({ script }: { script: ScriptType }) => {
|
|
46
|
+
return useCallback(
|
|
47
|
+
(templateId: string) => {
|
|
48
|
+
const template = templates.find((template) => template.id === templateId);
|
|
49
|
+
if (template) {
|
|
50
|
+
script.name = template.name;
|
|
51
|
+
script.source!.target!.content = template.source;
|
|
52
|
+
const metaKeys = getMeta(script).keys;
|
|
53
|
+
const oldPresetIndex = metaKeys.findIndex((key) => key.source === FUNCTIONS_PRESET_META_KEY);
|
|
54
|
+
if (oldPresetIndex >= 0) {
|
|
55
|
+
metaKeys.splice(oldPresetIndex, 1);
|
|
56
|
+
}
|
|
57
|
+
if (template.presetId) {
|
|
58
|
+
metaKeys.push({ source: FUNCTIONS_PRESET_META_KEY, id: template.presetId });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
[script],
|
|
63
|
+
);
|
|
64
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useCallback } from 'react';
|
|
6
|
+
|
|
7
|
+
import { type ScriptType } from '@dxos/functions/types';
|
|
8
|
+
import { log } from '@dxos/log';
|
|
9
|
+
import { type MenuAction, type MenuActionHandler } from '@dxos/react-ui-menu';
|
|
10
|
+
|
|
11
|
+
import { type DeployActionProperties, useDeployHandler, useCopyHandler } from './deploy';
|
|
12
|
+
import { type FormatActionProperties, useFormatHandler } from './format';
|
|
13
|
+
import { type TemplateActionProperties, useTemplateSelectHandler } from './template';
|
|
14
|
+
import { type ScriptToolbarState } from './useToolbarState';
|
|
15
|
+
|
|
16
|
+
export type ScriptToolbarActionProperties = TemplateActionProperties | FormatActionProperties | DeployActionProperties;
|
|
17
|
+
|
|
18
|
+
export type ScriptToolbarAction = MenuAction<ScriptToolbarActionProperties>;
|
|
19
|
+
|
|
20
|
+
export const useToolbarAction = (props: {
|
|
21
|
+
state: ScriptToolbarState;
|
|
22
|
+
script: ScriptType;
|
|
23
|
+
}): MenuActionHandler<ScriptToolbarAction> => {
|
|
24
|
+
const handleTemplateSelect = useTemplateSelectHandler(props);
|
|
25
|
+
const handleFormat = useFormatHandler(props);
|
|
26
|
+
const handleDeploy = useDeployHandler(props);
|
|
27
|
+
const handleCopy = useCopyHandler(props);
|
|
28
|
+
|
|
29
|
+
return useCallback<MenuActionHandler<ScriptToolbarAction>>(
|
|
30
|
+
(action: ScriptToolbarAction) => {
|
|
31
|
+
switch (action.properties.type) {
|
|
32
|
+
case 'template':
|
|
33
|
+
handleTemplateSelect(action.properties.value);
|
|
34
|
+
break;
|
|
35
|
+
case 'format':
|
|
36
|
+
void handleFormat();
|
|
37
|
+
break;
|
|
38
|
+
case 'deploy':
|
|
39
|
+
void handleDeploy();
|
|
40
|
+
break;
|
|
41
|
+
case 'copy':
|
|
42
|
+
void handleCopy();
|
|
43
|
+
break;
|
|
44
|
+
default:
|
|
45
|
+
log.error('Unknown action type', action);
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
[handleTemplateSelect, handleFormat, handleDeploy, handleCopy],
|
|
49
|
+
);
|
|
50
|
+
};
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { create } from '@dxos/live-object';
|
|
8
8
|
|
|
9
9
|
import { type DeployState } from './deploy';
|
|
10
10
|
|
|
@@ -12,5 +12,5 @@ export type ScriptToolbarState = Partial<DeployState>;
|
|
|
12
12
|
|
|
13
13
|
// TODO(burdon): Replace with context provider?
|
|
14
14
|
export const useToolbarState = (initialState: ScriptToolbarState = {}) => {
|
|
15
|
-
return useMemo(() =>
|
|
15
|
+
return useMemo(() => create<ScriptToolbarState>(initialState), []);
|
|
16
16
|
};
|
package/src/meta.ts
CHANGED
|
@@ -19,6 +19,5 @@ export const meta: PluginMeta = {
|
|
|
19
19
|
|
|
20
20
|
// TODO(ZaymonFC): Configure by scopes?
|
|
21
21
|
export const defaultScriptsForIntegration: Record<string, string[]> = {
|
|
22
|
-
// TODO(wittjosiah): Also include content extraction scripts in the default set.
|
|
23
22
|
'gmail.com': ['dxos.org/script/gmail'],
|
|
24
23
|
};
|
package/src/templates/chat.ts
CHANGED
|
@@ -8,10 +8,16 @@ import { transformServerSentEvents } from 'https://esm.sh/@dxos/script-toolbox';
|
|
|
8
8
|
/**
|
|
9
9
|
* Chatbot that answers questions based on the context data.
|
|
10
10
|
*/
|
|
11
|
-
export default async ({
|
|
11
|
+
export default async ({
|
|
12
|
+
event: {
|
|
13
|
+
data: { request },
|
|
14
|
+
},
|
|
15
|
+
context: { space, ai },
|
|
16
|
+
}: any) => {
|
|
17
|
+
const textBody = await request.text();
|
|
12
18
|
let parsedRequest: any;
|
|
13
19
|
try {
|
|
14
|
-
parsedRequest = JSON.parse(
|
|
20
|
+
parsedRequest = JSON.parse(textBody);
|
|
15
21
|
} catch (err) {
|
|
16
22
|
const answer = await ai.run('@cf/meta/llama-3.1-8b-instruct', {
|
|
17
23
|
stream: true,
|
|
@@ -23,7 +29,7 @@ export default async ({ data: { bodyText }, context: { space, ai } }: any) => {
|
|
|
23
29
|
${await getContext({ space })}
|
|
24
30
|
|
|
25
31
|
QUESTION:
|
|
26
|
-
${
|
|
32
|
+
${textBody}
|
|
27
33
|
`,
|
|
28
34
|
});
|
|
29
35
|
return new Response(transformServerSentEvents(answer));
|
package/src/templates/chess.ts
CHANGED
|
@@ -25,7 +25,12 @@ export default defineFunction({
|
|
|
25
25
|
}),
|
|
26
26
|
}),
|
|
27
27
|
|
|
28
|
-
handler: async ({
|
|
28
|
+
handler: async ({
|
|
29
|
+
event: {
|
|
30
|
+
data: { changedObjectId, player = 'b' },
|
|
31
|
+
},
|
|
32
|
+
context: { space },
|
|
33
|
+
}: any) => {
|
|
29
34
|
const { pgn } = await space.db.query({ id: changedObjectId }).first();
|
|
30
35
|
const game = new Chess();
|
|
31
36
|
game.load_pgn(pgn);
|
|
@@ -2,10 +2,35 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import {
|
|
6
|
+
EchoObject,
|
|
7
|
+
defineFunction,
|
|
8
|
+
S,
|
|
9
|
+
createStatic,
|
|
10
|
+
Expando,
|
|
11
|
+
TypedObject,
|
|
12
|
+
Ref,
|
|
13
|
+
LabelAnnotationId,
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
} from 'dxos:functions';
|
|
5
16
|
// @ts-ignore
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
17
|
+
import { randParagraph } from 'https://esm.sh/@ngneat/falso@7.1.1';
|
|
18
|
+
|
|
19
|
+
export class TextType extends TypedObject({ typename: 'dxos.org/type/Text', version: '0.1.0' })({
|
|
20
|
+
content: S.String,
|
|
21
|
+
}) {}
|
|
22
|
+
|
|
23
|
+
export const DocumentSchema = S.Struct({
|
|
24
|
+
name: S.optional(S.String),
|
|
25
|
+
fallbackName: S.optional(S.String),
|
|
26
|
+
content: Ref(TextType),
|
|
27
|
+
threads: S.mutable(S.Array(Ref(Expando))),
|
|
28
|
+
}).annotations({
|
|
29
|
+
[LabelAnnotationId]: ['name', 'fallbackName'],
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export const DocumentType = DocumentSchema.pipe(EchoObject('dxos.org/type/Document', '0.1.0'));
|
|
33
|
+
export type DocumentType = S.Schema.Type<typeof DocumentType>;
|
|
9
34
|
|
|
10
35
|
export default defineFunction({
|
|
11
36
|
inputSchema: S.Struct({
|
|
@@ -16,33 +41,33 @@ export default defineFunction({
|
|
|
16
41
|
|
|
17
42
|
outputSchema: S.Struct({}),
|
|
18
43
|
|
|
19
|
-
handler: async ({
|
|
44
|
+
handler: async ({ event: { documentAmount = 10, textSize = 10, mutationAmount = 0 }, context: { space } }: any) => {
|
|
20
45
|
await space.db.graph.schemaRegistry.addSchema([Expando]);
|
|
21
|
-
const result: Record<string, any> = {};
|
|
22
|
-
const objects: Expando[] = [];
|
|
23
46
|
|
|
24
|
-
|
|
47
|
+
const objects = [];
|
|
48
|
+
// const rootCollection = await space.properties[COLLECTION_TYPENAME]?.load();
|
|
25
49
|
for (let i = 0; i < documentAmount; i++) {
|
|
26
50
|
const obj = space.db.add(
|
|
27
|
-
|
|
51
|
+
createStatic(Expando, {
|
|
28
52
|
name: 'scriptGenerated',
|
|
29
|
-
content:
|
|
53
|
+
content: randParagraph({ length: textSize }),
|
|
30
54
|
}),
|
|
31
55
|
);
|
|
56
|
+
// rootCollection.objects.push(obj);
|
|
32
57
|
objects.push(obj);
|
|
33
|
-
const objectResult: any = {};
|
|
34
|
-
// Mutate the object.
|
|
35
|
-
for (let i = 0; i < mutationAmount; i++) {
|
|
36
|
-
obj.content = randText({ charCount: textSize });
|
|
37
|
-
}
|
|
38
|
-
objectResult.mutations = mutationAmount;
|
|
39
|
-
objectResult.contentLength = obj.content.length;
|
|
40
|
-
result[obj.id] = objectResult;
|
|
41
58
|
}
|
|
42
59
|
|
|
43
|
-
|
|
60
|
+
for (let i = 0; i < mutationAmount; i++) {
|
|
61
|
+
const obj = objects[Math.floor(Math.random() * objects.length)];
|
|
62
|
+
obj.content = randParagraph({ length: textSize });
|
|
63
|
+
}
|
|
64
|
+
|
|
44
65
|
await space.db.flush();
|
|
45
|
-
|
|
46
|
-
|
|
66
|
+
// TODO(mykola): This seems to halp with propagating data to space.
|
|
67
|
+
for (const obj of objects) {
|
|
68
|
+
await space.db.query({ id: obj.id }).first();
|
|
69
|
+
console.log('obj', obj.id);
|
|
70
|
+
}
|
|
71
|
+
return 'OK';
|
|
47
72
|
},
|
|
48
73
|
});
|
package/src/templates/discord.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
// @ts-ignore
|
|
6
|
-
import {
|
|
6
|
+
import { createStatic, EchoObject, defineFunction, DXN, Filter, ObjectId, S } from 'dxos:functions';
|
|
7
7
|
import {
|
|
8
8
|
FetchHttpClient,
|
|
9
9
|
// @ts-ignore
|
|
@@ -14,17 +14,12 @@ import { DiscordConfig, DiscordREST, DiscordRESTMemoryLive } from 'https://esm.s
|
|
|
14
14
|
import { Effect, Config, Redacted, Ref } from 'https://esm.sh/effect@3.13.3';
|
|
15
15
|
|
|
16
16
|
const MessageSchema = S.Struct({
|
|
17
|
-
id:
|
|
17
|
+
id: S.String,
|
|
18
18
|
foreignId: S.Any, // bigint?
|
|
19
19
|
from: S.String,
|
|
20
20
|
created: S.String,
|
|
21
21
|
content: S.String,
|
|
22
|
-
}).pipe(
|
|
23
|
-
EchoObject({
|
|
24
|
-
typename: 'example.com/type/Message',
|
|
25
|
-
version: '0.1.0',
|
|
26
|
-
}),
|
|
27
|
-
);
|
|
22
|
+
}).pipe(EchoObject({ typename: 'example.com/type/Message', version: '0.1.0' }));
|
|
28
23
|
|
|
29
24
|
const DEFAULT_AFTER = 1704067200; // 2024-01-01
|
|
30
25
|
|
|
@@ -47,7 +42,12 @@ export default defineFunction({
|
|
|
47
42
|
newMessages: S.Number,
|
|
48
43
|
}),
|
|
49
44
|
|
|
50
|
-
handler: ({
|
|
45
|
+
handler: ({
|
|
46
|
+
event: {
|
|
47
|
+
data: { channelId, queueId, after = DEFAULT_AFTER, pageSize = 5 },
|
|
48
|
+
},
|
|
49
|
+
context: { space },
|
|
50
|
+
}: any) =>
|
|
51
51
|
Effect.gen(function* () {
|
|
52
52
|
const { token } = yield* Effect.tryPromise({
|
|
53
53
|
try: () => space.db.query(Filter.typename('dxos.org/type/AccessToken', { source: 'discord.com' })).first(),
|
|
@@ -73,7 +73,7 @@ export default defineFunction({
|
|
|
73
73
|
const messages = yield* rest.getChannelMessages(channelId, options).pipe((res: any) => res.json);
|
|
74
74
|
const queueMessages = messages
|
|
75
75
|
.map((message: any) =>
|
|
76
|
-
|
|
76
|
+
createStatic(MessageSchema, {
|
|
77
77
|
id: ObjectId.random(),
|
|
78
78
|
foreignId: message.id,
|
|
79
79
|
from: message.author.username,
|
package/src/templates/echo.ts
CHANGED
|
@@ -5,4 +5,15 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* Echos the request data.
|
|
7
7
|
*/
|
|
8
|
-
export default async ({
|
|
8
|
+
export default async ({
|
|
9
|
+
event: {
|
|
10
|
+
data: { request },
|
|
11
|
+
},
|
|
12
|
+
}: any) => {
|
|
13
|
+
const data = await request.json();
|
|
14
|
+
return new Response(JSON.stringify(data ?? {}), {
|
|
15
|
+
headers: {
|
|
16
|
+
'Content-Type': 'application/json',
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
};
|
package/src/templates/email.ts
CHANGED
|
@@ -6,9 +6,15 @@
|
|
|
6
6
|
* Appends a message to the end of a Document configured through a trigger.
|
|
7
7
|
* Trigger must have a targetDocumentId field set in Meta.
|
|
8
8
|
*/
|
|
9
|
-
export default async ({
|
|
10
|
-
|
|
9
|
+
export default async ({
|
|
10
|
+
event: {
|
|
11
|
+
data: { request },
|
|
12
|
+
},
|
|
13
|
+
context: { space },
|
|
14
|
+
}: any) => {
|
|
15
|
+
const { data, trigger } = (await request.json()) as RequestPayload;
|
|
11
16
|
|
|
17
|
+
const documentId = trigger.meta.targetDocumentId;
|
|
12
18
|
const document = await space.db.query({ id: documentId }, { format: 'plain' }).first();
|
|
13
19
|
|
|
14
20
|
const contentId = document.content['/'].split(':')[3];
|
|
@@ -17,11 +23,11 @@ export default async ({ data: { bodyText }, context: { space } }: any) => {
|
|
|
17
23
|
documentContent.content,
|
|
18
24
|
'',
|
|
19
25
|
'---',
|
|
20
|
-
`**From:** ${
|
|
21
|
-
`**Subject:** ${
|
|
22
|
-
`**Date:** ${
|
|
26
|
+
`**From:** ${data.from}`,
|
|
27
|
+
`**Subject:** ${data.subject}`,
|
|
28
|
+
`**Date:** ${data.created}`,
|
|
23
29
|
'',
|
|
24
|
-
|
|
30
|
+
data.body,
|
|
25
31
|
].join('\n');
|
|
26
32
|
|
|
27
33
|
await space.db.update({ id: contentId }, { content: modifiedContent });
|
|
@@ -30,6 +36,6 @@ export default async ({ data: { bodyText }, context: { space } }: any) => {
|
|
|
30
36
|
};
|
|
31
37
|
|
|
32
38
|
type RequestPayload = {
|
|
33
|
-
|
|
34
|
-
targetDocumentId: string;
|
|
39
|
+
data: { from: string; subject: string; created: string; body: string };
|
|
40
|
+
trigger: { meta: { targetDocumentId: string } };
|
|
35
41
|
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
// @ts-ignore
|
|
6
|
-
import {
|
|
6
|
+
import { defineFunction, S } from 'dxos:functions';
|
|
7
7
|
import {
|
|
8
8
|
HttpClient,
|
|
9
9
|
HttpClientRequest,
|
|
@@ -23,7 +23,11 @@ export default defineFunction({
|
|
|
23
23
|
|
|
24
24
|
outputSchema: S.String.annotations({ description: 'The exchange rate between the two currencies' }),
|
|
25
25
|
|
|
26
|
-
handler: async ({
|
|
26
|
+
handler: async ({
|
|
27
|
+
event: {
|
|
28
|
+
data: { from, to },
|
|
29
|
+
},
|
|
30
|
+
}: any) =>
|
|
27
31
|
Effect.gen(function* () {
|
|
28
32
|
const res = yield* HttpClientRequest.get(`https://free.ratesdb.com/v1/rates?from=${from}&to=${to}`).pipe(
|
|
29
33
|
HttpClient.execute,
|
package/src/templates/forex.ts
CHANGED
|
@@ -13,7 +13,11 @@ export default defineFunction({
|
|
|
13
13
|
to: S.String.annotations({ description: 'The target currency' }),
|
|
14
14
|
}),
|
|
15
15
|
|
|
16
|
-
handler: async ({
|
|
16
|
+
handler: async ({
|
|
17
|
+
event: {
|
|
18
|
+
data: { from, to },
|
|
19
|
+
},
|
|
20
|
+
}: any) => {
|
|
17
21
|
const res = await fetch(`https://free.ratesdb.com/v1/rates?from=${from}&to=${to}`);
|
|
18
22
|
const {
|
|
19
23
|
data: { rates },
|
package/src/templates/gmail.ts
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
// @ts-ignore
|
|
6
|
-
import {
|
|
7
|
-
// @ts-ignore
|
|
6
|
+
import { createStatic, defineFunction, EchoObject, Filter, ObjectId, S } from 'dxos:functions';
|
|
8
7
|
import {
|
|
9
8
|
HttpClient,
|
|
10
9
|
HttpClientRequest,
|
|
@@ -12,37 +11,40 @@ import {
|
|
|
12
11
|
// @ts-ignore
|
|
13
12
|
} from 'https://esm.sh/@effect/platform@0.77.2?deps=effect@3.13.3';
|
|
14
13
|
// @ts-ignore
|
|
15
|
-
import { format, subDays } from 'https://esm.sh/date-fns@3.3.1';
|
|
16
|
-
// @ts-ignore
|
|
17
14
|
import { pipe, Chunk, Effect, Ref, Schedule, Stream } from 'https://esm.sh/effect@3.13.3';
|
|
18
15
|
|
|
16
|
+
// TODO(ZaymonFC): Calculate this dynamically and expose a parameter.
|
|
17
|
+
const DEFAULT_AFTER = '2025-01-01';
|
|
18
|
+
|
|
19
19
|
export default defineFunction({
|
|
20
20
|
inputSchema: S.Struct({
|
|
21
|
-
mailboxId: S.String,
|
|
22
|
-
userId: S.optional(S.String).pipe(S.withDecodingDefault(() => 'me')),
|
|
23
|
-
after: S.optional(S.Union(S.Number, S.String)).pipe(
|
|
24
|
-
S.withDecodingDefault(() => format(subDays(new Date(), 30), 'yyyy-MM-dd')),
|
|
25
|
-
),
|
|
26
|
-
pageSize: S.optional(S.Number).pipe(S.withDecodingDefault(() => 100)),
|
|
27
21
|
// TODO(wittjosiah): Remove. This is used to provide a terminal for a cron trigger.
|
|
28
22
|
tick: S.optional(S.String),
|
|
23
|
+
userId: S.optional(S.String),
|
|
24
|
+
after: S.optional(S.Union(S.Number, S.String)),
|
|
25
|
+
pageSize: S.optional(S.Number),
|
|
26
|
+
mailboxId: S.String,
|
|
29
27
|
}),
|
|
30
28
|
|
|
31
29
|
outputSchema: S.Struct({
|
|
32
30
|
newMessages: S.Number,
|
|
33
31
|
}),
|
|
34
32
|
|
|
35
|
-
handler: ({
|
|
33
|
+
handler: ({
|
|
34
|
+
event: {
|
|
35
|
+
data: { mailboxId, userId = 'me', after = DEFAULT_AFTER, pageSize = 100 },
|
|
36
|
+
},
|
|
37
|
+
context: { space },
|
|
38
|
+
}: any) =>
|
|
36
39
|
Effect.gen(function* () {
|
|
37
40
|
const { token } = yield* Effect.tryPromise({
|
|
38
41
|
try: () => space.db.query(Filter.typename('dxos.org/type/AccessToken', { source: 'gmail.com' })).first(),
|
|
39
42
|
catch: (e: any) => e,
|
|
40
43
|
});
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
const makeRequest = (url: string) =>
|
|
45
|
+
const makeRequest = (path: string) =>
|
|
44
46
|
pipe(
|
|
45
|
-
|
|
47
|
+
path,
|
|
46
48
|
HttpClientRequest.get,
|
|
47
49
|
HttpClientRequest.setHeaders({ Authorization: `Bearer ${token}`, Accept: 'application/json' }),
|
|
48
50
|
HttpClient.execute,
|
|
@@ -52,10 +54,13 @@ export default defineFunction({
|
|
|
52
54
|
Effect.scoped,
|
|
53
55
|
);
|
|
54
56
|
|
|
55
|
-
const listMessages = (userId: string, q: string, pageSize: number, pageToken: string | null) =>
|
|
56
|
-
|
|
57
|
+
const listMessages = (userId: string, q: string, pageSize: number, pageToken: string | null) => {
|
|
58
|
+
const url = `https://gmail.googleapis.com/gmail/v1/users/${userId}/messages?maxResults=${pageSize}&q=${q}`;
|
|
59
|
+
return makeRequest(pageToken ? `${url}&pageToken=${pageToken}` : url);
|
|
60
|
+
};
|
|
57
61
|
|
|
58
|
-
const getMessage = (userId: string,
|
|
62
|
+
const getMessage = (userId: string, id: string) =>
|
|
63
|
+
makeRequest(`https://gmail.googleapis.com/gmail/v1/users/${userId}/messages/${id}`);
|
|
59
64
|
|
|
60
65
|
const mailbox = yield* Effect.tryPromise({
|
|
61
66
|
try: () => space.db.query({ id: mailboxId }).first(),
|
|
@@ -92,7 +97,7 @@ export default defineFunction({
|
|
|
92
97
|
continue;
|
|
93
98
|
}
|
|
94
99
|
const subject = messageDetails.payload.headers.find((h: any) => h.name === 'Subject')?.value;
|
|
95
|
-
const object =
|
|
100
|
+
const object = createStatic(MessageType, {
|
|
96
101
|
id: ObjectId.random(),
|
|
97
102
|
created,
|
|
98
103
|
sender,
|
|
@@ -132,14 +137,6 @@ export default defineFunction({
|
|
|
132
137
|
}).pipe(Effect.provide(FetchHttpClient.layer)),
|
|
133
138
|
});
|
|
134
139
|
|
|
135
|
-
const getUrl = (userId: string, messageId?: string, params?: Record<string, any>) => {
|
|
136
|
-
const api = new URL(
|
|
137
|
-
[`https://gmail.googleapis.com/gmail/v1/users/${userId}/messages`, messageId].filter(Boolean).join('/'),
|
|
138
|
-
);
|
|
139
|
-
Object.entries(params ?? {}).forEach(([key, value]) => api.searchParams.set(key, value));
|
|
140
|
-
return api.toString();
|
|
141
|
-
};
|
|
142
|
-
|
|
143
140
|
/**
|
|
144
141
|
* Parses an email string in the format "Name <email@example.com>" into separate name and email components.
|
|
145
142
|
*/
|
|
@@ -156,9 +153,10 @@ const parseEmailString = (emailString: string): { name?: string; email: string }
|
|
|
156
153
|
return undefined;
|
|
157
154
|
};
|
|
158
155
|
|
|
156
|
+
// TODO(wittjosiah): These schemas should be imported from @dxos/schema.
|
|
157
|
+
|
|
159
158
|
//
|
|
160
159
|
// Schemas
|
|
161
|
-
// TODO(wittjosiah): These schemas should be imported from @dxos/S.
|
|
162
160
|
//
|
|
163
161
|
|
|
164
162
|
const ActorRoles = ['user', 'assistant'] as const;
|
|
@@ -242,10 +240,5 @@ const MessageType = S.Struct({
|
|
|
242
240
|
}),
|
|
243
241
|
),
|
|
244
242
|
),
|
|
245
|
-
}).pipe(
|
|
246
|
-
EchoObject({
|
|
247
|
-
typename: 'dxos.org/type/Message',
|
|
248
|
-
version: '0.1.0',
|
|
249
|
-
}),
|
|
250
|
-
);
|
|
243
|
+
}).pipe(EchoObject({ typename: 'dxos.org/type/Message', version: '0.1.0' }));
|
|
251
244
|
type MessageType = S.Schema.Type<typeof MessageType>;
|
package/src/translations.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { TitleAnnotationId } from 'effect/SchemaAST';
|
|
6
6
|
|
|
7
7
|
import { SpaceSchema } from '@dxos/client/echo';
|
|
8
|
-
import {
|
|
8
|
+
import { S } from '@dxos/echo-schema';
|
|
9
|
+
import { ScriptType } from '@dxos/functions/types';
|
|
9
10
|
import { EditorInputMode } from '@dxos/react-ui-editor';
|
|
10
11
|
|
|
11
12
|
import { SCRIPT_PLUGIN } from './meta';
|
|
@@ -16,27 +17,27 @@ export { SCRIPT_PLUGIN };
|
|
|
16
17
|
export namespace ScriptAction {
|
|
17
18
|
const SCRIPT_ACTION = `${SCRIPT_PLUGIN}/action`;
|
|
18
19
|
|
|
19
|
-
export const CreateScriptSchema =
|
|
20
|
-
name:
|
|
20
|
+
export const CreateScriptSchema = S.Struct({
|
|
21
|
+
name: S.optional(S.String),
|
|
21
22
|
// TODO(wittjosiah): Placeholder annotation?
|
|
22
|
-
gistUrl:
|
|
23
|
-
initialTemplateId:
|
|
23
|
+
gistUrl: S.optional(S.String.annotations({ [TitleAnnotationId]: 'Import from Gist (url)' })),
|
|
24
|
+
initialTemplateId: S.optional(S.String),
|
|
24
25
|
});
|
|
25
26
|
|
|
26
|
-
export type CreateScriptProps =
|
|
27
|
+
export type CreateScriptProps = S.Schema.Type<typeof CreateScriptSchema>;
|
|
27
28
|
|
|
28
|
-
export class Create extends
|
|
29
|
-
input:
|
|
30
|
-
output:
|
|
29
|
+
export class Create extends S.TaggedClass<Create>()(`${SCRIPT_ACTION}/create`, {
|
|
30
|
+
input: S.extend(CreateScriptSchema, S.Struct({ space: SpaceSchema })),
|
|
31
|
+
output: S.Struct({
|
|
31
32
|
object: ScriptType,
|
|
32
33
|
}),
|
|
33
34
|
}) {}
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
export const ScriptSettingsSchema =
|
|
37
|
-
|
|
37
|
+
export const ScriptSettingsSchema = S.mutable(
|
|
38
|
+
S.Struct({
|
|
38
39
|
editorInputMode: EditorInputMode,
|
|
39
40
|
}),
|
|
40
41
|
);
|
|
41
42
|
|
|
42
|
-
export type ScriptSettingsProps =
|
|
43
|
+
export type ScriptSettingsProps = S.Schema.Type<typeof ScriptSettingsSchema>;
|
package/src/util/deploy.ts
CHANGED
|
@@ -7,13 +7,13 @@ import {
|
|
|
7
7
|
FunctionType,
|
|
8
8
|
type ScriptType,
|
|
9
9
|
getUserFunctionUrlInMetadata,
|
|
10
|
-
|
|
10
|
+
incrementSemverPatch,
|
|
11
11
|
setUserFunctionUrlInMetadata,
|
|
12
|
+
uploadWorkerFunction,
|
|
12
13
|
} from '@dxos/functions';
|
|
13
14
|
import { Bundler } from '@dxos/functions/bundler';
|
|
14
|
-
import { incrementSemverPatch, uploadWorkerFunction } from '@dxos/functions/edge';
|
|
15
15
|
import { log } from '@dxos/log';
|
|
16
|
-
import {
|
|
16
|
+
import { create, getMeta, makeRef, type Space } from '@dxos/react-client/echo';
|
|
17
17
|
|
|
18
18
|
import { updateFunctionMetadata } from './functions';
|
|
19
19
|
|
|
@@ -57,7 +57,7 @@ export const deployScript = async ({
|
|
|
57
57
|
|
|
58
58
|
const { functionId, version, meta } = await uploadWorkerFunction({
|
|
59
59
|
client,
|
|
60
|
-
|
|
60
|
+
spaceId: space.id,
|
|
61
61
|
version: fn ? incrementSemverPatch(fn.version) : '0.0.1',
|
|
62
62
|
functionId: existingFunctionId,
|
|
63
63
|
source: bundle,
|
|
@@ -71,7 +71,7 @@ export const deployScript = async ({
|
|
|
71
71
|
script.changed = false;
|
|
72
72
|
updateFunctionMetadata(script, storedFunction, meta, functionId);
|
|
73
73
|
|
|
74
|
-
const functionUrl = makeFunctionUrl(
|
|
74
|
+
const functionUrl = makeFunctionUrl(space.id, functionId);
|
|
75
75
|
setUserFunctionUrlInMetadata(getMeta(storedFunction), functionUrl);
|
|
76
76
|
|
|
77
77
|
return { success: true, functionUrl };
|
|
@@ -117,6 +117,10 @@ const createOrUpdateFunctionInSpace = (
|
|
|
117
117
|
fn.version = version;
|
|
118
118
|
return fn;
|
|
119
119
|
} else {
|
|
120
|
-
return space.db.add(
|
|
120
|
+
return space.db.add(create(FunctionType, { name: functionId, version, source: makeRef(script) }));
|
|
121
121
|
}
|
|
122
122
|
};
|
|
123
|
+
|
|
124
|
+
const makeFunctionUrl = (spaceId: string, functionId: string): string => {
|
|
125
|
+
return `/${spaceId}/${functionId}`;
|
|
126
|
+
};
|