@dxos/plugin-script 0.8.2-main.f11618f → 0.8.2-staging.42af850

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 (241) hide show
  1. package/dist/lib/browser/DeploymentDialog-NLWQHNKE.mjs +12 -0
  2. package/dist/lib/browser/ScriptContainer-Q2K5FJSC.mjs +272 -0
  3. package/dist/lib/browser/ScriptContainer-Q2K5FJSC.mjs.map +7 -0
  4. package/dist/lib/browser/{app-graph-builder-2GIBRQLV.mjs → app-graph-builder-V3HPXJAD.mjs} +10 -10
  5. package/dist/lib/browser/app-graph-builder-V3HPXJAD.mjs.map +7 -0
  6. package/dist/lib/browser/{artifact-definition-OEDM2SCN.mjs → artifact-definition-L3AIY4XA.mjs} +44 -47
  7. package/dist/lib/browser/artifact-definition-L3AIY4XA.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-SXS6PUU5.mjs → chunk-6T64VQHF.mjs} +7 -6
  9. package/dist/lib/browser/chunk-6T64VQHF.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-KJMVDGRB.mjs → chunk-6ZHHWU6S.mjs} +3 -3
  11. package/dist/lib/browser/{chunk-KJMVDGRB.mjs.map → chunk-6ZHHWU6S.mjs.map} +1 -1
  12. package/dist/lib/browser/chunk-74DEDPHT.mjs +530 -0
  13. package/dist/lib/browser/chunk-74DEDPHT.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-BTEFFA4C.mjs +153 -0
  15. package/dist/lib/browser/chunk-BTEFFA4C.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-EGDYE5MW.mjs → chunk-JQOAZJTK.mjs} +85 -154
  17. package/dist/lib/browser/chunk-JQOAZJTK.mjs.map +7 -0
  18. package/dist/lib/browser/chunk-M6QMJBKQ.mjs +87 -0
  19. package/dist/lib/browser/chunk-M6QMJBKQ.mjs.map +7 -0
  20. package/dist/lib/browser/chunk-WB3X5Z7Q.mjs +40 -0
  21. package/dist/lib/browser/chunk-WB3X5Z7Q.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-A4VOGQ2P.mjs → chunk-YSQMXTYO.mjs} +3 -3
  23. package/dist/lib/{node-esm/chunk-HKJUN636.mjs.map → browser/chunk-YSQMXTYO.mjs.map} +1 -1
  24. package/dist/lib/browser/{compiler-O4FJK7RR.mjs → compiler-W4BYJYTL.mjs} +3 -3
  25. package/dist/lib/browser/compiler-W4BYJYTL.mjs.map +7 -0
  26. package/dist/lib/browser/index.mjs +17 -17
  27. package/dist/lib/browser/index.mjs.map +3 -3
  28. package/dist/lib/browser/{intent-resolver-C5D6TNPC.mjs → intent-resolver-U5YRUE7W.mjs} +12 -12
  29. package/dist/lib/browser/intent-resolver-U5YRUE7W.mjs.map +7 -0
  30. package/dist/lib/browser/meta.json +1 -1
  31. package/dist/lib/browser/{react-surface-XJCN7XXF.mjs → react-surface-3MSPT54G.mjs} +12 -12
  32. package/dist/lib/browser/react-surface-3MSPT54G.mjs.map +7 -0
  33. package/dist/lib/browser/{settings-NK4XVS2E.mjs → settings-FU7NTENS.mjs} +3 -3
  34. package/dist/lib/browser/types.mjs +2 -2
  35. package/dist/lib/node/{DeploymentDialog-NUKZNILK.cjs → DeploymentDialog-PC5AL3BB.cjs} +10 -10
  36. package/dist/lib/node/DeploymentDialog-PC5AL3BB.cjs.map +7 -0
  37. package/dist/lib/node/ScriptContainer-56SH6R24.cjs +289 -0
  38. package/dist/lib/node/ScriptContainer-56SH6R24.cjs.map +7 -0
  39. package/dist/lib/node/{app-graph-builder-LNI22TZF.cjs → app-graph-builder-YE4OM4OC.cjs} +17 -17
  40. package/dist/lib/node/app-graph-builder-YE4OM4OC.cjs.map +7 -0
  41. package/dist/lib/node/{artifact-definition-SEGATFNH.cjs → artifact-definition-6BD6CVOV.cjs} +55 -58
  42. package/dist/lib/node/artifact-definition-6BD6CVOV.cjs.map +7 -0
  43. package/dist/lib/node/chunk-5LHP5EUJ.cjs +557 -0
  44. package/dist/lib/node/chunk-5LHP5EUJ.cjs.map +7 -0
  45. package/dist/lib/node/chunk-BYLHJ26I.cjs +91 -0
  46. package/dist/lib/node/chunk-BYLHJ26I.cjs.map +7 -0
  47. package/dist/lib/node/{chunk-PGEGRJP3.cjs → chunk-HCRW6T3G.cjs} +19 -20
  48. package/dist/lib/node/chunk-HCRW6T3G.cjs.map +7 -0
  49. package/dist/lib/node/{chunk-UUGLBCMY.cjs → chunk-NRZJV5SV.cjs} +93 -160
  50. package/dist/lib/node/chunk-NRZJV5SV.cjs.map +7 -0
  51. package/dist/lib/node/{chunk-NO5Y74F3.cjs → chunk-QG2X6J74.cjs} +6 -6
  52. package/dist/lib/node/{chunk-NO5Y74F3.cjs.map → chunk-QG2X6J74.cjs.map} +1 -1
  53. package/dist/lib/node/chunk-RARNZD62.cjs +179 -0
  54. package/dist/lib/node/chunk-RARNZD62.cjs.map +7 -0
  55. package/dist/lib/node/{chunk-DSFCLQ5F.cjs → chunk-V6L73D7S.cjs} +12 -11
  56. package/dist/lib/node/chunk-V6L73D7S.cjs.map +7 -0
  57. package/dist/lib/node/{chunk-KFJQVOGS.cjs → chunk-ZEV3VARQ.cjs} +7 -7
  58. package/dist/lib/node/{chunk-KFJQVOGS.cjs.map → chunk-ZEV3VARQ.cjs.map} +1 -1
  59. package/dist/lib/node/{compiler-FBC6ELQN.cjs → compiler-TFSJRLL4.cjs} +7 -7
  60. package/dist/lib/node/{compiler-FBC6ELQN.cjs.map → compiler-TFSJRLL4.cjs.map} +3 -3
  61. package/dist/lib/node/index.cjs +45 -45
  62. package/dist/lib/node/index.cjs.map +3 -3
  63. package/dist/lib/node/{intent-resolver-BQPBRVHM.cjs → intent-resolver-7SF26VGC.cjs} +21 -21
  64. package/dist/lib/node/intent-resolver-7SF26VGC.cjs.map +7 -0
  65. package/dist/lib/node/meta.json +1 -1
  66. package/dist/lib/node/{react-surface-5XHS5WYW.cjs → react-surface-L6RS7BT2.cjs} +38 -38
  67. package/dist/lib/node/react-surface-L6RS7BT2.cjs.map +7 -0
  68. package/dist/lib/node/{settings-7PVJBWC4.cjs → settings-RRCQ7ZQD.cjs} +9 -9
  69. package/dist/lib/node/types.cjs +5 -5
  70. package/dist/lib/node/types.cjs.map +1 -1
  71. package/dist/lib/node-esm/{DeploymentDialog-BIXZ5Q57.mjs → DeploymentDialog-QHB2BGNJ.mjs} +5 -5
  72. package/dist/lib/node-esm/ScriptContainer-6RCZ43TI.mjs +273 -0
  73. package/dist/lib/node-esm/ScriptContainer-6RCZ43TI.mjs.map +7 -0
  74. package/dist/lib/node-esm/{app-graph-builder-NNUXXXMZ.mjs → app-graph-builder-4CN7URJQ.mjs} +10 -10
  75. package/dist/lib/node-esm/app-graph-builder-4CN7URJQ.mjs.map +7 -0
  76. package/dist/lib/node-esm/{artifact-definition-5UHIXXHW.mjs → artifact-definition-PPV2XKU7.mjs} +44 -47
  77. package/dist/lib/node-esm/artifact-definition-PPV2XKU7.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-25GOLUXY.mjs +154 -0
  79. package/dist/lib/node-esm/chunk-25GOLUXY.mjs.map +7 -0
  80. package/dist/lib/node-esm/{chunk-HKJUN636.mjs → chunk-2KJYPUQD.mjs} +3 -3
  81. package/dist/lib/{browser/chunk-A4VOGQ2P.mjs.map → node-esm/chunk-2KJYPUQD.mjs.map} +1 -1
  82. package/dist/lib/node-esm/{chunk-TN35DSTF.mjs → chunk-47MABIVX.mjs} +7 -6
  83. package/dist/lib/node-esm/chunk-47MABIVX.mjs.map +7 -0
  84. package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs → chunk-AEB5TPEW.mjs} +3 -3
  85. package/dist/lib/node-esm/{chunk-H7FRB3M7.mjs.map → chunk-AEB5TPEW.mjs.map} +1 -1
  86. package/dist/lib/node-esm/chunk-KOO76P2Y.mjs +531 -0
  87. package/dist/lib/node-esm/chunk-KOO76P2Y.mjs.map +7 -0
  88. package/dist/lib/node-esm/chunk-UESZKXLR.mjs +41 -0
  89. package/dist/lib/node-esm/chunk-UESZKXLR.mjs.map +7 -0
  90. package/dist/lib/node-esm/{chunk-NNQXJQBG.mjs → chunk-WD7OFSM3.mjs} +85 -154
  91. package/dist/lib/node-esm/chunk-WD7OFSM3.mjs.map +7 -0
  92. package/dist/lib/node-esm/chunk-Z44O2YIK.mjs +89 -0
  93. package/dist/lib/node-esm/chunk-Z44O2YIK.mjs.map +7 -0
  94. package/dist/lib/node-esm/{compiler-3NG4T5LH.mjs → compiler-7PQ4D43R.mjs} +3 -3
  95. package/dist/lib/{browser/compiler-O4FJK7RR.mjs.map → node-esm/compiler-7PQ4D43R.mjs.map} +3 -3
  96. package/dist/lib/node-esm/index.mjs +17 -17
  97. package/dist/lib/node-esm/index.mjs.map +3 -3
  98. package/dist/lib/node-esm/{intent-resolver-PPJKPHUQ.mjs → intent-resolver-3APO7YDF.mjs} +12 -12
  99. package/dist/lib/node-esm/intent-resolver-3APO7YDF.mjs.map +7 -0
  100. package/dist/lib/node-esm/meta.json +1 -1
  101. package/dist/lib/node-esm/{react-surface-7ELFL7IO.mjs → react-surface-S5LHD3IA.mjs} +12 -12
  102. package/dist/lib/node-esm/react-surface-S5LHD3IA.mjs.map +7 -0
  103. package/dist/lib/node-esm/{settings-SJYC4JLT.mjs → settings-NKNC32QC.mjs} +3 -3
  104. package/dist/lib/node-esm/types.mjs +2 -2
  105. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  106. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/index.d.ts +1 -177
  109. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  110. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  111. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts +2 -2
  112. package/dist/types/src/components/DeploymentDialog/DeploymentDialog.d.ts.map +1 -1
  113. package/dist/types/src/components/FrameContainer/FrameContainer.d.ts.map +1 -1
  114. package/dist/types/src/components/ScriptContainer.d.ts +1 -1
  115. package/dist/types/src/components/ScriptContainer.d.ts.map +1 -1
  116. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts +1 -1
  117. package/dist/types/src/components/ScriptToolbar/ScriptToolbar.d.ts.map +1 -1
  118. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts +1 -1
  119. package/dist/types/src/components/Settings/ScriptObjectSettings.d.ts.map +1 -1
  120. package/dist/types/src/components/Settings/ScriptPluginSettings.d.ts.map +1 -1
  121. package/dist/types/src/components/TestPanel/TestPanel.d.ts.map +1 -1
  122. package/dist/types/src/components/TypescriptEditor/TypescriptEditor.d.ts.map +1 -1
  123. package/dist/types/src/components/index.d.ts +1 -1
  124. package/dist/types/src/hooks/deploy.d.ts +22 -19
  125. package/dist/types/src/hooks/deploy.d.ts.map +1 -1
  126. package/dist/types/src/hooks/format.d.ts +2 -5
  127. package/dist/types/src/hooks/format.d.ts.map +1 -1
  128. package/dist/types/src/hooks/index.d.ts +0 -1
  129. package/dist/types/src/hooks/index.d.ts.map +1 -1
  130. package/dist/types/src/hooks/template.d.ts +2 -5
  131. package/dist/types/src/hooks/template.d.ts.map +1 -1
  132. package/dist/types/src/hooks/useCreateAndDeployScriptTemplates.d.ts.map +1 -1
  133. package/dist/types/src/hooks/useToolbarState.d.ts.map +1 -1
  134. package/dist/types/src/templates/chat.d.ts +1 -1
  135. package/dist/types/src/templates/chat.d.ts.map +1 -1
  136. package/dist/types/src/templates/chess.d.ts.map +1 -1
  137. package/dist/types/src/templates/data-generator.d.ts.map +1 -1
  138. package/dist/types/src/templates/discord.d.ts.map +1 -1
  139. package/dist/types/src/templates/echo.d.ts +1 -1
  140. package/dist/types/src/templates/echo.d.ts.map +1 -1
  141. package/dist/types/src/templates/email.d.ts +1 -1
  142. package/dist/types/src/templates/email.d.ts.map +1 -1
  143. package/dist/types/src/templates/forex-effect.d.ts.map +1 -1
  144. package/dist/types/src/templates/forex.d.ts.map +1 -1
  145. package/dist/types/src/templates/gmail.d.ts.map +1 -1
  146. package/dist/types/src/translations.d.ts +2 -110
  147. package/dist/types/src/translations.d.ts.map +1 -1
  148. package/dist/types/src/types.d.ts +27 -26
  149. package/dist/types/src/types.d.ts.map +1 -1
  150. package/dist/types/src/util/deploy.d.ts.map +1 -1
  151. package/dist/types/src/util/functions.d.ts.map +1 -1
  152. package/dist/types/tsconfig.tsbuildinfo +1 -1
  153. package/package.json +59 -53
  154. package/src/ScriptPlugin.tsx +3 -3
  155. package/src/capabilities/app-graph-builder.ts +46 -29
  156. package/src/capabilities/artifact-definition.ts +39 -37
  157. package/src/capabilities/intent-resolver.ts +5 -5
  158. package/src/capabilities/react-surface.tsx +5 -5
  159. package/src/compiler/compiler.ts +3 -3
  160. package/src/components/DeploymentDialog/DeploymentDialog.stories.tsx +1 -1
  161. package/src/components/DeploymentDialog/DeploymentDialog.tsx +2 -2
  162. package/src/components/ScriptContainer.tsx +2 -2
  163. package/src/components/ScriptToolbar/ScriptToolbar.stories.tsx +1 -1
  164. package/src/components/ScriptToolbar/ScriptToolbar.tsx +27 -18
  165. package/src/components/Settings/ScriptObjectSettings.tsx +5 -5
  166. package/src/components/TypescriptEditor/TypescriptEditor.tsx +0 -6
  167. package/src/hooks/deploy.ts +61 -55
  168. package/src/hooks/format.ts +26 -26
  169. package/src/hooks/index.ts +0 -1
  170. package/src/hooks/template.ts +24 -32
  171. package/src/meta.ts +2 -2
  172. package/src/templates/chat.ts +4 -10
  173. package/src/templates/chess.ts +2 -7
  174. package/src/templates/data-generator.ts +2 -7
  175. package/src/templates/discord.ts +16 -14
  176. package/src/templates/echo.ts +1 -12
  177. package/src/templates/email.ts +8 -14
  178. package/src/templates/forex-effect.ts +4 -8
  179. package/src/templates/forex.ts +1 -5
  180. package/src/templates/gmail.ts +35 -26
  181. package/src/translations.ts +1 -1
  182. package/src/types.ts +13 -14
  183. package/src/util/deploy.ts +3 -4
  184. package/dist/lib/browser/DeploymentDialog-QEKJ54ZB.mjs +0 -12
  185. package/dist/lib/browser/ScriptContainer-ATBYTIFH.mjs +0 -248
  186. package/dist/lib/browser/ScriptContainer-ATBYTIFH.mjs.map +0 -7
  187. package/dist/lib/browser/app-graph-builder-2GIBRQLV.mjs.map +0 -7
  188. package/dist/lib/browser/artifact-definition-OEDM2SCN.mjs.map +0 -7
  189. package/dist/lib/browser/chunk-EGDYE5MW.mjs.map +0 -7
  190. package/dist/lib/browser/chunk-OZEMT3NO.mjs +0 -147
  191. package/dist/lib/browser/chunk-OZEMT3NO.mjs.map +0 -7
  192. package/dist/lib/browser/chunk-QNXJNXQZ.mjs +0 -480
  193. package/dist/lib/browser/chunk-QNXJNXQZ.mjs.map +0 -7
  194. package/dist/lib/browser/chunk-SXS6PUU5.mjs.map +0 -7
  195. package/dist/lib/browser/chunk-XEPVXV72.mjs +0 -87
  196. package/dist/lib/browser/chunk-XEPVXV72.mjs.map +0 -7
  197. package/dist/lib/browser/chunk-ZFTDU4WS.mjs +0 -41
  198. package/dist/lib/browser/chunk-ZFTDU4WS.mjs.map +0 -7
  199. package/dist/lib/browser/intent-resolver-C5D6TNPC.mjs.map +0 -7
  200. package/dist/lib/browser/react-surface-XJCN7XXF.mjs.map +0 -7
  201. package/dist/lib/node/DeploymentDialog-NUKZNILK.cjs.map +0 -7
  202. package/dist/lib/node/ScriptContainer-OHHMLPUE.cjs +0 -267
  203. package/dist/lib/node/ScriptContainer-OHHMLPUE.cjs.map +0 -7
  204. package/dist/lib/node/app-graph-builder-LNI22TZF.cjs.map +0 -7
  205. package/dist/lib/node/artifact-definition-SEGATFNH.cjs.map +0 -7
  206. package/dist/lib/node/chunk-4K23KEYT.cjs +0 -91
  207. package/dist/lib/node/chunk-4K23KEYT.cjs.map +0 -7
  208. package/dist/lib/node/chunk-DSFCLQ5F.cjs.map +0 -7
  209. package/dist/lib/node/chunk-PGEGRJP3.cjs.map +0 -7
  210. package/dist/lib/node/chunk-PMGWL64F.cjs +0 -173
  211. package/dist/lib/node/chunk-PMGWL64F.cjs.map +0 -7
  212. package/dist/lib/node/chunk-UUGLBCMY.cjs.map +0 -7
  213. package/dist/lib/node/chunk-ZZ4HK5KM.cjs +0 -507
  214. package/dist/lib/node/chunk-ZZ4HK5KM.cjs.map +0 -7
  215. package/dist/lib/node/intent-resolver-BQPBRVHM.cjs.map +0 -7
  216. package/dist/lib/node/react-surface-5XHS5WYW.cjs.map +0 -7
  217. package/dist/lib/node-esm/ScriptContainer-4YWGWPY7.mjs +0 -249
  218. package/dist/lib/node-esm/ScriptContainer-4YWGWPY7.mjs.map +0 -7
  219. package/dist/lib/node-esm/app-graph-builder-NNUXXXMZ.mjs.map +0 -7
  220. package/dist/lib/node-esm/artifact-definition-5UHIXXHW.mjs.map +0 -7
  221. package/dist/lib/node-esm/chunk-4ISQLIIH.mjs +0 -481
  222. package/dist/lib/node-esm/chunk-4ISQLIIH.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-GR4VTXVM.mjs +0 -148
  224. package/dist/lib/node-esm/chunk-GR4VTXVM.mjs.map +0 -7
  225. package/dist/lib/node-esm/chunk-KGYTIL33.mjs +0 -42
  226. package/dist/lib/node-esm/chunk-KGYTIL33.mjs.map +0 -7
  227. package/dist/lib/node-esm/chunk-NNQXJQBG.mjs.map +0 -7
  228. package/dist/lib/node-esm/chunk-TN35DSTF.mjs.map +0 -7
  229. package/dist/lib/node-esm/chunk-X64SI6XO.mjs +0 -89
  230. package/dist/lib/node-esm/chunk-X64SI6XO.mjs.map +0 -7
  231. package/dist/lib/node-esm/compiler-3NG4T5LH.mjs.map +0 -7
  232. package/dist/lib/node-esm/intent-resolver-PPJKPHUQ.mjs.map +0 -7
  233. package/dist/lib/node-esm/react-surface-7ELFL7IO.mjs.map +0 -7
  234. package/dist/types/src/hooks/useToolbarAction.d.ts +0 -13
  235. package/dist/types/src/hooks/useToolbarAction.d.ts.map +0 -1
  236. package/src/hooks/useToolbarAction.ts +0 -50
  237. /package/dist/lib/browser/{DeploymentDialog-QEKJ54ZB.mjs.map → DeploymentDialog-NLWQHNKE.mjs.map} +0 -0
  238. /package/dist/lib/browser/{settings-NK4XVS2E.mjs.map → settings-FU7NTENS.mjs.map} +0 -0
  239. /package/dist/lib/node/{settings-7PVJBWC4.cjs.map → settings-RRCQ7ZQD.cjs.map} +0 -0
  240. /package/dist/lib/node-esm/{DeploymentDialog-BIXZ5Q57.mjs.map → DeploymentDialog-QHB2BGNJ.mjs.map} +0 -0
  241. /package/dist/lib/node-esm/{settings-SJYC4JLT.mjs.map → settings-NKNC32QC.mjs.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  ScriptAction
3
- } from "./chunk-ZFTDU4WS.mjs";
3
+ } from "./chunk-WB3X5Z7Q.mjs";
4
4
 
5
5
  // packages/plugins/plugin-script/src/util/functions.ts
6
6
  import { getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
@@ -59,8 +59,9 @@ var updateFunctionMetadata = (script, storedFunction, meta, functionId) => {
59
59
  };
60
60
 
61
61
  // packages/plugins/plugin-script/src/util/deploy.ts
62
- import { FunctionType, getUserFunctionUrlInMetadata as getUserFunctionUrlInMetadata2, incrementSemverPatch, makeFunctionUrl, setUserFunctionUrlInMetadata, uploadWorkerFunction } from "@dxos/functions";
62
+ import { FunctionType, getUserFunctionUrlInMetadata as getUserFunctionUrlInMetadata2, makeFunctionUrl, setUserFunctionUrlInMetadata } from "@dxos/functions";
63
63
  import { Bundler } from "@dxos/functions/bundler";
64
+ import { incrementSemverPatch, uploadWorkerFunction } from "@dxos/functions/edge";
64
65
  import { log as log2 } from "@dxos/log";
65
66
  import { live, getMeta as getMeta2, makeRef } from "@dxos/react-client/echo";
66
67
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/util/deploy.ts";
@@ -84,7 +85,7 @@ var deployScript = async ({ script, client, space, fn, existingFunctionUrl }) =>
84
85
  }
85
86
  const { functionId, version, meta } = await uploadWorkerFunction({
86
87
  client,
87
- spaceId: space.id,
88
+ ownerPublicKey: space.key,
88
89
  version: fn ? incrementSemverPatch(fn.version) : "0.0.1",
89
90
  functionId: existingFunctionId,
90
91
  source: bundle
@@ -98,7 +99,7 @@ var deployScript = async ({ script, client, space, fn, existingFunctionUrl }) =>
98
99
  const storedFunction = createOrUpdateFunctionInSpace(space, fn, script, functionId, version);
99
100
  script.changed = false;
100
101
  updateFunctionMetadata(script, storedFunction, meta, functionId);
101
- const functionUrl = makeFunctionUrl(space.id, {
102
+ const functionUrl = makeFunctionUrl({
102
103
  functionId
103
104
  });
104
105
  setUserFunctionUrlInMetadata(getMeta2(storedFunction), functionUrl);
@@ -109,7 +110,7 @@ var deployScript = async ({ script, client, space, fn, existingFunctionUrl }) =>
109
110
  } catch (err) {
110
111
  log2.catch(err, void 0, {
111
112
  F: __dxlog_file2,
112
- L: 80,
113
+ L: 79,
113
114
  S: void 0,
114
115
  C: (f, a) => f(...a)
115
116
  });
@@ -229,4 +230,4 @@ export {
229
230
  deployScript,
230
231
  useCreateAndDeployScriptTemplates
231
232
  };
232
- //# sourceMappingURL=chunk-SXS6PUU5.mjs.map
233
+ //# sourceMappingURL=chunk-6T64VQHF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util/functions.ts", "../../../src/util/deploy.ts", "../../../src/hooks/useCreateAndDeployScriptTemplates.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ScriptType, getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';\nimport { log } from '@dxos/log';\nimport { getMeta, getSpace } from '@dxos/react-client/echo';\n\n/**\n * Get the function URL for a given script and client configuration\n */\nexport const getFunctionUrl = ({\n script,\n fn,\n edgeUrl,\n}: {\n script: ScriptType;\n fn: any;\n edgeUrl: string;\n}): string | undefined => {\n const space = getSpace(script);\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n\n if (!existingFunctionUrl) {\n return undefined;\n }\n\n return getInvocationUrl(existingFunctionUrl, edgeUrl, {\n spaceId: space?.id,\n });\n};\n\nexport const updateFunctionMetadata = (script: ScriptType, storedFunction: any, meta: any, functionId: string) => {\n if (script.description !== undefined && script.description.trim() !== '') {\n storedFunction.description = script.description;\n } else if (meta.description) {\n storedFunction.description = meta.description;\n } else {\n log.verbose('no description in function metadata', { functionId });\n }\n\n if (meta.inputSchema) {\n storedFunction.inputSchema = meta.inputSchema;\n } else {\n log.verbose('no input schema in function metadata', { functionId });\n }\n\n if (meta.outputSchema) {\n storedFunction.outputSchema = meta.outputSchema;\n } else {\n log.verbose('no output schema in function metadata', { functionId });\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Client } from '@dxos/client';\nimport {\n FunctionType,\n type ScriptType,\n getUserFunctionUrlInMetadata,\n makeFunctionUrl,\n setUserFunctionUrlInMetadata,\n} from '@dxos/functions';\nimport { Bundler } from '@dxos/functions/bundler';\nimport { incrementSemverPatch, uploadWorkerFunction } from '@dxos/functions/edge';\nimport { log } from '@dxos/log';\nimport { live, getMeta, makeRef, type Space } from '@dxos/react-client/echo';\n\nimport { updateFunctionMetadata } from './functions';\n\nexport const isScriptDeployed = ({ script, fn }: { script: ScriptType; fn: any }): boolean => {\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n return Boolean(existingFunctionUrl) && !script.changed;\n};\n\ntype DeployScriptProps = {\n script: ScriptType;\n client: Client;\n space: Space;\n fn?: FunctionType;\n existingFunctionUrl?: string;\n};\n\ntype DeployScriptResult = { success: boolean; error?: Error; functionUrl?: string };\n\n/**\n * Deploy a script to a space, handling bundling and uploading to the FaaS infrastructure.\n */\nexport const deployScript = async ({\n script,\n client,\n space,\n fn,\n existingFunctionUrl,\n}: DeployScriptProps): Promise<DeployScriptResult> => {\n const validationError = validateDeployInputs(script, space);\n if (validationError) {\n return { success: false, error: validationError };\n }\n\n try {\n const existingFunctionId = extractFunctionId(existingFunctionUrl);\n\n const { bundle, error } = await bundleScript(script.source!.target!.content);\n if (error || !bundle) {\n throw error || new Error('Bundle creation failed');\n }\n\n const { functionId, version, meta } = await uploadWorkerFunction({\n client,\n ownerPublicKey: space.key,\n version: fn ? incrementSemverPatch(fn.version) : '0.0.1',\n functionId: existingFunctionId,\n source: bundle,\n });\n\n if (functionId === undefined || version === undefined) {\n throw new Error(`Upload didn't return expected data: ${JSON.stringify({ functionId, version })}`);\n }\n\n const storedFunction = createOrUpdateFunctionInSpace(space, fn, script, functionId, version);\n script.changed = false;\n updateFunctionMetadata(script, storedFunction, meta, functionId);\n\n const functionUrl = makeFunctionUrl({ functionId });\n setUserFunctionUrlInMetadata(getMeta(storedFunction), functionUrl);\n\n return { success: true, functionUrl };\n } catch (err: any) {\n log.catch(err);\n return { success: false, error: err };\n }\n};\n\n/**\n * Validate inputs for script deployment.\n */\nconst validateDeployInputs = (script: ScriptType, space: Space): Error | null => {\n if (!script.source || !space) {\n return new Error('Script source or space not available');\n }\n return null;\n};\n\nconst extractFunctionId = (functionUrl?: string): string | undefined => {\n return functionUrl?.split('/').at(-1);\n};\n\nconst bundleScript = async (source: string): Promise<{ bundle?: string; error?: Error }> => {\n const bundler = new Bundler({ platform: 'browser', sandboxedModules: [], remoteModules: {} });\n const buildResult = await bundler.bundle({ source });\n\n if (buildResult.error || !buildResult.bundle) {\n return { error: buildResult.error || new Error('Bundle creation failed') };\n }\n\n return { bundle: buildResult.bundle };\n};\n\nconst createOrUpdateFunctionInSpace = (\n space: Space,\n fn: FunctionType | undefined,\n script: ScriptType,\n functionId: string,\n version: string,\n): FunctionType => {\n if (fn) {\n fn.version = version;\n return fn;\n } else {\n return space.db.add(live(FunctionType, { name: functionId, version, source: makeRef(script) }));\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { pipe } from 'effect/Function';\nimport { useCallback, useState } from 'react';\n\nimport { chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { ScriptType } from '@dxos/functions';\nimport { invariant } from '@dxos/invariant';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\n\nimport { type Template } from '../templates';\nimport { ScriptAction } from '../types';\nimport { deployScript } from '../util';\n\ntype DeploymentStatus = 'idle' | 'pending' | 'success' | 'error';\n\n/**\n * Hook for creating and deploying multiple script templates concurrently.\n *\n * Takes a space and an array of script template IDs, then provides a callback\n * function that creates each script from its template and deploys it to the space.\n * All creation / deployment operations run concurrently for improved performance.\n */\nexport const useCreateAndDeployScriptTemplates = (space: Space | undefined, scriptTemplates: Template[]) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n const [status, setStatus] = useState<DeploymentStatus>('idle');\n const [error, setError] = useState<Error | undefined>(undefined);\n\n const handleCreateAndDeployScripts = useCallback(async () => {\n invariant(space);\n setStatus('pending');\n setError(undefined);\n\n const deploymentResults = await Promise.all(\n scriptTemplates.map(async (template) => {\n const result = await dispatch(\n pipe(\n createIntent(ScriptAction.Create, { space, initialTemplateId: template.id }),\n chain(SpaceAction.AddObject, { target: space }),\n ),\n );\n invariant(isInstanceOf(ScriptType, result.data?.object));\n\n return deployScript({ space, client, script: result.data.object });\n }),\n );\n\n const hasErrors = deploymentResults.some((result) => !result.success);\n setStatus(hasErrors ? 'error' : 'success');\n }, [space, dispatch, client, scriptTemplates]);\n\n return { handleCreateAndDeployScripts, status, error };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["getInvocationUrl", "getUserFunctionUrlInMetadata", "log", "getMeta", "getSpace", "getFunctionUrl", "script", "fn", "edgeUrl", "space", "existingFunctionUrl", "undefined", "spaceId", "id", "updateFunctionMetadata", "storedFunction", "meta", "functionId", "description", "trim", "verbose", "inputSchema", "outputSchema", "FunctionType", "getUserFunctionUrlInMetadata", "makeFunctionUrl", "setUserFunctionUrlInMetadata", "Bundler", "incrementSemverPatch", "uploadWorkerFunction", "log", "live", "getMeta", "makeRef", "isScriptDeployed", "script", "fn", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "Boolean", "changed", "deployScript", "client", "space", "validationError", "validateDeployInputs", "success", "error", "existingFunctionId", "extractFunctionId", "bundle", "bundleScript", "source", "target", "content", "Error", "functionId", "version", "meta", "uploadWorkerFunction", "ownerPublicKey", "key", "incrementSemverPatch", "undefined", "JSON", "stringify", "storedFunction", "createOrUpdateFunctionInSpace", "updateFunctionMetadata", "functionUrl", "makeFunctionUrl", "setUserFunctionUrlInMetadata", "err", "log", "catch", "split", "at", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "db", "add", "live", "FunctionType", "name", "makeRef", "pipe", "useCallback", "useState", "chain", "createIntent", "useIntentDispatcher", "isInstanceOf", "ScriptType", "invariant", "SpaceAction", "useClient", "useCreateAndDeployScriptTemplates", "space", "scriptTemplates", "dispatchPromise", "dispatch", "useIntentDispatcher", "client", "useClient", "status", "setStatus", "useState", "error", "setError", "undefined", "handleCreateAndDeployScripts", "useCallback", "invariant", "deploymentResults", "Promise", "all", "map", "template", "result", "pipe", "createIntent", "ScriptAction", "Create", "initialTemplateId", "id", "chain", "SpaceAction", "AddObject", "target", "isInstanceOf", "ScriptType", "data", "object", "deployScript", "script", "hasErrors", "some", "success"]
7
+ }
@@ -5,9 +5,9 @@ var meta = {
5
5
  name: "Scripts",
6
6
  description: "Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API\u2019s or external data inside of Composer.",
7
7
  icon: "ph--code--regular",
8
- source: "https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer",
8
+ source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer",
9
9
  tags: [
10
- "experimental"
10
+ "labs"
11
11
  ],
12
12
  screenshots: [
13
13
  "https://dxos.network/plugin-details-scripts-dark.png"
@@ -25,4 +25,4 @@ export {
25
25
  meta,
26
26
  defaultScriptsForIntegration
27
27
  };
28
- //# sourceMappingURL=chunk-KJMVDGRB.mjs.map
28
+ //# sourceMappingURL=chunk-6ZHHWU6S.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport const meta: PluginMeta = {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description:\n 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-explorer',\n tags: ['experimental'],\n screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],\n};\n\n// TODO(ZaymonFC): Configure by scopes?\nexport const defaultScriptsForIntegration: Record<string, string[]> = {\n // TODO(wittjosiah): Also include content extraction scripts in the default set.\n 'gmail.com': ['dxos.org/script/gmail'],\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SCRIPT_PLUGIN = 'dxos.org/plugin/script';\n\nexport const meta: PluginMeta = {\n id: SCRIPT_PLUGIN,\n name: 'Scripts',\n description:\n 'Scripts in Composer allow you to deploy custom functions that run on the edge. These functions can be referenced by your AI agent and called inside of cells in any Sheet. Use scripts to interact with API’s or external data inside of Composer.',\n icon: 'ph--code--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-explorer',\n tags: ['labs'],\n screenshots: ['https://dxos.network/plugin-details-scripts-dark.png'],\n};\n\n// TODO(ZaymonFC): Configure by scopes?\nexport const defaultScriptsForIntegration: Record<string, string[]> = {\n // TODO(wittjosiah): Also include content extraction scripts in the default set.\n 'gmail.com': ['dxos.org/script/gmail'],\n};\n"],
5
5
  "mappings": ";AAMO,IAAMA,gBAAgB;AAEtB,IAAMC,OAAmB;EAC9BC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,MAAM;IAAC;;EACPC,aAAa;IAAC;;AAChB;AAGO,IAAMC,+BAAyD;;EAEpE,aAAa;IAAC;;AAChB;",
6
6
  "names": ["SCRIPT_PLUGIN", "meta", "id", "name", "description", "icon", "source", "tags", "screenshots", "defaultScriptsForIntegration"]
7
7
  }
@@ -0,0 +1,530 @@
1
+ import {
2
+ SCRIPT_PLUGIN,
3
+ meta
4
+ } from "./chunk-6ZHHWU6S.mjs";
5
+
6
+ // packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx
7
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
8
+ import { Octokit } from "@octokit/core";
9
+ import React, { useCallback, useEffect, useState } from "react";
10
+ import { createIntent, SettingsAction, useIntentDispatcher } from "@dxos/app-framework";
11
+ import { FunctionType, getInvocationUrl, getUserFunctionUrlInMetadata } from "@dxos/functions";
12
+ import { log } from "@dxos/log";
13
+ import { useClient } from "@dxos/react-client";
14
+ import { Filter, getMeta, getSpace, Ref, useQuery } from "@dxos/react-client/echo";
15
+ import { Button, Clipboard, Input, useControlledState, useTranslation } from "@dxos/react-ui";
16
+ import { DataType } from "@dxos/schema";
17
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/components/Settings/ScriptObjectSettings.tsx";
18
+ var ScriptObjectSettings = ({ object }) => {
19
+ var _effect = _useSignals();
20
+ try {
21
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Binding, {
22
+ object
23
+ }), /* @__PURE__ */ React.createElement(Publishing, {
24
+ object
25
+ }));
26
+ } finally {
27
+ _effect.f();
28
+ }
29
+ };
30
+ var ScriptProperties = ({ object }) => {
31
+ var _effect = _useSignals();
32
+ try {
33
+ const { t } = useTranslation(SCRIPT_PLUGIN);
34
+ return /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, null, t("description label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
35
+ placeholder: t("description placeholder"),
36
+ value: object.description ?? "",
37
+ onChange: (event) => {
38
+ object.description = event.target.value;
39
+ }
40
+ }));
41
+ } finally {
42
+ _effect.f();
43
+ }
44
+ };
45
+ var Binding = ({ object }) => {
46
+ var _effect = _useSignals();
47
+ try {
48
+ const { t } = useTranslation(SCRIPT_PLUGIN);
49
+ const client = useClient();
50
+ const space = getSpace(object);
51
+ const [fn] = useQuery(space, Filter.type(FunctionType, {
52
+ source: Ref.make(object)
53
+ }));
54
+ const functionPath = fn && getUserFunctionUrlInMetadata(getMeta(fn));
55
+ const functionUrl = functionPath && getInvocationUrl(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
56
+ spaceId: space?.id
57
+ });
58
+ const [binding, setBinding] = useControlledState(fn?.binding ?? "");
59
+ const handleBindingChange = useCallback((event) => {
60
+ setBinding(event.target.value);
61
+ }, [
62
+ setBinding
63
+ ]);
64
+ const handleBindingBlur = useCallback(() => {
65
+ fn.binding = binding;
66
+ }, [
67
+ fn,
68
+ binding
69
+ ]);
70
+ if (!fn || !functionUrl) {
71
+ return null;
72
+ }
73
+ return /* @__PURE__ */ React.createElement("div", {
74
+ role: "form",
75
+ className: "flex flex-col p-2 gap-2"
76
+ }, /* @__PURE__ */ React.createElement("h2", null, t("remote function settings heading")), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement("div", {
77
+ role: "none",
78
+ className: "flex flex-col gap-1"
79
+ }, /* @__PURE__ */ React.createElement(Input.Label, null, t("function url label")), /* @__PURE__ */ React.createElement("div", {
80
+ role: "none",
81
+ className: "flex gap-1"
82
+ }, /* @__PURE__ */ React.createElement(Input.TextInput, {
83
+ disabled: true,
84
+ value: functionUrl,
85
+ onChange: (event) => {
86
+ fn.name = event.target.value;
87
+ }
88
+ }), /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
89
+ value: functionUrl
90
+ })))), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement("div", {
91
+ role: "none",
92
+ className: "flex flex-col gap-1"
93
+ }, /* @__PURE__ */ React.createElement(Input.Label, null, t("function binding label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
94
+ placeholder: t("function binding placeholder"),
95
+ value: binding,
96
+ onChange: handleBindingChange,
97
+ onBlur: handleBindingBlur
98
+ }))));
99
+ } finally {
100
+ _effect.f();
101
+ }
102
+ };
103
+ var Publishing = ({ object }) => {
104
+ var _effect = _useSignals();
105
+ try {
106
+ const { t } = useTranslation(SCRIPT_PLUGIN);
107
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
108
+ const space = getSpace(object);
109
+ const [githubToken] = useQuery(space, Filter.type(DataType.AccessToken, {
110
+ source: "github.com"
111
+ }));
112
+ const gistKey = getMeta(object).keys.find(({ source }) => source === "github.com");
113
+ const [gistUrl, setGistUrl] = useState();
114
+ useEffect(() => {
115
+ const token = githubToken?.token;
116
+ const gistId = gistKey?.id;
117
+ if (!token || !gistId) {
118
+ setGistUrl(void 0);
119
+ return;
120
+ }
121
+ const timeout = setTimeout(async () => {
122
+ try {
123
+ const octokit = new Octokit({
124
+ auth: githubToken.token
125
+ });
126
+ const response = await octokit.request("GET /gists/{gist_id}", {
127
+ gist_id: gistId
128
+ });
129
+ setGistUrl(response.data.html_url);
130
+ } catch (err) {
131
+ log.catch(err, void 0, {
132
+ F: __dxlog_file,
133
+ L: 135,
134
+ S: void 0,
135
+ C: (f, a) => f(...a)
136
+ });
137
+ setGistUrl(void 0);
138
+ }
139
+ });
140
+ return () => clearTimeout(timeout);
141
+ }, [
142
+ githubToken,
143
+ gistKey
144
+ ]);
145
+ const handleOpenTokenManager = useCallback(() => dispatch(createIntent(SettingsAction.Open, {
146
+ plugin: "dxos.org/plugin/token-manager"
147
+ })), []);
148
+ const [publishing, setPublishing] = useState(false);
149
+ const handlePublish = useCallback(async () => {
150
+ setPublishing(true);
151
+ const octokit = new Octokit({
152
+ auth: githubToken.token
153
+ });
154
+ const source = await object.source.load();
155
+ const filename = object.name ? kebabize(object.name) : "composer-script";
156
+ const files = {
157
+ [`${filename}.ts`]: {
158
+ content: source.content
159
+ }
160
+ };
161
+ try {
162
+ const meta2 = getMeta(object);
163
+ const githubKey = meta2.keys.find(({ source: source2 }) => source2 === "github.com");
164
+ const gistId = githubKey?.id;
165
+ if (gistId) {
166
+ await octokit.request("PATCH /gists/{gist_id}", {
167
+ gist_id: gistId,
168
+ files
169
+ });
170
+ } else {
171
+ const response = await octokit.request("POST /gists", {
172
+ public: true,
173
+ files
174
+ });
175
+ if (response.data.id) {
176
+ meta2.keys.push({
177
+ source: "github.com",
178
+ id: response.data.id
179
+ });
180
+ }
181
+ }
182
+ } finally {
183
+ setPublishing(false);
184
+ }
185
+ }, [
186
+ object,
187
+ githubToken
188
+ ]);
189
+ return /* @__PURE__ */ React.createElement("div", {
190
+ className: "flex flex-col p-2 gap-4"
191
+ }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("h2", null, t("script publish settings label")), /* @__PURE__ */ React.createElement("p", {
192
+ className: "text-description text-sm"
193
+ }, t("script publish settings description"))), !githubToken && /* @__PURE__ */ React.createElement("div", {
194
+ className: "flex flex-col gap-2"
195
+ }, /* @__PURE__ */ React.createElement("span", null, t("no github token label")), /* @__PURE__ */ React.createElement(Button, {
196
+ onClick: handleOpenTokenManager
197
+ }, t("open token manager label"))), githubToken && /* @__PURE__ */ React.createElement("div", {
198
+ className: "flex justify-end gap-2"
199
+ }, gistUrl && /* @__PURE__ */ React.createElement(Clipboard.IconButton, {
200
+ value: gistUrl
201
+ }), /* @__PURE__ */ React.createElement(Button, {
202
+ disabled: publishing,
203
+ onClick: handlePublish
204
+ }, t(publishing ? "publishing label" : "publish label"))));
205
+ } finally {
206
+ _effect.f();
207
+ }
208
+ };
209
+ var kebabize = (str) => str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? "-" : "") + $.toLowerCase());
210
+
211
+ // packages/plugins/plugin-script/src/components/Settings/ScriptPluginSettings.tsx
212
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
213
+ import React2 from "react";
214
+ import { useClient as useClient2 } from "@dxos/react-client";
215
+ import { Button as Button2, Select, useTranslation as useTranslation2 } from "@dxos/react-ui";
216
+ import { EditorInputModes } from "@dxos/react-ui-editor";
217
+ import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
218
+ var ScriptPluginSettings = ({ settings }) => {
219
+ var _effect = _useSignals2();
220
+ try {
221
+ const { t } = useTranslation2(meta.id);
222
+ const client = useClient2();
223
+ const handleAuthenticate = async () => {
224
+ const { identityKey } = client.halo.identity.get();
225
+ await client.halo.writeCredentials([
226
+ {
227
+ issuer: identityKey,
228
+ issuanceDate: /* @__PURE__ */ new Date(),
229
+ subject: {
230
+ id: identityKey,
231
+ assertion: {
232
+ "@type": "dxos.halo.credentials.ServiceAccess",
233
+ serverName: "hub.dxos.network",
234
+ serverKey: identityKey,
235
+ identityKey,
236
+ capabilities: [
237
+ "composer:beta"
238
+ ]
239
+ }
240
+ }
241
+ }
242
+ ]);
243
+ };
244
+ return /* @__PURE__ */ React2.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
245
+ label: t("authenticate action label")
246
+ }, /* @__PURE__ */ React2.createElement(Button2, {
247
+ onClick: handleAuthenticate
248
+ }, t("authenticate button label"))), /* @__PURE__ */ React2.createElement(DeprecatedFormInput, {
249
+ label: t("editor input mode label")
250
+ }, /* @__PURE__ */ React2.createElement(Select.Root, {
251
+ value: settings.editorInputMode ?? "default",
252
+ onValueChange: (value) => {
253
+ settings.editorInputMode = value;
254
+ }
255
+ }, /* @__PURE__ */ React2.createElement(Select.TriggerButton, {
256
+ placeholder: t("select editor input mode placeholder")
257
+ }), /* @__PURE__ */ React2.createElement(Select.Portal, null, /* @__PURE__ */ React2.createElement(Select.Content, null, /* @__PURE__ */ React2.createElement(Select.Viewport, null, EditorInputModes.map((mode) => /* @__PURE__ */ React2.createElement(Select.Option, {
258
+ key: mode,
259
+ value: mode
260
+ }, t(`settings editor input mode ${mode} label`)))))))));
261
+ } finally {
262
+ _effect.f();
263
+ }
264
+ };
265
+
266
+ // packages/plugins/plugin-script/src/components/TestPanel/TestPanel.tsx
267
+ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
268
+ import React3, { forwardRef, useEffect as useEffect2, useRef, useState as useState2 } from "react";
269
+ import { log as log2 } from "@dxos/log";
270
+ import { Avatar, Icon, Input as Input2, Toolbar, useTranslation as useTranslation3 } from "@dxos/react-ui";
271
+ import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
272
+ import { errorText, mx } from "@dxos/react-ui-theme";
273
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-script/src/components/TestPanel/TestPanel.tsx";
274
+ var TestPanel = ({ classNames, functionUrl }) => {
275
+ var _effect = _useSignals3();
276
+ try {
277
+ const { t } = useTranslation3(SCRIPT_PLUGIN);
278
+ const inputRef = useRef(null);
279
+ const [input, setInput] = useState2("");
280
+ const [result, setResult] = useState2("");
281
+ const [state, setState] = useState2(null);
282
+ const [history, setHistory] = useState2([]);
283
+ const scrollerRef = useRef(null);
284
+ const handleScroll = () => {
285
+ if (scrollerRef.current) {
286
+ scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;
287
+ }
288
+ };
289
+ const controller = useRef();
290
+ useEffect2(() => {
291
+ return () => {
292
+ handleStop();
293
+ };
294
+ }, []);
295
+ const handleStop = () => {
296
+ controller.current?.abort("stop");
297
+ controller.current = void 0;
298
+ };
299
+ const handleClear = () => {
300
+ handleStop();
301
+ setInput("");
302
+ setResult("");
303
+ setHistory([]);
304
+ inputRef.current?.focus();
305
+ };
306
+ const handleResponse = ({ text, data, error } = {}) => {
307
+ controller.current = void 0;
308
+ setHistory((history2) => [
309
+ ...history2,
310
+ {
311
+ type: "response",
312
+ text,
313
+ data,
314
+ error
315
+ }
316
+ ]);
317
+ setResult("");
318
+ setState(null);
319
+ handleScroll();
320
+ };
321
+ const handleRequest = async (input2) => {
322
+ try {
323
+ setState("pending");
324
+ let data = null;
325
+ if (input2.charAt(0) === "{") {
326
+ try {
327
+ const validJsonString = input2.replace(/'/g, '"').replace(/([{,]\s*)([a-zA-Z0-9_]+)(\s*:)/g, '$1"$2"$3');
328
+ data = JSON.parse(validJsonString);
329
+ input2 = JSON.stringify(data, null, 2);
330
+ } catch (err) {
331
+ inputRef.current?.focus();
332
+ return;
333
+ }
334
+ }
335
+ setInput("");
336
+ setResult("");
337
+ setHistory((history2) => [
338
+ ...history2,
339
+ {
340
+ type: "request",
341
+ text: input2
342
+ }
343
+ ]);
344
+ setTimeout(() => {
345
+ handleScroll();
346
+ });
347
+ controller.current = new AbortController();
348
+ const response = await fetch(functionUrl, {
349
+ signal: controller.current.signal,
350
+ method: "POST",
351
+ body: input2,
352
+ headers: {
353
+ "Content-Type": data ? "application/json" : "text/plain"
354
+ }
355
+ });
356
+ if (!response.ok) {
357
+ const text2 = await response.text();
358
+ handleResponse({
359
+ error: new Error(text2 || response.statusText || String(response.status))
360
+ });
361
+ return;
362
+ }
363
+ const contentType = response.headers.get("content-type");
364
+ if (contentType === "application/json") {
365
+ const data2 = await response.json();
366
+ handleResponse({
367
+ data: data2
368
+ });
369
+ return;
370
+ }
371
+ setState("responding");
372
+ let text = "";
373
+ const reader = response.body.getReader();
374
+ const pump = async ({ done, value }) => {
375
+ text = text + new TextDecoder().decode(value);
376
+ if (!controller.current || done) {
377
+ handleResponse({
378
+ text
379
+ });
380
+ return;
381
+ }
382
+ setResult(text);
383
+ setTimeout(() => {
384
+ handleScroll();
385
+ });
386
+ return reader.read().then(pump);
387
+ };
388
+ void reader.read().then(pump).catch((err) => {
389
+ if (err.name !== "AbortError") {
390
+ log2.catch(err, void 0, {
391
+ F: __dxlog_file2,
392
+ L: 147,
393
+ S: void 0,
394
+ C: (f, a) => f(...a)
395
+ });
396
+ }
397
+ });
398
+ } catch (err) {
399
+ if (err !== "stop") {
400
+ const error = err instanceof Error ? err : new Error(err);
401
+ handleResponse({
402
+ error
403
+ });
404
+ log2.catch(err, void 0, {
405
+ F: __dxlog_file2,
406
+ L: 154,
407
+ S: void 0,
408
+ C: (f, a) => f(...a)
409
+ });
410
+ } else {
411
+ handleResponse();
412
+ }
413
+ }
414
+ };
415
+ return /* @__PURE__ */ React3.createElement("div", {
416
+ className: mx("flex flex-col h-full overflow-hidden", classNames)
417
+ }, /* @__PURE__ */ React3.createElement(MessageThread, {
418
+ ref: scrollerRef,
419
+ state,
420
+ result,
421
+ history
422
+ }), /* @__PURE__ */ React3.createElement(Toolbar.Root, {
423
+ classNames: "p-2"
424
+ }, /* @__PURE__ */ React3.createElement(Input2.Root, null, /* @__PURE__ */ React3.createElement(Input2.TextInput, {
425
+ ref: inputRef,
426
+ autoFocus: true,
427
+ placeholder: t("function request placeholder"),
428
+ value: input,
429
+ onChange: (ev) => setInput(ev.target.value),
430
+ onKeyDown: (ev) => ev.key === "Enter" && handleRequest(input)
431
+ })), /* @__PURE__ */ React3.createElement(Toolbar.Button, {
432
+ onClick: () => handleRequest(input)
433
+ }, /* @__PURE__ */ React3.createElement(Icon, {
434
+ icon: "ph--play--regular",
435
+ size: 4
436
+ })), /* @__PURE__ */ React3.createElement(Toolbar.Button, {
437
+ onClick: () => state ? handleStop() : handleClear()
438
+ }, /* @__PURE__ */ React3.createElement(Icon, {
439
+ icon: state ? "ph--stop--regular" : "ph--trash--regular",
440
+ size: 4
441
+ }))));
442
+ } finally {
443
+ _effect.f();
444
+ }
445
+ };
446
+ var MessageThread = /* @__PURE__ */ forwardRef(({ state, history, result }, forwardedRef) => {
447
+ var _effect = _useSignals3();
448
+ try {
449
+ return /* @__PURE__ */ React3.createElement("div", {
450
+ ref: forwardedRef,
451
+ className: "flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto"
452
+ }, history.map((message, i) => /* @__PURE__ */ React3.createElement("div", {
453
+ key: i,
454
+ className: "grid grid-cols-[2rem_1fr_2rem]"
455
+ }, /* @__PURE__ */ React3.createElement("div", {
456
+ className: "p-1"
457
+ }, message.type === "response" && /* @__PURE__ */ React3.createElement(RobotAvatar, null)), /* @__PURE__ */ React3.createElement("div", {
458
+ className: "overflow-auto"
459
+ }, /* @__PURE__ */ React3.createElement(MessageItem, {
460
+ message
461
+ })))), result?.length > 0 && /* @__PURE__ */ React3.createElement("div", {
462
+ className: "grid grid-cols-[2rem_1fr_2rem]"
463
+ }, /* @__PURE__ */ React3.createElement("div", {
464
+ className: "p-1"
465
+ }, state === "pending" && /* @__PURE__ */ React3.createElement(Icon, {
466
+ icon: "ph--spinner--regular",
467
+ size: 6,
468
+ classNames: "animate-spin"
469
+ }) || /* @__PURE__ */ React3.createElement(Icon, {
470
+ icon: "ph--robot--regular",
471
+ size: 6,
472
+ classNames: "animate-[pulse_1s_ease-in-out_infinite]"
473
+ })), /* @__PURE__ */ React3.createElement("div", {
474
+ className: "overflow-auto"
475
+ }, /* @__PURE__ */ React3.createElement(MessageItem, {
476
+ message: {
477
+ type: "response",
478
+ text: result
479
+ }
480
+ }))));
481
+ } finally {
482
+ _effect.f();
483
+ }
484
+ });
485
+ var MessageItem = ({ classNames, message }) => {
486
+ var _effect = _useSignals3();
487
+ try {
488
+ const { type, text, data, error } = message;
489
+ const wrapper = "p-1 px-2 rounded-lg bg-hoverSurface overflow-auto";
490
+ return /* @__PURE__ */ React3.createElement("div", {
491
+ className: mx("flex", type === "request" ? "ml-[1rem] justify-end" : "mr-[1rem]", classNames)
492
+ }, error && /* @__PURE__ */ React3.createElement("div", {
493
+ className: mx(wrapper, "whitespace-pre", errorText)
494
+ }, String(error)), text !== void 0 && /* @__PURE__ */ React3.createElement("div", {
495
+ className: mx(wrapper, type === "request" && "bg-primary-400 dark:bg-primary-600")
496
+ }, text || "\xD8"), data && /* @__PURE__ */ React3.createElement(SyntaxHighlighter, {
497
+ language: "json",
498
+ className: mx(wrapper, "px-8 py-2 text-xs")
499
+ }, JSON.stringify(data, null, 2)));
500
+ } finally {
501
+ _effect.f();
502
+ }
503
+ };
504
+ var RobotAvatar = () => {
505
+ var _effect = _useSignals3();
506
+ try {
507
+ return /* @__PURE__ */ React3.createElement(Avatar.Root, null, /* @__PURE__ */ React3.createElement(Avatar.Content, {
508
+ size: 6,
509
+ variant: "circle",
510
+ icon: "ph--robot--regular"
511
+ }));
512
+ } finally {
513
+ _effect.f();
514
+ }
515
+ };
516
+
517
+ // packages/plugins/plugin-script/src/components/index.ts
518
+ import { lazy } from "react";
519
+ var ScriptContainer = lazy(() => import("./ScriptContainer-Q2K5FJSC.mjs"));
520
+ var DeploymentDialog = lazy(() => import("./DeploymentDialog-NLWQHNKE.mjs"));
521
+
522
+ export {
523
+ ScriptObjectSettings,
524
+ ScriptProperties,
525
+ ScriptPluginSettings,
526
+ TestPanel,
527
+ ScriptContainer,
528
+ DeploymentDialog
529
+ };
530
+ //# sourceMappingURL=chunk-74DEDPHT.mjs.map