@wix/mcp 1.0.7 → 1.0.9
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/README.md +99 -95
- package/build/bin-standalone.js +16434 -0
- package/build/bin-standalone.js.map +7 -0
- package/build/cjs/index.js +24140 -0
- package/build/cjs/index.js.map +7 -0
- package/build/dts/api-call/index.d.ts +4 -0
- package/build/dts/api-call/index.d.ts.map +1 -0
- package/build/dts/api-call/index.js +150 -0
- package/build/dts/api-call/index.js.map +1 -0
- package/build/dts/auth/index.d.ts +6 -0
- package/build/dts/auth/index.d.ts.map +1 -0
- package/build/dts/auth/index.js +2 -0
- package/build/dts/auth/index.js.map +1 -0
- package/build/{bin.d.ts → dts/bin.d.ts} +3 -2
- package/build/dts/bin.d.ts.map +1 -0
- package/build/dts/bin.js +108 -0
- package/build/dts/bin.js.map +1 -0
- package/build/dts/cli-tools/cli.d.ts +5 -0
- package/build/dts/cli-tools/cli.d.ts.map +1 -0
- package/build/dts/cli-tools/cli.js +340 -0
- package/build/dts/cli-tools/cli.js.map +1 -0
- package/build/{cli-tools → dts/cli-tools}/utils.d.ts +1 -0
- package/build/dts/cli-tools/utils.d.ts.map +1 -0
- package/build/dts/cli-tools/utils.js +26 -0
- package/build/dts/cli-tools/utils.js.map +1 -0
- package/build/{docs → dts/docs}/docs.d.ts +1 -0
- package/build/dts/docs/docs.d.ts.map +1 -0
- package/build/dts/docs/docs.js +438 -0
- package/build/dts/docs/docs.js.map +1 -0
- package/build/dts/docs/fetch-article.d.ts +3 -0
- package/build/dts/docs/fetch-article.d.ts.map +1 -0
- package/build/dts/docs/fetch-article.js +20 -0
- package/build/dts/docs/fetch-article.js.map +1 -0
- package/build/dts/docs/get-to-know.d.ts +3 -0
- package/build/dts/docs/get-to-know.d.ts.map +1 -0
- package/build/dts/docs/get-to-know.js +42 -0
- package/build/dts/docs/get-to-know.js.map +1 -0
- package/build/{docs → dts/docs}/long-content.d.ts +1 -0
- package/build/dts/docs/long-content.d.ts.map +1 -0
- package/build/dts/docs/long-content.js +2 -0
- package/build/dts/docs/long-content.js.map +1 -0
- package/build/{docs → dts/docs}/semanticSearch.d.ts +1 -0
- package/build/dts/docs/semanticSearch.d.ts.map +1 -0
- package/build/dts/docs/semanticSearch.js +109 -0
- package/build/dts/docs/semanticSearch.js.map +1 -0
- package/build/dts/docs/semanticSearch.test.d.ts +2 -0
- package/build/dts/docs/semanticSearch.test.d.ts.map +1 -0
- package/build/dts/docs/semanticSearch.test.js +460 -0
- package/build/dts/docs/semanticSearch.test.js.map +1 -0
- package/build/{index.d.ts → dts/index.d.ts} +3 -0
- package/build/dts/index.d.ts.map +1 -0
- package/build/dts/index.js +8 -0
- package/build/dts/index.js.map +1 -0
- package/build/dts/infra/bi-logger.d.ts +3 -0
- package/build/dts/infra/bi-logger.d.ts.map +1 -0
- package/build/dts/infra/bi-logger.js +11 -0
- package/build/dts/infra/bi-logger.js.map +1 -0
- package/build/dts/infra/environment.d.ts +10 -0
- package/build/dts/infra/environment.d.ts.map +1 -0
- package/build/dts/infra/environment.js +28 -0
- package/build/dts/infra/environment.js.map +1 -0
- package/build/{logger.d.ts → dts/infra/logger.d.ts} +1 -0
- package/build/dts/infra/logger.d.ts.map +1 -0
- package/build/dts/infra/logger.js +62 -0
- package/build/dts/infra/logger.js.map +1 -0
- package/build/dts/infra/panorama.d.ts +8 -0
- package/build/dts/infra/panorama.d.ts.map +1 -0
- package/build/dts/infra/panorama.js +36 -0
- package/build/dts/infra/panorama.js.map +1 -0
- package/build/dts/infra/sentry.d.ts +2 -0
- package/build/dts/infra/sentry.d.ts.map +1 -0
- package/build/dts/infra/sentry.js +11 -0
- package/build/dts/infra/sentry.js.map +1 -0
- package/build/{interactive-command-tools → dts/interactive-command-tools}/eventually.d.ts +1 -0
- package/build/dts/interactive-command-tools/eventually.d.ts.map +1 -0
- package/build/dts/interactive-command-tools/eventually.js +16 -0
- package/build/dts/interactive-command-tools/eventually.js.map +1 -0
- package/build/{interactive-command-tools → dts/interactive-command-tools}/handleStdout.d.ts +1 -0
- package/build/dts/interactive-command-tools/handleStdout.d.ts.map +1 -0
- package/build/dts/interactive-command-tools/handleStdout.js +76 -0
- package/build/dts/interactive-command-tools/handleStdout.js.map +1 -0
- package/build/{interactive-command-tools → dts/interactive-command-tools}/interactive-command-utils.d.ts +1 -0
- package/build/dts/interactive-command-tools/interactive-command-utils.d.ts.map +1 -0
- package/build/dts/interactive-command-tools/interactive-command-utils.js +76 -0
- package/build/dts/interactive-command-tools/interactive-command-utils.js.map +1 -0
- package/build/{resources → dts/resources}/docs.d.ts +1 -0
- package/build/dts/resources/docs.d.ts.map +1 -0
- package/build/dts/resources/docs.js +46 -0
- package/build/dts/resources/docs.js.map +1 -0
- package/build/{support → dts/support}/index.d.ts +1 -0
- package/build/dts/support/index.d.ts.map +1 -0
- package/build/dts/support/index.js +33 -0
- package/build/dts/support/index.js.map +1 -0
- package/build/dts/tool-utils.d.ts +3 -0
- package/build/dts/tool-utils.d.ts.map +1 -0
- package/build/dts/tool-utils.js +31 -0
- package/build/dts/tool-utils.js.map +1 -0
- package/build/dts/tool-utils.spec.d.ts +2 -0
- package/build/dts/tool-utils.spec.d.ts.map +1 -0
- package/build/dts/tool-utils.spec.js +100 -0
- package/build/dts/tool-utils.spec.js.map +1 -0
- package/build/{wix-mcp-server.d.ts → dts/wix-mcp-server.d.ts} +13 -1
- package/build/dts/wix-mcp-server.d.ts.map +1 -0
- package/build/dts/wix-mcp-server.js +115 -0
- package/build/dts/wix-mcp-server.js.map +1 -0
- package/build/esm/index.js +18898 -0
- package/build/esm/index.js.map +7 -0
- package/package.json +19 -11
- package/bin.js +0 -2
- package/build/api-call/index.d.ts +0 -2
- package/build/bin.js +0 -681
- package/build/bin.js.map +0 -7
- package/build/chunk-QGIZNLF4.js +0 -8179
- package/build/chunk-QGIZNLF4.js.map +0 -7
- package/build/cli-tools/cli.d.ts +0 -4
- package/build/docs/semanticSearch.test.d.ts +0 -1
- package/build/index.js +0 -201
- package/build/index.js.map +0 -7
- package/build/panorama.d.ts +0 -2
- package/build/sentry.d.ts +0 -1
- package/build/tool-utils.d.ts +0 -1
- package/build/tool-utils.spec.d.ts +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/infra/environment.ts"],"names":[],"mappings":"AAAA,oBAAY,GAAG;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAID,eAAO,MAAM,gBAAgB,OAAsB,CAAC;AAEpD,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAgBpD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export var ENV;
|
|
2
|
+
(function (ENV) {
|
|
3
|
+
ENV["DEV"] = "DEV";
|
|
4
|
+
ENV["TEST"] = "TEST";
|
|
5
|
+
ENV["LOCAL"] = "LOCAL";
|
|
6
|
+
ENV["REMOTE"] = "REMOTE";
|
|
7
|
+
ENV["PICASSO"] = "PICASSO";
|
|
8
|
+
})(ENV || (ENV = {}));
|
|
9
|
+
const DEFAULT_ENV = ENV.LOCAL;
|
|
10
|
+
export const DEV_ENVIRONMENTS = [ENV.DEV, ENV.TEST];
|
|
11
|
+
export function getEnvironment(nodeEnv) {
|
|
12
|
+
const env = nodeEnv || process.env.NODE_ENV;
|
|
13
|
+
switch (env?.toUpperCase()) {
|
|
14
|
+
case 'DEV':
|
|
15
|
+
return ENV.DEV;
|
|
16
|
+
case 'TEST':
|
|
17
|
+
return ENV.TEST;
|
|
18
|
+
case 'LOCAL':
|
|
19
|
+
return ENV.LOCAL;
|
|
20
|
+
case 'REMOTE':
|
|
21
|
+
return ENV.REMOTE;
|
|
22
|
+
case 'PICASSO':
|
|
23
|
+
return ENV.PICASSO;
|
|
24
|
+
default:
|
|
25
|
+
return DEFAULT_ENV;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/infra/environment.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,GAMX;AAND,WAAY,GAAG;IACb,kBAAW,CAAA;IACX,oBAAa,CAAA;IACb,sBAAe,CAAA;IACf,wBAAiB,CAAA;IACjB,0BAAmB,CAAA;AACrB,CAAC,EANW,GAAG,KAAH,GAAG,QAMd;AAED,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAEpD,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,GAAG,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC5C,QAAQ,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;QAC3B,KAAK,KAAK;YACR,OAAO,GAAG,CAAC,GAAG,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,KAAK,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC,MAAM,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB;YACE,OAAO,WAAW,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/infra/logger.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,UAAU,MAAM;IACd,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACjC;AAiDD,eAAO,MAAM,MAAM,QAAqB,CAAC;AAEzC,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,SAItD,CAAC;AAEF,eAAO,MAAM,kBAAkB,YAI9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,YAI5B,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
const createNullLogger = () => {
|
|
5
|
+
return {
|
|
6
|
+
log: () => { },
|
|
7
|
+
error: () => { }
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
const createStdErrLogger = () => {
|
|
11
|
+
return {
|
|
12
|
+
log: (data) => {
|
|
13
|
+
console.error(data);
|
|
14
|
+
},
|
|
15
|
+
error: (data) => {
|
|
16
|
+
console.error(data);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
const createMcpServerLogger = (server) => {
|
|
21
|
+
return {
|
|
22
|
+
log: (data) => {
|
|
23
|
+
server.server.sendLoggingMessage({ level: 'info', data });
|
|
24
|
+
},
|
|
25
|
+
error: (data) => {
|
|
26
|
+
server.server.sendLoggingMessage({ level: 'error', data });
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
const createFileLogger = () => {
|
|
31
|
+
const filePath = path.join(homedir(), 'wix-mcp-log.txt');
|
|
32
|
+
const date = new Date()
|
|
33
|
+
.toLocaleString('en-US', { timeZone: 'Asia/Jerusalem' })
|
|
34
|
+
.replace(/,/g, '');
|
|
35
|
+
return {
|
|
36
|
+
log: (...data) => {
|
|
37
|
+
const message = `[info] ${date} - ${data.join(' ')}`;
|
|
38
|
+
fs.appendFile(filePath, `${message}\n`);
|
|
39
|
+
},
|
|
40
|
+
error: (...data) => {
|
|
41
|
+
const message = `[error] ${date} - ${data.join(' ')}`;
|
|
42
|
+
fs.appendFile(filePath, `${message}\n`);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export const logger = createNullLogger();
|
|
47
|
+
export const attachMcpServerLogger = (server) => {
|
|
48
|
+
const mcpLogger = createMcpServerLogger(server);
|
|
49
|
+
logger.log = mcpLogger.log;
|
|
50
|
+
logger.error = mcpLogger.error;
|
|
51
|
+
};
|
|
52
|
+
export const attachStdErrLogger = () => {
|
|
53
|
+
const stdErrLogger = createStdErrLogger();
|
|
54
|
+
logger.log = stdErrLogger.log;
|
|
55
|
+
logger.error = stdErrLogger.error;
|
|
56
|
+
};
|
|
57
|
+
export const attachFileLogger = () => {
|
|
58
|
+
const fileLogger = createFileLogger();
|
|
59
|
+
logger.log = fileLogger.log;
|
|
60
|
+
logger.error = fileLogger.error;
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/infra/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ENV } from './environment.js';
|
|
2
|
+
export declare const createPanoramaClient: (opts: {
|
|
3
|
+
environment: ENV;
|
|
4
|
+
sessionId: string;
|
|
5
|
+
componentId: string;
|
|
6
|
+
uuid?: string;
|
|
7
|
+
}) => import("@wix/panorama-client-node").PanoramaClient;
|
|
8
|
+
//# sourceMappingURL=panorama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panorama.d.ts","sourceRoot":"","sources":["../../../src/infra/panorama.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAW5C,eAAO,MAAM,oBAAoB,GAAI,MAAM;IACzC,WAAW,EAAE,GAAG,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,uDA2BA,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// import { createRequire } from 'module';
|
|
2
|
+
import { createGlobalConfig, panoramaClientFactory, PanoramaPlatform } from '@wix/panorama-client-node';
|
|
3
|
+
// const require = createRequire(import.meta.url);
|
|
4
|
+
// const packageJson = require('../package.json');
|
|
5
|
+
// TODO: use real package.json
|
|
6
|
+
// I temporarily disabled this because it's not working in the remote server
|
|
7
|
+
const packageJson = {
|
|
8
|
+
version: '1.0.0'
|
|
9
|
+
};
|
|
10
|
+
export const createPanoramaClient = (opts) => {
|
|
11
|
+
const globalPanoramaConfig = createGlobalConfig();
|
|
12
|
+
globalPanoramaConfig.setSessionId(opts.sessionId);
|
|
13
|
+
const panoramaFactory = panoramaClientFactory({
|
|
14
|
+
reporterOptions: {
|
|
15
|
+
silent: true
|
|
16
|
+
},
|
|
17
|
+
baseParams: {
|
|
18
|
+
uuid: opts.uuid,
|
|
19
|
+
componentId: opts.componentId,
|
|
20
|
+
platform: PanoramaPlatform.Standalone,
|
|
21
|
+
fullArtifactId: 'com.wixpress.spartans.wix-mcp',
|
|
22
|
+
artifactVersion: packageJson.version
|
|
23
|
+
},
|
|
24
|
+
data: {
|
|
25
|
+
environment: opts.environment,
|
|
26
|
+
runtime: {
|
|
27
|
+
packageVersion: packageJson.version,
|
|
28
|
+
versions: process.versions,
|
|
29
|
+
platform: process.platform,
|
|
30
|
+
arch: process.arch
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}).withGlobalConfig(globalPanoramaConfig);
|
|
34
|
+
return panoramaFactory.client();
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=panorama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panorama.js","sourceRoot":"","sources":["../../../src/infra/panorama.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AAGnC,kDAAkD;AAClD,kDAAkD;AAElD,8BAA8B;AAC9B,4EAA4E;AAC5E,MAAM,WAAW,GAAG;IAClB,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAKpC,EAAE,EAAE;IACH,MAAM,oBAAoB,GAAG,kBAAkB,EAAE,CAAC;IAClD,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAElD,MAAM,eAAe,GAAG,qBAAqB,CAAC;QAC5C,eAAe,EAAE;YACf,MAAM,EAAE,IAAI;SACb;QACD,UAAU,EAAE;YACV,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,gBAAgB,CAAC,UAAU;YACrC,cAAc,EAAE,+BAA+B;YAC/C,eAAe,EAAE,WAAW,CAAC,OAAO;SACrC;QACD,IAAI,EAAE;YACJ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE;gBACP,cAAc,EAAE,WAAW,CAAC,OAAO;gBACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB;SACF;KACF,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAE1C,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC;AAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../../../src/infra/sentry.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as Sentry from '@sentry/node';
|
|
2
|
+
Sentry.init({
|
|
3
|
+
dsn: 'https://583c5af58c664fd1977d638a693b0ada@sentry-next.wixpress.com/20924',
|
|
4
|
+
tracesSampleRate: 1.0,
|
|
5
|
+
initialScope: {
|
|
6
|
+
tags: {
|
|
7
|
+
fullArtifactId: 'com.wixpress.spartans.wix-mcp'
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=sentry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src/infra/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,EAAE,yEAAyE;IAC9E,gBAAgB,EAAE,GAAG;IACrB,YAAY,EAAE;QACZ,IAAI,EAAE;YACJ,cAAc,EAAE,+BAA+B;SAChD;KACF;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventually.d.ts","sourceRoot":"","sources":["../../../src/interactive-command-tools/eventually.ts"],"names":[],"mappings":"AAEA,UAAU,OAAO;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD,wBAA8B,UAAU,CAAC,UAAU,GAAG,IAAI,EACxD,WAAW,EAAE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,EACnD,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,UAAU,CAAC,CAarB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import waitForExpect from 'wait-for-expect';
|
|
2
|
+
const defaultOptions = {
|
|
3
|
+
timeout: 10000,
|
|
4
|
+
interval: 200
|
|
5
|
+
};
|
|
6
|
+
export default async function eventually(expectation, options) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
waitForExpect
|
|
9
|
+
.default(async () => {
|
|
10
|
+
const ret = await expectation();
|
|
11
|
+
resolve(ret);
|
|
12
|
+
}, options?.timeout ?? defaultOptions.timeout, options?.interval ?? defaultOptions.interval)
|
|
13
|
+
.catch((error) => reject(error));
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=eventually.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventually.js","sourceRoot":"","sources":["../../../src/interactive-command-tools/eventually.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAO5C,MAAM,cAAc,GAAY;IAC9B,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,GAAG;CACd,CAAC;AAEF,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,UAAU,CACtC,WAAmD,EACnD,OAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,aAAa;aACV,OAAO,CACN,KAAK,IAAI,EAAE;YACT,MAAM,GAAG,GAAG,MAAM,WAAW,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,EACD,OAAO,EAAE,OAAO,IAAI,cAAc,CAAC,OAAO,EAC1C,OAAO,EAAE,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAC7C;aACA,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleStdout.d.ts","sourceRoot":"","sources":["../../../src/interactive-command-tools/handleStdout.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAKjC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ;uBAcvC,MAAM,GAAG,MAAM;;QAErB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;4CAuBP;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;KACtC,EAAE;;;;EAsDR"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import stripAnsi from 'strip-ansi';
|
|
2
|
+
import eventually from './eventually.js';
|
|
3
|
+
import { logger } from '../infra/logger.js';
|
|
4
|
+
export function handleStdout(stdout) {
|
|
5
|
+
let checkStartIndex = 0;
|
|
6
|
+
const lines = [];
|
|
7
|
+
logger.log(`handleStdout: stdout: ${stdout}`);
|
|
8
|
+
stdout.on('data', (chunk) => {
|
|
9
|
+
logger.log(`handleStdout: chunk: ${chunk}`);
|
|
10
|
+
// log(`create-cli: chunk: ${chunk}`);
|
|
11
|
+
lines.push(...stripAnsi(chunk.toString()).split('\n'));
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
async waitForText(match, { timeout = 2 * 60 * 1000 } = {}) {
|
|
15
|
+
return eventually(() => {
|
|
16
|
+
const matchedIndex = lines.findIndex((line, index) => {
|
|
17
|
+
if (index < checkStartIndex) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (typeof match === 'string') {
|
|
21
|
+
return line.includes(match);
|
|
22
|
+
}
|
|
23
|
+
return line.match(match);
|
|
24
|
+
});
|
|
25
|
+
checkStartIndex = matchedIndex >= 0 ? matchedIndex + 1 : lines.length;
|
|
26
|
+
if (matchedIndex !== -1) {
|
|
27
|
+
return lines[matchedIndex];
|
|
28
|
+
}
|
|
29
|
+
const message = `Could not match text in output: ${match}`;
|
|
30
|
+
throw new Error(message);
|
|
31
|
+
}, { timeout });
|
|
32
|
+
},
|
|
33
|
+
async waitForAndCallback(matchesAndCallbacks, { timeout = 2 * 60 * 1000 } = {}) {
|
|
34
|
+
let stopResolve;
|
|
35
|
+
const stopPromise = new Promise((resolve) => {
|
|
36
|
+
stopResolve = resolve;
|
|
37
|
+
});
|
|
38
|
+
// Keep track of matches we've already processed
|
|
39
|
+
const processedMatches = new Set();
|
|
40
|
+
const waitPromise = eventually(() => {
|
|
41
|
+
//log(`create-cli: waiting for ${matchesAndCallbacks.length - processedMatches.size} matches`);
|
|
42
|
+
for (const { match, callback } of matchesAndCallbacks) {
|
|
43
|
+
// Skip if we've already processed this match
|
|
44
|
+
if (processedMatches.has(match)) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (lines.some((line) => line.includes(match))) {
|
|
48
|
+
logger.log(`create-cli: found match ${match}`);
|
|
49
|
+
// Add to processed matches so we don't match it again
|
|
50
|
+
processedMatches.add(match);
|
|
51
|
+
callback(() => {
|
|
52
|
+
logger.log(`create-cli: stopping match loop`);
|
|
53
|
+
stopResolve();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// log(`create-cli: waiting for ${match}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// If we've processed all matches, we're done
|
|
61
|
+
if (processedMatches.size === matchesAndCallbacks.length) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
throw new Error(`Could not find any of the remaining matches: ${matchesAndCallbacks
|
|
65
|
+
.filter((m) => !processedMatches.has(m.match))
|
|
66
|
+
.map((m) => m.match)
|
|
67
|
+
.join(', ')}`);
|
|
68
|
+
}, { timeout });
|
|
69
|
+
return Promise.race([waitPromise, stopPromise]);
|
|
70
|
+
},
|
|
71
|
+
async getOutput() {
|
|
72
|
+
return lines.join('\n');
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=handleStdout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleStdout.js","sourceRoot":"","sources":["../../../src/interactive-command-tools/handleStdout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-command-utils.d.ts","sourceRoot":"","sources":["../../../src/interactive-command-tools/interactive-command-utils.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,eAAO,MAAM,KAAK,OAAO,CAAC;AAG1B,eAAO,MAAM,kCAAkC,GAAU,kCAItD;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;CACzB,oBA0FA,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { handleStdout } from './handleStdout.js';
|
|
2
|
+
import { logger } from '../infra/logger.js';
|
|
3
|
+
export const ENTER = '\r';
|
|
4
|
+
const DOWN = '\u001b[B';
|
|
5
|
+
export const mockInteractiveGenerateCommandTool = async ({ extensionType, stdin, stdout }) => {
|
|
6
|
+
try {
|
|
7
|
+
logger.log('RunWixCliCommand: handle stdout');
|
|
8
|
+
const stdoutHandler = handleStdout(stdout);
|
|
9
|
+
logger.log('RunWixCliCommand: waiting for text');
|
|
10
|
+
await stdoutHandler.waitForText('What kind of extension would you like to generate?');
|
|
11
|
+
// Enter the extension type
|
|
12
|
+
if (extensionType === 'DASHBOARD_PAGE') {
|
|
13
|
+
// No need to press enter
|
|
14
|
+
}
|
|
15
|
+
else if (extensionType === 'BACKEND_EVENT') {
|
|
16
|
+
logger.log('RunWixCliCommand: writing DOWN 9 times');
|
|
17
|
+
for (let i = 0; i < 9; i++) {
|
|
18
|
+
stdin.write(DOWN);
|
|
19
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
logger.log('RunWixCliCommand: writing ENTER 1');
|
|
23
|
+
stdin.write(ENTER);
|
|
24
|
+
// Wait for next step
|
|
25
|
+
if (extensionType === 'DASHBOARD_PAGE') {
|
|
26
|
+
await stdoutHandler.waitForText('Page title');
|
|
27
|
+
logger.log('RunWixCliCommand: writing ENTER 2');
|
|
28
|
+
stdin.write(ENTER);
|
|
29
|
+
await stdoutHandler.waitForText('Enter the route for the new page');
|
|
30
|
+
logger.log('RunWixCliCommand: writing ENTER 3');
|
|
31
|
+
stdin.write(ENTER);
|
|
32
|
+
}
|
|
33
|
+
else if (extensionType === 'BACKEND_EVENT') {
|
|
34
|
+
await stdoutHandler.waitForText('Event folder');
|
|
35
|
+
logger.log('RunWixCliCommand: writing ENTER 2');
|
|
36
|
+
stdin.write(ENTER);
|
|
37
|
+
logger.log('RunWixCliCommand: waiting for text');
|
|
38
|
+
// Check if the text is "Would you like to install dependencies now?", if dependencies are already installed, it will not be printed
|
|
39
|
+
try {
|
|
40
|
+
await stdoutHandler.waitForText('Would you like to install dependencies now?', { timeout: 1000 });
|
|
41
|
+
logger.log('RunWixCliCommand: writing ENTER 3');
|
|
42
|
+
stdin.write(ENTER);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
if (error instanceof Error &&
|
|
46
|
+
error.message.includes('Could not match text in output')) {
|
|
47
|
+
logger.log('RunWixCliCommand: dependencies are already installed, skipping install');
|
|
48
|
+
logger.log(await stdoutHandler.getOutput());
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
logger.log('RunWixCliCommand: waiting for success message');
|
|
56
|
+
try {
|
|
57
|
+
await stdoutHandler.waitForText('Successfully', { timeout: 1000 });
|
|
58
|
+
logger.log('RunWixCliCommand: success message found');
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error instanceof Error &&
|
|
62
|
+
error.message.includes('Could not match text in output')) {
|
|
63
|
+
logger.log('RunWixCliCommand: success message not found, skipping'); // just skip and try to continue by returning the output
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return stdoutHandler.getOutput();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
logger.error('RunWixCliCommand: error', error);
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=interactive-command-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive-command-utils.js","sourceRoot":"","sources":["../../../src/interactive-command-tools/interactive-command-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/resources/docs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmDpE,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,SAAS,EACjB,SAAS,MAAM,EAAE,kBAUlB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { logger } from '../infra/logger.js';
|
|
2
|
+
const getPortalIndex = async (portalName) => {
|
|
3
|
+
const response = await fetch(`https://dev.wix.com/digor/api/portal-index?portalName=${portalName}`);
|
|
4
|
+
const data = await response.json();
|
|
5
|
+
return data;
|
|
6
|
+
};
|
|
7
|
+
const addPortalResources = async (server, portalName) => {
|
|
8
|
+
// get portal index:
|
|
9
|
+
const portalIndexResponse = await getPortalIndex(portalName);
|
|
10
|
+
logger.log(`portalIndexResponse for ${portalName}`, JSON.stringify(portalIndexResponse, null, 2));
|
|
11
|
+
// for each portalIndex entry, add a resource to the server:
|
|
12
|
+
for (const entry of portalIndexResponse.portalIndex) {
|
|
13
|
+
logger.log(`entry ${JSON.stringify(entry, null, 2)}`);
|
|
14
|
+
const name = entry.url;
|
|
15
|
+
const uri = entry.url.replace('https://dev.wix.com/docs/', 'wix-docs://');
|
|
16
|
+
logger.log(`adding resource ${name} ${uri}`);
|
|
17
|
+
server.resource(name, uri, async (uri) => {
|
|
18
|
+
logger.log(`fetching resource ${uri}`);
|
|
19
|
+
const docsURL = uri
|
|
20
|
+
.toString()
|
|
21
|
+
.replace('wix-docs://', 'https://dev.wix.com/docs/');
|
|
22
|
+
const response = await fetch(`https://dev.wix.com/digor/api/get-article-content?articleUrl=${encodeURIComponent(docsURL)}`);
|
|
23
|
+
const data = await response.json();
|
|
24
|
+
return {
|
|
25
|
+
contents: [
|
|
26
|
+
{
|
|
27
|
+
uri: uri.href,
|
|
28
|
+
text: data.articleContent || 'No content found'
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
export const addDocsResources = async (server, portals) => {
|
|
36
|
+
for (const portal of portals) {
|
|
37
|
+
try {
|
|
38
|
+
logger.log(`Processing portal: ${portal}`);
|
|
39
|
+
await addPortalResources(server, portal);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
logger.error(`Error processing portal ${portal}:`, error);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../src/resources/docs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,cAAc,GAAG,KAAK,EAAE,UAAkB,EAAE,EAAE;IAClD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,yDAAyD,UAAU,EAAE,CACtE,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,MAAiB,EAAE,UAAkB,EAAE,EAAE;IACzE,oBAAoB;IACpB,MAAM,mBAAmB,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,CACR,2BAA2B,UAAU,EAAE,EACvC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAC7C,CAAC;IAEF,4DAA4D;IAC5D,KAAK,MAAM,KAAK,IAAI,mBAAmB,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAEtD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;QACvB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,2BAA2B,EAAE,aAAa,CAAC,CAAC;QAE1E,MAAM,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;QAE7C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAQ,EAAE,EAAE;YAC5C,MAAM,CAAC,GAAG,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;YAEvC,MAAM,OAAO,GAAG,GAAG;iBAChB,QAAQ,EAAE;iBACV,OAAO,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,gEAAgE,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAC9F,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,OAAO;gBACL,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,IAAI,EAAE,IAAI,CAAC,cAAc,IAAI,kBAAkB;qBAChD;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,MAAiB,EACjB,OAAiB,EACjB,EAAE;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;YAC3C,MAAM,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/support/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,QAsClD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export function addSupportTool(server) {
|
|
3
|
+
server.tool('SupportAndFeedback', [
|
|
4
|
+
'If the user would like to provide Wix with some feedback (good or bad), about the tools in Wix MCP,',
|
|
5
|
+
'for example they used the tools provided, and they reflected satisfaction or dissatisfaction with the tools.',
|
|
6
|
+
'Also, if you encounter too many errors tyring to call the Wix API, you can also suggest the user to provide feedback to Wix using this tool.',
|
|
7
|
+
'**IMPORTANT NOTE**',
|
|
8
|
+
'This tool is not sending the message, but formats it in order to another tool to actually send it'
|
|
9
|
+
].join('\n'), {
|
|
10
|
+
requestId: z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe('request id if returned from the server in a failed API call to Wix'),
|
|
14
|
+
message: z.string().describe('The message to send to Wix')
|
|
15
|
+
}, async ({ requestId, message }) => {
|
|
16
|
+
return {
|
|
17
|
+
content: [
|
|
18
|
+
{
|
|
19
|
+
type: 'text',
|
|
20
|
+
text: `${message} ${requestId ? `request id: ${requestId}` : ''}`
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: 'text',
|
|
24
|
+
text: 'You should present the user with the formatted message above and ask if they would like to send it to Wix.' +
|
|
25
|
+
'If the user confirms, you can get the details about send feedback API from the article `https://dev.wix.com/docs/kb-only/MCP_REST_RECIPES_KB_ID/TRAIN_send_mcp_feedback_to_wix_from_user`.' +
|
|
26
|
+
'You can use the `ReadFullDocsArticle` tool to fetch the article and get the details about the API call.' +
|
|
27
|
+
'Once you have the details, you can use the `ManageWixSite` (if site id is in context) or `CallWixSiteAPI` (if site id is not in context) tool to call the API and send the feedback to Wix.'
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/support/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB;QACE,qGAAqG;QACrG,8GAA8G;QAC9G,8IAA8I;QAC9I,oBAAoB;QACpB,mGAAmG;KACpG,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ;QACE,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,oEAAoE,CACrE;QACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KAC3D,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;QAC/B,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,GAAG,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;iBAClE;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EACF,4GAA4G;wBAC5G,4LAA4L;wBAC5L,yGAAyG;wBACzG,6LAA6L;iBAChM;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-utils.d.ts","sourceRoot":"","sources":["../../src/tool-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAUrD,eAAO,MAAM,oBAAoB,GAAU,CAAC,GAAG,GAAG,EAChD,UAAU,YAAY,CAAC,GAAG,CAAC,eA4B5B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const safeParseJSON = (text) => {
|
|
2
|
+
try {
|
|
3
|
+
return JSON.parse(text);
|
|
4
|
+
}
|
|
5
|
+
catch {
|
|
6
|
+
return text;
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
export const handleWixAPIResponse = async (response) => {
|
|
10
|
+
const responseData = typeof response.data === 'string'
|
|
11
|
+
? safeParseJSON(response.data)
|
|
12
|
+
: response.data;
|
|
13
|
+
if (!response.status.toString().startsWith('2')) {
|
|
14
|
+
const requestId = response.headers.get('x-wix-request-id');
|
|
15
|
+
const errorDetails = typeof responseData === 'object'
|
|
16
|
+
? JSON.stringify(responseData)
|
|
17
|
+
: responseData;
|
|
18
|
+
throw new Error([
|
|
19
|
+
`Failed to call Wix API: ${response.status} ${response.statusText}.`,
|
|
20
|
+
requestId ? `request id: ${requestId}` : '',
|
|
21
|
+
// Wix 404 for API does not exist is huge (generic 404 page) and loaded to the context
|
|
22
|
+
response.status === 404 && errorDetails.includes('<html')
|
|
23
|
+
? 'Not found'
|
|
24
|
+
: errorDetails
|
|
25
|
+
]
|
|
26
|
+
.filter((str) => !!str)
|
|
27
|
+
.join('\n'));
|
|
28
|
+
}
|
|
29
|
+
return responseData;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=tool-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-utils.js","sourceRoot":"","sources":["../../src/tool-utils.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EACvC,QAA2B,EAC3B,EAAE;IACF,MAAM,YAAY,GAChB,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;QAC/B,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC9B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAEpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,YAAY,GAChB,OAAO,YAAY,KAAK,QAAQ;YAC9B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YAC9B,CAAC,CAAC,YAAY,CAAC;QACnB,MAAM,IAAI,KAAK,CACb;YACE,2BAA2B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG;YACpE,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;YAC3C,sFAAsF;YACtF,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACvD,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,YAAY;SACjB;aACE,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;aACtB,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;IACJ,CAAC;IAED,OAAO,YAAiB,CAAC;AAC3B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-utils.spec.d.ts","sourceRoot":"","sources":["../../src/tool-utils.spec.ts"],"names":[],"mappings":""}
|