@dxos/cli 0.8.4-main.28f8d3d → 0.8.4-main.2c6827d

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 (111) hide show
  1. package/dist/src/commands/debug/diagnostics.d.ts +0 -1
  2. package/dist/src/commands/debug/diagnostics.d.ts.map +1 -1
  3. package/dist/src/commands/debug/generate.d.ts +0 -1
  4. package/dist/src/commands/debug/generate.d.ts.map +1 -1
  5. package/dist/src/commands/debug/status.d.ts +0 -1
  6. package/dist/src/commands/debug/status.d.ts.map +1 -1
  7. package/dist/src/commands/debug/status.js +5 -3
  8. package/dist/src/commands/debug/status.js.map +1 -1
  9. package/dist/src/commands/device/list.d.ts +0 -1
  10. package/dist/src/commands/device/list.d.ts.map +1 -1
  11. package/dist/src/commands/device/update.d.ts +0 -1
  12. package/dist/src/commands/device/update.d.ts.map +1 -1
  13. package/dist/src/commands/edge/status.d.ts +0 -1
  14. package/dist/src/commands/edge/status.d.ts.map +1 -1
  15. package/dist/src/commands/function/trigger/list.d.ts +2 -3
  16. package/dist/src/commands/function/trigger/list.d.ts.map +1 -1
  17. package/dist/src/commands/function/trigger/list.js +5 -5
  18. package/dist/src/commands/function/trigger/list.js.map +1 -1
  19. package/dist/src/commands/function/watch.d.ts +0 -1
  20. package/dist/src/commands/function/watch.d.ts.map +1 -1
  21. package/dist/src/commands/function/watch.js +8 -6
  22. package/dist/src/commands/function/watch.js.map +1 -1
  23. package/dist/src/commands/halo/create.d.ts +0 -1
  24. package/dist/src/commands/halo/create.d.ts.map +1 -1
  25. package/dist/src/commands/halo/credential/list.d.ts +0 -1
  26. package/dist/src/commands/halo/credential/list.d.ts.map +1 -1
  27. package/dist/src/commands/halo/join.d.ts +0 -1
  28. package/dist/src/commands/halo/join.d.ts.map +1 -1
  29. package/dist/src/commands/halo/recovery/use.d.ts +0 -1
  30. package/dist/src/commands/halo/recovery/use.d.ts.map +1 -1
  31. package/dist/src/commands/halo/share.d.ts +0 -1
  32. package/dist/src/commands/halo/share.d.ts.map +1 -1
  33. package/dist/src/commands/halo/update.d.ts +0 -1
  34. package/dist/src/commands/halo/update.d.ts.map +1 -1
  35. package/dist/src/commands/info.d.ts +0 -1
  36. package/dist/src/commands/info.d.ts.map +1 -1
  37. package/dist/src/commands/profile/import.d.ts +0 -1
  38. package/dist/src/commands/profile/import.d.ts.map +1 -1
  39. package/dist/src/commands/profile/inspect.d.ts +0 -1
  40. package/dist/src/commands/profile/inspect.d.ts.map +1 -1
  41. package/dist/src/commands/reset/index.d.ts +0 -1
  42. package/dist/src/commands/reset/index.d.ts.map +1 -1
  43. package/dist/src/commands/reset/index.js +0 -8
  44. package/dist/src/commands/reset/index.js.map +1 -1
  45. package/dist/src/commands/space/join.d.ts +0 -1
  46. package/dist/src/commands/space/join.d.ts.map +1 -1
  47. package/dist/src/commands/space/list.d.ts +0 -1
  48. package/dist/src/commands/space/list.d.ts.map +1 -1
  49. package/dist/src/commands/space/members.d.ts +0 -1
  50. package/dist/src/commands/space/members.d.ts.map +1 -1
  51. package/dist/src/commands/space/query.d.ts +0 -1
  52. package/dist/src/commands/space/query.d.ts.map +1 -1
  53. package/dist/src/commands/space/query.js +1 -1
  54. package/dist/src/commands/space/query.js.map +1 -1
  55. package/dist/src/commands/space/schema/list.d.ts +0 -1
  56. package/dist/src/commands/space/schema/list.d.ts.map +1 -1
  57. package/dist/src/commands/space/schema/list.js +1 -1
  58. package/dist/src/commands/space/schema/list.js.map +1 -1
  59. package/dist/src/commands/space/share.d.ts +0 -1
  60. package/dist/src/commands/space/share.d.ts.map +1 -1
  61. package/dist/src/commands/tunnel/index.d.ts +0 -1
  62. package/dist/src/commands/tunnel/index.d.ts.map +1 -1
  63. package/dist/src/commands/tunnel/list.d.ts +0 -1
  64. package/dist/src/commands/tunnel/list.d.ts.map +1 -1
  65. package/dist/src/util/function/index.d.ts +0 -1
  66. package/dist/src/util/function/index.d.ts.map +1 -1
  67. package/dist/src/util/function/index.js +0 -1
  68. package/dist/src/util/function/index.js.map +1 -1
  69. package/dist/src/util/function/lookup.d.ts +8 -5
  70. package/dist/src/util/function/lookup.d.ts.map +1 -1
  71. package/dist/src/util/function/lookup.js +4 -4
  72. package/dist/src/util/function/lookup.js.map +1 -1
  73. package/dist/tsconfig.tsbuildinfo +1 -1
  74. package/oclif.manifest.json +122 -1301
  75. package/package.json +34 -34
  76. package/dist/src/commands/agent/agent.node.test.d.ts +0 -2
  77. package/dist/src/commands/agent/agent.node.test.d.ts.map +0 -1
  78. package/dist/src/commands/agent/agent.node.test.js +0 -178
  79. package/dist/src/commands/agent/agent.node.test.js.map +0 -1
  80. package/dist/src/commands/agent/invitations.d.ts +0 -20
  81. package/dist/src/commands/agent/invitations.d.ts.map +0 -1
  82. package/dist/src/commands/agent/invitations.js +0 -88
  83. package/dist/src/commands/agent/invitations.js.map +0 -1
  84. package/dist/src/commands/agent/list.d.ts +0 -22
  85. package/dist/src/commands/agent/list.d.ts.map +0 -1
  86. package/dist/src/commands/agent/list.js +0 -45
  87. package/dist/src/commands/agent/list.js.map +0 -1
  88. package/dist/src/commands/agent/restart.d.ts +0 -21
  89. package/dist/src/commands/agent/restart.d.ts.map +0 -1
  90. package/dist/src/commands/agent/restart.js +0 -26
  91. package/dist/src/commands/agent/restart.js.map +0 -1
  92. package/dist/src/commands/agent/start.d.ts +0 -33
  93. package/dist/src/commands/agent/start.d.ts.map +0 -1
  94. package/dist/src/commands/agent/start.js +0 -204
  95. package/dist/src/commands/agent/start.js.map +0 -1
  96. package/dist/src/commands/agent/status.d.ts +0 -19
  97. package/dist/src/commands/agent/status.d.ts.map +0 -1
  98. package/dist/src/commands/agent/status.js +0 -30
  99. package/dist/src/commands/agent/status.js.map +0 -1
  100. package/dist/src/commands/agent/stop.d.ts +0 -22
  101. package/dist/src/commands/agent/stop.d.ts.map +0 -1
  102. package/dist/src/commands/agent/stop.js +0 -49
  103. package/dist/src/commands/agent/stop.js.map +0 -1
  104. package/dist/src/commands/function/upload.d.ts +0 -34
  105. package/dist/src/commands/function/upload.d.ts.map +0 -1
  106. package/dist/src/commands/function/upload.js +0 -148
  107. package/dist/src/commands/function/upload.js.map +0 -1
  108. package/dist/src/util/function/bundle.d.ts +0 -5
  109. package/dist/src/util/function/bundle.d.ts.map +0 -1
  110. package/dist/src/util/function/bundle.js +0 -13
  111. package/dist/src/util/function/bundle.js.map +0 -1
@@ -1,204 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
- import { rmSync } from 'node:fs';
5
- import { Flags } from '@oclif/core';
6
- import chalk from 'chalk';
7
- import { Agent, AutomationPlugin, DashboardPlugin, DiscordPlugin, EchoProxyPlugin, EpochMonitorPlugin, FunctionsPlugin, QueryPlugin, parseAddress, } from '@dxos/agent';
8
- import { Trigger, asyncTimeout, runInContext, scheduleTaskInterval } from '@dxos/async';
9
- import { AgentAlreadyRunningError } from '@dxos/cli-base';
10
- import { DX_RUNTIME, getProfilePath } from '@dxos/client-protocol';
11
- import { Context } from '@dxos/context';
12
- import { BaseCommand } from '../../base';
13
- export default class Start extends BaseCommand {
14
- static enableJsonFlag = true;
15
- static description = 'Starts the agent.';
16
- static flags = {
17
- ...BaseCommand.flags,
18
- foreground: Flags.boolean({
19
- char: 'f',
20
- description: 'Run in foreground.',
21
- default: false,
22
- }),
23
- system: Flags.boolean({
24
- description: 'Run as system daemon.',
25
- default: false,
26
- }),
27
- ws: Flags.integer({
28
- description: 'Expose web socket port.',
29
- helpValue: 'port',
30
- aliases: ['web-socket'],
31
- }),
32
- http: Flags.integer({
33
- description: 'Expose http port.',
34
- helpValue: 'port',
35
- }),
36
- metrics: Flags.boolean({
37
- description: 'Start metrics recording.',
38
- }),
39
- };
40
- static examples = [
41
- {
42
- description: 'Run with .',
43
- command: 'dx agent start -f --ws=5001',
44
- },
45
- ];
46
- _ctx = new Context();
47
- _agent;
48
- async run() {
49
- if (this.flags.foreground) {
50
- // NOTE: This is invoked by the agent's forever daemon.
51
- await this._runInForeground();
52
- }
53
- else {
54
- await this._runAsDaemon(this.flags.system);
55
- }
56
- }
57
- async _runInForeground() {
58
- const socket = 'unix://' + getProfilePath(DX_RUNTIME, this.flags.profile, 'agent.sock');
59
- {
60
- // Clear out old socket file.
61
- const { path } = parseAddress(socket);
62
- rmSync(path, { force: true });
63
- }
64
- let httpParams;
65
- if (this.flags.http) {
66
- if (!process.env.DX_AGENT_HTTP_AUTHENTICATION_TOKEN || !process.env.DX_AGENT_WS_AUTHENTICATION_TOKEN) {
67
- this.log('DX_AGENT_HTTP_AUTHENTICATION_TOKEN or DX_AGENT_WS_AUTHENTICATION_TOKEN not set, http server will not be started.');
68
- }
69
- else {
70
- httpParams = {
71
- port: this.flags.http,
72
- authenticationToken: process.env.DX_AGENT_HTTP_AUTHENTICATION_TOKEN,
73
- wsAuthenticationToken: process.env.DX_AGENT_WS_AUTHENTICATION_TOKEN,
74
- };
75
- }
76
- }
77
- this._agent = new Agent({
78
- config: this.clientConfig,
79
- profile: this.flags.profile,
80
- metrics: this.flags.metrics,
81
- protocol: {
82
- socketPath: socket,
83
- webSocket: this.flags.ws,
84
- ...(httpParams ? { http: httpParams } : {}),
85
- },
86
- plugins: [
87
- new AutomationPlugin(),
88
- new DashboardPlugin(),
89
- new DiscordPlugin(),
90
- new EchoProxyPlugin(),
91
- new EpochMonitorPlugin(),
92
- new FunctionsPlugin(),
93
- new QueryPlugin(),
94
- ],
95
- });
96
- const started = new Trigger();
97
- let gracefulStopRequested;
98
- const gracefulStopComplete = new Trigger();
99
- const gracefulStop = (processSignal) => {
100
- return async () => {
101
- // Note: using this.{errors,warn,catch} in a signal handler will not cause the process to exit.
102
- if (gracefulStopRequested) {
103
- this.log('multiple graceful stop requests received, exiting immediately.');
104
- process.exit(5);
105
- }
106
- gracefulStopRequested = true;
107
- // wait for agent to finish starting before asking it to stop.
108
- asyncTimeout(started.wait(), 5_000, 'Agent start timeout').catch((err) => {
109
- this.log('agent never started, exiting.', err);
110
- process.exit(4);
111
- });
112
- if (!this._agent) {
113
- this.log('agent never started, exiting.');
114
- process.exit(3);
115
- }
116
- this.log(`${processSignal} received, shutting down agent.`);
117
- await Promise.all([
118
- asyncTimeout(this._ctx.dispose(), 1_000, 'Waiting for agent support to shutdown.'),
119
- asyncTimeout(this._agent.stop(), 5_000, 'Agent stop'),
120
- ]).catch((err) => {
121
- this.log('error in graceful shutdown: ', err);
122
- process.exit(1);
123
- });
124
- this.log('done stopping, exiting.');
125
- gracefulStopComplete.wake();
126
- };
127
- };
128
- process.on('SIGINT', gracefulStop('SIGINT'));
129
- process.on('SIGTERM', gracefulStop('SIGTERM'));
130
- // TODO(nf): Handle SIGHUP/etc.
131
- try {
132
- await this._agent.start();
133
- }
134
- catch (err) {
135
- if (err?.code === 'EAGAIN') {
136
- throw new AgentAlreadyRunningError();
137
- }
138
- throw err;
139
- }
140
- this.log('Agent started... (ctrl-c to exit)');
141
- await this._sendTelemetry();
142
- const platform = (await this._agent.client.services.services.SystemService?.getPlatform());
143
- if (!platform) {
144
- this.log('failed to get platform, could not initialize observability');
145
- }
146
- else {
147
- if (this._observability?.enabled) {
148
- await this._observability.initialize();
149
- await this._observability.setIdentityTags(this._agent.client.services.services);
150
- await this._observability.startNetworkMetrics(this._agent.client.services.services);
151
- await this._observability.startSpacesMetrics(this._agent.client, 'cli');
152
- await this._observability.startRuntimeMetrics(this._agent.client);
153
- // initAgentMetrics(this._ctx, this._observability, this._startTime);
154
- // initClientMetrics(this._ctx, this._observability, this._agent!);
155
- }
156
- }
157
- if (this.flags.ws) {
158
- this.log(`Open devtools: https://devtools.dxos.org?target=ws://localhost:${this.flags.ws}`);
159
- }
160
- started.wake();
161
- await gracefulStopComplete.wait();
162
- }
163
- async _runAsDaemon(system) {
164
- return await this.execWithDaemon(async (daemon) => {
165
- if (await daemon.isRunning(this.flags.profile)) {
166
- this.log(chalk `{red Warning}: '${this.flags.profile}' is already running.`);
167
- return;
168
- }
169
- try {
170
- const process = await daemon.start(this.flags.profile, {
171
- config: this.flags.config,
172
- metrics: this.flags.metrics,
173
- ws: this.flags.ws,
174
- timeout: this.flags.timeout,
175
- });
176
- if (process) {
177
- this.log('Agent started.');
178
- }
179
- }
180
- catch (err) {
181
- this.catch(err);
182
- }
183
- }, system);
184
- }
185
- async _sendTelemetry() {
186
- const sendTelemetry = async () => {
187
- // TODO(nf): move to observability
188
- const installationId = this._observability?.getTag('installationId');
189
- const did = this._observability?.getTag('did');
190
- this._observability?.track({
191
- installationId: installationId?.value,
192
- did: did?.value,
193
- action: 'cli.command.run.agent',
194
- properties: {
195
- profile: this.flags.profile,
196
- duration: this.duration,
197
- },
198
- });
199
- };
200
- runInContext(this._ctx, sendTelemetry);
201
- scheduleTaskInterval(this._ctx, sendTelemetry, 1000 * 60);
202
- }
203
- }
204
- //# sourceMappingURL=start.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/commands/agent/start.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { BaseCommand } from '../../base';
2
- export default class Status extends BaseCommand<typeof Status> {
3
- static enableJsonFlag: boolean;
4
- static description: string;
5
- static flags: {
6
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
- verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
- profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
- config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
- target: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
- agent: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- 'json-log': import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
- 'json-logfile': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
- };
17
- run(): Promise<any>;
18
- }
19
- //# sourceMappingURL=status.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/commands/agent/status.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,OAAgB,cAAc,UAAQ;IACtC,OAAgB,WAAW,SAAuB;IAElD,OAAgB,KAAK;;;;;;;;;;;MAEnB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;CAoB1B"}
@@ -1,30 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
- import { SystemStatus } from '@dxos/protocols/proto/dxos/client/services';
5
- import { BaseCommand } from '../../base';
6
- export default class Status extends BaseCommand {
7
- static enableJsonFlag = true;
8
- static description = 'Show agent status';
9
- static flags = {
10
- ...BaseCommand.flags,
11
- };
12
- async run() {
13
- return await this.execWithClient(async ({ client }) => {
14
- const status = client.status.get();
15
- const statusString = status !== null ? SystemStatus[status] : 'UNKNOWN';
16
- // TODO(nf): also show how we connected (or if we're in host mode?)
17
- // Output JSON directly so we can control the exit code.
18
- if (this.jsonEnabled()) {
19
- console.log(JSON.stringify({ SystemStatus: statusString }));
20
- }
21
- else {
22
- this.log(`System status: ${statusString}`);
23
- }
24
- if (status !== SystemStatus.ACTIVE) {
25
- process.exit(1);
26
- }
27
- }, { halo: false });
28
- }
29
- }
30
- //# sourceMappingURL=status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/commands/agent/status.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAA0B;IAC5D,MAAM,CAAU,cAAc,GAAG,IAAI,CAAC;IACtC,MAAM,CAAU,WAAW,GAAG,mBAAmB,CAAC;IAElD,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,KAAK;KACrB,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,OAAO,MAAM,IAAI,CAAC,cAAc,CAC9B,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,mEAAmE;YAEnE,wDAAwD;YACxD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,EACD,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;IACJ,CAAC"}
@@ -1,22 +0,0 @@
1
- import { BaseCommand } from '../../base';
2
- export default class Stop extends BaseCommand<typeof Stop> {
3
- static enableJsonFlag: boolean;
4
- static description: string;
5
- static flags: {
6
- all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
- force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- system: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
- verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
- config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
15
- target: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
- agent: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
- 'json-log': import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
- 'json-logfile': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
19
- };
20
- run(): Promise<any>;
21
- }
22
- //# sourceMappingURL=stop.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../../src/commands/agent/stop.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACxD,OAAgB,cAAc,UAAQ;IACtC,OAAgB,WAAW,SAAwB;IAEnD,OAAgB,KAAK;;;;;;;;;;;;;;MAQnB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;CA8B1B"}
@@ -1,49 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
- import { Flags } from '@oclif/core';
5
- import chalk from 'chalk';
6
- import { BaseCommand } from '../../base';
7
- export default class Stop extends BaseCommand {
8
- static enableJsonFlag = true;
9
- static description = 'Stop agent daemon.';
10
- static flags = {
11
- ...BaseCommand.flags,
12
- all: Flags.boolean({ description: 'Stop all agents.' }),
13
- force: Flags.boolean({ description: 'Force stop.' }),
14
- system: Flags.boolean({
15
- description: 'Run as system daemon.',
16
- default: false,
17
- }),
18
- };
19
- async run() {
20
- return await this.execWithDaemon(async (daemon) => {
21
- const stop = async (profile) => {
22
- try {
23
- if (this.flags.force) {
24
- this.log(chalk `Force stopping agent {yellow ${profile}}`);
25
- }
26
- const process = await daemon.stop(profile, { force: this.flags.force });
27
- if (process) {
28
- this.log('Agent stopped');
29
- }
30
- }
31
- catch (err) {
32
- this.catch(err);
33
- }
34
- };
35
- if (this.flags.all) {
36
- const processes = await daemon.list();
37
- await Promise.all(processes.map(async (process) => {
38
- if (await daemon.isRunning(process.profile)) {
39
- await stop(process.profile);
40
- }
41
- }));
42
- }
43
- else {
44
- await stop(this.flags.profile);
45
- }
46
- }, this.flags.system);
47
- }
48
- }
49
- //# sourceMappingURL=stop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../../src/commands/agent/stop.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAwB;IACxD,MAAM,CAAU,cAAc,GAAG,IAAI,CAAC;IACtC,MAAM,CAAU,WAAW,GAAG,oBAAoB,CAAC;IAEnD,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,KAAK;QACpB,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;QACvD,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QACpD,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,WAAW,EAAE,uBAAuB;YACpC,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,KAAK,EAAE,OAAe,EAAE,EAAE;gBACrC,IAAI,CAAC;oBACH,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;wBACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA,gCAAgC,OAAO,GAAG,CAAC,CAAC;oBAC5D,CAAC;oBACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;oBACxE,IAAI,OAAO,EAAE,CAAC;wBACZ,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACnB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACtC,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;oBACnC,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,OAAQ,CAAC,EAAE,CAAC;wBAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC"}
@@ -1,34 +0,0 @@
1
- import { BaseCommand } from '../../base';
2
- export default class Upload extends BaseCommand<typeof Upload> {
3
- static enableJsonFlag: boolean;
4
- static description: string;
5
- static flags: {
6
- name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
- version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
- composerScript: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
- functionId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- spaceKey: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- noSpace: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
- json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
- verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
- profile: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
- config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
- timeout: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
18
- target: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
- agent: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
- 'json-log': import("@oclif/core/interfaces").BooleanFlag<boolean>;
21
- 'json-logfile': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
22
- };
23
- static args: {
24
- file: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
25
- };
26
- run(): Promise<any>;
27
- private _loadScript;
28
- private _loadFunctionObject;
29
- private _upload;
30
- private _updateFunctionObject;
31
- private _updateComposerScript;
32
- private _getNextVersion;
33
- }
34
- //# sourceMappingURL=upload.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../src/commands/function/upload.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAKzC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC5D,OAAgB,cAAc,UAAQ;IACtC,OAAgB,WAAW,SAA2B;IAEtD,OAAgB,KAAK;;;;;;;;;;;;;;;;;MAQnB;IAEF,OAAgB,IAAI;;MAElB;IAEI,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;YAoCX,WAAW;YAgBX,mBAAmB;YAcnB,OAAO;IA0BrB,OAAO,CAAC,qBAAqB;YAgBf,qBAAqB;YA6BrB,eAAe;CAW9B"}
@@ -1,148 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
- import fs from 'node:fs';
5
- import { basename } from 'node:path';
6
- import path from 'path';
7
- import { Args, Flags } from '@oclif/core';
8
- import { asyncTimeout } from '@dxos/async';
9
- import { Obj, Ref } from '@dxos/echo';
10
- import { FunctionType, ScriptType, makeFunctionUrl, setUserFunctionUrlInMetadata } from '@dxos/functions';
11
- import { incrementSemverPatch, uploadWorkerFunction } from '@dxos/functions/edge';
12
- import { invariant } from '@dxos/invariant';
13
- import { DataType } from '@dxos/schema';
14
- import { BaseCommand } from '../../base';
15
- import { bundleScript, findFunctionByDeploymentId } from '../../util';
16
- // TODO: move to cli-composer
17
- export default class Upload extends BaseCommand {
18
- static enableJsonFlag = true;
19
- static description = 'Upload user function.';
20
- static flags = {
21
- ...BaseCommand.flags,
22
- name: Flags.string({ description: 'Function name.' }),
23
- version: Flags.string({ description: 'Function version.' }),
24
- composerScript: Flags.boolean({ description: 'Loads the script into composer.' }),
25
- functionId: Flags.string({ description: 'Existing UserFunction ID to update.' }),
26
- spaceKey: Flags.string({ description: 'Space key to create/update Script source in.' }),
27
- noSpace: Flags.boolean({ description: 'Only uploads a function, without creating a FunctionObject in ECHO.' }),
28
- };
29
- static args = {
30
- file: Args.string({ required: true }),
31
- };
32
- async run() {
33
- const { scriptFileContent, bundledScript } = await this._loadScript();
34
- if (this.flags.noSpace) {
35
- return this.execWithClient(async ({ client }) => {
36
- const identity = client.halo.identity.get();
37
- invariant(identity, 'Identity not available');
38
- const uploadResult = await this._upload(client, identity.identityKey, undefined, bundledScript);
39
- this.log(`Upload complete: ${uploadResult.functionId}, version ${uploadResult.version}`);
40
- });
41
- }
42
- return this.execWithSpace(async ({ client, space }) => {
43
- client.addTypes([FunctionType]);
44
- const identity = client.halo.identity.get();
45
- invariant(identity, 'Identity not available');
46
- const existingFunctionObject = await this._loadFunctionObject(space);
47
- const uploadResult = await this._upload(client, identity.identityKey, existingFunctionObject, bundledScript);
48
- const functionObject = this._updateFunctionObject(space, existingFunctionObject, uploadResult);
49
- if (this.flags.composerScript) {
50
- await this._updateComposerScript(client, space, functionObject, basename(this.args.file), scriptFileContent);
51
- }
52
- return uploadResult;
53
- }, { spaceKeys: this.flags.spaceKey ? [this.flags.spaceKey] : undefined });
54
- }
55
- async _loadScript() {
56
- let scriptFileContent;
57
- try {
58
- scriptFileContent = fs.readFileSync(this.args.file, 'utf8');
59
- }
60
- catch (err) {
61
- this.error(`Error reading file ${this.args.file}: ${err.message}`);
62
- }
63
- const bundleResult = await bundleScript(scriptFileContent);
64
- if (bundleResult.error || !bundleResult.bundle) {
65
- this.error(`Error bundling script ${this.args.file}: ${bundleResult.error?.message ?? 'empty output'}`);
66
- }
67
- return { scriptFileContent, bundledScript: bundleResult.bundle };
68
- }
69
- async _loadFunctionObject(space) {
70
- const matchingFunction = await findFunctionByDeploymentId(space, this.flags.functionId);
71
- if (this.flags.functionId && !matchingFunction) {
72
- this.warn(`Function ECHO object not found for ${this.flags.functionId}`);
73
- }
74
- if (this.flags.verbose && matchingFunction) {
75
- this.log(`Function ECHO object found, ID: ${matchingFunction.id}`);
76
- }
77
- return matchingFunction;
78
- }
79
- async _upload(client, ownerPublicKey, functionObject, bundledSource) {
80
- try {
81
- const result = await asyncTimeout(uploadWorkerFunction({
82
- client,
83
- ownerPublicKey,
84
- version: await this._getNextVersion(functionObject),
85
- functionId: this.flags.functionId,
86
- name: this.flags.name,
87
- source: bundledSource,
88
- }), 10_000);
89
- invariant(result.functionId, 'Upload failed.');
90
- this.log(`Uploaded function ${result.functionId}, version ${result.version}`);
91
- return result;
92
- }
93
- catch (err) {
94
- this.error(err.message);
95
- }
96
- }
97
- _updateFunctionObject(space, existingObject, uploadResult) {
98
- let functionObject = existingObject;
99
- if (!functionObject) {
100
- const name = path.basename(this.args.file, path.extname(this.args.file));
101
- functionObject = space.db.add(Obj.make(FunctionType, { name, version: uploadResult.version }));
102
- }
103
- functionObject.name = this.flags.name ?? functionObject.name;
104
- functionObject.version = uploadResult.version;
105
- setUserFunctionUrlInMetadata(Obj.getMeta(functionObject), makeFunctionUrl(uploadResult));
106
- return functionObject;
107
- }
108
- async _updateComposerScript(client, space, functionObject, scriptFileName, scriptFileContent) {
109
- client.addTypes([ScriptType, DataType.Text]);
110
- if (functionObject.source) {
111
- const script = await functionObject.source.load();
112
- const source = await script.source.load();
113
- source.content = scriptFileContent;
114
- if (this.flags.verbose) {
115
- this.log(`Updated source of ${script.id}`);
116
- }
117
- }
118
- else {
119
- const sourceObj = space.db.add(DataType.makeText(scriptFileContent));
120
- const obj = space.db.add(Obj.make(ScriptType, { name: this.flags.name ?? scriptFileName, source: Ref.make(sourceObj) }));
121
- functionObject.source = Ref.make(obj);
122
- await makeObjectNavigableInComposer(client, space, obj);
123
- if (this.flags.verbose) {
124
- this.log(`Created object, ID: ${obj.id}`);
125
- }
126
- }
127
- }
128
- async _getNextVersion(functionObject) {
129
- if (this.flags.version) {
130
- return this.flags.version;
131
- }
132
- if (functionObject) {
133
- return incrementSemverPatch(functionObject?.version ?? '0.0.0');
134
- }
135
- return '0.0.1';
136
- }
137
- }
138
- const makeObjectNavigableInComposer = async (client, space, obj) => {
139
- const collection = space.properties['dxos.org/type/Collection'];
140
- if (collection) {
141
- client.addTypes([DataType.Collection]);
142
- const composerCollection = await collection.load();
143
- if (composerCollection) {
144
- composerCollection.objects.push(Ref.make(obj));
145
- }
146
- }
147
- };
148
- //# sourceMappingURL=upload.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../../src/commands/function/upload.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC1G,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAEtE,6BAA6B;AAE7B,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAA0B;IAC5D,MAAM,CAAU,cAAc,GAAG,IAAI,CAAC;IACtC,MAAM,CAAU,WAAW,GAAG,uBAAuB,CAAC;IAEtD,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,WAAW,CAAC,KAAK;QACpB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;QACrD,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;QAC3D,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC;QACjF,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,CAAC;QAChF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,8CAA8C,EAAE,CAAC;QACvF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,qEAAqE,EAAE,CAAC;KAC/G,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACtC,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEtE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAC5C,SAAS,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;gBAE9C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;gBAEhG,IAAI,CAAC,GAAG,CAAC,oBAAoB,YAAY,CAAC,UAAU,aAAa,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CACvB,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;YAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;YAEhC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC5C,SAAS,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;YAE9C,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAErE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAC;YAE7G,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,EAAE,YAAY,CAAC,CAAC;YAE/F,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAC/G,CAAC;YACD,OAAO,YAAY,CAAC;QACtB,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CACvE,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,iBAAqC,CAAC;QAC1C,IAAI,CAAC;YACH,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAC3D,IAAI,YAAY,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,EAAE,OAAO,IAAI,cAAc,EAAE,CAAC,CAAC;QAC1G,CAAC;QAED,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,CAAC,MAAO,EAAE,CAAC;IACpE,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,KAAY;QAC5C,MAAM,gBAAgB,GAAG,MAAM,0BAA0B,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAExF,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/C,IAAI,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,gBAAgB,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,mCAAmC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,cAAyB,EACzB,cAAwC,EACxC,aAAqB;QAErB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,oBAAoB,CAAC;gBACnB,MAAM;gBACN,cAAc;gBACd,OAAO,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;gBACnD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;gBACjC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;gBACrB,MAAM,EAAE,aAAa;aACtB,CAAC,EACF,MAAM,CACP,CAAC;YACF,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,UAAU,aAAa,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9E,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,qBAAqB,CAC3B,KAAY,EACZ,cAAwC,EACxC,YAAwC;QAExC,IAAI,cAAc,GAAG,cAAc,CAAC;QACpC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACzE,cAAc,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjG,CAAC;QACD,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC;QAC7D,cAAc,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QAC9C,4BAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;QACzF,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,MAAc,EACd,KAAY,EACZ,cAA4B,EAC5B,cAAsB,EACtB,iBAAyB;QAEzB,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAE7C,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC1C,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAC;YACnC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACrE,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CACtB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAC/F,CAAC;YACF,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,6BAA6B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YACxD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,cAAwC;QACpE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,oBAAoB,CAAC,cAAc,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;;AAGH,MAAM,6BAA6B,GAAG,KAAK,EAAE,MAAc,EAAE,KAAY,EAAE,GAAuB,EAAE,EAAE;IACpG,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;IAChE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QACvC,MAAM,kBAAkB,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,kBAAkB,EAAE,CAAC;YACvB,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
@@ -1,5 +0,0 @@
1
- export declare const bundleScript: (source: string) => Promise<{
2
- bundle?: string;
3
- error?: Error;
4
- }>;
5
- //# sourceMappingURL=bundle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../../src/util/function/bundle.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAS7F,CAAC"}
@@ -1,13 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
- import { Bundler } from '@dxos/functions/bundler';
5
- export const bundleScript = async (source) => {
6
- const bundler = new Bundler({ platform: 'node', sandboxedModules: [], remoteModules: {} });
7
- const buildResult = await bundler.bundle({ source });
8
- if (buildResult.error || !buildResult.bundle) {
9
- return { error: buildResult.error || new Error('Bundle creation failed') };
10
- }
11
- return { bundle: buildResult.bundle };
12
- };
13
- //# sourceMappingURL=bundle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../src/util/function/bundle.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAA+C,EAAE;IAChG,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3F,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAErD,IAAI,WAAW,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QAC7C,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC;IAC7E,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC;AACxC,CAAC,CAAC"}