@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.
Files changed (236) hide show
  1. package/dist/lib/browser/DeploymentDialog-AEPYJKPO.mjs +12 -0
  2. package/dist/lib/browser/{ScriptContainer-6DYV7D65.mjs → ScriptContainer-R25PRK2D.mjs} +19 -31
  3. package/dist/lib/browser/ScriptContainer-R25PRK2D.mjs.map +7 -0
  4. package/dist/lib/browser/{app-graph-builder-BFBTQPSP.mjs → app-graph-builder-RRLY67QC.mjs} +10 -10
  5. package/dist/lib/browser/app-graph-builder-RRLY67QC.mjs.map +7 -0
  6. package/dist/lib/browser/{artifact-definition-PD4UAAQZ.mjs → artifact-definition-WXFYD2V5.mjs} +38 -44
  7. package/dist/lib/browser/artifact-definition-WXFYD2V5.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-BONEXAIK.mjs → chunk-2CGZFDCR.mjs} +10 -10
  9. package/dist/lib/browser/chunk-2CGZFDCR.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-A4VOGQ2P.mjs → chunk-4VD3K3PY.mjs} +2 -2
  11. package/dist/lib/browser/{chunk-YNOCAJYT.mjs → chunk-CSZXPLYY.mjs} +3 -3
  12. package/dist/lib/browser/chunk-CSZXPLYY.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-FFDJENAN.mjs → chunk-KLEOGVXY.mjs} +156 -87
  14. package/dist/lib/browser/chunk-KLEOGVXY.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-INL55MFV.mjs → chunk-MQZQB5VD.mjs} +10 -10
  16. package/dist/lib/browser/chunk-MQZQB5VD.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-R2CHVWJ2.mjs +41 -0
  18. package/dist/lib/browser/chunk-R2CHVWJ2.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-SUCBNCEQ.mjs +87 -0
  20. package/dist/lib/browser/chunk-SUCBNCEQ.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-KJMVDGRB.mjs → chunk-WSK3YQXI.mjs} +1 -2
  22. package/dist/lib/browser/{chunk-KJMVDGRB.mjs.map → chunk-WSK3YQXI.mjs.map} +2 -2
  23. package/dist/lib/browser/{compiler-O4FJK7RR.mjs → compiler-56LTBEQB.mjs} +3 -3
  24. package/dist/lib/browser/index.mjs +15 -16
  25. package/dist/lib/browser/index.mjs.map +3 -3
  26. package/dist/lib/browser/{intent-resolver-SXO6X6XQ.mjs → intent-resolver-WCVXKRBR.mjs} +14 -14
  27. package/dist/lib/browser/intent-resolver-WCVXKRBR.mjs.map +7 -0
  28. package/dist/lib/browser/meta.json +1 -1
  29. package/dist/lib/browser/{react-surface-TZGE7EGC.mjs → react-surface-WXZVPNGI.mjs} +12 -12
  30. package/dist/lib/browser/react-surface-WXZVPNGI.mjs.map +7 -0
  31. package/dist/lib/browser/{settings-EOKSUGB6.mjs → settings-Z7B37V2I.mjs} +5 -5
  32. package/dist/lib/browser/settings-Z7B37V2I.mjs.map +7 -0
  33. package/dist/lib/browser/types.mjs +2 -2
  34. package/dist/lib/node/{DeploymentDialog-43SI7XFL.cjs → DeploymentDialog-O4MU4OMF.cjs} +10 -10
  35. package/dist/lib/node/DeploymentDialog-O4MU4OMF.cjs.map +7 -0
  36. package/dist/lib/node/{ScriptContainer-H56OW5FC.cjs → ScriptContainer-5KY6ZOQD.cjs} +22 -32
  37. package/dist/lib/node/ScriptContainer-5KY6ZOQD.cjs.map +7 -0
  38. package/dist/lib/node/{app-graph-builder-IKOX7GHW.cjs → app-graph-builder-6I2BWD46.cjs} +17 -17
  39. package/dist/lib/node/app-graph-builder-6I2BWD46.cjs.map +7 -0
  40. package/dist/lib/node/{artifact-definition-C644EAYM.cjs → artifact-definition-6NVXEHJD.cjs} +47 -53
  41. package/dist/lib/node/artifact-definition-6NVXEHJD.cjs.map +7 -0
  42. package/dist/lib/node/{chunk-VHSIOCS5.cjs → chunk-65MIJR3Q.cjs} +17 -17
  43. package/dist/lib/node/chunk-65MIJR3Q.cjs.map +7 -0
  44. package/dist/lib/node/{chunk-7NNN3IUQ.cjs → chunk-F4DP7WON.cjs} +160 -93
  45. package/dist/lib/node/chunk-F4DP7WON.cjs.map +7 -0
  46. package/dist/lib/node/{chunk-KFJQVOGS.cjs → chunk-JICWAOWZ.cjs} +6 -6
  47. package/dist/lib/node/{chunk-HPBQHRM3.cjs → chunk-SLDJM45C.cjs} +18 -18
  48. package/dist/lib/node/chunk-SLDJM45C.cjs.map +7 -0
  49. package/dist/lib/node/{chunk-K7PPLRVQ.cjs → chunk-VYBEBLDO.cjs} +14 -14
  50. package/dist/lib/node/chunk-VYBEBLDO.cjs.map +7 -0
  51. package/dist/lib/node/chunk-X7MHLHHS.cjs +91 -0
  52. package/dist/lib/node/chunk-X7MHLHHS.cjs.map +7 -0
  53. package/dist/lib/node/{chunk-SXJGHLK6.cjs → chunk-XFZPWFEG.cjs} +19 -18
  54. package/dist/lib/node/chunk-XFZPWFEG.cjs.map +7 -0
  55. package/dist/lib/node/{chunk-NO5Y74F3.cjs → chunk-YJQZHKKA.cjs} +4 -5
  56. package/dist/lib/node/{chunk-NO5Y74F3.cjs.map → chunk-YJQZHKKA.cjs.map} +2 -2
  57. package/dist/lib/node/{compiler-FBC6ELQN.cjs → compiler-W2RU3M7U.cjs} +7 -7
  58. package/dist/lib/node/index.cjs +44 -45
  59. package/dist/lib/node/index.cjs.map +3 -3
  60. package/dist/lib/node/{intent-resolver-PDSMZM2T.cjs → intent-resolver-J4NBDNFH.cjs} +21 -21
  61. package/dist/lib/node/intent-resolver-J4NBDNFH.cjs.map +7 -0
  62. package/dist/lib/node/meta.json +1 -1
  63. package/dist/lib/node/{react-surface-BHHJQZ7P.cjs → react-surface-27KTUBIZ.cjs} +38 -38
  64. package/dist/lib/node/react-surface-27KTUBIZ.cjs.map +7 -0
  65. package/dist/lib/node/{settings-425QHVGC.cjs → settings-EI6VPNKN.cjs} +9 -9
  66. package/dist/lib/node/settings-EI6VPNKN.cjs.map +7 -0
  67. package/dist/lib/node/types.cjs +5 -5
  68. package/dist/lib/node/types.cjs.map +1 -1
  69. package/dist/lib/node-esm/{DeploymentDialog-2RRUJEBC.mjs → DeploymentDialog-SSQSWLHX.mjs} +5 -5
  70. package/dist/lib/node-esm/{ScriptContainer-762FHDZ4.mjs → ScriptContainer-W2F4FGDV.mjs} +19 -31
  71. package/dist/lib/node-esm/ScriptContainer-W2F4FGDV.mjs.map +7 -0
  72. package/dist/lib/node-esm/{app-graph-builder-KZGKGSP6.mjs → app-graph-builder-H5XLRVX3.mjs} +10 -10
  73. package/dist/lib/node-esm/app-graph-builder-H5XLRVX3.mjs.map +7 -0
  74. package/dist/lib/node-esm/{artifact-definition-J6UM6BQF.mjs → artifact-definition-KQ64AYBP.mjs} +38 -44
  75. package/dist/lib/node-esm/artifact-definition-KQ64AYBP.mjs.map +7 -0
  76. package/dist/lib/node-esm/{chunk-A3TXZHGD.mjs → chunk-4MTPYMV2.mjs} +10 -10
  77. package/dist/lib/node-esm/chunk-4MTPYMV2.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-HKJUN636.mjs → chunk-EB5DSAD4.mjs} +2 -2
  79. package/dist/lib/node-esm/{chunk-F47OE6ZM.mjs → chunk-F4HA5C34.mjs} +10 -10
  80. package/dist/lib/node-esm/chunk-F4HA5C34.mjs.map +7 -0
  81. package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs → chunk-FDEAVT67.mjs} +1 -2
  82. package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs.map → chunk-FDEAVT67.mjs.map} +2 -2
  83. package/dist/lib/node-esm/{chunk-V733VFCJ.mjs → chunk-MU3JKVL2.mjs} +3 -3
  84. package/dist/lib/node-esm/chunk-MU3JKVL2.mjs.map +7 -0
  85. package/dist/lib/node-esm/{chunk-NYA7KDN6.mjs → chunk-PBGVTGL2.mjs} +156 -87
  86. package/dist/lib/node-esm/chunk-PBGVTGL2.mjs.map +7 -0
  87. package/dist/lib/node-esm/chunk-QDYGTY4L.mjs +89 -0
  88. package/dist/lib/node-esm/chunk-QDYGTY4L.mjs.map +7 -0
  89. package/dist/lib/node-esm/{chunk-VMQPOPKV.mjs → chunk-RW2APVMV.mjs} +14 -13
  90. package/dist/lib/node-esm/chunk-RW2APVMV.mjs.map +7 -0
  91. package/dist/lib/node-esm/{compiler-3NG4T5LH.mjs → compiler-VT5C2Z3T.mjs} +3 -3
  92. package/dist/lib/node-esm/index.mjs +15 -16
  93. package/dist/lib/node-esm/index.mjs.map +3 -3
  94. package/dist/lib/node-esm/{intent-resolver-WSAVLQY5.mjs → intent-resolver-PDZ2A26X.mjs} +14 -14
  95. package/dist/lib/node-esm/intent-resolver-PDZ2A26X.mjs.map +7 -0
  96. package/dist/lib/node-esm/meta.json +1 -1
  97. package/dist/lib/node-esm/{react-surface-W7BM4PDK.mjs → react-surface-UCUVDVSH.mjs} +12 -12
  98. package/dist/lib/node-esm/react-surface-UCUVDVSH.mjs.map +7 -0
  99. package/dist/lib/node-esm/{settings-BWSKKIVQ.mjs → settings-HU5UEFRF.mjs} +5 -5
  100. package/dist/lib/node-esm/settings-HU5UEFRF.mjs.map +7 -0
  101. package/dist/lib/node-esm/types.mjs +2 -2
  102. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/app-graph-builder.d.ts +179 -2
  104. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/index.d.ts +177 -1
  107. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  108. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +2 -2
  109. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  110. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  111. package/dist/types/src/components/ScriptContainer.d.ts +1 -1
  112. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  113. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +1 -1
  114. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  115. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +1 -1
  116. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  117. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  118. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  119. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  120. package/dist/types/src/components/index.d.ts +1 -1
  121. package/dist/types/src/hooks/deploy.d.ts +19 -22
  122. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  123. package/dist/types/src/hooks/format.d.ts +5 -2
  124. package/dist/types/src/hooks/format.d.ts.map +1 -1
  125. package/dist/types/src/hooks/index.d.ts +1 -0
  126. package/dist/types/src/hooks/index.d.ts.map +1 -1
  127. package/dist/types/src/hooks/template.d.ts +5 -2
  128. package/dist/types/src/hooks/template.d.ts.map +1 -1
  129. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  130. package/dist/types/src/hooks/useToolbarAction.d.ts +13 -0
  131. package/dist/types/src/hooks/useToolbarAction.d.ts.map +1 -0
  132. package/dist/types/src/hooks/useToolbarState.d.ts +1 -1
  133. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  134. package/dist/types/src/meta.d.ts.map +1 -1
  135. package/dist/types/src/templates/chat.d.ts +1 -1
  136. package/dist/types/src/templates/chat.d.ts.map +1 -1
  137. package/dist/types/src/templates/chess.d.ts.map +1 -1
  138. package/dist/types/src/templates/data-generator.d.ts +7 -0
  139. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  140. package/dist/types/src/templates/discord.d.ts.map +1 -1
  141. package/dist/types/src/templates/echo.d.ts +1 -1
  142. package/dist/types/src/templates/echo.d.ts.map +1 -1
  143. package/dist/types/src/templates/email.d.ts +1 -1
  144. package/dist/types/src/templates/email.d.ts.map +1 -1
  145. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  146. package/dist/types/src/templates/forex.d.ts.map +1 -1
  147. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  148. package/dist/types/src/translations.d.ts +110 -2
  149. package/dist/types/src/translations.d.ts.map +1 -1
  150. package/dist/types/src/types.d.ts +26 -27
  151. package/dist/types/src/types.d.ts.map +1 -1
  152. package/dist/types/src/util/deploy.d.ts.map +1 -1
  153. package/dist/types/src/util/functions.d.ts.map +1 -1
  154. package/dist/types/tsconfig.tsbuildinfo +1 -1
  155. package/package.json +50 -56
  156. package/src/ScriptPlugin.tsx +2 -4
  157. package/src/capabilities/app-graph-builder.ts +29 -46
  158. package/src/capabilities/artifact-definition.ts +32 -35
  159. package/src/capabilities/intent-resolver.ts +7 -7
  160. package/src/capabilities/react-surface.tsx +5 -5
  161. package/src/capabilities/settings.ts +2 -2
  162. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +1 -1
  163. package/src/components/DeploymentDialog/DeploymentDialog.tsx +2 -2
  164. package/src/components/ScriptContainer.tsx +2 -2
  165. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +1 -1
  166. package/src/components/ScriptToolbar/ScriptToolbar.tsx +10 -16
  167. package/src/components/Settings/ScriptObjectSettings.tsx +5 -5
  168. package/src/hooks/deploy.ts +55 -61
  169. package/src/hooks/format.ts +26 -26
  170. package/src/hooks/index.ts +1 -0
  171. package/src/hooks/template.ts +32 -24
  172. package/src/hooks/useToolbarAction.ts +50 -0
  173. package/src/hooks/useToolbarState.ts +2 -2
  174. package/src/meta.ts +0 -1
  175. package/src/templates/chat.ts +9 -3
  176. package/src/templates/chess.ts +6 -1
  177. package/src/templates/data-generator.ts +45 -20
  178. package/src/templates/discord.ts +10 -10
  179. package/src/templates/echo.ts +12 -1
  180. package/src/templates/email.ts +14 -8
  181. package/src/templates/forex-effect.ts +6 -2
  182. package/src/templates/forex.ts +5 -1
  183. package/src/templates/gmail.ts +26 -33
  184. package/src/translations.ts +1 -1
  185. package/src/types.ts +14 -13
  186. package/src/util/deploy.ts +10 -6
  187. package/dist/lib/browser/DeploymentDialog-W7PY33VN.mjs +0 -12
  188. package/dist/lib/browser/ScriptContainer-6DYV7D65.mjs.map +0 -7
  189. package/dist/lib/browser/app-graph-builder-BFBTQPSP.mjs.map +0 -7
  190. package/dist/lib/browser/artifact-definition-PD4UAAQZ.mjs.map +0 -7
  191. package/dist/lib/browser/chunk-6MLJJI73.mjs +0 -40
  192. package/dist/lib/browser/chunk-6MLJJI73.mjs.map +0 -7
  193. package/dist/lib/browser/chunk-BONEXAIK.mjs.map +0 -7
  194. package/dist/lib/browser/chunk-FFDJENAN.mjs.map +0 -7
  195. package/dist/lib/browser/chunk-INL55MFV.mjs.map +0 -7
  196. package/dist/lib/browser/chunk-RTVU4RZW.mjs +0 -87
  197. package/dist/lib/browser/chunk-RTVU4RZW.mjs.map +0 -7
  198. package/dist/lib/browser/chunk-YNOCAJYT.mjs.map +0 -7
  199. package/dist/lib/browser/intent-resolver-SXO6X6XQ.mjs.map +0 -7
  200. package/dist/lib/browser/react-surface-TZGE7EGC.mjs.map +0 -7
  201. package/dist/lib/browser/settings-EOKSUGB6.mjs.map +0 -7
  202. package/dist/lib/node/DeploymentDialog-43SI7XFL.cjs.map +0 -7
  203. package/dist/lib/node/ScriptContainer-H56OW5FC.cjs.map +0 -7
  204. package/dist/lib/node/app-graph-builder-IKOX7GHW.cjs.map +0 -7
  205. package/dist/lib/node/artifact-definition-C644EAYM.cjs.map +0 -7
  206. package/dist/lib/node/chunk-7NNN3IUQ.cjs.map +0 -7
  207. package/dist/lib/node/chunk-HPBQHRM3.cjs.map +0 -7
  208. package/dist/lib/node/chunk-K7PPLRVQ.cjs.map +0 -7
  209. package/dist/lib/node/chunk-SXJGHLK6.cjs.map +0 -7
  210. package/dist/lib/node/chunk-VHSIOCS5.cjs.map +0 -7
  211. package/dist/lib/node/chunk-VNSZBEJW.cjs +0 -91
  212. package/dist/lib/node/chunk-VNSZBEJW.cjs.map +0 -7
  213. package/dist/lib/node/intent-resolver-PDSMZM2T.cjs.map +0 -7
  214. package/dist/lib/node/react-surface-BHHJQZ7P.cjs.map +0 -7
  215. package/dist/lib/node/settings-425QHVGC.cjs.map +0 -7
  216. package/dist/lib/node-esm/ScriptContainer-762FHDZ4.mjs.map +0 -7
  217. package/dist/lib/node-esm/app-graph-builder-KZGKGSP6.mjs.map +0 -7
  218. package/dist/lib/node-esm/artifact-definition-J6UM6BQF.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-A3TXZHGD.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-F47OE6ZM.mjs.map +0 -7
  221. package/dist/lib/node-esm/chunk-NYA7KDN6.mjs.map +0 -7
  222. package/dist/lib/node-esm/chunk-V733VFCJ.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-VMQPOPKV.mjs.map +0 -7
  224. package/dist/lib/node-esm/chunk-YCTECQLY.mjs +0 -89
  225. package/dist/lib/node-esm/chunk-YCTECQLY.mjs.map +0 -7
  226. package/dist/lib/node-esm/intent-resolver-WSAVLQY5.mjs.map +0 -7
  227. package/dist/lib/node-esm/react-surface-W7BM4PDK.mjs.map +0 -7
  228. package/dist/lib/node-esm/settings-BWSKKIVQ.mjs.map +0 -7
  229. /package/dist/lib/browser/{DeploymentDialog-W7PY33VN.mjs.map → DeploymentDialog-AEPYJKPO.mjs.map} +0 -0
  230. /package/dist/lib/browser/{chunk-A4VOGQ2P.mjs.map → chunk-4VD3K3PY.mjs.map} +0 -0
  231. /package/dist/lib/browser/{compiler-O4FJK7RR.mjs.map → compiler-56LTBEQB.mjs.map} +0 -0
  232. /package/dist/lib/node/{chunk-KFJQVOGS.cjs.map → chunk-JICWAOWZ.cjs.map} +0 -0
  233. /package/dist/lib/node/{compiler-FBC6ELQN.cjs.map → compiler-W2RU3M7U.cjs.map} +0 -0
  234. /package/dist/lib/node-esm/{DeploymentDialog-2RRUJEBC.mjs.map → DeploymentDialog-SSQSWLHX.mjs.map} +0 -0
  235. /package/dist/lib/node-esm/{chunk-HKJUN636.mjs.map → chunk-EB5DSAD4.mjs.map} +0 -0
  236. /package/dist/lib/node-esm/{compiler-3NG4T5LH.mjs.map → compiler-VT5C2Z3T.mjs.map} +0 -0
@@ -2,7 +2,9 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { FUNCTIONS_PRESET_META_KEY, type ScriptType } from '@dxos/functions';
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 = (script: ScriptType) => {
23
+ const createTemplateSelectActions = () => {
22
24
  return templates.map((template) => {
23
- return createMenuAction<TemplateActionProperties>(
24
- `template--${template.id}`,
25
- () => {
26
- script.name = template.name;
27
- script.source!.target!.content = template.source;
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 = (script: ScriptType) => {
33
+ export const createTemplateSelect = () => {
47
34
  const templateSelectGroup = createTemplateSelectGroup();
48
- const templateSelectActions = createTemplateSelectActions(script);
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 { live } from '@dxos/live-object';
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(() => live<ScriptToolbarState>(initialState), []);
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
  };
@@ -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 ({ data: { bodyText }, context: { space, ai } }: any) => {
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(bodyText);
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
- ${bodyText}
32
+ ${textBody}
27
33
  `,
28
34
  });
29
35
  return new Response(transformServerSentEvents(answer));
@@ -25,7 +25,12 @@ export default defineFunction({
25
25
  }),
26
26
  }),
27
27
 
28
- handler: async ({ data: { changedObjectId, player = 'b' }, context: { space } }: any) => {
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 { defineFunction, S, create, Expando } from 'dxos:functions';
7
- // @ts-ignore
8
- import { randText } from 'https://esm.sh/@ngneat/falso@7.1.1';
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 ({ data: { documentAmount = 1, textSize = 10, mutationAmount = 0 }, context: { space } }: any) => {
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
- // Create objects.
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
- create(Expando, {
51
+ createStatic(Expando, {
28
52
  name: 'scriptGenerated',
29
- content: randText({ charCount: textSize }),
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
- // Flush and wait for data to propagate.
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
- await new Promise((resolve) => setTimeout(resolve, 10_000));
46
- return result;
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
  });
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  // @ts-ignore
6
- import { create, defineFunction, DXN, EchoObject, Filter, ObjectId, S } from 'dxos:functions';
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: ObjectId,
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: ({ data: { channelId, queueId, after = DEFAULT_AFTER, pageSize = 5 }, context: { space } }: any) =>
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
- create(MessageSchema, {
76
+ createStatic(MessageSchema, {
77
77
  id: ObjectId.random(),
78
78
  foreignId: message.id,
79
79
  from: message.author.username,
@@ -5,4 +5,15 @@
5
5
  /**
6
6
  * Echos the request data.
7
7
  */
8
- export default async ({ data }: any) => data;
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
+ };
@@ -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 ({ data: { bodyText }, context: { space } }: any) => {
10
- const { email, targetDocumentId: documentId } = JSON.parse(bodyText) as RequestPayload;
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:** ${email.from}`,
21
- `**Subject:** ${email.subject}`,
22
- `**Date:** ${email.created}`,
26
+ `**From:** ${data.from}`,
27
+ `**Subject:** ${data.subject}`,
28
+ `**Date:** ${data.created}`,
23
29
  '',
24
- email.body,
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
- email: { from: string; subject: string; created: string; body: string };
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 { S, defineFunction } from 'dxos:functions';
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 ({ data: { from, to } }: any) =>
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,
@@ -13,7 +13,11 @@ export default defineFunction({
13
13
  to: S.String.annotations({ description: 'The target currency' }),
14
14
  }),
15
15
 
16
- handler: async ({ data: { from, to } }: any) => {
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 },
@@ -3,8 +3,7 @@
3
3
  //
4
4
 
5
5
  // @ts-ignore
6
- import { create, defineFunction, EchoObject, Filter, ObjectId, S } from 'dxos:functions';
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: ({ context: { space }, data: { mailboxId, userId, after, pageSize } }: any) =>
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
- // NOTE: Google API bundles size is v. large and caused runtime issues.
43
- const makeRequest = (url: string) =>
45
+ const makeRequest = (path: string) =>
44
46
  pipe(
45
- url,
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
- makeRequest(getUrl(userId, undefined, { q, pageSize, pageToken }));
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, messageId: string) => makeRequest(getUrl(userId, messageId));
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 = create(MessageType, {
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>;
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { ScriptType } from '@dxos/functions';
5
+ import { ScriptType } from '@dxos/functions/types';
6
6
 
7
7
  import { SCRIPT_PLUGIN } from './meta';
8
8
 
package/src/types.ts CHANGED
@@ -2,10 +2,11 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema, SchemaAST } from 'effect';
5
+ import { TitleAnnotationId } from 'effect/SchemaAST';
6
6
 
7
7
  import { SpaceSchema } from '@dxos/client/echo';
8
- import { ScriptType } from '@dxos/functions';
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 = Schema.Struct({
20
- name: Schema.optional(Schema.String),
20
+ export const CreateScriptSchema = S.Struct({
21
+ name: S.optional(S.String),
21
22
  // TODO(wittjosiah): Placeholder annotation?
22
- gistUrl: Schema.optional(Schema.String.annotations({ [SchemaAST.TitleAnnotationId]: 'Import from Gist (url)' })),
23
- initialTemplateId: Schema.optional(Schema.String),
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 = Schema.Schema.Type<typeof CreateScriptSchema>;
27
+ export type CreateScriptProps = S.Schema.Type<typeof CreateScriptSchema>;
27
28
 
28
- export class Create extends Schema.TaggedClass<Create>()(`${SCRIPT_ACTION}/create`, {
29
- input: Schema.extend(CreateScriptSchema, Schema.Struct({ space: SpaceSchema })),
30
- output: Schema.Struct({
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 = Schema.mutable(
37
- Schema.Struct({
37
+ export const ScriptSettingsSchema = S.mutable(
38
+ S.Struct({
38
39
  editorInputMode: EditorInputMode,
39
40
  }),
40
41
  );
41
42
 
42
- export type ScriptSettingsProps = Schema.Schema.Type<typeof ScriptSettingsSchema>;
43
+ export type ScriptSettingsProps = S.Schema.Type<typeof ScriptSettingsSchema>;
@@ -7,13 +7,13 @@ import {
7
7
  FunctionType,
8
8
  type ScriptType,
9
9
  getUserFunctionUrlInMetadata,
10
- makeFunctionUrl,
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 { live, getMeta, makeRef, type Space } from '@dxos/react-client/echo';
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
- ownerPublicKey: space.key,
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({ functionId });
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(live(FunctionType, { name: functionId, version, source: makeRef(script) }));
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
+ };