@dxos/plugin-script 0.6.9 → 0.6.10-main.48c066e

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 (93) hide show
  1. package/dist/lib/browser/{ScriptEditor-7XICKICQ.mjs → ScriptEditor-TBM5XWUC.mjs} +73 -11
  2. package/dist/lib/browser/ScriptEditor-TBM5XWUC.mjs.map +7 -0
  3. package/dist/lib/browser/{TypescriptEditor-PIRIDDUS.mjs → TypescriptEditor-XTGRVCMY.mjs} +2 -2
  4. package/dist/lib/browser/{chunk-D4O723CR.mjs → chunk-DX5CSOBP.mjs} +22 -5
  5. package/dist/lib/browser/chunk-DX5CSOBP.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-SK3L274X.mjs → chunk-K26D5UCK.mjs} +13 -7
  7. package/dist/lib/browser/{chunk-SK3L274X.mjs.map → chunk-K26D5UCK.mjs.map} +3 -3
  8. package/dist/lib/browser/chunk-RHEZ5LUU.mjs +229 -0
  9. package/dist/lib/browser/chunk-RHEZ5LUU.mjs.map +7 -0
  10. package/dist/lib/browser/edge/index.mjs +1 -1
  11. package/dist/lib/browser/index.mjs +79 -187
  12. package/dist/lib/browser/index.mjs.map +4 -4
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/node/{ScriptEditor-M7KZ2CRS.cjs → ScriptEditor-VWT74T2V.cjs} +78 -18
  15. package/dist/lib/node/ScriptEditor-VWT74T2V.cjs.map +7 -0
  16. package/dist/lib/node/{TypescriptEditor-OTWJUIWB.cjs → TypescriptEditor-CRONCQSI.cjs} +7 -7
  17. package/dist/lib/node/{TypescriptEditor-OTWJUIWB.cjs.map → TypescriptEditor-CRONCQSI.cjs.map} +2 -2
  18. package/dist/lib/node/chunk-4GTXIELQ.cjs +252 -0
  19. package/dist/lib/node/chunk-4GTXIELQ.cjs.map +7 -0
  20. package/dist/lib/node/{chunk-ITLHJMWP.cjs → chunk-RXI576K3.cjs} +24 -7
  21. package/dist/lib/node/chunk-RXI576K3.cjs.map +7 -0
  22. package/dist/lib/node/{chunk-X6A3D4PD.cjs → chunk-VXR2JE2I.cjs} +16 -10
  23. package/dist/lib/node/{chunk-X6A3D4PD.cjs.map → chunk-VXR2JE2I.cjs.map} +3 -3
  24. package/dist/lib/node/edge/index.cjs +8 -8
  25. package/dist/lib/node/edge/index.cjs.map +1 -1
  26. package/dist/lib/node/index.cjs +76 -186
  27. package/dist/lib/node/index.cjs.map +4 -4
  28. package/dist/lib/node/meta.json +1 -1
  29. package/dist/types/src/ScriptPlugin.d.ts +1 -4
  30. package/dist/types/src/ScriptPlugin.d.ts.map +1 -1
  31. package/dist/types/src/bundler/bundler.d.ts +39 -0
  32. package/dist/types/src/bundler/bundler.d.ts.map +1 -0
  33. package/dist/types/src/bundler/bundler.test.d.ts +2 -0
  34. package/dist/types/src/bundler/bundler.test.d.ts.map +1 -0
  35. package/dist/types/src/bundler/index.d.ts +2 -0
  36. package/dist/types/src/bundler/index.d.ts.map +1 -0
  37. package/dist/types/src/compiler/compiler.browser.test.d.ts +2 -0
  38. package/dist/types/src/compiler/compiler.browser.test.d.ts.map +1 -0
  39. package/dist/types/src/compiler/compiler.d.ts +9 -34
  40. package/dist/types/src/compiler/compiler.d.ts.map +1 -1
  41. package/dist/types/src/components/ScriptBlock/FrameContainer/FrameContainer.d.ts +2 -2
  42. package/dist/types/src/components/ScriptBlock/FrameContainer/FrameContainer.d.ts.map +1 -1
  43. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts.map +1 -1
  44. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts +1 -1
  45. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/ScriptBlock/Splitter/Splitter.stories.d.ts +1 -1
  47. package/dist/types/src/components/ScriptBlock/Splitter/Splitter.stories.d.ts.map +1 -1
  48. package/dist/types/src/components/ScriptEditor.d.ts +3 -2
  49. package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
  50. package/dist/types/src/components/Toolbar.d.ts +2 -1
  51. package/dist/types/src/components/Toolbar.d.ts.map +1 -1
  52. package/dist/types/src/components/Toolbar.stories.d.ts +2 -2
  53. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  54. package/dist/types/src/components/TypescriptEditor.d.ts +3 -1
  55. package/dist/types/src/components/TypescriptEditor.d.ts.map +1 -1
  56. package/dist/types/src/components/TypescriptEditor.stories.d.ts +2 -2
  57. package/dist/types/src/components/TypescriptEditor.stories.d.ts.map +1 -1
  58. package/dist/types/src/components/index.d.ts +2 -2
  59. package/dist/types/src/components/index.d.ts.map +1 -1
  60. package/dist/types/src/edge/functions.d.ts.map +1 -1
  61. package/dist/types/src/index.d.ts +1 -0
  62. package/dist/types/src/index.d.ts.map +1 -1
  63. package/dist/types/src/translations.d.ts +1 -0
  64. package/dist/types/src/translations.d.ts.map +1 -1
  65. package/dist/types/src/types/script.d.ts +4 -4
  66. package/package.json +38 -33
  67. package/src/ScriptPlugin.tsx +23 -5
  68. package/src/bundler/bundler.test.ts +44 -0
  69. package/src/bundler/bundler.ts +246 -0
  70. package/src/bundler/index.ts +5 -0
  71. package/src/compiler/compiler.browser.test.ts +18 -0
  72. package/src/compiler/compiler.ts +31 -190
  73. package/src/compiler/index.ts +1 -1
  74. package/src/components/ScriptBlock/FrameContainer/FrameContainer.tsx +2 -2
  75. package/src/components/ScriptBlock/ScriptBlock.stories.tsx +1 -1
  76. package/src/components/ScriptBlock/ScriptBlock.tsx +10 -7
  77. package/src/components/ScriptBlock/Splitter/Splitter.stories.tsx +1 -1
  78. package/src/components/ScriptEditor.tsx +51 -5
  79. package/src/components/Toolbar.stories.tsx +1 -1
  80. package/src/components/Toolbar.tsx +28 -1
  81. package/src/components/TypescriptEditor.stories.tsx +1 -1
  82. package/src/components/TypescriptEditor.tsx +18 -4
  83. package/src/edge/functions.ts +8 -2
  84. package/src/index.ts +1 -0
  85. package/src/translations.ts +1 -0
  86. package/dist/lib/browser/ScriptEditor-7XICKICQ.mjs.map +0 -7
  87. package/dist/lib/browser/chunk-D4O723CR.mjs.map +0 -7
  88. package/dist/lib/node/ScriptEditor-M7KZ2CRS.cjs.map +0 -7
  89. package/dist/lib/node/chunk-ITLHJMWP.cjs.map +0 -7
  90. package/dist/types/src/compiler/compiler.test.d.ts +0 -2
  91. package/dist/types/src/compiler/compiler.test.d.ts.map +0 -1
  92. package/src/compiler/compiler.test.ts +0 -17
  93. /package/dist/lib/browser/{TypescriptEditor-PIRIDDUS.mjs.map → TypescriptEditor-XTGRVCMY.mjs.map} +0 -0
@@ -3,7 +3,10 @@ import {
3
3
  publicKeyToDid,
4
4
  setUserFunctionUrlInMetadata,
5
5
  uploadWorkerFunction
6
- } from "./chunk-SK3L274X.mjs";
6
+ } from "./chunk-K26D5UCK.mjs";
7
+ import {
8
+ Bundler
9
+ } from "./chunk-RHEZ5LUU.mjs";
7
10
  import {
8
11
  FunctionType
9
12
  } from "./chunk-ZGCETT2W.mjs";
@@ -12,9 +15,12 @@ import {
12
15
  } from "./chunk-JBACGDOJ.mjs";
13
16
  import {
14
17
  TypescriptEditor
15
- } from "./chunk-D4O723CR.mjs";
18
+ } from "./chunk-DX5CSOBP.mjs";
16
19
 
17
20
  // packages/plugins/experimental/plugin-script/src/components/ScriptEditor.tsx
21
+ import { format } from "prettier";
22
+ import prettierPluginEstree from "prettier/plugins/estree";
23
+ import prettierPluginTypescript from "prettier/plugins/typescript";
18
24
  import React2, { useCallback, useMemo, useState as useState2 } from "react";
19
25
  import { log } from "@dxos/log";
20
26
  import { useClient } from "@dxos/react-client";
@@ -25,11 +31,11 @@ import { createDataExtensions, listener } from "@dxos/react-ui-editor";
25
31
  import { mx as mx2 } from "@dxos/react-ui-theme";
26
32
 
27
33
  // packages/plugins/experimental/plugin-script/src/components/Toolbar.tsx
28
- import { Check, Checks, CircleNotch, Link, PencilSimple, UploadSimple, WarningCircle, X } from "@phosphor-icons/react";
34
+ import { Check, Checks, CircleNotch, Link, MagicWand, PencilSimple, UploadSimple, WarningCircle, X } from "@phosphor-icons/react";
29
35
  import React, { useEffect, useRef, useState } from "react";
30
36
  import { Button, DensityProvider, ElevationProvider, Input, Toolbar as NaturalToolbar, Tooltip, useTranslation } from "@dxos/react-ui";
31
37
  import { getSize, mx } from "@dxos/react-ui-theme";
32
- var Toolbar = ({ binding: _binding, onBindingChange, deployed, onDeploy, functionUrl, error }) => {
38
+ var Toolbar = ({ binding: _binding, onBindingChange, onFormat, deployed, onDeploy, functionUrl, error }) => {
33
39
  const { t } = useTranslation(SCRIPT_PLUGIN);
34
40
  const [pending, setPending] = useState(false);
35
41
  const [editing, setEditing] = useState(false);
@@ -73,7 +79,14 @@ var Toolbar = ({ binding: _binding, onBindingChange, deployed, onDeploy, functio
73
79
  style: {
74
80
  contain: "layout"
75
81
  }
76
- }, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, null, t("binding label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
82
+ }, onFormat && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
83
+ asChild: true
84
+ }, /* @__PURE__ */ React.createElement(NaturalToolbar.Button, {
85
+ variant: "ghost",
86
+ onClick: onFormat
87
+ }, /* @__PURE__ */ React.createElement(MagicWand, {
88
+ className: getSize(4)
89
+ }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null), t("format label")))), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.Label, null, t("binding label")), /* @__PURE__ */ React.createElement(Input.TextInput, {
77
90
  ref: inputRef,
78
91
  classNames: "!is-auto",
79
92
  disabled: !editing,
@@ -125,7 +138,7 @@ var Toolbar = ({ binding: _binding, onBindingChange, deployed, onDeploy, functio
125
138
 
126
139
  // packages/plugins/experimental/plugin-script/src/components/ScriptEditor.tsx
127
140
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/components/ScriptEditor.tsx";
128
- var ScriptEditor = ({ script, role }) => {
141
+ var ScriptEditor = ({ env, script, role }) => {
129
142
  const { t } = useTranslation2(SCRIPT_PLUGIN);
130
143
  const client = useClient();
131
144
  const identity = useIdentity();
@@ -163,6 +176,32 @@ var ScriptEditor = ({ script, role }) => {
163
176
  }, [
164
177
  fn
165
178
  ]);
179
+ const handleFormat = useCallback(async () => {
180
+ if (!script.source) {
181
+ return;
182
+ }
183
+ try {
184
+ const formatted = await format(script.source.content, {
185
+ parser: "typescript",
186
+ plugins: [
187
+ prettierPluginEstree,
188
+ prettierPluginTypescript
189
+ ],
190
+ semi: true,
191
+ singleQuote: true
192
+ });
193
+ script.source.content = formatted;
194
+ } catch (err) {
195
+ log.catch(err, void 0, {
196
+ F: __dxlog_file,
197
+ L: 89,
198
+ S: void 0,
199
+ C: (f, a) => f(...a)
200
+ });
201
+ }
202
+ }, [
203
+ script.source
204
+ ]);
166
205
  const handleDeploy = useCallback(async () => {
167
206
  if (!script.source || !identity || !space) {
168
207
  return;
@@ -171,12 +210,21 @@ var ScriptEditor = ({ script, role }) => {
171
210
  try {
172
211
  const existingFunctionId = existingFunctionUrl?.split("/").at(-1);
173
212
  const ownerDid = existingFunctionUrl?.split("/").at(-2) ?? publicKeyToDid(identity.identityKey);
213
+ const bundler = new Bundler({
214
+ platform: "browser",
215
+ sandboxedModules: [],
216
+ remoteModules: {}
217
+ });
218
+ const buildResult = await bundler.bundle(script.source.content);
219
+ if (buildResult.error || !buildResult.bundle) {
220
+ throw buildResult.error;
221
+ }
174
222
  const { result, functionId, functionVersionNumber, errorMessage } = await uploadWorkerFunction({
175
223
  clientConfig: client.config,
176
224
  halo: client.halo,
177
225
  ownerDid,
178
226
  functionId: existingFunctionId,
179
- source: script.source.content
227
+ source: buildResult.bundle
180
228
  });
181
229
  if (result !== "success" || functionId === void 0 || functionVersionNumber === void 0) {
182
230
  throw new Error(errorMessage);
@@ -186,7 +234,7 @@ var ScriptEditor = ({ script, role }) => {
186
234
  functionVersionNumber
187
235
  }, {
188
236
  F: __dxlog_file,
189
- L: 91,
237
+ L: 124,
190
238
  S: void 0,
191
239
  C: (f, a) => f(...a)
192
240
  });
@@ -203,7 +251,7 @@ var ScriptEditor = ({ script, role }) => {
203
251
  } catch (err) {
204
252
  log.catch(err, void 0, {
205
253
  F: __dxlog_file,
206
- L: 101,
254
+ L: 134,
207
255
  S: void 0,
208
256
  C: (f, a) => f(...a)
209
257
  });
@@ -216,18 +264,32 @@ var ScriptEditor = ({ script, role }) => {
216
264
  script.name,
217
265
  script.source
218
266
  ]);
267
+ const functionUrl = useMemo(() => {
268
+ if (!existingFunctionUrl) {
269
+ return;
270
+ }
271
+ const url = new URL(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url);
272
+ space && url.searchParams.set("spaceId", space.id);
273
+ url.protocol = "https";
274
+ return url.toString();
275
+ }, [
276
+ existingFunctionUrl,
277
+ space
278
+ ]);
219
279
  return /* @__PURE__ */ React2.createElement("div", {
220
280
  role: "none",
221
281
  className: mx2(role === "article" && "row-span-2", "flex flex-col is-full bs-full overflow-hidden")
222
282
  }, /* @__PURE__ */ React2.createElement(Toolbar, {
223
283
  binding: fn?.binding ?? "",
224
284
  onBindingChange: handleBindingChange,
285
+ onFormat: handleFormat,
225
286
  deployed: Boolean(existingFunctionUrl) && !script.changed,
226
287
  onDeploy: handleDeploy,
227
- functionUrl: existingFunctionUrl,
288
+ functionUrl,
228
289
  error
229
290
  }), /* @__PURE__ */ React2.createElement(TypescriptEditor, {
230
291
  id: script.id,
292
+ env,
231
293
  initialValue,
232
294
  extensions,
233
295
  className: "flex is-full bs-full overflow-hidden"
@@ -238,4 +300,4 @@ export {
238
300
  ScriptEditor,
239
301
  ScriptEditor_default as default
240
302
  };
241
- //# sourceMappingURL=ScriptEditor-7XICKICQ.mjs.map
303
+ //# sourceMappingURL=ScriptEditor-TBM5XWUC.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ScriptEditor.tsx", "../../../src/components/Toolbar.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\nimport { format } from 'prettier';\nimport prettierPluginEstree from 'prettier/plugins/estree';\nimport prettierPluginTypescript from 'prettier/plugins/typescript';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { create, createDocAccessor, Filter, getMeta, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { createDataExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Toolbar } from './Toolbar';\nimport { TypescriptEditor, type TypescriptEditorProps } from './TypescriptEditor';\nimport { Bundler } from '../bundler';\nimport {\n getUserFunctionUrlInMetadata,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction,\n} from '../edge';\nimport { SCRIPT_PLUGIN } from '../meta';\nimport { FunctionType, type ScriptType } from '../types';\n\nexport type ScriptEditorProps = {\n script: ScriptType;\n role?: string;\n} & Pick<TypescriptEditorProps, 'env'>;\n\nexport const ScriptEditor = ({ env, script, role }: ScriptEditorProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const client = useClient();\n const identity = useIdentity();\n const space = getSpace(script);\n const [fn] = useQuery(\n space,\n Filter.schema(FunctionType, (fn) => fn.source === script),\n );\n const extensions = useMemo(\n () => [\n listener({\n onChange: (text) => {\n if (script.source && script.source?.content !== text) {\n script.changed = true;\n }\n },\n }),\n createDataExtensions({\n id: script.id,\n text: script.source && createDocAccessor(script.source, ['content']),\n space,\n identity,\n }),\n ],\n [script, script.source, space, identity],\n );\n const initialValue = useMemo(() => script.source?.content, [script.source]);\n const existingFunctionUrl = fn && getUserFunctionUrlInMetadata(getMeta(fn));\n const [error, setError] = useState<string>();\n\n const handleBindingChange = useCallback(\n (binding: string) => {\n fn.binding = binding;\n },\n [fn],\n );\n\n const handleFormat = useCallback(async () => {\n if (!script.source) {\n return;\n }\n\n try {\n const formatted = await format(script.source.content, {\n parser: 'typescript',\n plugins: [prettierPluginEstree, prettierPluginTypescript],\n semi: true,\n singleQuote: true,\n });\n script.source.content = formatted;\n } catch (err: any) {\n // TODO(wittjosiah): Show error in UI.\n log.catch(err);\n }\n }, [script.source]);\n\n const handleDeploy = useCallback(async () => {\n if (!script.source || !identity || !space) {\n return;\n }\n\n setError(undefined);\n\n try {\n const existingFunctionId = existingFunctionUrl?.split('/').at(-1);\n const ownerDid = (existingFunctionUrl?.split('/').at(-2) as DID) ?? publicKeyToDid(identity.identityKey);\n\n const bundler = new Bundler({\n platform: 'browser',\n sandboxedModules: [],\n remoteModules: {},\n });\n const buildResult = await bundler.bundle(script.source.content);\n if (buildResult.error || !buildResult.bundle) {\n throw buildResult.error;\n }\n\n const { result, functionId, functionVersionNumber, errorMessage } = await uploadWorkerFunction({\n clientConfig: client.config,\n halo: client.halo,\n ownerDid,\n functionId: existingFunctionId,\n source: buildResult.bundle,\n });\n if (result !== 'success' || functionId === undefined || functionVersionNumber === undefined) {\n throw new Error(errorMessage);\n }\n log.info('function uploaded', { functionId, functionVersionNumber });\n if (fn) {\n fn.version = functionVersionNumber;\n }\n const deployedFunction =\n fn ?? space.db.add(create(FunctionType, { version: functionVersionNumber, source: script }));\n const meta = getMeta(deployedFunction);\n setUserFunctionUrlInMetadata(meta, `/${ownerDid}/${functionId}`);\n script.changed = false;\n } catch (err: any) {\n log.catch(err);\n setError(t('upload failed label'));\n }\n }, [fn, existingFunctionUrl, script, script.name, script.source]);\n\n const functionUrl = useMemo(() => {\n if (!existingFunctionUrl) {\n return;\n }\n\n const url = new URL(existingFunctionUrl, client.config.values.runtime?.services?.edge?.url);\n space && url.searchParams.set('spaceId', space.id);\n url.protocol = 'https';\n return url.toString();\n }, [existingFunctionUrl, space]);\n\n return (\n <div\n role='none'\n className={mx(role === 'article' && 'row-span-2', 'flex flex-col is-full bs-full overflow-hidden')}\n >\n <Toolbar\n binding={fn?.binding ?? ''}\n onBindingChange={handleBindingChange}\n onFormat={handleFormat}\n deployed={Boolean(existingFunctionUrl) && !script.changed}\n onDeploy={handleDeploy}\n functionUrl={functionUrl}\n error={error}\n />\n <TypescriptEditor\n id={script.id}\n env={env}\n initialValue={initialValue}\n extensions={extensions}\n className='flex is-full bs-full overflow-hidden'\n />\n </div>\n );\n};\n\nexport default ScriptEditor;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n Check,\n Checks,\n CircleNotch,\n Link,\n MagicWand,\n PencilSimple,\n UploadSimple,\n WarningCircle,\n X,\n} from '@phosphor-icons/react';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport {\n Button,\n DensityProvider,\n ElevationProvider,\n Input,\n Toolbar as NaturalToolbar,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport type ToolbarProps = {\n binding: string;\n onBindingChange: (binding: string) => void;\n onFormat?: () => Promise<void>;\n deployed?: boolean;\n onDeploy?: () => Promise<void>;\n functionUrl?: string;\n error?: string;\n};\n\nexport const Toolbar = ({\n binding: _binding,\n onBindingChange,\n onFormat,\n deployed,\n onDeploy,\n functionUrl,\n error,\n}: ToolbarProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n const [pending, setPending] = useState(false);\n const [editing, setEditing] = useState(false);\n const [binding, setBinding] = useState(_binding);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (!editing && _binding !== binding) {\n setBinding(_binding);\n }\n }, [_binding]);\n\n const handleEdit = () => {\n setEditing(true);\n inputRef.current?.focus();\n };\n\n const handleSave = () => {\n setEditing(false);\n onBindingChange(binding);\n };\n\n const handleCancel = () => {\n setEditing(false);\n };\n\n const handleCopyLink = async () => {\n if (!functionUrl) {\n return;\n }\n\n await navigator.clipboard.writeText(functionUrl);\n };\n\n const handleDeploy = async () => {\n setPending(true);\n await onDeploy?.();\n setPending(false);\n };\n\n return (\n <DensityProvider density='fine'>\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root\n classNames='p-1 is-full shrink-0 overflow-x-auto overflow-y-hidden'\n style={{ contain: 'layout' }}\n >\n {onFormat && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={onFormat}>\n <MagicWand className={getSize(4)} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('format label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n {/* TODO(wittjosiah): Binding input shouldn't be in the toolbar. */}\n <Input.Root>\n <Input.Label>{t('binding label')}</Input.Label>\n <Input.TextInput\n ref={inputRef}\n classNames='!is-auto'\n disabled={!editing}\n value={binding}\n onChange={(event) => setBinding(event.target.value.toUpperCase())}\n />\n {editing ? (\n <>\n <Button variant='ghost' onClick={handleCancel}>\n <X className={getSize(4)} />\n </Button>\n <Button variant='ghost' onClick={handleSave}>\n <Check className={getSize(4)} />\n </Button>\n </>\n ) : (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button variant='ghost' onClick={handleEdit}>\n <PencilSimple className={getSize(4)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('edit binding label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </Input.Root>\n <div role='separator' className='grow' />\n {/* TODO(wittjosiah): Better treatment for status indicators in toolbar? */}\n {error ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <WarningCircle className={getSize(4)} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {error}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : deployed ? (\n <Tooltip.Root>\n <Tooltip.Trigger>\n <Checks className={getSize(4)} />\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('deployed label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : null}\n {functionUrl && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleCopyLink}>\n <Link className={getSize(4)} />\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {t('copy link label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' onClick={handleDeploy} disabled={pending}>\n {pending ? (\n <CircleNotch className={mx('spinner', getSize(4))} />\n ) : (\n <UploadSimple className={getSize(4)} />\n )}\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n <Tooltip.Arrow />\n {pending ? t('pending label') : t('deploy label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </NaturalToolbar.Root>\n </ElevationProvider>\n </DensityProvider>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["format", "prettierPluginEstree", "prettierPluginTypescript", "React", "useCallback", "useMemo", "useState", "log", "useClient", "create", "createDocAccessor", "Filter", "getMeta", "getSpace", "useQuery", "useIdentity", "useTranslation", "createDataExtensions", "listener", "mx", "Check", "Checks", "CircleNotch", "Link", "MagicWand", "PencilSimple", "UploadSimple", "WarningCircle", "X", "React", "useEffect", "useRef", "useState", "Button", "DensityProvider", "ElevationProvider", "Input", "Toolbar", "NaturalToolbar", "Tooltip", "useTranslation", "getSize", "mx", "Toolbar", "binding", "_binding", "onBindingChange", "onFormat", "deployed", "onDeploy", "functionUrl", "error", "t", "useTranslation", "SCRIPT_PLUGIN", "pending", "setPending", "useState", "editing", "setEditing", "setBinding", "inputRef", "useRef", "useEffect", "handleEdit", "current", "focus", "handleSave", "handleCancel", "handleCopyLink", "navigator", "clipboard", "writeText", "handleDeploy", "DensityProvider", "density", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "classNames", "style", "contain", "Tooltip", "Trigger", "asChild", "Button", "variant", "onClick", "MagicWand", "className", "getSize", "Portal", "Content", "Arrow", "Input", "Label", "TextInput", "ref", "disabled", "value", "onChange", "event", "target", "toUpperCase", "X", "Check", "PencilSimple", "div", "role", "WarningCircle", "Checks", "Link", "CircleNotch", "mx", "UploadSimple", "ScriptEditor", "env", "script", "role", "t", "useTranslation", "SCRIPT_PLUGIN", "client", "useClient", "identity", "useIdentity", "space", "getSpace", "fn", "useQuery", "Filter", "schema", "FunctionType", "source", "extensions", "useMemo", "listener", "onChange", "text", "content", "changed", "createDataExtensions", "id", "createDocAccessor", "initialValue", "existingFunctionUrl", "getUserFunctionUrlInMetadata", "getMeta", "error", "setError", "useState", "handleBindingChange", "useCallback", "binding", "handleFormat", "formatted", "format", "parser", "plugins", "prettierPluginEstree", "prettierPluginTypescript", "semi", "singleQuote", "err", "log", "catch", "handleDeploy", "undefined", "existingFunctionId", "split", "at", "ownerDid", "publicKeyToDid", "identityKey", "bundler", "Bundler", "platform", "sandboxedModules", "remoteModules", "buildResult", "bundle", "result", "functionId", "functionVersionNumber", "errorMessage", "uploadWorkerFunction", "clientConfig", "config", "halo", "Error", "info", "version", "deployedFunction", "db", "add", "create", "meta", "setUserFunctionUrlInMetadata", "name", "functionUrl", "url", "URL", "values", "runtime", "services", "edge", "searchParams", "set", "protocol", "toString", "React", "div", "className", "mx", "Toolbar", "onBindingChange", "onFormat", "deployed", "Boolean", "onDeploy", "TypescriptEditor"]
7
+ }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  TypescriptEditor,
3
3
  TypescriptEditor_default
4
- } from "./chunk-D4O723CR.mjs";
4
+ } from "./chunk-DX5CSOBP.mjs";
5
5
  export {
6
6
  TypescriptEditor,
7
7
  TypescriptEditor_default as default
8
8
  };
9
- //# sourceMappingURL=TypescriptEditor-PIRIDDUS.mjs.map
9
+ //# sourceMappingURL=TypescriptEditor-XTGRVCMY.mjs.map
@@ -2,11 +2,12 @@
2
2
  import { javascript } from "@codemirror/lang-javascript";
3
3
  import { defaultHighlightStyle, syntaxHighlighting } from "@codemirror/language";
4
4
  import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
5
+ import { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from "@valtown/codemirror-ts";
5
6
  import React from "react";
6
7
  import { useThemeContext } from "@dxos/react-ui";
7
- import { autocomplete, createBasicExtensions, createThemeExtensions, editorContent, editorGutter, editorMonospace, useTextEditor } from "@dxos/react-ui-editor";
8
+ import { autocomplete, createBasicExtensions, createThemeExtensions, editorFullWidth, editorGutter, editorMonospace, InputModeExtensions, useTextEditor } from "@dxos/react-ui-editor";
8
9
  import { nonNullable } from "@dxos/util";
9
- var TypescriptEditor = ({ id, extensions, initialValue, scrollTo, selection, className, scrollPastEnd }) => {
10
+ var TypescriptEditor = ({ id, extensions, env, initialValue, scrollTo, selection, className, scrollPastEnd }) => {
10
11
  const { themeMode } = useThemeContext();
11
12
  const { parentRef, focusAttributes } = useTextEditor(() => ({
12
13
  id,
@@ -18,6 +19,7 @@ var TypescriptEditor = ({ id, extensions, initialValue, scrollTo, selection, cla
18
19
  highlightActiveLine: true,
19
20
  indentWithTab: true,
20
21
  lineNumbers: true,
22
+ lineWrapping: false,
21
23
  scrollPastEnd
22
24
  }),
23
25
  // TODO(wittjosiah): Factor out syntax highlighting to theme extensions.
@@ -26,7 +28,7 @@ var TypescriptEditor = ({ id, extensions, initialValue, scrollTo, selection, cla
26
28
  themeMode,
27
29
  slots: {
28
30
  content: {
29
- className: editorContent
31
+ className: editorFullWidth
30
32
  }
31
33
  }
32
34
  }),
@@ -35,7 +37,22 @@ var TypescriptEditor = ({ id, extensions, initialValue, scrollTo, selection, cla
35
37
  javascript({
36
38
  typescript: true
37
39
  }),
38
- autocomplete()
40
+ // https://github.com/val-town/codemirror-ts
41
+ env ? [
42
+ tsFacet.of({
43
+ env,
44
+ path: `/src/${id}.ts`
45
+ }),
46
+ tsSync(),
47
+ tsLinter(),
48
+ tsHover()
49
+ ] : [],
50
+ autocomplete({
51
+ override: env ? [
52
+ tsAutocomplete()
53
+ ] : []
54
+ }),
55
+ InputModeExtensions.vscode
39
56
  ].filter(nonNullable),
40
57
  selection,
41
58
  scrollTo
@@ -59,4 +76,4 @@ export {
59
76
  TypescriptEditor,
60
77
  TypescriptEditor_default
61
78
  };
62
- //# sourceMappingURL=chunk-D4O723CR.mjs.map
79
+ //# sourceMappingURL=chunk-DX5CSOBP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/TypescriptEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { javascript } from '@codemirror/lang-javascript';\nimport { defaultHighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { oneDarkHighlightStyle } from '@codemirror/theme-one-dark';\nimport { type VirtualTypeScriptEnvironment } from '@typescript/vfs';\nimport { tsSync, tsFacet, tsLinter, tsAutocomplete, tsHover } from '@valtown/codemirror-ts';\nimport React from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport {\n autocomplete,\n createBasicExtensions,\n createThemeExtensions,\n editorFullWidth,\n editorGutter,\n editorMonospace,\n InputModeExtensions,\n useTextEditor,\n type UseTextEditorProps,\n} from '@dxos/react-ui-editor';\nimport { nonNullable } from '@dxos/util';\n\nexport type TypescriptEditorProps = {\n id: string;\n env?: VirtualTypeScriptEnvironment;\n className?: string;\n scrollPastEnd?: boolean;\n} & Pick<UseTextEditorProps, 'initialValue' | 'extensions' | 'scrollTo' | 'selection'>;\n\nexport const TypescriptEditor = ({\n id,\n extensions,\n env,\n initialValue,\n scrollTo,\n selection,\n className,\n scrollPastEnd,\n}: TypescriptEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef, focusAttributes } = useTextEditor(\n () => ({\n id,\n initialValue,\n extensions: [\n extensions,\n // TODO(wittjosiah): Highlight active line doesn't work.\n createBasicExtensions({\n highlightActiveLine: true,\n indentWithTab: true,\n lineNumbers: true,\n lineWrapping: false,\n scrollPastEnd,\n }),\n // TODO(wittjosiah): Factor out syntax highlighting to theme extensions.\n themeMode === 'dark' ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle),\n createThemeExtensions({\n themeMode,\n slots: {\n content: { className: editorFullWidth },\n },\n }),\n editorGutter,\n editorMonospace,\n javascript({ typescript: true }),\n // https://github.com/val-town/codemirror-ts\n env ? [tsFacet.of({ env, path: `/src/${id}.ts` }), tsSync(), tsLinter(), tsHover()] : [],\n autocomplete({ override: env ? [tsAutocomplete()] : [] }),\n InputModeExtensions.vscode,\n ].filter(nonNullable),\n selection,\n scrollTo,\n }),\n [id, initialValue, extensions, themeMode, selection, scrollTo],\n );\n\n return <div ref={parentRef} className={className} {...focusAttributes} />;\n};\n\nexport default TypescriptEditor;\n"],
5
+ "mappings": ";AAIA,SAASA,kBAAkB;AAC3B,SAASC,uBAAuBC,0BAA0B;AAC1D,SAASC,6BAA6B;AAEtC,SAASC,QAAQC,SAASC,UAAUC,gBAAgBC,eAAe;AACnE,OAAOC,WAAW;AAElB,SAASC,uBAAuB;AAChC,SACEC,cACAC,uBACAC,uBACAC,iBACAC,cACAC,iBACAC,qBACAC,qBAEK;AACP,SAASC,mBAAmB;AASrB,IAAMC,mBAAmB,CAAC,EAC/BC,IACAC,YACAC,KACAC,cACAC,UACAC,WACAC,WACAC,cAAa,MACS;AACtB,QAAM,EAAEC,UAAS,IAAKC,gBAAAA;AACtB,QAAM,EAAEC,WAAWC,gBAAe,IAAKC,cACrC,OAAO;IACLZ;IACAG;IACAF,YAAY;MACVA;;MAEAY,sBAAsB;QACpBC,qBAAqB;QACrBC,eAAe;QACfC,aAAa;QACbC,cAAc;QACdV;MACF,CAAA;;MAEAC,cAAc,SAASU,mBAAmBC,qBAAAA,IAAyBD,mBAAmBE,qBAAAA;MACtFC,sBAAsB;QACpBb;QACAc,OAAO;UACLC,SAAS;YAAEjB,WAAWkB;UAAgB;QACxC;MACF,CAAA;MACAC;MACAC;MACAC,WAAW;QAAEC,YAAY;MAAK,CAAA;;MAE9B1B,MAAM;QAAC2B,QAAQC,GAAG;UAAE5B;UAAK6B,MAAM,QAAQ/B,EAAAA;QAAQ,CAAA;QAAIgC,OAAAA;QAAUC,SAAAA;QAAYC,QAAAA;UAAa,CAAA;MACtFC,aAAa;QAAEC,UAAUlC,MAAM;UAACmC,eAAAA;YAAoB,CAAA;MAAG,CAAA;MACvDC,oBAAoBC;MACpBC,OAAOC,WAAAA;IACTpC;IACAD;EACF,IACA;IAACJ;IAAIG;IAAcF;IAAYO;IAAWH;IAAWD;GAAS;AAGhE,SAAO,sBAAA,cAACsC,OAAAA;IAAIC,KAAKjC;IAAWJ;IAAuB,GAAGK;;AACxD;AAEA,IAAA,2BAAeZ;",
6
+ "names": ["javascript", "defaultHighlightStyle", "syntaxHighlighting", "oneDarkHighlightStyle", "tsSync", "tsFacet", "tsLinter", "tsAutocomplete", "tsHover", "React", "useThemeContext", "autocomplete", "createBasicExtensions", "createThemeExtensions", "editorFullWidth", "editorGutter", "editorMonospace", "InputModeExtensions", "useTextEditor", "nonNullable", "TypescriptEditor", "id", "extensions", "env", "initialValue", "scrollTo", "selection", "className", "scrollPastEnd", "themeMode", "useThemeContext", "parentRef", "focusAttributes", "useTextEditor", "createBasicExtensions", "highlightActiveLine", "indentWithTab", "lineNumbers", "lineWrapping", "syntaxHighlighting", "oneDarkHighlightStyle", "defaultHighlightStyle", "createThemeExtensions", "slots", "content", "editorFullWidth", "editorGutter", "editorMonospace", "javascript", "typescript", "tsFacet", "of", "path", "tsSync", "tsLinter", "tsHover", "autocomplete", "override", "tsAutocomplete", "InputModeExtensions", "vscode", "filter", "nonNullable", "div", "ref"]
7
+ }
@@ -108,9 +108,15 @@ var publicKeyToDid = (key) => {
108
108
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-script/src/edge/functions.ts";
109
109
  var USERFUNCTIONS_META_KEY = "dxos.org/service/function";
110
110
  var USERFUNCTIONS_CREDENTIAL_CAPABILITY = "composer:beta";
111
- var defaultUserFunctionsBaseUrl = "https://functions-staging.dxos.workers.dev";
111
+ var defaultUserFunctionsBaseUrl = "https://edge-main.dxos.workers.dev/functions";
112
112
  var getBaseUrl = (config) => {
113
- return config.get("runtime.app.env.DX_USERFUNCTIONS_BASE_URL") || defaultUserFunctionsBaseUrl;
113
+ if (config.values.runtime?.services?.edge?.url) {
114
+ const url = new URL("/functions", config.values.runtime?.services?.edge?.url);
115
+ url.protocol = "https";
116
+ return url.toString();
117
+ } else {
118
+ return defaultUserFunctionsBaseUrl;
119
+ }
114
120
  };
115
121
  var uploadWorkerFunction = async ({ clientConfig, halo, name, source, ownerDid, functionId, credentialLoadTimeout }) => {
116
122
  const identity = halo.identity.get();
@@ -127,7 +133,7 @@ var uploadWorkerFunction = async ({ clientConfig, halo, name, source, ownerDid,
127
133
  uploadUrl: uploadUrl.toString()
128
134
  }, {
129
135
  F: __dxlog_file,
130
- L: 64,
136
+ L: 70,
131
137
  S: void 0,
132
138
  C: (f, a) => f(...a)
133
139
  });
@@ -151,7 +157,7 @@ var uploadWorkerFunction = async ({ clientConfig, halo, name, source, ownerDid,
151
157
  res
152
158
  }, {
153
159
  F: __dxlog_file,
154
- L: 75,
160
+ L: 81,
155
161
  S: void 0,
156
162
  C: (f, a) => f(...a)
157
163
  });
@@ -200,13 +206,13 @@ var presentationForIdentity = async ({ halo, timeout }) => {
200
206
  credential
201
207
  }, {
202
208
  F: __dxlog_file,
203
- L: 121,
209
+ L: 127,
204
210
  S: void 0,
205
211
  C: (f, a) => f(...a)
206
212
  });
207
213
  invariant(credential.id, "beta credential missing id", {
208
214
  F: __dxlog_file,
209
- L: 123,
215
+ L: 129,
210
216
  S: void 0,
211
217
  A: [
212
218
  "credential.id",
@@ -232,4 +238,4 @@ export {
232
238
  getUserFunctionUrlInMetadata,
233
239
  setUserFunctionUrlInMetadata
234
240
  };
235
- //# sourceMappingURL=chunk-SK3L274X.mjs.map
241
+ //# sourceMappingURL=chunk-K26D5UCK.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/edge/codec.ts", "../../../src/edge/header-codec.ts", "../../../src/edge/functions.ts", "../../../src/edge/hub-protocol.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { HeaderCodec, type EncodedKey } from './header-codec';\n\nexport const codec = new HeaderCodec<PublicKey>({\n isKey: (value: any): value is PublicKey => value instanceof PublicKey,\n encode: (key: PublicKey): EncodedKey => ({ __k: key.toHex() }),\n decode: (value: EncodedKey): PublicKey => PublicKey.fromHex(value.__k),\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): Factor out from @dxos/hub-protocol\n\nconst ENCODING = 'base64';\n\nexport type EncodedKey = { __k: string };\n\nexport type EncodedBytes = { __b: string };\n\nexport type EncodedTimestamp = { __t: number };\n\nexport interface KeyCodec<KeyType> {\n isKey(value: any): value is KeyType;\n encode(key: KeyType): EncodedKey;\n decode(value: EncodedKey): KeyType;\n}\n\n// TODO(wittjosiah): Use deepMapValues from @dxos/util -- it handles recursion for you.\nexport class HeaderCodec<Key> {\n constructor(private readonly _keyCodec: KeyCodec<Key>) {}\n\n encode(obj: any): string {\n const objectToEncode = this._prepareForEncoding(obj);\n const encoded = Buffer.from(JSON.stringify(objectToEncode));\n return encoded.toString(ENCODING);\n }\n\n decode<Type>(buffer: string): Type {\n const json = JSON.parse(Buffer.from(buffer, ENCODING).toString());\n return this._decodeRecursive(json);\n }\n\n private _decodeRecursive(obj: any): any {\n return this._recurse(obj, (value) => {\n if (isEncodedBytes(value)) {\n return decodeBytes(value.__b);\n }\n if (isEncodedKey(value)) {\n return this._keyCodec.decode(value);\n }\n if (isEncodedDate(value)) {\n return decodeDate(value);\n }\n return null;\n });\n }\n\n private _prepareForEncoding(obj: any): any {\n return this._recurse(obj, (value) => {\n if (value instanceof Uint8Array) {\n return { __b: encodeBytes(value) };\n }\n if (this._keyCodec.isKey(value)) {\n return this._keyCodec.encode(value);\n }\n if (value instanceof Date) {\n return encodeDate(value);\n }\n return null;\n });\n }\n\n private _recurse(obj: any, handler: (obj: object) => any | null): any {\n if (typeof obj !== 'object') {\n return obj;\n }\n const handled = handler(obj);\n if (handled != null) {\n return handled;\n }\n if (Array.isArray(obj)) {\n const result = [];\n for (const elem of obj) {\n result.push(this._recurse(elem, handler));\n }\n return result;\n }\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = this._recurse(value, handler);\n }\n return result;\n }\n}\n\nconst isEncodedKey = (obj: object): obj is EncodedKey => '__k' in obj && typeof obj.__k === 'string';\nconst isEncodedBytes = (obj: object): obj is EncodedBytes => '__b' in obj && typeof obj.__b === 'string';\nconst isEncodedDate = (obj: object): obj is EncodedTimestamp => '__t' in obj && typeof obj.__t === 'number';\n\nconst encodeDate = (date: Date) => ({ __t: date.getTime() });\nconst decodeDate = (timestamp: EncodedTimestamp) => new Date(timestamp.__t);\n\nconst encodeBytes = (bytes: Uint8Array) => Buffer.from(bytes).toString(ENCODING);\nconst decodeBytes = (bytes: string) => Buffer.from(bytes, ENCODING);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\n\nimport { Trigger } from '@dxos/async';\nimport { type Config } from '@dxos/client';\nimport { type Halo } from '@dxos/client-protocol';\nimport { type ObjectMeta } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport { codec } from './codec';\nimport { matchServiceCredential } from './hub-protocol';\n\n// TODO: use URL scheme for source?\nconst USERFUNCTIONS_META_KEY = 'dxos.org/service/function';\nconst USERFUNCTIONS_CREDENTIAL_CAPABILITY = 'composer:beta';\n\n// TODO: Synchronize API types with server\nexport type UserFunctionUploadResult = {\n result: 'success' | 'error';\n errorMessage?: string;\n functionId?: string;\n functionVersionNumber?: number;\n};\n\nexport type UploadWorkerProps = {\n clientConfig: Config;\n halo: Halo;\n name?: string;\n source: string;\n functionId?: string;\n ownerDid: DID;\n credentialLoadTimeout?: number; // ms to wait for credentials to load\n};\n\nconst defaultUserFunctionsBaseUrl = 'https://functions-staging.dxos.workers.dev'; // 'http://localhost:8600';\n\nconst getBaseUrl = (config: Config) => {\n return config.get('runtime.app.env.DX_USERFUNCTIONS_BASE_URL') || defaultUserFunctionsBaseUrl;\n};\n\nexport const uploadWorkerFunction = async ({\n clientConfig,\n halo,\n name,\n source,\n ownerDid,\n functionId,\n credentialLoadTimeout,\n}: UploadWorkerProps) => {\n const identity = halo.identity.get();\n if (!identity) {\n throw new Error('Identity not available');\n }\n const userFunctionsBaseUrl = getBaseUrl(clientConfig);\n\n // TODO: codify naming convention\n const uploadUrl = `${userFunctionsBaseUrl}/${ownerDid}` + (functionId ? `/${functionId}` : '');\n\n log('Upload', { functionId, source, name, identityKey: identity.identityKey, uploadUrl: uploadUrl.toString() });\n const response = await fetch(uploadUrl, {\n method: 'PUT',\n body: JSON.stringify({ script: source, name }),\n headers: await presentationForIdentity({ halo, timeout: credentialLoadTimeout }),\n });\n if (!response.ok) {\n return (await response.json()) as UserFunctionUploadResult;\n }\n\n const res = await response.json();\n log('Upload response', { status: response.status, res });\n\n return res as UserFunctionUploadResult;\n};\n\nexport const getUserFunctionUrlInMetadata = (meta: ObjectMeta) => {\n return meta.keys.find((key) => key.source === USERFUNCTIONS_META_KEY)?.id;\n};\n\nexport const setUserFunctionUrlInMetadata = (meta: ObjectMeta, functionUrl: string) => {\n const key = meta.keys.find((key) => key.source === USERFUNCTIONS_META_KEY);\n if (key) {\n if (key.id !== functionUrl) {\n throw new Error('Metadata mismatch');\n }\n } else {\n meta.keys.push({ source: USERFUNCTIONS_META_KEY, id: functionUrl });\n }\n};\n\n// TODO: handle team owner\n\nconst presentationForIdentity = async ({ halo, timeout }: { halo: Halo; timeout?: number }) => {\n let credential: Credential | undefined;\n\n if (timeout) {\n const credentialsLoaded = new Trigger();\n halo.credentials.subscribe((c) => {\n credential = c.find(matchServiceCredential([USERFUNCTIONS_CREDENTIAL_CAPABILITY]));\n if (credential) {\n credentialsLoaded.wake();\n }\n });\n await credentialsLoaded.wait({\n timeout,\n });\n } else {\n credential = halo\n .queryCredentials()\n .toSorted((a, b) => b.issuanceDate.getTime() - a.issuanceDate.getTime())\n .find(matchServiceCredential([USERFUNCTIONS_CREDENTIAL_CAPABILITY]));\n }\n\n if (!credential) {\n throw new Error('No credential found');\n }\n log('credential found', { credential });\n // TODO(wittjosiah): If id is required to present credentials, then it should always be present for queried credentials.\n invariant(credential.id, 'beta credential missing id');\n const presentation = await halo.presentCredentials({ ids: [credential.id] });\n\n return { Authorization: `Bearer ${codec.encode(presentation)}` };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\n\nimport { type Credential } from '@dxos/client/halo';\nimport { type PublicKey } from '@dxos/keys';\n\n// TODO(burdon): Factor out to @dxos/hub-protocol.\n\nexport const matchServiceCredential =\n (capabilities: string[] = []) =>\n (credential: Credential) => {\n if (credential.subject.assertion['@type'] !== 'dxos.halo.credentials.ServiceAccess') {\n return false;\n }\n\n const { capabilities: credentialCapabilities } = credential.subject.assertion;\n return capabilities.every((capability) => credentialCapabilities.includes(capability));\n };\n\n// TODO: reconcile with @dxos/hub-protocol\n\nexport const publicKeyToDid = (key: PublicKey): DID => {\n return `did:key:${key.toHex()}`;\n};\n"],
5
- "mappings": "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",
6
- "names": ["PublicKey", "ENCODING", "HeaderCodec", "constructor", "_keyCodec", "encode", "obj", "objectToEncode", "_prepareForEncoding", "encoded", "Buffer", "from", "JSON", "stringify", "toString", "decode", "buffer", "json", "parse", "_decodeRecursive", "_recurse", "value", "isEncodedBytes", "decodeBytes", "__b", "isEncodedKey", "isEncodedDate", "decodeDate", "Uint8Array", "encodeBytes", "isKey", "Date", "encodeDate", "handler", "handled", "Array", "isArray", "result", "elem", "push", "key", "Object", "entries", "__k", "__t", "date", "getTime", "timestamp", "bytes", "codec", "HeaderCodec", "isKey", "value", "PublicKey", "encode", "key", "__k", "toHex", "decode", "fromHex", "Trigger", "invariant", "log", "matchServiceCredential", "capabilities", "credential", "subject", "assertion", "credentialCapabilities", "every", "capability", "includes", "publicKeyToDid", "key", "toHex", "USERFUNCTIONS_META_KEY", "USERFUNCTIONS_CREDENTIAL_CAPABILITY", "defaultUserFunctionsBaseUrl", "getBaseUrl", "config", "get", "uploadWorkerFunction", "clientConfig", "halo", "name", "source", "ownerDid", "functionId", "credentialLoadTimeout", "identity", "Error", "userFunctionsBaseUrl", "uploadUrl", "log", "identityKey", "toString", "response", "fetch", "method", "body", "JSON", "stringify", "script", "headers", "presentationForIdentity", "timeout", "ok", "json", "res", "status", "getUserFunctionUrlInMetadata", "meta", "keys", "find", "key", "id", "setUserFunctionUrlInMetadata", "functionUrl", "push", "credential", "credentialsLoaded", "Trigger", "credentials", "subscribe", "c", "matchServiceCredential", "wake", "wait", "queryCredentials", "toSorted", "a", "b", "issuanceDate", "getTime", "invariant", "presentation", "presentCredentials", "ids", "Authorization", "codec", "encode"]
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { PublicKey } from '@dxos/keys';\n\nimport { HeaderCodec, type EncodedKey } from './header-codec';\n\nexport const codec = new HeaderCodec<PublicKey>({\n isKey: (value: any): value is PublicKey => value instanceof PublicKey,\n encode: (key: PublicKey): EncodedKey => ({ __k: key.toHex() }),\n decode: (value: EncodedKey): PublicKey => PublicKey.fromHex(value.__k),\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): Factor out from @dxos/hub-protocol\n\nconst ENCODING = 'base64';\n\nexport type EncodedKey = { __k: string };\n\nexport type EncodedBytes = { __b: string };\n\nexport type EncodedTimestamp = { __t: number };\n\nexport interface KeyCodec<KeyType> {\n isKey(value: any): value is KeyType;\n encode(key: KeyType): EncodedKey;\n decode(value: EncodedKey): KeyType;\n}\n\n// TODO(wittjosiah): Use deepMapValues from @dxos/util -- it handles recursion for you.\nexport class HeaderCodec<Key> {\n constructor(private readonly _keyCodec: KeyCodec<Key>) {}\n\n encode(obj: any): string {\n const objectToEncode = this._prepareForEncoding(obj);\n const encoded = Buffer.from(JSON.stringify(objectToEncode));\n return encoded.toString(ENCODING);\n }\n\n decode<Type>(buffer: string): Type {\n const json = JSON.parse(Buffer.from(buffer, ENCODING).toString());\n return this._decodeRecursive(json);\n }\n\n private _decodeRecursive(obj: any): any {\n return this._recurse(obj, (value) => {\n if (isEncodedBytes(value)) {\n return decodeBytes(value.__b);\n }\n if (isEncodedKey(value)) {\n return this._keyCodec.decode(value);\n }\n if (isEncodedDate(value)) {\n return decodeDate(value);\n }\n return null;\n });\n }\n\n private _prepareForEncoding(obj: any): any {\n return this._recurse(obj, (value) => {\n if (value instanceof Uint8Array) {\n return { __b: encodeBytes(value) };\n }\n if (this._keyCodec.isKey(value)) {\n return this._keyCodec.encode(value);\n }\n if (value instanceof Date) {\n return encodeDate(value);\n }\n return null;\n });\n }\n\n private _recurse(obj: any, handler: (obj: object) => any | null): any {\n if (typeof obj !== 'object') {\n return obj;\n }\n const handled = handler(obj);\n if (handled != null) {\n return handled;\n }\n if (Array.isArray(obj)) {\n const result = [];\n for (const elem of obj) {\n result.push(this._recurse(elem, handler));\n }\n return result;\n }\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = this._recurse(value, handler);\n }\n return result;\n }\n}\n\nconst isEncodedKey = (obj: object): obj is EncodedKey => '__k' in obj && typeof obj.__k === 'string';\nconst isEncodedBytes = (obj: object): obj is EncodedBytes => '__b' in obj && typeof obj.__b === 'string';\nconst isEncodedDate = (obj: object): obj is EncodedTimestamp => '__t' in obj && typeof obj.__t === 'number';\n\nconst encodeDate = (date: Date) => ({ __t: date.getTime() });\nconst decodeDate = (timestamp: EncodedTimestamp) => new Date(timestamp.__t);\n\nconst encodeBytes = (bytes: Uint8Array) => Buffer.from(bytes).toString(ENCODING);\nconst decodeBytes = (bytes: string) => Buffer.from(bytes, ENCODING);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\n\nimport { Trigger } from '@dxos/async';\nimport { type Config } from '@dxos/client';\nimport { type Halo } from '@dxos/client-protocol';\nimport { type ObjectMeta } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type Credential } from '@dxos/protocols/proto/dxos/halo/credentials';\n\nimport { codec } from './codec';\nimport { matchServiceCredential } from './hub-protocol';\n\n// TODO: use URL scheme for source?\nconst USERFUNCTIONS_META_KEY = 'dxos.org/service/function';\nconst USERFUNCTIONS_CREDENTIAL_CAPABILITY = 'composer:beta';\n\n// TODO: Synchronize API types with server\nexport type UserFunctionUploadResult = {\n result: 'success' | 'error';\n errorMessage?: string;\n functionId?: string;\n functionVersionNumber?: number;\n};\n\nexport type UploadWorkerProps = {\n clientConfig: Config;\n halo: Halo;\n name?: string;\n source: string;\n functionId?: string;\n ownerDid: DID;\n credentialLoadTimeout?: number; // ms to wait for credentials to load\n};\n\nconst defaultUserFunctionsBaseUrl = 'https://edge-main.dxos.workers.dev/functions'; // 'http://localhost:8600';\n\nconst getBaseUrl = (config: Config) => {\n if (config.values.runtime?.services?.edge?.url) {\n const url = new URL('/functions', config.values.runtime?.services?.edge?.url);\n url.protocol = 'https';\n return url.toString();\n } else {\n return defaultUserFunctionsBaseUrl;\n }\n};\n\nexport const uploadWorkerFunction = async ({\n clientConfig,\n halo,\n name,\n source,\n ownerDid,\n functionId,\n credentialLoadTimeout,\n}: UploadWorkerProps) => {\n const identity = halo.identity.get();\n if (!identity) {\n throw new Error('Identity not available');\n }\n const userFunctionsBaseUrl = getBaseUrl(clientConfig);\n\n // TODO: codify naming convention\n const uploadUrl = `${userFunctionsBaseUrl}/${ownerDid}` + (functionId ? `/${functionId}` : '');\n\n log('Upload', { functionId, source, name, identityKey: identity.identityKey, uploadUrl: uploadUrl.toString() });\n const response = await fetch(uploadUrl, {\n method: 'PUT',\n body: JSON.stringify({ script: source, name }),\n headers: await presentationForIdentity({ halo, timeout: credentialLoadTimeout }),\n });\n if (!response.ok) {\n return (await response.json()) as UserFunctionUploadResult;\n }\n\n const res = await response.json();\n log('Upload response', { status: response.status, res });\n\n return res as UserFunctionUploadResult;\n};\n\nexport const getUserFunctionUrlInMetadata = (meta: ObjectMeta) => {\n return meta.keys.find((key) => key.source === USERFUNCTIONS_META_KEY)?.id;\n};\n\nexport const setUserFunctionUrlInMetadata = (meta: ObjectMeta, functionUrl: string) => {\n const key = meta.keys.find((key) => key.source === USERFUNCTIONS_META_KEY);\n if (key) {\n if (key.id !== functionUrl) {\n throw new Error('Metadata mismatch');\n }\n } else {\n meta.keys.push({ source: USERFUNCTIONS_META_KEY, id: functionUrl });\n }\n};\n\n// TODO: handle team owner\n\nconst presentationForIdentity = async ({ halo, timeout }: { halo: Halo; timeout?: number }) => {\n let credential: Credential | undefined;\n\n if (timeout) {\n const credentialsLoaded = new Trigger();\n halo.credentials.subscribe((c) => {\n credential = c.find(matchServiceCredential([USERFUNCTIONS_CREDENTIAL_CAPABILITY]));\n if (credential) {\n credentialsLoaded.wake();\n }\n });\n await credentialsLoaded.wait({\n timeout,\n });\n } else {\n credential = halo\n .queryCredentials()\n .toSorted((a, b) => b.issuanceDate.getTime() - a.issuanceDate.getTime())\n .find(matchServiceCredential([USERFUNCTIONS_CREDENTIAL_CAPABILITY]));\n }\n\n if (!credential) {\n throw new Error('No credential found');\n }\n log('credential found', { credential });\n // TODO(wittjosiah): If id is required to present credentials, then it should always be present for queried credentials.\n invariant(credential.id, 'beta credential missing id');\n const presentation = await halo.presentCredentials({ ids: [credential.id] });\n\n return { Authorization: `Bearer ${codec.encode(presentation)}` };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type DID } from 'iso-did/types';\n\nimport { type Credential } from '@dxos/client/halo';\nimport { type PublicKey } from '@dxos/keys';\n\n// TODO(burdon): Factor out to @dxos/hub-protocol.\n\nexport const matchServiceCredential =\n (capabilities: string[] = []) =>\n (credential: Credential) => {\n if (credential.subject.assertion['@type'] !== 'dxos.halo.credentials.ServiceAccess') {\n return false;\n }\n\n const { capabilities: credentialCapabilities } = credential.subject.assertion;\n return capabilities.every((capability) => credentialCapabilities.includes(capability));\n };\n\n// TODO: reconcile with @dxos/hub-protocol\n\nexport const publicKeyToDid = (key: PublicKey): DID => {\n return `did:key:${key.toHex()}`;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["PublicKey", "ENCODING", "HeaderCodec", "constructor", "_keyCodec", "encode", "obj", "objectToEncode", "_prepareForEncoding", "encoded", "Buffer", "from", "JSON", "stringify", "toString", "decode", "buffer", "json", "parse", "_decodeRecursive", "_recurse", "value", "isEncodedBytes", "decodeBytes", "__b", "isEncodedKey", "isEncodedDate", "decodeDate", "Uint8Array", "encodeBytes", "isKey", "Date", "encodeDate", "handler", "handled", "Array", "isArray", "result", "elem", "push", "key", "Object", "entries", "__k", "__t", "date", "getTime", "timestamp", "bytes", "codec", "HeaderCodec", "isKey", "value", "PublicKey", "encode", "key", "__k", "toHex", "decode", "fromHex", "Trigger", "invariant", "log", "matchServiceCredential", "capabilities", "credential", "subject", "assertion", "credentialCapabilities", "every", "capability", "includes", "publicKeyToDid", "key", "toHex", "USERFUNCTIONS_META_KEY", "USERFUNCTIONS_CREDENTIAL_CAPABILITY", "defaultUserFunctionsBaseUrl", "getBaseUrl", "config", "values", "runtime", "services", "edge", "url", "URL", "protocol", "toString", "uploadWorkerFunction", "clientConfig", "halo", "name", "source", "ownerDid", "functionId", "credentialLoadTimeout", "identity", "get", "Error", "userFunctionsBaseUrl", "uploadUrl", "log", "identityKey", "response", "fetch", "method", "body", "JSON", "stringify", "script", "headers", "presentationForIdentity", "timeout", "ok", "json", "res", "status", "getUserFunctionUrlInMetadata", "meta", "keys", "find", "key", "id", "setUserFunctionUrlInMetadata", "functionUrl", "push", "credential", "credentialsLoaded", "Trigger", "credentials", "subscribe", "c", "matchServiceCredential", "wake", "wait", "queryCredentials", "toSorted", "a", "b", "issuanceDate", "getTime", "invariant", "presentation", "presentCredentials", "ids", "Authorization", "codec", "encode"]
7
7
  }