@dxos/plugin-script 0.7.1-staging.8709ba7 → 0.7.2-main.f1adc9f

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 (75) hide show
  1. package/dist/lib/browser/{AutomationPanel-RYJJQ5QX.mjs → AutomationPanel-ELXXAKW4.mjs} +15 -10
  2. package/dist/lib/browser/AutomationPanel-ELXXAKW4.mjs.map +7 -0
  3. package/dist/lib/browser/{ScriptContainer-RLBVHRCW.mjs → ScriptContainer-IC67ILI2.mjs} +9 -12
  4. package/dist/lib/browser/ScriptContainer-IC67ILI2.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-VEW5BERN.mjs → chunk-DTVOXLPP.mjs} +9 -9
  6. package/dist/lib/browser/chunk-DTVOXLPP.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-NCZUJKJE.mjs → chunk-K7KY6YMG.mjs} +14 -10
  8. package/dist/lib/browser/chunk-K7KY6YMG.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-5GGRYRS4.mjs → chunk-KSIPC365.mjs} +17 -6
  10. package/dist/lib/browser/{chunk-5GGRYRS4.mjs.map → chunk-KSIPC365.mjs.map} +3 -3
  11. package/dist/lib/browser/edge/index.mjs +1 -1
  12. package/dist/lib/browser/index.mjs +4 -4
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/types/index.mjs +1 -1
  15. package/dist/lib/node/{AutomationPanel-3B5AGQQV.cjs → AutomationPanel-RCEBTDK7.cjs} +19 -16
  16. package/dist/lib/node/AutomationPanel-RCEBTDK7.cjs.map +7 -0
  17. package/dist/lib/node/{ScriptContainer-7VX44TH6.cjs → ScriptContainer-MRZXOY42.cjs} +22 -25
  18. package/dist/lib/node/ScriptContainer-MRZXOY42.cjs.map +7 -0
  19. package/dist/lib/node/{chunk-XS6GEYYH.cjs → chunk-2WF3LLHC.cjs} +20 -9
  20. package/dist/lib/node/{chunk-XS6GEYYH.cjs.map → chunk-2WF3LLHC.cjs.map} +3 -3
  21. package/dist/lib/node/{chunk-BJ4WIWCP.cjs → chunk-4INUJLXL.cjs} +16 -12
  22. package/dist/lib/node/chunk-4INUJLXL.cjs.map +7 -0
  23. package/dist/lib/node/{chunk-XJOH225K.cjs → chunk-T4PYTKIW.cjs} +12 -12
  24. package/dist/lib/node/chunk-T4PYTKIW.cjs.map +7 -0
  25. package/dist/lib/node/edge/index.cjs +10 -10
  26. package/dist/lib/node/edge/index.cjs.map +1 -1
  27. package/dist/lib/node/index.cjs +21 -21
  28. package/dist/lib/node/meta.json +1 -1
  29. package/dist/lib/node/types/index.cjs +4 -4
  30. package/dist/lib/node/types/index.cjs.map +1 -1
  31. package/dist/lib/node-esm/{AutomationPanel-EEGLOILM.mjs → AutomationPanel-QFKOZXLO.mjs} +15 -10
  32. package/dist/lib/node-esm/AutomationPanel-QFKOZXLO.mjs.map +7 -0
  33. package/dist/lib/node-esm/{ScriptContainer-NGYXDSLQ.mjs → ScriptContainer-A4A663FM.mjs} +9 -12
  34. package/dist/lib/node-esm/ScriptContainer-A4A663FM.mjs.map +7 -0
  35. package/dist/lib/node-esm/{chunk-P7ULFJ4T.mjs → chunk-2HYWFUEN.mjs} +9 -9
  36. package/dist/lib/node-esm/chunk-2HYWFUEN.mjs.map +7 -0
  37. package/dist/lib/node-esm/{chunk-V74XKPLC.mjs → chunk-4QWC64VN.mjs} +17 -6
  38. package/dist/lib/node-esm/{chunk-V74XKPLC.mjs.map → chunk-4QWC64VN.mjs.map} +3 -3
  39. package/dist/lib/node-esm/{chunk-DXWSRDEN.mjs → chunk-OFYGBUNI.mjs} +14 -10
  40. package/dist/lib/node-esm/chunk-OFYGBUNI.mjs.map +7 -0
  41. package/dist/lib/node-esm/edge/index.mjs +1 -1
  42. package/dist/lib/node-esm/index.mjs +4 -4
  43. package/dist/lib/node-esm/meta.json +1 -1
  44. package/dist/lib/node-esm/types/index.mjs +1 -1
  45. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts +3 -3
  46. package/dist/types/src/components/AutomationPanel/AutomationPanel.d.ts.map +1 -1
  47. package/dist/types/src/components/DebugPanel/DebugPanel.d.ts.map +1 -1
  48. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts +1 -5
  49. package/dist/types/src/components/ScriptBlock/ScriptBlock.d.ts.map +1 -1
  50. package/dist/types/src/components/ScriptBlock/ScriptBlock.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/ScriptEditor.d.ts.map +1 -1
  52. package/dist/types/src/edge/functions.d.ts.map +1 -1
  53. package/dist/types/src/types/schema.d.ts +8 -8
  54. package/dist/types/src/types/schema.d.ts.map +1 -1
  55. package/package.json +35 -36
  56. package/src/components/AutomationPanel/AutomationPanel.tsx +10 -7
  57. package/src/components/DebugPanel/DebugPanel.tsx +41 -30
  58. package/src/components/ScriptBlock/ScriptBlock.stories.tsx +5 -25
  59. package/src/components/ScriptBlock/ScriptBlock.tsx +3 -8
  60. package/src/components/ScriptEditor.tsx +4 -3
  61. package/src/components/TypescriptEditor/TypescriptEditor.tsx +1 -1
  62. package/src/edge/functions.ts +12 -1
  63. package/src/types/schema.ts +10 -6
  64. package/dist/lib/browser/AutomationPanel-RYJJQ5QX.mjs.map +0 -7
  65. package/dist/lib/browser/ScriptContainer-RLBVHRCW.mjs.map +0 -7
  66. package/dist/lib/browser/chunk-NCZUJKJE.mjs.map +0 -7
  67. package/dist/lib/browser/chunk-VEW5BERN.mjs.map +0 -7
  68. package/dist/lib/node/AutomationPanel-3B5AGQQV.cjs.map +0 -7
  69. package/dist/lib/node/ScriptContainer-7VX44TH6.cjs.map +0 -7
  70. package/dist/lib/node/chunk-BJ4WIWCP.cjs.map +0 -7
  71. package/dist/lib/node/chunk-XJOH225K.cjs.map +0 -7
  72. package/dist/lib/node-esm/AutomationPanel-EEGLOILM.mjs.map +0 -7
  73. package/dist/lib/node-esm/ScriptContainer-NGYXDSLQ.mjs.map +0 -7
  74. package/dist/lib/node-esm/chunk-DXWSRDEN.mjs.map +0 -7
  75. package/dist/lib/node-esm/chunk-P7ULFJ4T.mjs.map +0 -7
@@ -16,8 +16,8 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_XS6GEYYH_exports = {};
20
- __export(chunk_XS6GEYYH_exports, {
19
+ var chunk_2WF3LLHC_exports = {};
20
+ __export(chunk_2WF3LLHC_exports, {
21
21
  HeaderCodec: () => HeaderCodec,
22
22
  USERFUNCTIONS_PRESET_META_KEY: () => USERFUNCTIONS_PRESET_META_KEY,
23
23
  codec: () => codec,
@@ -28,7 +28,7 @@ __export(chunk_XS6GEYYH_exports, {
28
28
  setUserFunctionUrlInMetadata: () => setUserFunctionUrlInMetadata,
29
29
  uploadWorkerFunction: () => uploadWorkerFunction
30
30
  });
31
- module.exports = __toCommonJS(chunk_XS6GEYYH_exports);
31
+ module.exports = __toCommonJS(chunk_2WF3LLHC_exports);
32
32
  var import_keys = require("@dxos/keys");
33
33
  var import_async = require("@dxos/async");
34
34
  var import_invariant = require("@dxos/invariant");
@@ -133,7 +133,18 @@ var defaultUserFunctionsBaseUrl = "https://edge-main.dxos.workers.dev/functions"
133
133
  var getBaseUrl = (config) => {
134
134
  if (config.values.runtime?.services?.edge?.url) {
135
135
  const url = new URL("/functions", config.values.runtime?.services?.edge?.url);
136
- url.protocol = "https";
136
+ switch (url.protocol) {
137
+ case "http:":
138
+ case "ws:":
139
+ url.protocol = "http";
140
+ break;
141
+ case "https:":
142
+ case "wss:":
143
+ url.protocol = "https";
144
+ break;
145
+ default:
146
+ throw new Error(`Invalid protocol: ${url.protocol}`);
147
+ }
137
148
  return url.toString();
138
149
  } else {
139
150
  return defaultUserFunctionsBaseUrl;
@@ -154,7 +165,7 @@ var uploadWorkerFunction = async ({ clientConfig, halo, name, source, ownerDid,
154
165
  uploadUrl: uploadUrl.toString()
155
166
  }, {
156
167
  F: __dxlog_file,
157
- L: 76,
168
+ L: 87,
158
169
  S: void 0,
159
170
  C: (f, a) => f(...a)
160
171
  });
@@ -178,7 +189,7 @@ var uploadWorkerFunction = async ({ clientConfig, halo, name, source, ownerDid,
178
189
  res
179
190
  }, {
180
191
  F: __dxlog_file,
181
- L: 87,
192
+ L: 98,
182
193
  S: void 0,
183
194
  C: (f, a) => f(...a)
184
195
  });
@@ -227,13 +238,13 @@ var presentationForIdentity = async ({ halo, timeout }) => {
227
238
  credential
228
239
  }, {
229
240
  F: __dxlog_file,
230
- L: 133,
241
+ L: 144,
231
242
  S: void 0,
232
243
  C: (f, a) => f(...a)
233
244
  });
234
245
  (0, import_invariant.invariant)(credential.id, "beta credential missing id", {
235
246
  F: __dxlog_file,
236
- L: 135,
247
+ L: 146,
237
248
  S: void 0,
238
249
  A: [
239
250
  "credential.id",
@@ -270,4 +281,4 @@ var getInvocationUrl = (functionUrl, edgeUrl, options = {}) => {
270
281
  setUserFunctionUrlInMetadata,
271
282
  uploadWorkerFunction
272
283
  });
273
- //# sourceMappingURL=chunk-XS6GEYYH.cjs.map
284
+ //# sourceMappingURL=chunk-2WF3LLHC.cjs.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 JsonSchemaType, type ObjectMeta } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport type { SpaceId } from '@dxos/keys';\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';\nexport const USERFUNCTIONS_PRESET_META_KEY = 'dxos.org/service/function-preset';\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 meta: {\n inputSchema?: JsonSchemaType;\n };\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\n// TODO(burdon): Config.\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\nexport type InvocationOptions = {\n spaceId?: SpaceId;\n subjectId?: string;\n};\n\nexport const getInvocationUrl = (functionUrl: string, edgeUrl: string, options: InvocationOptions = {}) => {\n const baseUrl = new URL('functions/', edgeUrl);\n\n // Leading slashes cause the URL to be treated as an absolute path.\n const relativeUrl = functionUrl.replace(/^\\//, '');\n const url = new URL(`./${relativeUrl}`, baseUrl.toString());\n options.spaceId && url.searchParams.set('spaceId', options.spaceId);\n options.subjectId && url.searchParams.set('subjectId', options.subjectId);\n url.protocol = 'https';\n return url.toString();\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": ["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", "PublicKey", "toHex", "fromHex", "matchServiceCredential", "capabilities", "credential", "subject", "assertion", "credentialCapabilities", "every", "capability", "includes", "publicKeyToDid", "USERFUNCTIONS_META_KEY", "USERFUNCTIONS_PRESET_META_KEY", "USERFUNCTIONS_CREDENTIAL_CAPABILITY", "defaultUserFunctionsBaseUrl", "getBaseUrl", "config", "values", "runtime", "services", "edge", "url", "URL", "protocol", "uploadWorkerFunction", "clientConfig", "halo", "name", "source", "ownerDid", "functionId", "credentialLoadTimeout", "identity", "get", "Error", "userFunctionsBaseUrl", "uploadUrl", "log", "identityKey", "response", "fetch", "method", "body", "script", "headers", "presentationForIdentity", "timeout", "ok", "res", "status", "getUserFunctionUrlInMetadata", "meta", "keys", "find", "id", "setUserFunctionUrlInMetadata", "functionUrl", "credentialsLoaded", "Trigger", "credentials", "subscribe", "c", "wake", "wait", "queryCredentials", "toSorted", "a", "b", "issuanceDate", "invariant", "presentation", "presentCredentials", "ids", "Authorization", "getInvocationUrl", "edgeUrl", "options", "baseUrl", "relativeUrl", "replace", "spaceId", "searchParams", "set", "subjectId"]
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 JsonSchemaType, type ObjectMeta } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport type { SpaceId } from '@dxos/keys';\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';\nexport const USERFUNCTIONS_PRESET_META_KEY = 'dxos.org/service/function-preset';\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 meta: {\n inputSchema?: JsonSchemaType;\n };\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\n// TODO(burdon): Config.\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 switch (url.protocol) {\n case 'http:':\n case 'ws:':\n url.protocol = 'http';\n break;\n case 'https:':\n case 'wss:':\n url.protocol = 'https';\n break;\n default:\n throw new Error(`Invalid protocol: ${url.protocol}`);\n }\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\nexport type InvocationOptions = {\n spaceId?: SpaceId;\n subjectId?: string;\n};\n\nexport const getInvocationUrl = (functionUrl: string, edgeUrl: string, options: InvocationOptions = {}) => {\n const baseUrl = new URL('functions/', edgeUrl);\n\n // Leading slashes cause the URL to be treated as an absolute path.\n const relativeUrl = functionUrl.replace(/^\\//, '');\n const url = new URL(`./${relativeUrl}`, baseUrl.toString());\n options.spaceId && url.searchParams.set('spaceId', options.spaceId);\n options.subjectId && url.searchParams.set('subjectId', options.subjectId);\n url.protocol = 'https';\n return url.toString();\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": ["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", "PublicKey", "toHex", "fromHex", "matchServiceCredential", "capabilities", "credential", "subject", "assertion", "credentialCapabilities", "every", "capability", "includes", "publicKeyToDid", "USERFUNCTIONS_META_KEY", "USERFUNCTIONS_PRESET_META_KEY", "USERFUNCTIONS_CREDENTIAL_CAPABILITY", "defaultUserFunctionsBaseUrl", "getBaseUrl", "config", "values", "runtime", "services", "edge", "url", "URL", "protocol", "Error", "uploadWorkerFunction", "clientConfig", "halo", "name", "source", "ownerDid", "functionId", "credentialLoadTimeout", "identity", "get", "userFunctionsBaseUrl", "uploadUrl", "log", "identityKey", "response", "fetch", "method", "body", "script", "headers", "presentationForIdentity", "timeout", "ok", "res", "status", "getUserFunctionUrlInMetadata", "meta", "keys", "find", "id", "setUserFunctionUrlInMetadata", "functionUrl", "credentialsLoaded", "Trigger", "credentials", "subscribe", "c", "wake", "wait", "queryCredentials", "toSorted", "a", "b", "issuanceDate", "invariant", "presentation", "presentCredentials", "ids", "Authorization", "getInvocationUrl", "edgeUrl", "options", "baseUrl", "relativeUrl", "replace", "spaceId", "searchParams", "set", "subjectId"]
7
7
  }
@@ -26,11 +26,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_BJ4WIWCP_exports = {};
30
- __export(chunk_BJ4WIWCP_exports, {
29
+ var chunk_4INUJLXL_exports = {};
30
+ __export(chunk_4INUJLXL_exports, {
31
31
  DebugPanel: () => DebugPanel
32
32
  });
33
- module.exports = __toCommonJS(chunk_BJ4WIWCP_exports);
33
+ module.exports = __toCommonJS(chunk_4INUJLXL_exports);
34
34
  var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
35
35
  var import_react = __toESM(require("react"));
36
36
  var import_log = require("@dxos/log");
@@ -179,15 +179,13 @@ var DebugPanel = ({ classNames, functionUrl }) => {
179
179
  };
180
180
  return /* @__PURE__ */ import_react.default.createElement("div", {
181
181
  className: (0, import_react_ui_theme.mx)("flex flex-col h-full overflow-hidden", classNames)
182
- }, /* @__PURE__ */ import_react.default.createElement("div", {
183
- ref: scrollerRef,
184
- className: "flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto"
185
182
  }, /* @__PURE__ */ import_react.default.createElement(MessageThread, {
183
+ ref: scrollerRef,
186
184
  state,
187
185
  result,
188
186
  history
189
- })), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Root, {
190
- classNames: "p-2"
187
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Root, {
188
+ classNames: "p-1"
191
189
  }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
192
190
  ref: inputRef,
193
191
  autoFocus: true,
@@ -207,8 +205,14 @@ var DebugPanel = ({ classNames, functionUrl }) => {
207
205
  size: 4
208
206
  }))));
209
207
  };
210
- var MessageThread = ({ state, result, history }) => {
211
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, history.map((message, i) => /* @__PURE__ */ import_react.default.createElement("div", {
208
+ var MessageThread = /* @__PURE__ */ (0, import_react.forwardRef)(({ state, history, result }, forwardedRef) => {
209
+ if (!history.length && !result.length) {
210
+ return null;
211
+ }
212
+ return /* @__PURE__ */ import_react.default.createElement("div", {
213
+ ref: forwardedRef,
214
+ className: "flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto"
215
+ }, history.map((message, i) => /* @__PURE__ */ import_react.default.createElement("div", {
212
216
  key: i,
213
217
  className: "grid grid-cols-[2rem_1fr_2rem]"
214
218
  }, /* @__PURE__ */ import_react.default.createElement("div", {
@@ -237,7 +241,7 @@ var MessageThread = ({ state, result, history }) => {
237
241
  text: result
238
242
  }
239
243
  }))));
240
- };
244
+ });
241
245
  var MessageItem = ({ classNames, message }) => {
242
246
  const { type, text, data, error } = message;
243
247
  const wrapper = "p-1 px-2 rounded-lg bg-hoverSurface overflow-auto";
@@ -262,4 +266,4 @@ var RobotAvatar = () => /* @__PURE__ */ import_react.default.createElement(impor
262
266
  0 && (module.exports = {
263
267
  DebugPanel
264
268
  });
265
- //# sourceMappingURL=chunk-BJ4WIWCP.cjs.map
269
+ //# sourceMappingURL=chunk-4INUJLXL.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DebugPanel/DebugPanel.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, useEffect, useRef, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { Avatar, Icon, Input, type ThemedClassName, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { SCRIPT_PLUGIN } from '../../meta';\n\ntype State = 'pending' | 'responding';\n\n/**\n * Request or response.\n */\ntype Message = { type: 'request' | 'response'; text?: string; data?: any; error?: Error };\n\nexport type DebugPanelProps = ThemedClassName<{\n functionUrl?: string;\n}>;\n\nexport const DebugPanel = ({ classNames, functionUrl }: DebugPanelProps) => {\n const { t } = useTranslation(SCRIPT_PLUGIN);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const [input, setInput] = useState('');\n const [result, setResult] = useState('');\n const [state, setState] = useState<State | null>(null);\n\n // TODO(burdon): Persistent history -- at least for session (non-space ECHO data?)\n const [history, setHistory] = useState<Message[]>([]);\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n const handleScroll = () => {\n if (scrollerRef.current) {\n scrollerRef.current.scrollTop = scrollerRef.current.scrollHeight;\n }\n };\n\n const controller = useRef<AbortController>();\n useEffect(() => {\n return () => {\n handleStop();\n };\n }, []);\n\n const handleStop = () => {\n controller.current?.abort('stop');\n controller.current = undefined;\n };\n\n const handleClear = () => {\n handleStop();\n setInput('');\n setResult('');\n setHistory([]);\n inputRef.current?.focus();\n };\n\n const handleResponse = ({ text, data, error }: { text?: string; data?: any; error?: Error } = {}) => {\n controller.current = undefined;\n setHistory((history) => [...history, { type: 'response', text, data, error } satisfies Message]);\n setResult('');\n setState(null);\n handleScroll();\n };\n\n const handleRequest = async (input: string) => {\n // Returns a promise that resolves when a value has been received.\n try {\n setState('pending');\n\n let data = null;\n // Detect JSON input.\n if (input.charAt(0) === '{') {\n try {\n const validJsonString = input.replace(/'/g, '\"').replace(/([{,]\\s*)([a-zA-Z0-9_]+)(\\s*:)/g, '$1\"$2\"$3');\n data = JSON.parse(validJsonString);\n input = JSON.stringify(data, null, 2);\n } catch (err) {\n inputRef.current?.focus();\n return;\n }\n }\n\n setInput('');\n setResult('');\n setHistory((history) => [...history, { type: 'request', text: input }]);\n setTimeout(() => {\n handleScroll();\n });\n\n // Throws DOMException when aborted.\n controller.current = new AbortController();\n const response = await fetch(functionUrl!, {\n signal: controller.current.signal,\n method: 'POST',\n body: input,\n headers: {\n 'Content-Type': data ? 'application/json' : 'text/plain',\n },\n });\n\n // Check for error.\n if (!response.ok) {\n const text = await response.text();\n handleResponse({ error: new Error(text || response.statusText || String(response.status)) });\n return;\n }\n\n // Check for JSON.\n const contentType = response.headers.get('content-type');\n if (contentType === 'application/json') {\n const data = await response.json();\n handleResponse({ data });\n return;\n }\n\n // Text (including streaming).\n setState('responding');\n let text = '';\n const reader = response.body!.getReader();\n const pump = async ({ done, value }: ReadableStreamReadResult<Uint8Array>): Promise<void> => {\n text = text + new TextDecoder().decode(value);\n if (!controller.current || done) {\n handleResponse({ text });\n return;\n }\n\n setResult(text);\n setTimeout(() => {\n handleScroll();\n });\n\n return reader.read().then(pump);\n };\n\n void reader\n .read()\n .then(pump)\n .catch((err) => {\n if (err.name !== 'AbortError') {\n log.catch(err);\n }\n });\n } catch (err: any) {\n if (err !== 'stop') {\n const error = err instanceof Error ? err : new Error(err);\n handleResponse({ error });\n log.catch(err);\n } else {\n handleResponse();\n }\n }\n };\n\n return (\n <div className={mx('flex flex-col h-full overflow-hidden', classNames)}>\n {/* TODO(burdon): Replace with Thread. */}\n <MessageThread ref={scrollerRef} state={state} result={result} history={history} />\n\n <Toolbar.Root classNames='p-1'>\n <Input.Root>\n <Input.TextInput\n ref={inputRef}\n autoFocus\n placeholder={t('function request placeholder')}\n value={input}\n onChange={(ev) => setInput(ev.target.value)}\n onKeyDown={(ev) => ev.key === 'Enter' && handleRequest(input)}\n />\n </Input.Root>\n <Toolbar.Button onClick={() => handleRequest(input)}>\n <Icon icon='ph--play--regular' size={4} />\n </Toolbar.Button>\n <Toolbar.Button onClick={() => (state ? handleStop() : handleClear())}>\n <Icon icon={state ? 'ph--stop--regular' : 'ph--trash--regular'} size={4} />\n </Toolbar.Button>\n </Toolbar.Root>\n </div>\n );\n};\n\n// TODO(burdon): Replace with thread?\n// TODO(burdon): Button to delete individual messages.\n// TODO(burdon): Button to edit/re-run question.\ntype MessageThreadProps = {\n state: State | null;\n history: Message[];\n result: string;\n};\n\nconst MessageThread = forwardRef<HTMLDivElement, MessageThreadProps>(\n ({ state, history, result }: MessageThreadProps, forwardedRef) => {\n if (!history.length && !result.length) {\n return null;\n }\n\n return (\n <div ref={forwardedRef} className='flex flex-col gap-6 h-full p-2 overflow-x-hidden overflow-y-auto'>\n {history.map((message, i) => (\n <div key={i} className='grid grid-cols-[2rem_1fr_2rem]'>\n <div className='p-1'>{message.type === 'response' && <RobotAvatar />}</div>\n <div className='overflow-auto'>\n <MessageItem message={message} />\n </div>\n </div>\n ))}\n\n {result?.length > 0 && (\n <div className='grid grid-cols-[2rem_1fr_2rem]'>\n <div className='p-1'>\n {(state === 'pending' && <Icon icon='ph--spinner--regular' size={6} classNames='animate-spin' />) || (\n <Icon icon='ph--robot--regular' size={6} classNames='animate-[pulse_1s_ease-in-out_infinite]' />\n )}\n </div>\n <div className='overflow-auto'>\n <MessageItem message={{ type: 'response', text: result }} />\n </div>\n </div>\n )}\n </div>\n );\n },\n);\n\nconst MessageItem = ({ classNames, message }: ThemedClassName<{ message: Message }>) => {\n const { type, text, data, error } = message;\n const wrapper = 'p-1 px-2 rounded-lg bg-hoverSurface overflow-auto';\n return (\n <div className={mx('flex', type === 'request' ? 'ml-[1rem] justify-end' : 'mr-[1rem]', classNames)}>\n {error && <div className={mx(wrapper, 'whitespace-pre text-error')}>{String(error)}</div>}\n\n {text !== undefined && (\n <div className={mx(wrapper, type === 'request' && 'bg-primary-400 dark:bg-primary-600')}>\n {text || '\\u00D8'}\n </div>\n )}\n\n {data && (\n <SyntaxHighlighter language='json' className={mx(wrapper, 'px-8 py-2 text-xs')}>\n {JSON.stringify(data, null, 2)}\n </SyntaxHighlighter>\n )}\n </div>\n );\n};\n\nconst RobotAvatar = () => (\n <Avatar.Root size={6} variant='circle'>\n <Avatar.Frame>\n <Avatar.Icon icon='ph--robot--regular' />\n </Avatar.Frame>\n </Avatar.Root>\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["DebugPanel", "classNames", "functionUrl", "t", "useTranslation", "SCRIPT_PLUGIN", "inputRef", "useRef", "input", "setInput", "useState", "result", "setResult", "state", "setState", "history", "setHistory", "scrollerRef", "handleScroll", "current", "scrollTop", "scrollHeight", "controller", "useEffect", "handleStop", "abort", "undefined", "handleClear", "focus", "handleResponse", "text", "data", "error", "type", "handleRequest", "charAt", "validJsonString", "replace", "JSON", "parse", "stringify", "err", "setTimeout", "AbortController", "response", "fetch", "signal", "method", "body", "headers", "ok", "Error", "statusText", "String", "status", "contentType", "get", "json", "reader", "getReader", "pump", "done", "value", "TextDecoder", "decode", "read", "then", "catch", "name", "log", "React", "div", "className", "mx", "MessageThread", "ref", "Toolbar", "Root", "Input", "TextInput", "autoFocus", "placeholder", "onChange", "ev", "target", "onKeyDown", "key", "Button", "onClick", "Icon", "icon", "size", "forwardRef", "forwardedRef", "length", "map", "message", "i", "RobotAvatar", "MessageItem", "wrapper", "SyntaxHighlighter", "language", "Avatar", "variant", "Frame"]
7
+ }
@@ -16,13 +16,13 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_XJOH225K_exports = {};
20
- __export(chunk_XJOH225K_exports, {
19
+ var chunk_T4PYTKIW_exports = {};
20
+ __export(chunk_T4PYTKIW_exports, {
21
21
  FunctionType: () => FunctionType,
22
22
  ScriptAction: () => ScriptAction,
23
23
  ScriptType: () => ScriptType
24
24
  });
25
- module.exports = __toCommonJS(chunk_XJOH225K_exports);
25
+ module.exports = __toCommonJS(chunk_T4PYTKIW_exports);
26
26
  var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
27
27
  var import_echo_schema = require("@dxos/echo-schema");
28
28
  var import_types = require("@dxos/plugin-markdown/types");
@@ -33,25 +33,25 @@ var ScriptType = class extends (0, import_echo_schema.TypedObject)({
33
33
  // TODO(burdon): Change to URI?
34
34
  name: import_echo_schema.S.optional(import_echo_schema.S.String),
35
35
  description: import_echo_schema.S.optional(import_echo_schema.S.String),
36
- source: (0, import_echo_schema.ref)(import_types.TextType),
37
36
  // TODO(burdon): Change to hash of deployed content.
38
37
  // Whether source has changed since last deploy.
39
- changed: import_echo_schema.S.optional(import_echo_schema.S.Boolean)
38
+ changed: import_echo_schema.S.optional(import_echo_schema.S.Boolean),
39
+ source: (0, import_echo_schema.ref)(import_types.TextType)
40
40
  }) {
41
41
  };
42
42
  var FunctionType = class extends (0, import_echo_schema.TypedObject)({
43
43
  typename: "dxos.org/type/Function",
44
44
  version: "0.1.0"
45
45
  })({
46
- // TODO(burdon): Change to id?
47
- name: import_echo_schema.S.optional(import_echo_schema.S.String),
46
+ // TODO(burdon): Rename to id/uri?
47
+ name: import_echo_schema.S.NonEmptyString,
48
48
  version: import_echo_schema.S.Number,
49
- // Local binding to a function name.
50
- // TODO(burdon): Move binding to inner type.
51
- binding: import_echo_schema.S.optional(import_echo_schema.S.String),
52
49
  // Reference to a source script if it exists within ECHO.
50
+ // TODO(burdon): Don't ref ScriptType directly (core).
53
51
  source: import_echo_schema.S.optional((0, import_echo_schema.ref)(ScriptType)),
54
- inputSchema: import_echo_schema.S.optional(import_echo_schema.JsonSchemaType)
52
+ inputSchema: import_echo_schema.S.optional(import_echo_schema.JsonSchemaType),
53
+ // Local binding to a function name.
54
+ binding: import_echo_schema.S.optional(import_echo_schema.S.String)
55
55
  }) {
56
56
  };
57
57
  var ScriptAction;
@@ -64,4 +64,4 @@ var ScriptAction;
64
64
  ScriptAction,
65
65
  ScriptType
66
66
  });
67
- //# sourceMappingURL=chunk-XJOH225K.cjs.map
67
+ //# sourceMappingURL=chunk-T4PYTKIW.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/schema.ts", "../../../src/types/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { JsonSchemaType, ref, S, TypedObject } from '@dxos/echo-schema';\nimport { TextType } from '@dxos/plugin-markdown/types';\n\n/**\n * Source script.\n */\nexport class ScriptType extends TypedObject({\n typename: 'dxos.org/type/Script',\n version: '0.1.0',\n})({\n // TODO(burdon): Change to URI?\n name: S.optional(S.String),\n description: S.optional(S.String),\n // TODO(burdon): Change to hash of deployed content.\n // Whether source has changed since last deploy.\n changed: S.optional(S.Boolean),\n source: ref(TextType),\n}) {}\n\n/**\n * Function deployment.\n */\n// TODO(burdon): Move to core/functions.\nexport class FunctionType extends TypedObject({\n typename: 'dxos.org/type/Function',\n version: '0.1.0',\n})({\n // TODO(burdon): Rename to id/uri?\n name: S.NonEmptyString,\n version: S.Number,\n\n // Reference to a source script if it exists within ECHO.\n // TODO(burdon): Don't ref ScriptType directly (core).\n source: S.optional(ref(ScriptType)),\n\n inputSchema: S.optional(JsonSchemaType),\n\n // Local binding to a function name.\n binding: S.optional(S.String),\n}) {}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type {\n GraphBuilderProvides,\n IntentResolverProvides,\n MetadataRecordsProvides,\n SettingsProvides,\n SurfaceProvides,\n TranslationsProvides,\n} from '@dxos/app-framework';\nimport { type SchemaProvides } from '@dxos/plugin-client';\nimport { type SpaceInitProvides } from '@dxos/plugin-space';\n\nimport { SCRIPT_PLUGIN } from '../meta';\n\nexport enum ScriptAction {\n CREATE = `${SCRIPT_PLUGIN}/create`,\n}\n\nexport type ScriptSettingsProps = {};\n\nexport type ScriptPluginProvides = GraphBuilderProvides &\n IntentResolverProvides &\n MetadataRecordsProvides &\n SchemaProvides &\n SettingsProvides<ScriptSettingsProps> &\n SpaceInitProvides &\n SurfaceProvides &\n TranslationsProvides;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,yBAAoD;AACpD,mBAAyB;AAKlB,IAAMA,aAAN,kBAAyBC,gCAAY;EAC1CC,UAAU;EACVC,SAAS;AACX,CAAA,EAAG;;EAEDC,MAAMC,qBAAEC,SAASD,qBAAEE,MAAM;EACzBC,aAAaH,qBAAEC,SAASD,qBAAEE,MAAM;;;EAGhCE,SAASJ,qBAAEC,SAASD,qBAAEK,OAAO;EAC7BC,YAAQC,wBAAIC,qBAAAA;AACd,CAAA,EAAA;AAAI;AAMG,IAAMC,eAAN,kBAA2Bb,gCAAY;EAC5CC,UAAU;EACVC,SAAS;AACX,CAAA,EAAG;;EAEDC,MAAMC,qBAAEU;EACRZ,SAASE,qBAAEW;;;EAIXL,QAAQN,qBAAEC,aAASM,wBAAIZ,UAAAA,CAAAA;EAEvBiB,aAAaZ,qBAAEC,SAASY,iCAAAA;;EAGxBC,SAASd,qBAAEC,SAASD,qBAAEE,MAAM;AAC9B,CAAA,EAAA;AAAI;;UC1BQa,eAAAA;0CACD,GAAGC,mCAAAA,SAAsB,IAAA;GADxBD,iBAAAA,eAAAA,CAAAA,EAAAA;",
6
+ "names": ["ScriptType", "TypedObject", "typename", "version", "name", "S", "optional", "String", "description", "changed", "Boolean", "source", "ref", "TextType", "FunctionType", "NonEmptyString", "Number", "inputSchema", "JsonSchemaType", "binding", "ScriptAction", "SCRIPT_PLUGIN"]
7
+ }
@@ -18,18 +18,18 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var edge_exports = {};
20
20
  __export(edge_exports, {
21
- HeaderCodec: () => import_chunk_XS6GEYYH.HeaderCodec,
22
- USERFUNCTIONS_PRESET_META_KEY: () => import_chunk_XS6GEYYH.USERFUNCTIONS_PRESET_META_KEY,
23
- codec: () => import_chunk_XS6GEYYH.codec,
24
- getInvocationUrl: () => import_chunk_XS6GEYYH.getInvocationUrl,
25
- getUserFunctionUrlInMetadata: () => import_chunk_XS6GEYYH.getUserFunctionUrlInMetadata,
26
- matchServiceCredential: () => import_chunk_XS6GEYYH.matchServiceCredential,
27
- publicKeyToDid: () => import_chunk_XS6GEYYH.publicKeyToDid,
28
- setUserFunctionUrlInMetadata: () => import_chunk_XS6GEYYH.setUserFunctionUrlInMetadata,
29
- uploadWorkerFunction: () => import_chunk_XS6GEYYH.uploadWorkerFunction
21
+ HeaderCodec: () => import_chunk_2WF3LLHC.HeaderCodec,
22
+ USERFUNCTIONS_PRESET_META_KEY: () => import_chunk_2WF3LLHC.USERFUNCTIONS_PRESET_META_KEY,
23
+ codec: () => import_chunk_2WF3LLHC.codec,
24
+ getInvocationUrl: () => import_chunk_2WF3LLHC.getInvocationUrl,
25
+ getUserFunctionUrlInMetadata: () => import_chunk_2WF3LLHC.getUserFunctionUrlInMetadata,
26
+ matchServiceCredential: () => import_chunk_2WF3LLHC.matchServiceCredential,
27
+ publicKeyToDid: () => import_chunk_2WF3LLHC.publicKeyToDid,
28
+ setUserFunctionUrlInMetadata: () => import_chunk_2WF3LLHC.setUserFunctionUrlInMetadata,
29
+ uploadWorkerFunction: () => import_chunk_2WF3LLHC.uploadWorkerFunction
30
30
  });
31
31
  module.exports = __toCommonJS(edge_exports);
32
- var import_chunk_XS6GEYYH = require("../chunk-XS6GEYYH.cjs");
32
+ var import_chunk_2WF3LLHC = require("../chunk-2WF3LLHC.cjs");
33
33
  // Annotate the CommonJS export names for ESM import in node:
34
34
  0 && (module.exports = {
35
35
  HeaderCodec,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.cjs"],
4
- "sourcesContent": ["import {\n HeaderCodec,\n USERFUNCTIONS_PRESET_META_KEY,\n codec,\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n matchServiceCredential,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction\n} from \"../chunk-XS6GEYYH.cjs\";\nexport {\n HeaderCodec,\n USERFUNCTIONS_PRESET_META_KEY,\n codec,\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n matchServiceCredential,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction\n};\n//# sourceMappingURL=index.cjs.map\n"],
4
+ "sourcesContent": ["import {\n HeaderCodec,\n USERFUNCTIONS_PRESET_META_KEY,\n codec,\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n matchServiceCredential,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction\n} from \"../chunk-2WF3LLHC.cjs\";\nexport {\n HeaderCodec,\n USERFUNCTIONS_PRESET_META_KEY,\n codec,\n getInvocationUrl,\n getUserFunctionUrlInMetadata,\n matchServiceCredential,\n publicKeyToDid,\n setUserFunctionUrlInMetadata,\n uploadWorkerFunction\n};\n//# sourceMappingURL=index.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAUO;",
6
6
  "names": []
7
7
  }
@@ -31,20 +31,20 @@ __export(node_exports, {
31
31
  AutomationPanel: () => AutomationPanel,
32
32
  Bundler: () => import_chunk_WPP65EYS.Bundler,
33
33
  Compiler: () => Compiler,
34
- FunctionType: () => import_chunk_XJOH225K.FunctionType,
35
- ScriptAction: () => import_chunk_XJOH225K.ScriptAction,
34
+ FunctionType: () => import_chunk_T4PYTKIW.FunctionType,
35
+ ScriptAction: () => import_chunk_T4PYTKIW.ScriptAction,
36
36
  ScriptContainer: () => ScriptContainer,
37
37
  ScriptPlugin: () => ScriptPlugin,
38
38
  ScriptSettings: () => ScriptSettings,
39
39
  ScriptSettingsPanel: () => ScriptSettingsPanel,
40
- ScriptType: () => import_chunk_XJOH225K.ScriptType,
40
+ ScriptType: () => import_chunk_T4PYTKIW.ScriptType,
41
41
  default: () => src_default,
42
42
  initializeBundler: () => import_chunk_WPP65EYS.initializeBundler
43
43
  });
44
44
  module.exports = __toCommonJS(node_exports);
45
45
  var import_chunk_WPP65EYS = require("./chunk-WPP65EYS.cjs");
46
- var import_chunk_XS6GEYYH = require("./chunk-XS6GEYYH.cjs");
47
- var import_chunk_XJOH225K = require("./chunk-XJOH225K.cjs");
46
+ var import_chunk_2WF3LLHC = require("./chunk-2WF3LLHC.cjs");
47
+ var import_chunk_T4PYTKIW = require("./chunk-T4PYTKIW.cjs");
48
48
  var import_chunk_6LYX73ZT = require("./chunk-6LYX73ZT.cjs");
49
49
  var import_esbuild = __toESM(require("esbuild-wasm/esbuild.wasm?url"));
50
50
  var import_react = __toESM(require("react"));
@@ -149,7 +149,7 @@ var ScriptSettingsPanel = ({ script }) => {
149
149
  const { t } = (0, import_react_ui2.useTranslation)(import_chunk_6LYX73ZT.SCRIPT_PLUGIN);
150
150
  const client = (0, import_react_client2.useClient)();
151
151
  const space = (0, import_echo2.getSpace)(script);
152
- const [fn] = (0, import_echo2.useQuery)(space, import_echo2.Filter.schema(import_chunk_XJOH225K.FunctionType, (fn2) => fn2.source === script));
152
+ const [fn] = (0, import_echo2.useQuery)(space, import_echo2.Filter.schema(import_chunk_T4PYTKIW.FunctionType, (fn2) => fn2.source === script));
153
153
  const handleNameChange = (0, import_react4.useCallback)((event) => {
154
154
  script.name = event.target.value;
155
155
  }, [
@@ -167,8 +167,8 @@ var ScriptSettingsPanel = ({ script }) => {
167
167
  fn,
168
168
  binding
169
169
  ]);
170
- const functionPath = fn && (0, import_chunk_XS6GEYYH.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
171
- const functionUrl = functionPath && (0, import_chunk_XS6GEYYH.getInvocationUrl)(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
170
+ const functionPath = fn && (0, import_chunk_2WF3LLHC.getUserFunctionUrlInMetadata)((0, import_echo2.getMeta)(fn));
171
+ const functionUrl = functionPath && (0, import_chunk_2WF3LLHC.getInvocationUrl)(functionPath, client.config.values.runtime?.services?.edge?.url ?? "", {
172
172
  spaceId: space?.id
173
173
  });
174
174
  const handleCopy = (0, import_react4.useCallback)(() => functionUrl && navigator.clipboard.writeText(functionUrl), [
@@ -213,8 +213,8 @@ var ScriptSettingsPanel = ({ script }) => {
213
213
  onBlur: handleBindingBlur
214
214
  })))));
215
215
  };
216
- var AutomationPanel = (0, import_react2.lazy)(() => import("./AutomationPanel-3B5AGQQV.cjs"));
217
- var ScriptContainer = (0, import_react2.lazy)(() => import("./ScriptContainer-7VX44TH6.cjs"));
216
+ var AutomationPanel = (0, import_react2.lazy)(() => import("./AutomationPanel-RCEBTDK7.cjs"));
217
+ var ScriptContainer = (0, import_react2.lazy)(() => import("./ScriptContainer-MRZXOY42.cjs"));
218
218
  var translations_default = [
219
219
  {
220
220
  "en-US": {
@@ -262,7 +262,7 @@ var ScriptPlugin = () => {
262
262
  settings: {},
263
263
  metadata: {
264
264
  records: {
265
- [import_chunk_XJOH225K.ScriptType.typename]: {
265
+ [import_chunk_T4PYTKIW.ScriptType.typename]: {
266
266
  placeholder: [
267
267
  "object title placeholder",
268
268
  {
@@ -280,8 +280,8 @@ var ScriptPlugin = () => {
280
280
  translations: translations_default,
281
281
  echo: {
282
282
  schema: [
283
- import_chunk_XJOH225K.ScriptType,
284
- import_chunk_XJOH225K.FunctionType
283
+ import_chunk_T4PYTKIW.ScriptType,
284
+ import_chunk_T4PYTKIW.FunctionType
285
285
  ]
286
286
  },
287
287
  space: {
@@ -292,7 +292,7 @@ var ScriptPlugin = () => {
292
292
  ns: import_chunk_6LYX73ZT.SCRIPT_PLUGIN
293
293
  }
294
294
  ],
295
- action: import_chunk_XJOH225K.ScriptAction.CREATE
295
+ action: import_chunk_T4PYTKIW.ScriptAction.CREATE
296
296
  }
297
297
  },
298
298
  graph: {
@@ -303,7 +303,7 @@ var ScriptPlugin = () => {
303
303
  return [];
304
304
  }
305
305
  return (0, import_plugin_graph.createExtension)({
306
- id: import_chunk_XJOH225K.ScriptAction.CREATE,
306
+ id: import_chunk_T4PYTKIW.ScriptAction.CREATE,
307
307
  filter: (node) => (0, import_plugin_graph.isActionGroup)(node) && node.id.startsWith(import_plugin_space.SpaceAction.ADD_OBJECT),
308
308
  actions: ({ node }) => {
309
309
  const id = node.id.split("/").at(-1);
@@ -321,7 +321,7 @@ var ScriptPlugin = () => {
321
321
  await dispatch([
322
322
  {
323
323
  plugin: import_chunk_6LYX73ZT.SCRIPT_PLUGIN,
324
- action: import_chunk_XJOH225K.ScriptAction.CREATE
324
+ action: import_chunk_T4PYTKIW.ScriptAction.CREATE
325
325
  },
326
326
  {
327
327
  action: import_plugin_space.SpaceAction.ADD_OBJECT,
@@ -359,7 +359,7 @@ var ScriptPlugin = () => {
359
359
  }) : null;
360
360
  }
361
361
  case "article": {
362
- if (data.object instanceof import_chunk_XJOH225K.ScriptType) {
362
+ if (data.object instanceof import_chunk_T4PYTKIW.ScriptType) {
363
363
  return /* @__PURE__ */ import_react.default.createElement(ScriptContainer, {
364
364
  script: data.object,
365
365
  env: compiler.environment
@@ -368,7 +368,7 @@ var ScriptPlugin = () => {
368
368
  break;
369
369
  }
370
370
  case "complementary--automation": {
371
- if (data.subject instanceof import_chunk_XJOH225K.ScriptType) {
371
+ if (data.subject instanceof import_chunk_T4PYTKIW.ScriptType) {
372
372
  return {
373
373
  node: /* @__PURE__ */ import_react.default.createElement(AutomationPanel, {
374
374
  subject: data.subject
@@ -379,7 +379,7 @@ var ScriptPlugin = () => {
379
379
  break;
380
380
  }
381
381
  case "complementary--settings": {
382
- if (data.subject instanceof import_chunk_XJOH225K.ScriptType) {
382
+ if (data.subject instanceof import_chunk_T4PYTKIW.ScriptType) {
383
383
  return /* @__PURE__ */ import_react.default.createElement(ScriptSettingsPanel, {
384
384
  script: data.subject
385
385
  });
@@ -393,9 +393,9 @@ var ScriptPlugin = () => {
393
393
  intent: {
394
394
  resolver: (intent) => {
395
395
  switch (intent.action) {
396
- case import_chunk_XJOH225K.ScriptAction.CREATE: {
396
+ case import_chunk_T4PYTKIW.ScriptAction.CREATE: {
397
397
  return {
398
- data: (0, import_echo_schema.create)(import_chunk_XJOH225K.ScriptType, {
398
+ data: (0, import_echo_schema.create)(import_chunk_T4PYTKIW.ScriptType, {
399
399
  source: (0, import_echo_schema.create)(import_types.TextType, {
400
400
  content: import_chunk_WPP65EYS.templates[0].source
401
401
  })