@kevisual/api 0.0.44 → 0.0.47

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.
package/dist/query-ai.js CHANGED
@@ -255,7 +255,7 @@ class Query {
255
255
  }
256
256
  }
257
257
 
258
- // node_modules/.pnpm/@kevisual+router@0.0.69/node_modules/@kevisual/router/dist/router-define.js
258
+ // node_modules/.pnpm/@kevisual+router@0.0.70/node_modules/@kevisual/router/dist/router-define.js
259
259
  class Chain {
260
260
  object;
261
261
  app;
@@ -12,7 +12,28 @@ declare class QueryApp extends BaseQuery {
12
12
  });
13
13
  getList(data: any, opts?: DataOpts): any;
14
14
  getPublicApp(data: any, opts?: DataOpts): any;
15
- getApp(data: any, opts?: DataOpts): any;
15
+ getApp(data: {
16
+ key?: string;
17
+ version?: string;
18
+ /**
19
+ * 当app不存在,会创建一个新的,
20
+ * 之后上传文件就好了,会执行检测任务
21
+ */
22
+ create?: boolean;
23
+ }, opts?: DataOpts): any;
24
+ /**
25
+ * 发布应用
26
+ * @param data
27
+ * @param opts
28
+ * @returns
29
+ */
30
+ publichApp(data: {
31
+ id?: string;
32
+ username?: string;
33
+ detect?: boolean;
34
+ appKey?: string;
35
+ version?: string;
36
+ }, opts?: DataOpts): any;
16
37
  }
17
38
 
18
39
  export { QueryApp, appDefine, userAppDefine };
package/dist/query-app.js CHANGED
@@ -255,7 +255,7 @@ class Query {
255
255
  }
256
256
  }
257
257
 
258
- // node_modules/.pnpm/@kevisual+router@0.0.69/node_modules/@kevisual/router/dist/router-define.js
258
+ // node_modules/.pnpm/@kevisual+router@0.0.70/node_modules/@kevisual/router/dist/router-define.js
259
259
  class Chain {
260
260
  object;
261
261
  app;
@@ -515,6 +515,13 @@ class QueryApp extends BaseQuery {
515
515
  data
516
516
  }, opts);
517
517
  }
518
+ publichApp(data, opts) {
519
+ return this.query.post({
520
+ path: "app",
521
+ key: "publish",
522
+ data: { detect: true, ...data }
523
+ }, opts);
524
+ }
518
525
  }
519
526
  export {
520
527
  userAppDefine,
@@ -679,7 +679,7 @@ class QueryClient extends Query {
679
679
  }
680
680
  }
681
681
 
682
- // node_modules/.pnpm/@kevisual+router@0.0.69/node_modules/@kevisual/router/dist/router-browser.js
682
+ // node_modules/.pnpm/@kevisual+router@0.0.70/node_modules/@kevisual/router/dist/router-browser.js
683
683
  var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";
684
684
  var nanoid$2 = (size = 21) => {
685
685
  let id = "";
@@ -938,6 +938,44 @@ function requireEventemitter3() {
938
938
  }
939
939
  var eventemitter3Exports = requireEventemitter3();
940
940
  var EventEmitter = /* @__PURE__ */ getDefaultExportFromCjs(eventemitter3Exports);
941
+ function isPlainObject$1(value) {
942
+ if (!value || typeof value !== "object") {
943
+ return false;
944
+ }
945
+ const proto = Object.getPrototypeOf(value);
946
+ const hasObjectPrototype = proto === null || proto === Object.prototype || Object.getPrototypeOf(proto) === null;
947
+ if (!hasObjectPrototype) {
948
+ return false;
949
+ }
950
+ return Object.prototype.toString.call(value) === "[object Object]";
951
+ }
952
+ function isUnsafeProperty(key) {
953
+ return key === "__proto__";
954
+ }
955
+ function merge$1(target, source) {
956
+ const sourceKeys = Object.keys(source);
957
+ for (let i = 0;i < sourceKeys.length; i++) {
958
+ const key = sourceKeys[i];
959
+ if (isUnsafeProperty(key)) {
960
+ continue;
961
+ }
962
+ const sourceValue = source[key];
963
+ const targetValue = target[key];
964
+ if (isMergeableValue(sourceValue) && isMergeableValue(targetValue)) {
965
+ target[key] = merge$1(targetValue, sourceValue);
966
+ } else if (Array.isArray(sourceValue)) {
967
+ target[key] = merge$1([], sourceValue);
968
+ } else if (isPlainObject$1(sourceValue)) {
969
+ target[key] = merge$1({}, sourceValue);
970
+ } else if (targetValue === undefined || sourceValue !== undefined) {
971
+ target[key] = sourceValue;
972
+ }
973
+ }
974
+ return target;
975
+ }
976
+ function isMergeableValue(value) {
977
+ return isPlainObject$1(value) || Array.isArray(value);
978
+ }
941
979
 
942
980
  class MockProcess {
943
981
  emitter;
@@ -976,7 +1014,7 @@ class MockProcess {
976
1014
  this.process = undefined;
977
1015
  }
978
1016
  }
979
- var listenProcess = async ({ app, mockProcess, params, timeout = 10 * 60 * 60 * 1000 }) => {
1017
+ var listenProcess = async ({ app, mockProcess, params = {}, timeout = 10 * 60 * 60 * 1000 }) => {
980
1018
  const process = mockProcess || new MockProcess;
981
1019
  let isEnd = false;
982
1020
  const timer = setTimeout(() => {
@@ -989,23 +1027,25 @@ var listenProcess = async ({ app, mockProcess, params, timeout = 10 * 60 * 60 *
989
1027
  }, timeout);
990
1028
  const getParams = async () => {
991
1029
  return new Promise((resolve) => {
992
- process.on((msg) => {
1030
+ process.on((params2) => {
993
1031
  if (isEnd)
994
1032
  return;
995
1033
  isEnd = true;
996
1034
  clearTimeout(timer);
997
- resolve(msg);
1035
+ resolve(params2 || {});
998
1036
  });
999
1037
  });
1000
1038
  };
1001
1039
  try {
1002
- const { payload = {}, ...rest } = await getParams();
1003
- const msg = { ...params, ...rest, payload: { ...params?.payload, ...payload } };
1040
+ const _params = await getParams();
1041
+ const mergeParams = merge$1(params, _params);
1042
+ const msg = mergeParams?.message || {};
1043
+ const ctx = mergeParams?.context || {};
1004
1044
  if (!msg.path && !msg.id) {
1005
1045
  const route = app.routes.find((r) => r.path !== "router");
1006
1046
  msg.id = route?.id;
1007
1047
  }
1008
- const result = await app.run(msg);
1048
+ const result = await app.run(msg, ctx);
1009
1049
  const response = {
1010
1050
  success: true,
1011
1051
  data: result,
@@ -1015,6 +1055,7 @@ var listenProcess = async ({ app, mockProcess, params, timeout = 10 * 60 * 60 *
1015
1055
  process.exit?.(0);
1016
1056
  });
1017
1057
  } catch (error) {
1058
+ console.error("Error in listenProcess:", error);
1018
1059
  process.send?.({
1019
1060
  success: false,
1020
1061
  error: error.message
@@ -8011,14 +8052,17 @@ var toJSONSchema = (route) => {
8011
8052
  return pickValues;
8012
8053
  };
8013
8054
  var fromJSONSchema = (route) => {
8014
- const args = route?.metadata?.args || {};
8055
+ const args = route?.metadata?.args;
8056
+ if (!args)
8057
+ return route;
8015
8058
  const keys = Object.keys(args);
8016
8059
  const newArgs = {};
8017
8060
  for (let key of keys) {
8018
8061
  const item = args[key];
8019
8062
  newArgs[key] = fromJSONSchema$1(item);
8020
8063
  }
8021
- return newArgs;
8064
+ route.metadata.args = newArgs;
8065
+ return route;
8022
8066
  };
8023
8067
 
8024
8068
  class QueryRouter {
@@ -8357,8 +8401,8 @@ class QueryRouter {
8357
8401
  }
8358
8402
  return listenProcess({ app: this, params, ...opts });
8359
8403
  }
8360
- static toJSONSchema = toJSONSchema;
8361
- static fromJSONSchema = fromJSONSchema;
8404
+ toJSONSchema = toJSONSchema;
8405
+ fromJSONSchema = fromJSONSchema;
8362
8406
  }
8363
8407
 
8364
8408
  class QueryRouterServer extends QueryRouter {
@@ -0,0 +1 @@
1
+ export { RemoteApp } from '@kevisual/remote-app';
@@ -0,0 +1,433 @@
1
+ // node_modules/.pnpm/@kevisual+remote-app@0.0.4/node_modules/@kevisual/remote-app/dist/app.js
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __toESM = (mod, isNodeMode, target) => {
8
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
9
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
10
+ for (let key of __getOwnPropNames(mod))
11
+ if (!__hasOwnProp.call(to, key))
12
+ __defProp(to, key, {
13
+ get: () => mod[key],
14
+ enumerable: true
15
+ });
16
+ return to;
17
+ };
18
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
19
+ var require_eventemitter3 = __commonJS((exports, module) => {
20
+ var has = Object.prototype.hasOwnProperty;
21
+ var prefix = "~";
22
+ function Events() {}
23
+ if (Object.create) {
24
+ Events.prototype = Object.create(null);
25
+ if (!new Events().__proto__)
26
+ prefix = false;
27
+ }
28
+ function EE(fn, context, once) {
29
+ this.fn = fn;
30
+ this.context = context;
31
+ this.once = once || false;
32
+ }
33
+ function addListener(emitter, event, fn, context, once) {
34
+ if (typeof fn !== "function") {
35
+ throw new TypeError("The listener must be a function");
36
+ }
37
+ var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
38
+ if (!emitter._events[evt])
39
+ emitter._events[evt] = listener, emitter._eventsCount++;
40
+ else if (!emitter._events[evt].fn)
41
+ emitter._events[evt].push(listener);
42
+ else
43
+ emitter._events[evt] = [emitter._events[evt], listener];
44
+ return emitter;
45
+ }
46
+ function clearEvent(emitter, evt) {
47
+ if (--emitter._eventsCount === 0)
48
+ emitter._events = new Events;
49
+ else
50
+ delete emitter._events[evt];
51
+ }
52
+ function EventEmitter() {
53
+ this._events = new Events;
54
+ this._eventsCount = 0;
55
+ }
56
+ EventEmitter.prototype.eventNames = function eventNames() {
57
+ var names = [], events, name;
58
+ if (this._eventsCount === 0)
59
+ return names;
60
+ for (name in events = this._events) {
61
+ if (has.call(events, name))
62
+ names.push(prefix ? name.slice(1) : name);
63
+ }
64
+ if (Object.getOwnPropertySymbols) {
65
+ return names.concat(Object.getOwnPropertySymbols(events));
66
+ }
67
+ return names;
68
+ };
69
+ EventEmitter.prototype.listeners = function listeners(event) {
70
+ var evt = prefix ? prefix + event : event, handlers = this._events[evt];
71
+ if (!handlers)
72
+ return [];
73
+ if (handlers.fn)
74
+ return [handlers.fn];
75
+ for (var i = 0, l = handlers.length, ee = new Array(l);i < l; i++) {
76
+ ee[i] = handlers[i].fn;
77
+ }
78
+ return ee;
79
+ };
80
+ EventEmitter.prototype.listenerCount = function listenerCount(event) {
81
+ var evt = prefix ? prefix + event : event, listeners = this._events[evt];
82
+ if (!listeners)
83
+ return 0;
84
+ if (listeners.fn)
85
+ return 1;
86
+ return listeners.length;
87
+ };
88
+ EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
89
+ var evt = prefix ? prefix + event : event;
90
+ if (!this._events[evt])
91
+ return false;
92
+ var listeners = this._events[evt], len = arguments.length, args, i;
93
+ if (listeners.fn) {
94
+ if (listeners.once)
95
+ this.removeListener(event, listeners.fn, undefined, true);
96
+ switch (len) {
97
+ case 1:
98
+ return listeners.fn.call(listeners.context), true;
99
+ case 2:
100
+ return listeners.fn.call(listeners.context, a1), true;
101
+ case 3:
102
+ return listeners.fn.call(listeners.context, a1, a2), true;
103
+ case 4:
104
+ return listeners.fn.call(listeners.context, a1, a2, a3), true;
105
+ case 5:
106
+ return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
107
+ case 6:
108
+ return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
109
+ }
110
+ for (i = 1, args = new Array(len - 1);i < len; i++) {
111
+ args[i - 1] = arguments[i];
112
+ }
113
+ listeners.fn.apply(listeners.context, args);
114
+ } else {
115
+ var length = listeners.length, j;
116
+ for (i = 0;i < length; i++) {
117
+ if (listeners[i].once)
118
+ this.removeListener(event, listeners[i].fn, undefined, true);
119
+ switch (len) {
120
+ case 1:
121
+ listeners[i].fn.call(listeners[i].context);
122
+ break;
123
+ case 2:
124
+ listeners[i].fn.call(listeners[i].context, a1);
125
+ break;
126
+ case 3:
127
+ listeners[i].fn.call(listeners[i].context, a1, a2);
128
+ break;
129
+ case 4:
130
+ listeners[i].fn.call(listeners[i].context, a1, a2, a3);
131
+ break;
132
+ default:
133
+ if (!args)
134
+ for (j = 1, args = new Array(len - 1);j < len; j++) {
135
+ args[j - 1] = arguments[j];
136
+ }
137
+ listeners[i].fn.apply(listeners[i].context, args);
138
+ }
139
+ }
140
+ }
141
+ return true;
142
+ };
143
+ EventEmitter.prototype.on = function on(event, fn, context) {
144
+ return addListener(this, event, fn, context, false);
145
+ };
146
+ EventEmitter.prototype.once = function once(event, fn, context) {
147
+ return addListener(this, event, fn, context, true);
148
+ };
149
+ EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
150
+ var evt = prefix ? prefix + event : event;
151
+ if (!this._events[evt])
152
+ return this;
153
+ if (!fn) {
154
+ clearEvent(this, evt);
155
+ return this;
156
+ }
157
+ var listeners = this._events[evt];
158
+ if (listeners.fn) {
159
+ if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {
160
+ clearEvent(this, evt);
161
+ }
162
+ } else {
163
+ for (var i = 0, events = [], length = listeners.length;i < length; i++) {
164
+ if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) {
165
+ events.push(listeners[i]);
166
+ }
167
+ }
168
+ if (events.length)
169
+ this._events[evt] = events.length === 1 ? events[0] : events;
170
+ else
171
+ clearEvent(this, evt);
172
+ }
173
+ return this;
174
+ };
175
+ EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
176
+ var evt;
177
+ if (event) {
178
+ evt = prefix ? prefix + event : event;
179
+ if (this._events[evt])
180
+ clearEvent(this, evt);
181
+ } else {
182
+ this._events = new Events;
183
+ this._eventsCount = 0;
184
+ }
185
+ return this;
186
+ };
187
+ EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
188
+ EventEmitter.prototype.addListener = EventEmitter.prototype.on;
189
+ EventEmitter.prefixed = prefix;
190
+ EventEmitter.EventEmitter = EventEmitter;
191
+ if (typeof module !== "undefined") {
192
+ module.exports = EventEmitter;
193
+ }
194
+ });
195
+ var import__ = __toESM(require_eventemitter3(), 1);
196
+
197
+ class RemoteApp {
198
+ mainApp;
199
+ url;
200
+ id;
201
+ emitter;
202
+ isConnected;
203
+ ws;
204
+ remoteIsConnected;
205
+ isError = false;
206
+ autoReconnect;
207
+ maxReconnectAttempts;
208
+ reconnectDelay;
209
+ maxReconnectDelay;
210
+ enableBackoff;
211
+ reconnectAttempts = 0;
212
+ reconnectTimer = null;
213
+ isManuallyClosed = false;
214
+ constructor(opts) {
215
+ this.mainApp = opts?.app;
216
+ const token = opts.token;
217
+ const url = opts.url;
218
+ const id = opts.id;
219
+ this.emitter = opts?.emitter || new import__.default;
220
+ const _url = new URL(url);
221
+ if (token) {
222
+ _url.searchParams.set("token", token);
223
+ }
224
+ _url.searchParams.set("id", id);
225
+ this.url = _url.toString();
226
+ this.id = id;
227
+ this.autoReconnect = opts?.autoReconnect ?? true;
228
+ this.maxReconnectAttempts = opts?.maxReconnectAttempts ?? Infinity;
229
+ this.reconnectDelay = opts?.reconnectDelay ?? 1000;
230
+ this.maxReconnectDelay = opts?.maxReconnectDelay ?? 30000;
231
+ this.enableBackoff = opts?.enableBackoff ?? true;
232
+ this.init();
233
+ }
234
+ async isConnect() {
235
+ const that = this;
236
+ if (this.isConnected) {
237
+ return true;
238
+ }
239
+ if (this.reconnectTimer !== null) {
240
+ console.log(`远程应用 ${this.id} 正在重连中...`);
241
+ }
242
+ return new Promise((resolve) => {
243
+ const timeout = setTimeout(() => {
244
+ resolve(false);
245
+ that.emitter.off("open", listenOnce);
246
+ }, 5000);
247
+ const listenOnce = () => {
248
+ clearTimeout(timeout);
249
+ that.isConnected = true;
250
+ that.remoteIsConnected = true;
251
+ resolve(true);
252
+ };
253
+ that.emitter.once("open", listenOnce);
254
+ });
255
+ }
256
+ getWsURL(url) {
257
+ const { protocol } = new URL(url);
258
+ const wsProtocol = protocol === "https:" ? "wss:" : "ws:";
259
+ const wsURL = url.toString().replace(protocol, wsProtocol);
260
+ return wsURL;
261
+ }
262
+ async init() {
263
+ if (!this.url) {
264
+ throw new Error("No url provided for remote app");
265
+ }
266
+ if (!this.id) {
267
+ throw new Error("No id provided for remote app");
268
+ }
269
+ this.isError = false;
270
+ if (this.ws) {
271
+ this.ws.close();
272
+ }
273
+ const ws = new WebSocket(this.getWsURL(this.url));
274
+ const that = this;
275
+ ws.onopen = function() {
276
+ that.isConnected = true;
277
+ that.onOpen();
278
+ };
279
+ ws.onclose = function() {
280
+ that.isConnected = false;
281
+ that.onClose();
282
+ };
283
+ ws.onmessage = function(event) {
284
+ that.onMessage(event.data);
285
+ };
286
+ ws.onerror = function(error) {
287
+ that.onError(error);
288
+ };
289
+ this.ws = ws;
290
+ }
291
+ onOpen() {
292
+ this.isError = false;
293
+ this.reconnectAttempts = 0;
294
+ if (this.reconnectTimer) {
295
+ clearTimeout(this.reconnectTimer);
296
+ this.reconnectTimer = null;
297
+ }
298
+ this.emitter.emit("open", this.id);
299
+ }
300
+ onClose() {
301
+ console.log("远程应用关闭:", this.id);
302
+ this.isConnected = false;
303
+ this.emitter.emit("close", this.id);
304
+ if (this.autoReconnect && !this.isManuallyClosed) {
305
+ this.scheduleReconnect();
306
+ }
307
+ }
308
+ calculateReconnectDelay() {
309
+ if (!this.enableBackoff) {
310
+ return this.reconnectDelay;
311
+ }
312
+ const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts);
313
+ return Math.min(delay, this.maxReconnectDelay);
314
+ }
315
+ scheduleReconnect() {
316
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
317
+ console.error(`远程应用 ${this.id} 已达到最大重连次数 ${this.maxReconnectAttempts},停止重连`);
318
+ this.emitter.emit("maxReconnectAttemptsReached", this.id);
319
+ return;
320
+ }
321
+ if (this.reconnectTimer) {
322
+ clearTimeout(this.reconnectTimer);
323
+ }
324
+ const delay = this.calculateReconnectDelay();
325
+ this.reconnectAttempts++;
326
+ console.log(`远程应用 ${this.id} 将在 ${delay}ms 后尝试第 ${this.reconnectAttempts} 次重连`);
327
+ this.reconnectTimer = setTimeout(() => {
328
+ this.reconnectTimer = null;
329
+ try {
330
+ this.init();
331
+ } catch (error) {
332
+ console.error(`远程应用 ${this.id} 重连失败:`, error);
333
+ this.emitter.emit("reconnectFailed", { id: this.id, attempt: this.reconnectAttempts, error });
334
+ this.scheduleReconnect();
335
+ }
336
+ }, delay);
337
+ }
338
+ disconnect() {
339
+ this.isManuallyClosed = true;
340
+ this.autoReconnect = false;
341
+ if (this.reconnectTimer) {
342
+ clearTimeout(this.reconnectTimer);
343
+ this.reconnectTimer = null;
344
+ }
345
+ if (this.ws) {
346
+ this.ws.close();
347
+ }
348
+ }
349
+ reconnect() {
350
+ this.isManuallyClosed = false;
351
+ this.reconnectAttempts = 0;
352
+ if (this.reconnectTimer) {
353
+ clearTimeout(this.reconnectTimer);
354
+ this.reconnectTimer = null;
355
+ }
356
+ this.init();
357
+ }
358
+ onMessage(data) {
359
+ this.emitter.emit("message", data);
360
+ }
361
+ onError(error) {
362
+ console.error("远程应用错误:", this.id, error);
363
+ this.isError = true;
364
+ this.emitter.emit("error", error);
365
+ }
366
+ on(event, listener) {
367
+ this.emitter.on(event, listener);
368
+ return () => {
369
+ this.emitter.off(event, listener);
370
+ };
371
+ }
372
+ json(data) {
373
+ this.ws.send(JSON.stringify(data));
374
+ }
375
+ listenProxy() {
376
+ const remoteApp = this;
377
+ const app = this.mainApp;
378
+ const listenFn = async (event) => {
379
+ try {
380
+ const data = event.toString();
381
+ const body = JSON.parse(data);
382
+ const bodyData = body?.data;
383
+ const message = bodyData?.message || {};
384
+ const context = bodyData?.context || {};
385
+ if (body?.code === 401) {
386
+ console.error("远程应用认证失败,请检查 token 是否正确");
387
+ this.isError = true;
388
+ return;
389
+ }
390
+ if (body?.type !== "proxy")
391
+ return;
392
+ if (!body.id) {
393
+ remoteApp.json({
394
+ id: body.id,
395
+ data: {
396
+ code: 400,
397
+ message: "id is required"
398
+ }
399
+ });
400
+ return;
401
+ }
402
+ const res = await app.run(message, context);
403
+ remoteApp.json({
404
+ id: body.id,
405
+ data: {
406
+ code: res.code,
407
+ data: res.data,
408
+ message: res.message
409
+ }
410
+ });
411
+ } catch (error) {
412
+ console.error("处理远程代理请求出错:", error);
413
+ }
414
+ };
415
+ remoteApp.json({
416
+ id: this.id,
417
+ type: "registryClient"
418
+ });
419
+ remoteApp.emitter.on("message", listenFn);
420
+ const closeMessage = () => {
421
+ remoteApp.emitter.off("message", listenFn);
422
+ };
423
+ remoteApp.emitter.once("close", () => {
424
+ closeMessage();
425
+ });
426
+ return () => {
427
+ closeMessage();
428
+ };
429
+ }
430
+ }
431
+ export {
432
+ RemoteApp
433
+ };
@@ -255,7 +255,7 @@ class Query {
255
255
  }
256
256
  }
257
257
 
258
- // node_modules/.pnpm/@kevisual+router@0.0.69/node_modules/@kevisual/router/dist/router-define.js
258
+ // node_modules/.pnpm/@kevisual+router@0.0.70/node_modules/@kevisual/router/dist/router-define.js
259
259
  class Chain {
260
260
  object;
261
261
  app;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kevisual/api",
3
- "version": "0.0.44",
3
+ "version": "0.0.47",
4
4
  "description": "",
5
5
  "main": "mod.ts",
6
6
  "scripts": {
@@ -21,18 +21,20 @@
21
21
  "type": "module",
22
22
  "devDependencies": {
23
23
  "@kevisual/cache": "^0.0.5",
24
- "@kevisual/code-builder": "^0.0.5",
24
+ "@kevisual/code-builder": "^0.0.6",
25
25
  "@kevisual/query": "^0.0.39",
26
- "@kevisual/router": "^0.0.69",
26
+ "@kevisual/remote-app": "^0.0.4",
27
+ "@kevisual/router": "^0.0.70",
27
28
  "@kevisual/types": "^0.0.12",
28
29
  "@kevisual/use-config": "^1.0.30",
29
- "@types/spark-md5": "^3.0.5",
30
30
  "@types/bun": "^1.3.8",
31
31
  "@types/crypto-js": "^4.2.2",
32
32
  "@types/node": "^25.2.0",
33
+ "@types/spark-md5": "^3.0.5",
33
34
  "crypto-js": "^4.2.0",
34
35
  "dotenv": "^17.2.3",
35
- "fast-glob": "^3.3.3"
36
+ "fast-glob": "^3.3.3",
37
+ "ws": "npm:@kevisual/ws"
36
38
  },
37
39
  "dependencies": {
38
40
  "@kevisual/js-filter": "^0.0.5",
@@ -22,11 +22,38 @@ export class QueryApp extends BaseQuery {
22
22
  data: data,
23
23
  }, opts);
24
24
  }
25
- getApp(data: any, opts?: DataOpts) {
25
+ getApp(data: {
26
+ key?: string;
27
+ version?: string;
28
+ /**
29
+ * 当app不存在,会创建一个新的,
30
+ * 之后上传文件就好了,会执行检测任务
31
+ */
32
+ create?: boolean;
33
+ }, opts?: DataOpts) {
26
34
  return this.query.post({
27
35
  path: 'app',
28
36
  key: 'get',
29
37
  data: data,
30
38
  }, opts);
31
39
  }
40
+ /**
41
+ * 发布应用
42
+ * @param data
43
+ * @param opts
44
+ * @returns
45
+ */
46
+ publichApp(data: {
47
+ id?: string;
48
+ username?: string,
49
+ detect?: boolean,
50
+ appKey?: string;
51
+ version?: string;
52
+ }, opts?: DataOpts) {
53
+ return this.query.post({
54
+ path: 'app',
55
+ key: 'publish',
56
+ data: { detect: true, ...data },
57
+ }, opts);
58
+ }
32
59
  }
@@ -0,0 +1,5 @@
1
+ import { RemoteApp } from '@kevisual/remote-app'
2
+
3
+ export {
4
+ RemoteApp
5
+ }