@botpress/cli 0.4.2 → 0.4.4
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/api/client.js +14 -19
- package/dist/api/client.js.map +2 -2
- package/dist/api/paging.js +42 -0
- package/dist/api/paging.js.map +7 -0
- package/dist/code-generation/index.js +12 -4
- package/dist/code-generation/index.js.map +2 -2
- package/dist/code-generation/integration-implementation.js +1 -38
- package/dist/code-generation/integration-implementation.js.map +2 -2
- package/dist/code-generation/integration-instance.js +2 -1
- package/dist/code-generation/integration-instance.js.map +2 -2
- package/dist/code-generation/map-integration.js +72 -0
- package/dist/code-generation/map-integration.js.map +7 -0
- package/dist/code-generation/typings.js.map +1 -1
- package/dist/command-implementations/add-command.js +27 -5
- package/dist/command-implementations/add-command.js.map +2 -2
- package/dist/command-implementations/deploy-command.js +8 -2
- package/dist/command-implementations/deploy-command.js.map +2 -2
- package/dist/command-implementations/dev-command.js +3 -2
- package/dist/command-implementations/dev-command.js.map +2 -2
- package/dist/command-implementations/integration-commands.js +6 -0
- package/dist/command-implementations/integration-commands.js.map +2 -2
- package/dist/command-implementations/login-command.js +4 -2
- package/dist/command-implementations/login-command.js.map +2 -2
- package/dist/command-implementations/project-command.js +35 -6
- package/dist/command-implementations/project-command.js.map +3 -3
- package/dist/integration-ref.js +10 -0
- package/dist/integration-ref.js.map +2 -2
- package/dist/integration-ref.test.js +76 -0
- package/dist/integration-ref.test.js.map +7 -0
- package/package.json +3 -3
- package/templates/echo-bot/package.json +2 -2
- package/templates/empty-integration/package.json +2 -2
package/dist/api/client.js
CHANGED
|
@@ -27,14 +27,15 @@ __export(client_exports, {
|
|
|
27
27
|
ApiClient: () => ApiClient
|
|
28
28
|
});
|
|
29
29
|
module.exports = __toCommonJS(client_exports);
|
|
30
|
-
var
|
|
30
|
+
var bpclient = __toESM(require("@botpress/client"));
|
|
31
31
|
var import_lodash = __toESM(require("lodash"));
|
|
32
32
|
var import_integration_ref = require("../integration-ref");
|
|
33
|
+
var paging = __toESM(require("./paging"));
|
|
33
34
|
class ApiClient {
|
|
34
35
|
constructor(props, _logger) {
|
|
35
36
|
this._logger = _logger;
|
|
36
37
|
const { apiUrl, token, workspaceId } = props;
|
|
37
|
-
this.client = new
|
|
38
|
+
this.client = new bpclient.Client({ apiUrl, token, workspaceId });
|
|
38
39
|
this.url = apiUrl;
|
|
39
40
|
this.token = token;
|
|
40
41
|
this.workspaceId = workspaceId;
|
|
@@ -59,10 +60,17 @@ class ApiClient {
|
|
|
59
60
|
return;
|
|
60
61
|
}
|
|
61
62
|
async findPrivateIntegration(ref) {
|
|
63
|
+
const { workspaceId } = this;
|
|
62
64
|
if (ref.type === "id") {
|
|
63
|
-
return this.validateStatus(
|
|
65
|
+
return this.validateStatus(
|
|
66
|
+
() => this.client.getIntegration(ref).then((r) => ({ ...r.integration, workspaceId })),
|
|
67
|
+
404
|
|
68
|
+
);
|
|
64
69
|
}
|
|
65
|
-
return this.validateStatus(
|
|
70
|
+
return this.validateStatus(
|
|
71
|
+
() => this.client.getIntegrationByName(ref).then((r) => ({ ...r.integration, workspaceId })),
|
|
72
|
+
404
|
|
73
|
+
);
|
|
66
74
|
}
|
|
67
75
|
async findPublicIntegration(ref) {
|
|
68
76
|
if (ref.type === "id") {
|
|
@@ -73,27 +81,14 @@ class ApiClient {
|
|
|
73
81
|
async testLogin() {
|
|
74
82
|
await this.client.listBots({});
|
|
75
83
|
}
|
|
76
|
-
|
|
77
|
-
let nextToken;
|
|
78
|
-
const all = [];
|
|
79
|
-
do {
|
|
80
|
-
const { meta, ...r } = await lister({ nextToken });
|
|
81
|
-
all.push(r);
|
|
82
|
-
nextToken = meta.nextToken;
|
|
83
|
-
} while (nextToken);
|
|
84
|
-
if (!mapper) {
|
|
85
|
-
return all;
|
|
86
|
-
}
|
|
87
|
-
const mapped = all.flatMap((r) => mapper(r));
|
|
88
|
-
return mapped;
|
|
89
|
-
}
|
|
84
|
+
listAllPages = paging.listAllPages;
|
|
90
85
|
async validateStatus(fn, allowedStatuses) {
|
|
91
86
|
try {
|
|
92
87
|
const v = await fn();
|
|
93
88
|
return v;
|
|
94
89
|
} catch (err) {
|
|
95
90
|
const allowedStatusesArray = import_lodash.default.isArray(allowedStatuses) ? allowedStatuses : [allowedStatuses];
|
|
96
|
-
const isAllowed =
|
|
91
|
+
const isAllowed = bpclient.isApiError(err) && err.code && allowedStatusesArray.includes(err.code);
|
|
97
92
|
if (isAllowed) {
|
|
98
93
|
return;
|
|
99
94
|
}
|
package/dist/api/client.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/api/client.ts"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import * as bpclient from '@botpress/client'\nimport _ from 'lodash'\nimport { formatIntegrationRef, ApiIntegrationRef as IntegrationRef } from '../integration-ref'\nimport type { Logger } from '../logger'\nimport * as paging from './paging'\n\nexport type PageLister<R extends object> = (t: { nextToken?: string }) => Promise<R & { meta: { nextToken?: string } }>\n\nexport type ApiClientProps = {\n apiUrl: string\n token: string\n workspaceId: string\n}\n\nexport type ApiClientFactory = {\n newClient: (props: ApiClientProps, logger: Logger) => ApiClient\n}\n\ntype PublicIntegration = bpclient.Integration\ntype PrivateIntegration = bpclient.Integration & { workspaceId: string }\ntype Integration = bpclient.Integration & { workspaceId?: string }\n\n/**\n * This class is used to wrap the Botpress API and provide a more convenient way to interact with it.\n */\nexport class ApiClient {\n public readonly client: bpclient.Client\n public readonly url: string\n public readonly token: string\n public readonly workspaceId: string\n\n public static newClient = (props: ApiClientProps, logger: Logger) => new ApiClient(props, logger)\n\n public constructor(props: ApiClientProps, private _logger: Logger) {\n const { apiUrl, token, workspaceId } = props\n this.client = new bpclient.Client({ apiUrl, token, workspaceId })\n this.url = apiUrl\n this.token = token\n this.workspaceId = workspaceId\n }\n\n public async findIntegration(ref: IntegrationRef): Promise<Integration | undefined> {\n const formatted = formatIntegrationRef(ref)\n\n const privateIntegration = await this.findPrivateIntegration(ref)\n if (privateIntegration) {\n this._logger.debug(`Found integration \"${formatted}\" in workspace`)\n return privateIntegration\n }\n\n const publicIntegration = await this.findPublicIntegration(ref)\n if (publicIntegration) {\n this._logger.debug(`Found integration \"${formatted}\" in hub`)\n return publicIntegration\n }\n\n return\n }\n\n public async findPrivateIntegration(ref: IntegrationRef): Promise<PrivateIntegration | undefined> {\n const { workspaceId } = this\n if (ref.type === 'id') {\n return this.validateStatus(\n () => this.client.getIntegration(ref).then((r) => ({ ...r.integration, workspaceId })),\n 404\n )\n }\n return this.validateStatus(\n () => this.client.getIntegrationByName(ref).then((r) => ({ ...r.integration, workspaceId })),\n 404\n )\n }\n\n public async findPublicIntegration(ref: IntegrationRef): Promise<PublicIntegration | undefined> {\n if (ref.type === 'id') {\n return this.validateStatus(() => this.client.getPublicIntegrationById(ref).then((r) => r.integration), 404)\n }\n return this.validateStatus(() => this.client.getPublicIntegration(ref).then((r) => r.integration), 404)\n }\n\n public async testLogin(): Promise<void> {\n await this.client.listBots({})\n }\n\n public listAllPages = paging.listAllPages\n\n public async validateStatus<V>(fn: () => Promise<V>, allowedStatuses: number | number[]): Promise<V | undefined> {\n try {\n const v = await fn()\n return v\n } catch (err) {\n const allowedStatusesArray = _.isArray(allowedStatuses) ? allowedStatuses : [allowedStatuses]\n const isAllowed = bpclient.isApiError(err) && err.code && allowedStatusesArray.includes(err.code)\n if (isAllowed) {\n return\n }\n throw err\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAA0B;AAC1B,oBAAc;AACd,6BAA0E;AAE1E,aAAwB;AAqBjB,MAAM,UAAU;AAAA,EAQd,YAAY,OAA+B,SAAiB;AAAjB;AAChD,UAAM,EAAE,QAAQ,OAAO,YAAY,IAAI;AACvC,SAAK,SAAS,IAAI,SAAS,OAAO,EAAE,QAAQ,OAAO,YAAY,CAAC;AAChE,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,cAAc;AAAA,EACrB;AAAA,EAbgB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEhB,OAAc,YAAY,CAAC,OAAuB,WAAmB,IAAI,UAAU,OAAO,MAAM;AAAA,EAUhG,MAAa,gBAAgB,KAAuD;AAClF,UAAM,gBAAY,6CAAqB,GAAG;AAE1C,UAAM,qBAAqB,MAAM,KAAK,uBAAuB,GAAG;AAChE,QAAI,oBAAoB;AACtB,WAAK,QAAQ,MAAM,sBAAsB,yBAAyB;AAClE,aAAO;AAAA,IACT;AAEA,UAAM,oBAAoB,MAAM,KAAK,sBAAsB,GAAG;AAC9D,QAAI,mBAAmB;AACrB,WAAK,QAAQ,MAAM,sBAAsB,mBAAmB;AAC5D,aAAO;AAAA,IACT;AAEA;AAAA,EACF;AAAA,EAEA,MAAa,uBAAuB,KAA8D;AAChG,UAAM,EAAE,YAAY,IAAI;AACxB,QAAI,IAAI,SAAS,MAAM;AACrB,aAAO,KAAK;AAAA,QACV,MAAM,KAAK,OAAO,eAAe,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,YAAY,EAAE;AAAA,QACrF;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,MACV,MAAM,KAAK,OAAO,qBAAqB,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,YAAY,EAAE;AAAA,MAC3F;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,sBAAsB,KAA6D;AAC9F,QAAI,IAAI,SAAS,MAAM;AACrB,aAAO,KAAK,eAAe,MAAM,KAAK,OAAO,yBAAyB,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG;AAAA,IAC5G;AACA,WAAO,KAAK,eAAe,MAAM,KAAK,OAAO,qBAAqB,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG;AAAA,EACxG;AAAA,EAEA,MAAa,YAA2B;AACtC,UAAM,KAAK,OAAO,SAAS,CAAC,CAAC;AAAA,EAC/B;AAAA,EAEO,eAAe,OAAO;AAAA,EAE7B,MAAa,eAAkB,IAAsB,iBAA4D;AAC/G,QAAI;AACF,YAAM,IAAI,MAAM,GAAG;AACnB,aAAO;AAAA,IACT,SAAS,KAAP;AACA,YAAM,uBAAuB,cAAAA,QAAE,QAAQ,eAAe,IAAI,kBAAkB,CAAC,eAAe;AAC5F,YAAM,YAAY,SAAS,WAAW,GAAG,KAAK,IAAI,QAAQ,qBAAqB,SAAS,IAAI,IAAI;AAChG,UAAI,WAAW;AACb;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;",
|
|
6
6
|
"names": ["_"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var paging_exports = {};
|
|
20
|
+
__export(paging_exports, {
|
|
21
|
+
listAllPages: () => listAllPages
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(paging_exports);
|
|
24
|
+
async function listAllPages(lister, mapper) {
|
|
25
|
+
let nextToken;
|
|
26
|
+
const all = [];
|
|
27
|
+
do {
|
|
28
|
+
const { meta, ...r } = await lister({ nextToken });
|
|
29
|
+
all.push(r);
|
|
30
|
+
nextToken = meta.nextToken;
|
|
31
|
+
} while (nextToken);
|
|
32
|
+
if (!mapper) {
|
|
33
|
+
return all;
|
|
34
|
+
}
|
|
35
|
+
const mapped = all.flatMap((r) => mapper(r));
|
|
36
|
+
return mapped;
|
|
37
|
+
}
|
|
38
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
39
|
+
0 && (module.exports = {
|
|
40
|
+
listAllPages
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=paging.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/api/paging.ts"],
|
|
4
|
+
"sourcesContent": ["export type PageLister<R extends object> = (t: { nextToken?: string }) => Promise<R & { meta: { nextToken?: string } }>\n\nexport async function listAllPages<R extends object>(lister: PageLister<R>): Promise<R[]>\nexport async function listAllPages<R extends object, M>(lister: PageLister<R>, mapper?: (r: R) => M[]): Promise<M[]>\nexport async function listAllPages<R extends object, M>(lister: PageLister<R>, mapper?: (r: R) => M[]) {\n let nextToken: string | undefined\n const all: R[] = []\n\n do {\n const { meta, ...r } = await lister({ nextToken })\n all.push(r as R)\n nextToken = meta.nextToken\n } while (nextToken)\n\n if (!mapper) {\n return all\n }\n\n const mapped: M[] = all.flatMap((r) => mapper(r))\n return mapped\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,eAAsB,aAAkC,QAAuB,QAAwB;AACrG,MAAI;AACJ,QAAM,MAAW,CAAC;AAElB,KAAG;AACD,UAAM,EAAE,SAAS,EAAE,IAAI,MAAM,OAAO,EAAE,UAAU,CAAC;AACjD,QAAI,KAAK,CAAM;AACf,gBAAY,KAAK;AAAA,EACnB,SAAS;AAET,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,QAAM,SAAc,IAAI,QAAQ,CAAC,MAAM,OAAO,CAAC,CAAC;AAChD,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -40,16 +40,18 @@ var import_const = require("./const");
|
|
|
40
40
|
var import_integration_implementation = require("./integration-implementation");
|
|
41
41
|
var import_integration_instance = require("./integration-instance");
|
|
42
42
|
var import_integration_secret = require("./integration-secret");
|
|
43
|
+
var mapIntegration = __toESM(require("./map-integration"));
|
|
43
44
|
var import_typings = require("./typings");
|
|
44
45
|
var import_integration_secret2 = require("./integration-secret");
|
|
45
46
|
const INTEGRATION_JSON = "integration.json";
|
|
46
|
-
const generateIntegrationImplementationTypings = async (
|
|
47
|
+
const generateIntegrationImplementationTypings = async (sdkIntegration, implementationTypingsPath) => {
|
|
48
|
+
const integration = mapIntegration.from.sdk(sdkIntegration);
|
|
47
49
|
const indexModule = await import_integration_implementation.IntegrationImplementationIndexModule.create(integration);
|
|
48
50
|
indexModule.unshift(implementationTypingsPath);
|
|
49
51
|
return indexModule.flatten();
|
|
50
52
|
};
|
|
51
|
-
const generateIntegrationSecrets = async (
|
|
52
|
-
const indexModule = await import_integration_secret.IntegrationSecretIndexModule.create(
|
|
53
|
+
const generateIntegrationSecrets = async (sdkIntegration, secretsPath) => {
|
|
54
|
+
const indexModule = await import_integration_secret.IntegrationSecretIndexModule.create(sdkIntegration);
|
|
53
55
|
indexModule.unshift(secretsPath);
|
|
54
56
|
return indexModule.flatten();
|
|
55
57
|
};
|
|
@@ -64,7 +66,13 @@ const generateIntegrationIndex = async (implementationTypingsPath, implementatio
|
|
|
64
66
|
content
|
|
65
67
|
};
|
|
66
68
|
};
|
|
67
|
-
const generateIntegrationInstance = async (
|
|
69
|
+
const generateIntegrationInstance = async (anyIntegration, installPath) => {
|
|
70
|
+
let integration;
|
|
71
|
+
if ("id" in anyIntegration) {
|
|
72
|
+
integration = mapIntegration.from.client(anyIntegration);
|
|
73
|
+
} else {
|
|
74
|
+
integration = mapIntegration.from.sdk(anyIntegration);
|
|
75
|
+
}
|
|
68
76
|
const indexModule = await import_integration_instance.IntegrationInstanceIndexModule.create(integration);
|
|
69
77
|
const dirname = utils.casing.to.kebabCase(integration.name);
|
|
70
78
|
indexModule.unshift(installPath, dirname);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/code-generation/index.ts"],
|
|
4
|
-
"sourcesContent": ["import type * as
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,kBAAoB;AACpB,YAAuB;AACvB,mBAA6C;AAC7C,wCAAqD;AACrD,kCAA+C;AAC/C,gCAA6C;
|
|
4
|
+
"sourcesContent": ["import type * as bpclient from '@botpress/client'\nimport type * as bpsdk from '@botpress/sdk'\nimport pathlib from 'path'\nimport * as utils from '../utils'\nimport { GENERATED_HEADER, INDEX_FILE } from './const'\nimport { IntegrationImplementationIndexModule } from './integration-implementation'\nimport { IntegrationInstanceIndexModule } from './integration-instance'\nimport { IntegrationSecretIndexModule } from './integration-secret'\nimport * as mapIntegration from './map-integration'\nimport type * as types from './typings'\n\nexport { File } from './typings'\nexport { secretEnvVariableName } from './integration-secret'\nexport const INTEGRATION_JSON = 'integration.json'\n\nexport const generateIntegrationImplementationTypings = async (\n sdkIntegration: bpsdk.IntegrationDefinition,\n implementationTypingsPath: string\n): Promise<types.File[]> => {\n const integration = mapIntegration.from.sdk(sdkIntegration)\n const indexModule = await IntegrationImplementationIndexModule.create(integration)\n indexModule.unshift(implementationTypingsPath)\n return indexModule.flatten()\n}\n\nexport const generateIntegrationSecrets = async (\n sdkIntegration: bpsdk.IntegrationDefinition,\n secretsPath: string\n): Promise<types.File[]> => {\n const indexModule = await IntegrationSecretIndexModule.create(sdkIntegration)\n indexModule.unshift(secretsPath)\n return indexModule.flatten()\n}\n\nexport const generateIntegrationIndex = async (\n implementationTypingsPath: string,\n implementationSecretsPath: string\n): Promise<types.File> => {\n let content = ''\n content += `export * from './${implementationTypingsPath}'\\n`\n content += `export * from './${implementationSecretsPath}'\\n`\n return {\n path: INDEX_FILE,\n content,\n }\n}\n\nexport type IntegrationInstanceJson = {\n name: string\n version: string\n id: string | null\n}\n\nexport const generateIntegrationInstance = async (\n anyIntegration: bpclient.Integration | bpsdk.IntegrationDefinition,\n installPath: string\n): Promise<types.File[]> => {\n let integration: types.IntegrationDefinition\n if ('id' in anyIntegration) {\n integration = mapIntegration.from.client(anyIntegration)\n } else {\n integration = mapIntegration.from.sdk(anyIntegration)\n }\n\n const indexModule = await IntegrationInstanceIndexModule.create(integration)\n const dirname = utils.casing.to.kebabCase(integration.name)\n indexModule.unshift(installPath, dirname)\n const files = indexModule.flatten()\n\n const { name, version, id } = integration\n const json: IntegrationInstanceJson = {\n name,\n version,\n id,\n }\n files.push({\n path: pathlib.join(installPath, dirname, INTEGRATION_JSON),\n content: JSON.stringify(json, null, 2),\n })\n\n return files\n}\n\nexport const generateBotIndex = async (installPath: string, instances: string[]): Promise<types.File> => {\n const lines: string[] = [\n GENERATED_HEADER,\n \"import * as sdk from '@botpress/sdk'\",\n ...instances.map(\n (instance) => `import * as ${utils.casing.to.camelCase(instance)} from './${installPath}/${instance}'`\n ),\n ...instances.map(\n (instance) => `export * as ${utils.casing.to.camelCase(instance)} from './${installPath}/${instance}'`\n ),\n '',\n 'type TIntegrations = {',\n ...instances.map(\n (instance) =>\n ` ${utils.casing.to.camelCase(instance)}: ${utils.casing.to.camelCase(instance)}.T${utils.casing.to.pascalCase(\n instance\n )}`\n ),\n '}',\n '',\n 'type BaseStates = sdk.Bot extends sdk.Bot<any, infer TStates, any> ? TStates : never',\n 'type BaseEvents = sdk.Bot extends sdk.Bot<any, any, infer TEvents> ? TEvents : never',\n '',\n 'export class Bot<',\n ' TStates extends BaseStates,',\n ' TEvents extends BaseEvents',\n '> extends sdk.Bot<',\n ' TIntegrations,',\n ' TStates,',\n ' TEvents',\n '> {}',\n ]\n\n return {\n path: INDEX_FILE,\n content: lines.join('\\n'),\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,kBAAoB;AACpB,YAAuB;AACvB,mBAA6C;AAC7C,wCAAqD;AACrD,kCAA+C;AAC/C,gCAA6C;AAC7C,qBAAgC;AAGhC,qBAAqB;AACrB,IAAAA,6BAAsC;AAC/B,MAAM,mBAAmB;AAEzB,MAAM,2CAA2C,OACtD,gBACA,8BAC0B;AAC1B,QAAM,cAAc,eAAe,KAAK,IAAI,cAAc;AAC1D,QAAM,cAAc,MAAM,uEAAqC,OAAO,WAAW;AACjF,cAAY,QAAQ,yBAAyB;AAC7C,SAAO,YAAY,QAAQ;AAC7B;AAEO,MAAM,6BAA6B,OACxC,gBACA,gBAC0B;AAC1B,QAAM,cAAc,MAAM,uDAA6B,OAAO,cAAc;AAC5E,cAAY,QAAQ,WAAW;AAC/B,SAAO,YAAY,QAAQ;AAC7B;AAEO,MAAM,2BAA2B,OACtC,2BACA,8BACwB;AACxB,MAAI,UAAU;AACd,aAAW,oBAAoB;AAAA;AAC/B,aAAW,oBAAoB;AAAA;AAC/B,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EACF;AACF;AAQO,MAAM,8BAA8B,OACzC,gBACA,gBAC0B;AAC1B,MAAI;AACJ,MAAI,QAAQ,gBAAgB;AAC1B,kBAAc,eAAe,KAAK,OAAO,cAAc;AAAA,EACzD,OAAO;AACL,kBAAc,eAAe,KAAK,IAAI,cAAc;AAAA,EACtD;AAEA,QAAM,cAAc,MAAM,2DAA+B,OAAO,WAAW;AAC3E,QAAM,UAAU,MAAM,OAAO,GAAG,UAAU,YAAY,IAAI;AAC1D,cAAY,QAAQ,aAAa,OAAO;AACxC,QAAM,QAAQ,YAAY,QAAQ;AAElC,QAAM,EAAE,MAAM,SAAS,GAAG,IAAI;AAC9B,QAAM,OAAgC;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,KAAK;AAAA,IACT,MAAM,YAAAC,QAAQ,KAAK,aAAa,SAAS,gBAAgB;AAAA,IACzD,SAAS,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,EACvC,CAAC;AAED,SAAO;AACT;AAEO,MAAM,mBAAmB,OAAO,aAAqB,cAA6C;AACvG,QAAM,QAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,GAAG,UAAU;AAAA,MACX,CAAC,aAAa,eAAe,MAAM,OAAO,GAAG,UAAU,QAAQ,aAAa,eAAe;AAAA,IAC7F;AAAA,IACA,GAAG,UAAU;AAAA,MACX,CAAC,aAAa,eAAe,MAAM,OAAO,GAAG,UAAU,QAAQ,aAAa,eAAe;AAAA,IAC7F;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,UAAU;AAAA,MACX,CAAC,aACC,KAAK,MAAM,OAAO,GAAG,UAAU,QAAQ,MAAM,MAAM,OAAO,GAAG,UAAU,QAAQ,MAAM,MAAM,OAAO,GAAG;AAAA,QACnG;AAAA,MACF;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,MAAM,KAAK,IAAI;AAAA,EAC1B;AACF;",
|
|
6
6
|
"names": ["import_integration_secret", "pathlib"]
|
|
7
7
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,17 +15,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
-
mod
|
|
23
|
-
));
|
|
24
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
19
|
var integration_implementation_exports = {};
|
|
26
20
|
__export(integration_implementation_exports, {
|
|
27
21
|
IntegrationImplementationIndexModule: () => IntegrationImplementationIndexModule
|
|
28
22
|
});
|
|
29
23
|
module.exports = __toCommonJS(integration_implementation_exports);
|
|
30
|
-
var utils = __toESM(require("../utils"));
|
|
31
24
|
var import_const = require("./const");
|
|
32
25
|
var import_generators = require("./generators");
|
|
33
26
|
var import_actions_module = require("./integration-schemas/actions-module");
|
|
@@ -46,8 +39,7 @@ class IntegrationImplementationIndexModule extends import_module.Module {
|
|
|
46
39
|
this.eventsModule = eventsModule;
|
|
47
40
|
this.statesModule = statesModule;
|
|
48
41
|
}
|
|
49
|
-
static async create(
|
|
50
|
-
const integration = this._mapIntegration(sdkIntegration);
|
|
42
|
+
static async create(integration) {
|
|
51
43
|
const configModule = await import_configuration_module.ConfigurationModule.create(integration.configuration ?? { schema: {} });
|
|
52
44
|
configModule.unshift("configuration");
|
|
53
45
|
const actionsModule = await import_actions_module.ActionsModule.create(integration.actions ?? {});
|
|
@@ -120,35 +112,6 @@ class IntegrationImplementationIndexModule extends import_module.Module {
|
|
|
120
112
|
].join("\n");
|
|
121
113
|
return content;
|
|
122
114
|
}
|
|
123
|
-
static _mapIntegration = (i) => ({
|
|
124
|
-
name: i.name,
|
|
125
|
-
version: i.version,
|
|
126
|
-
user: {
|
|
127
|
-
tags: i.user?.tags ?? {},
|
|
128
|
-
creation: i.user?.creation ?? { enabled: false, requiredTags: [] }
|
|
129
|
-
},
|
|
130
|
-
configuration: i.configuration ? this._mapSchema(i.configuration) : { schema: {} },
|
|
131
|
-
events: i.events ? utils.records.mapValues(i.events, this._mapSchema) : {},
|
|
132
|
-
states: i.states ? utils.records.mapValues(i.states, this._mapSchema) : {},
|
|
133
|
-
actions: i.actions ? utils.records.mapValues(i.actions, (a) => ({
|
|
134
|
-
input: this._mapSchema(a.input),
|
|
135
|
-
output: this._mapSchema(a.output)
|
|
136
|
-
})) : {},
|
|
137
|
-
channels: i.channels ? utils.records.mapValues(i.channels, (c) => ({
|
|
138
|
-
conversation: {
|
|
139
|
-
tags: c.conversation?.tags ?? {},
|
|
140
|
-
creation: c.conversation?.creation ?? { enabled: false, requiredTags: [] }
|
|
141
|
-
},
|
|
142
|
-
message: {
|
|
143
|
-
tags: c.message?.tags ?? {}
|
|
144
|
-
},
|
|
145
|
-
messages: utils.records.mapValues(c.messages, this._mapSchema)
|
|
146
|
-
})) : {}
|
|
147
|
-
});
|
|
148
|
-
static _mapSchema = (x) => ({
|
|
149
|
-
...x,
|
|
150
|
-
schema: utils.schema.mapZodToJsonSchema(x)
|
|
151
|
-
});
|
|
152
115
|
}
|
|
153
116
|
// Annotate the CommonJS export names for ESM import in node:
|
|
154
117
|
0 && (module.exports = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/code-generation/integration-implementation.ts"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { GENERATED_HEADER, INDEX_FILE } from './const'\nimport { stringifySingleLine } from './generators'\nimport { ActionsModule } from './integration-schemas/actions-module'\nimport { ChannelsModule } from './integration-schemas/channels-module'\nimport { ConfigurationModule } from './integration-schemas/configuration-module'\nimport { EventsModule } from './integration-schemas/events-module'\nimport { StatesModule } from './integration-schemas/states-module'\nimport { Module, ModuleDef } from './module'\nimport * as types from './typings'\n\nexport class IntegrationImplementationIndexModule extends Module {\n public static async create(integration: types.IntegrationDefinition): Promise<IntegrationImplementationIndexModule> {\n const configModule = await ConfigurationModule.create(integration.configuration ?? { schema: {} })\n configModule.unshift('configuration')\n\n const actionsModule = await ActionsModule.create(integration.actions ?? {})\n actionsModule.unshift('actions')\n\n const channelsModule = await ChannelsModule.create(integration.channels ?? {})\n channelsModule.unshift('channels')\n\n const eventsModule = await EventsModule.create(integration.events ?? {})\n eventsModule.unshift('events')\n\n const statesModule = await StatesModule.create(integration.states ?? {})\n statesModule.unshift('states')\n\n const inst = new IntegrationImplementationIndexModule(\n integration,\n configModule,\n actionsModule,\n channelsModule,\n eventsModule,\n statesModule,\n {\n path: INDEX_FILE,\n exportName: 'Integration',\n content: '',\n }\n )\n\n inst.pushDep(configModule)\n inst.pushDep(actionsModule)\n inst.pushDep(channelsModule)\n inst.pushDep(eventsModule)\n inst.pushDep(statesModule)\n return inst\n }\n\n private constructor(\n private integration: types.IntegrationDefinition,\n private configModule: ConfigurationModule,\n private actionsModule: ActionsModule,\n private channelsModule: ChannelsModule,\n private eventsModule: EventsModule,\n private statesModule: StatesModule,\n def: ModuleDef\n ) {\n super(def)\n }\n\n public override get content(): string {\n let content = GENERATED_HEADER\n\n const { configModule, actionsModule, channelsModule, eventsModule, statesModule, integration } = this\n\n const configImport = configModule.import(this)\n const actionsImport = actionsModule.import(this)\n const channelsImport = channelsModule.import(this)\n const eventsImport = eventsModule.import(this)\n const statesImport = statesModule.import(this)\n\n content += [\n GENERATED_HEADER,\n 'import * as sdk from \"@botpress/sdk\"',\n '',\n `import type * as ${configModule.name} from \"./${configImport}\"`,\n `import type * as ${actionsModule.name} from \"./${actionsImport}\"`,\n `import type * as ${channelsModule.name} from \"./${channelsImport}\"`,\n `import type * as ${eventsModule.name} from \"./${eventsImport}\"`,\n `import type * as ${statesModule.name} from \"./${statesImport}\"`,\n `export * as ${configModule.name} from \"./${configImport}\"`,\n `export * as ${actionsModule.name} from \"./${actionsImport}\"`,\n `export * as ${channelsModule.name} from \"./${channelsImport}\"`,\n `export * as ${eventsModule.name} from \"./${eventsImport}\"`,\n `export * as ${statesModule.name} from \"./${statesImport}\"`,\n '',\n 'type TIntegration = {',\n ` name: \"${integration.name}\"`,\n ` version: \"${integration.version}\"`,\n ` configuration: ${configModule.name}.${configModule.exports}`,\n ` actions: ${actionsModule.name}.${actionsModule.exports}`,\n ` channels: ${channelsModule.name}.${channelsModule.exports}`,\n ` events: ${eventsModule.name}.${eventsModule.exports}`,\n ` states: ${statesModule.name}.${statesModule.exports}`,\n ` user: ${stringifySingleLine(integration.user)}`,\n '}',\n '',\n 'export type IntegrationProps = sdk.IntegrationProps<TIntegration>',\n '',\n 'export class Integration extends sdk.Integration<TIntegration> {}',\n '',\n 'export type Client = sdk.IntegrationSpecificClient<TIntegration>',\n ].join('\\n')\n\n return content\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA6C;AAC7C,wBAAoC;AACpC,4BAA8B;AAC9B,6BAA+B;AAC/B,kCAAoC;AACpC,2BAA6B;AAC7B,2BAA6B;AAC7B,oBAAkC;AAG3B,MAAM,6CAA6C,qBAAO;AAAA,EAuCvD,YACE,aACA,cACA,eACA,gBACA,cACA,cACR,KACA;AACA,UAAM,GAAG;AARD;AACA;AACA;AACA;AACA;AACA;AAAA,EAIV;AAAA,EAhDA,aAAoB,OAAO,aAAyF;AAClH,UAAM,eAAe,MAAM,gDAAoB,OAAO,YAAY,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC;AACjG,iBAAa,QAAQ,eAAe;AAEpC,UAAM,gBAAgB,MAAM,oCAAc,OAAO,YAAY,WAAW,CAAC,CAAC;AAC1E,kBAAc,QAAQ,SAAS;AAE/B,UAAM,iBAAiB,MAAM,sCAAe,OAAO,YAAY,YAAY,CAAC,CAAC;AAC7E,mBAAe,QAAQ,UAAU;AAEjC,UAAM,eAAe,MAAM,kCAAa,OAAO,YAAY,UAAU,CAAC,CAAC;AACvE,iBAAa,QAAQ,QAAQ;AAE7B,UAAM,eAAe,MAAM,kCAAa,OAAO,YAAY,UAAU,CAAC,CAAC;AACvE,iBAAa,QAAQ,QAAQ;AAE7B,UAAM,OAAO,IAAI;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,SAAS;AAAA,MACX;AAAA,IACF;AAEA,SAAK,QAAQ,YAAY;AACzB,SAAK,QAAQ,aAAa;AAC1B,SAAK,QAAQ,cAAc;AAC3B,SAAK,QAAQ,YAAY;AACzB,SAAK,QAAQ,YAAY;AACzB,WAAO;AAAA,EACT;AAAA,EAcA,IAAoB,UAAkB;AACpC,QAAI,UAAU;AAEd,UAAM,EAAE,cAAc,eAAe,gBAAgB,cAAc,cAAc,YAAY,IAAI;AAEjG,UAAM,eAAe,aAAa,OAAO,IAAI;AAC7C,UAAM,gBAAgB,cAAc,OAAO,IAAI;AAC/C,UAAM,iBAAiB,eAAe,OAAO,IAAI;AACjD,UAAM,eAAe,aAAa,OAAO,IAAI;AAC7C,UAAM,eAAe,aAAa,OAAO,IAAI;AAE7C,eAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA,oBAAoB,aAAa,gBAAgB;AAAA,MACjD,oBAAoB,cAAc,gBAAgB;AAAA,MAClD,oBAAoB,eAAe,gBAAgB;AAAA,MACnD,oBAAoB,aAAa,gBAAgB;AAAA,MACjD,oBAAoB,aAAa,gBAAgB;AAAA,MACjD,eAAe,aAAa,gBAAgB;AAAA,MAC5C,eAAe,cAAc,gBAAgB;AAAA,MAC7C,eAAe,eAAe,gBAAgB;AAAA,MAC9C,eAAe,aAAa,gBAAgB;AAAA,MAC5C,eAAe,aAAa,gBAAgB;AAAA,MAC5C;AAAA,MACA;AAAA,MACA,YAAY,YAAY;AAAA,MACxB,eAAe,YAAY;AAAA,MAC3B,oBAAoB,aAAa,QAAQ,aAAa;AAAA,MACtD,cAAc,cAAc,QAAQ,cAAc;AAAA,MAClD,eAAe,eAAe,QAAQ,eAAe;AAAA,MACrD,aAAa,aAAa,QAAQ,aAAa;AAAA,MAC/C,aAAa,aAAa,QAAQ,aAAa;AAAA,MAC/C,eAAW,uCAAoB,YAAY,IAAI;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAEX,WAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -83,6 +83,7 @@ class IntegrationInstanceIndexModule extends import_module.Module {
|
|
|
83
83
|
const { name, version, id } = integration;
|
|
84
84
|
const className = import_utils.casing.to.pascalCase(name);
|
|
85
85
|
const propsName = `${className}Props`;
|
|
86
|
+
const integrationId = id === null ? "null" : `'${id}'`;
|
|
86
87
|
const lines = [
|
|
87
88
|
import_const.GENERATED_HEADER,
|
|
88
89
|
"import type { IntegrationInstance } from '@botpress/sdk'",
|
|
@@ -118,7 +119,7 @@ class IntegrationInstanceIndexModule extends import_module.Module {
|
|
|
118
119
|
"",
|
|
119
120
|
` public readonly name = '${name}'`,
|
|
120
121
|
` public readonly version = '${version}'`,
|
|
121
|
-
` public readonly id =
|
|
122
|
+
` public readonly id = ${integrationId}`,
|
|
122
123
|
"",
|
|
123
124
|
" public readonly enabled?: boolean",
|
|
124
125
|
` public readonly configuration?: ${configModule.name}.${configModule.exports}`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/code-generation/integration-instance.ts"],
|
|
4
|
-
"sourcesContent": ["import
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import { casing } from '../utils'\nimport { GENERATED_HEADER, INDEX_FILE } from './const'\nimport { stringifySingleLine } from './generators'\nimport { ActionsModule } from './integration-schemas/actions-module'\nimport { ChannelsModule } from './integration-schemas/channels-module'\nimport { ConfigurationModule } from './integration-schemas/configuration-module'\nimport { EventsModule } from './integration-schemas/events-module'\nimport { StatesModule } from './integration-schemas/states-module'\nimport { Module, ModuleDef } from './module'\nimport * as types from './typings'\n\nexport class IntegrationInstanceIndexModule extends Module {\n public static async create(integration: types.IntegrationDefinition): Promise<IntegrationInstanceIndexModule> {\n const { name } = integration\n\n const configModule = await ConfigurationModule.create(integration.configuration ?? { schema: {} })\n configModule.unshift('configuration')\n\n const actionsModule = await ActionsModule.create(integration.actions ?? {})\n actionsModule.unshift('actions')\n\n const channelsModule = await ChannelsModule.create(integration.channels ?? {})\n channelsModule.unshift('channels')\n\n const eventsModule = await EventsModule.create(integration.events ?? {})\n eventsModule.unshift('events')\n\n const statesModule = await StatesModule.create(integration.states ?? {})\n statesModule.unshift('states')\n\n const exportName = casing.to.pascalCase(name)\n\n const inst = new IntegrationInstanceIndexModule(\n integration,\n configModule,\n actionsModule,\n channelsModule,\n eventsModule,\n statesModule,\n {\n path: INDEX_FILE,\n content: '',\n exportName,\n }\n )\n\n inst.pushDep(configModule)\n inst.pushDep(actionsModule)\n inst.pushDep(channelsModule)\n inst.pushDep(eventsModule)\n inst.pushDep(statesModule)\n\n return inst\n }\n\n private constructor(\n private integration: types.IntegrationDefinition,\n private configModule: ConfigurationModule,\n private actionsModule: ActionsModule,\n private channelsModule: ChannelsModule,\n private eventsModule: EventsModule,\n private statesModule: StatesModule,\n def: ModuleDef\n ) {\n super(def)\n }\n\n public override get content(): string {\n const { configModule, actionsModule, channelsModule, eventsModule, statesModule, integration } = this\n\n const configImport = configModule.import(this)\n const actionsImport = actionsModule.import(this)\n const channelsImport = channelsModule.import(this)\n const eventsImport = eventsModule.import(this)\n const statesImport = statesModule.import(this)\n\n const { name, version, id } = integration\n const className = casing.to.pascalCase(name)\n const propsName = `${className}Props`\n\n const integrationId = id === null ? 'null' : `'${id}'`\n\n const lines = [\n GENERATED_HEADER,\n \"import type { IntegrationInstance } from '@botpress/sdk'\",\n '',\n `import type * as ${configModule.name} from \"./${configImport}\"`,\n `import type * as ${actionsModule.name} from \"./${actionsImport}\"`,\n `import type * as ${channelsModule.name} from \"./${channelsImport}\"`,\n `import type * as ${eventsModule.name} from \"./${eventsImport}\"`,\n `import type * as ${statesModule.name} from \"./${statesImport}\"`,\n `export * as ${configModule.name} from \"./${configImport}\"`,\n `export * as ${actionsModule.name} from \"./${actionsImport}\"`,\n `export * as ${channelsModule.name} from \"./${channelsImport}\"`,\n `export * as ${eventsModule.name} from \"./${eventsImport}\"`,\n `export * as ${statesModule.name} from \"./${statesImport}\"`,\n '',\n `export type ${propsName} = {`,\n ' enabled?: boolean',\n ` config?: ${configModule.name}.${configModule.exports}`,\n '}',\n '',\n `export type T${className} = {`,\n ` name: '${name}'`,\n ` version: '${version}'`,\n ` configuration: ${configModule.name}.${configModule.exports}`,\n ` actions: ${actionsModule.name}.${actionsModule.exports}`,\n ` channels: ${channelsModule.name}.${channelsModule.exports}`,\n ` events: ${eventsModule.name}.${eventsModule.exports}`,\n ` states: ${statesModule.name}.${statesModule.exports}`,\n ` user: ${stringifySingleLine(this.integration.user)}`,\n '}',\n '',\n `export class ${className} implements IntegrationInstance<'${name}'> {`,\n '',\n ` public readonly name = '${name}'`,\n ` public readonly version = '${version}'`,\n ` public readonly id = ${integrationId}`,\n '',\n ' public readonly enabled?: boolean',\n ` public readonly configuration?: ${configModule.name}.${configModule.exports}`,\n '',\n ` constructor(props?: ${propsName}) {`,\n ' this.enabled = props?.enabled',\n ' this.configuration = props?.config',\n ' }',\n '}',\n ]\n\n return `${GENERATED_HEADER}\\n${lines.join('\\n')}`\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from2, except, desc) => {
|
|
13
|
+
if (from2 && typeof from2 === "object" || typeof from2 === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from2))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
24
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
25
|
+
var map_integration_exports = {};
|
|
26
|
+
__export(map_integration_exports, {
|
|
27
|
+
from: () => from
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(map_integration_exports);
|
|
30
|
+
var utils = __toESM(require("../utils"));
|
|
31
|
+
var from;
|
|
32
|
+
((from2) => {
|
|
33
|
+
from2.sdk = (i) => ({
|
|
34
|
+
id: null,
|
|
35
|
+
name: i.name,
|
|
36
|
+
version: i.version,
|
|
37
|
+
user: {
|
|
38
|
+
tags: i.user?.tags ?? {},
|
|
39
|
+
creation: i.user?.creation ?? { enabled: false, requiredTags: [] }
|
|
40
|
+
},
|
|
41
|
+
configuration: i.configuration ? _mapSchema(i.configuration) : { schema: {} },
|
|
42
|
+
events: i.events ? utils.records.mapValues(i.events, _mapSchema) : {},
|
|
43
|
+
states: i.states ? utils.records.mapValues(i.states, _mapSchema) : {},
|
|
44
|
+
actions: i.actions ? utils.records.mapValues(i.actions, (a) => ({
|
|
45
|
+
input: _mapSchema(a.input),
|
|
46
|
+
output: _mapSchema(a.output)
|
|
47
|
+
})) : {},
|
|
48
|
+
channels: i.channels ? utils.records.mapValues(i.channels, (c) => ({
|
|
49
|
+
conversation: {
|
|
50
|
+
tags: c.conversation?.tags ?? {},
|
|
51
|
+
creation: c.conversation?.creation ?? { enabled: false, requiredTags: [] }
|
|
52
|
+
},
|
|
53
|
+
message: {
|
|
54
|
+
tags: c.message?.tags ?? {}
|
|
55
|
+
},
|
|
56
|
+
messages: utils.records.mapValues(c.messages, _mapSchema)
|
|
57
|
+
})) : {}
|
|
58
|
+
});
|
|
59
|
+
from2.client = (i) => {
|
|
60
|
+
const { id, name, version, configuration, channels, states, events, actions, user } = i;
|
|
61
|
+
return { id, name, version, configuration, channels, states, events, actions, user };
|
|
62
|
+
};
|
|
63
|
+
const _mapSchema = (x) => ({
|
|
64
|
+
...x,
|
|
65
|
+
schema: utils.schema.mapZodToJsonSchema(x)
|
|
66
|
+
});
|
|
67
|
+
})(from || (from = {}));
|
|
68
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
69
|
+
0 && (module.exports = {
|
|
70
|
+
from
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=map-integration.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/code-generation/map-integration.ts"],
|
|
4
|
+
"sourcesContent": ["import * as bpclient from '@botpress/client'\nimport * as bpsdk from '@botpress/sdk'\nimport { z } from 'zod'\nimport * as utils from '../utils'\nimport * as types from './typings'\n\nexport namespace from {\n export const sdk = (i: bpsdk.IntegrationDefinition): types.IntegrationDefinition => ({\n id: null,\n name: i.name,\n version: i.version,\n user: {\n tags: i.user?.tags ?? {},\n creation: i.user?.creation ?? { enabled: false, requiredTags: [] },\n },\n configuration: i.configuration ? _mapSchema(i.configuration) : { schema: {} },\n events: i.events ? utils.records.mapValues(i.events, _mapSchema) : {},\n states: i.states ? utils.records.mapValues(i.states, _mapSchema) : {},\n actions: i.actions\n ? utils.records.mapValues(i.actions, (a) => ({\n input: _mapSchema(a.input),\n output: _mapSchema(a.output),\n }))\n : {},\n channels: i.channels\n ? utils.records.mapValues(i.channels, (c) => ({\n conversation: {\n tags: c.conversation?.tags ?? {},\n creation: c.conversation?.creation ?? { enabled: false, requiredTags: [] },\n },\n message: {\n tags: c.message?.tags ?? {},\n },\n messages: utils.records.mapValues(c.messages, _mapSchema),\n }))\n : {},\n })\n\n export const client = (i: bpclient.Integration): types.IntegrationDefinition => {\n const { id, name, version, configuration, channels, states, events, actions, user } = i\n return { id, name, version, configuration, channels, states, events, actions, user }\n }\n\n const _mapSchema = <T extends { schema: z.ZodObject<any> }>(\n x: T\n ): utils.types.Merge<T, { schema: ReturnType<typeof utils.schema.mapZodToJsonSchema> }> => ({\n ...x,\n schema: utils.schema.mapZodToJsonSchema(x),\n })\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,YAAuB;AAGhB,IAAU;AAAA,CAAV,CAAUA,UAAV;AACE,EAAMA,MAAA,MAAM,CAAC,OAAiE;AAAA,IACnF,IAAI;AAAA,IACJ,MAAM,EAAE;AAAA,IACR,SAAS,EAAE;AAAA,IACX,MAAM;AAAA,MACJ,MAAM,EAAE,MAAM,QAAQ,CAAC;AAAA,MACvB,UAAU,EAAE,MAAM,YAAY,EAAE,SAAS,OAAO,cAAc,CAAC,EAAE;AAAA,IACnE;AAAA,IACA,eAAe,EAAE,gBAAgB,WAAW,EAAE,aAAa,IAAI,EAAE,QAAQ,CAAC,EAAE;AAAA,IAC5E,QAAQ,EAAE,SAAS,MAAM,QAAQ,UAAU,EAAE,QAAQ,UAAU,IAAI,CAAC;AAAA,IACpE,QAAQ,EAAE,SAAS,MAAM,QAAQ,UAAU,EAAE,QAAQ,UAAU,IAAI,CAAC;AAAA,IACpE,SAAS,EAAE,UACP,MAAM,QAAQ,UAAU,EAAE,SAAS,CAAC,OAAO;AAAA,MACzC,OAAO,WAAW,EAAE,KAAK;AAAA,MACzB,QAAQ,WAAW,EAAE,MAAM;AAAA,IAC7B,EAAE,IACF,CAAC;AAAA,IACL,UAAU,EAAE,WACR,MAAM,QAAQ,UAAU,EAAE,UAAU,CAAC,OAAO;AAAA,MAC1C,cAAc;AAAA,QACZ,MAAM,EAAE,cAAc,QAAQ,CAAC;AAAA,QAC/B,UAAU,EAAE,cAAc,YAAY,EAAE,SAAS,OAAO,cAAc,CAAC,EAAE;AAAA,MAC3E;AAAA,MACA,SAAS;AAAA,QACP,MAAM,EAAE,SAAS,QAAQ,CAAC;AAAA,MAC5B;AAAA,MACA,UAAU,MAAM,QAAQ,UAAU,EAAE,UAAU,UAAU;AAAA,IAC1D,EAAE,IACF,CAAC;AAAA,EACP;AAEO,EAAMA,MAAA,SAAS,CAAC,MAAyD;AAC9E,UAAM,EAAE,IAAI,MAAM,SAAS,eAAe,UAAU,QAAQ,QAAQ,SAAS,KAAK,IAAI;AACtF,WAAO,EAAE,IAAI,MAAM,SAAS,eAAe,UAAU,QAAQ,QAAQ,SAAS,KAAK;AAAA,EACrF;AAEA,QAAM,aAAa,CACjB,OAC0F;AAAA,IAC1F,GAAG;AAAA,IACH,QAAQ,MAAM,OAAO,mBAAmB,CAAC;AAAA,EAC3C;AAAA,GA1Ce;",
|
|
6
|
+
"names": ["from"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/code-generation/typings.ts"],
|
|
4
|
-
"sourcesContent": ["import { Integration } from '@botpress/client'\n\nexport type File = { path: string; content: string }\n\nexport type IntegrationDefinition = Pick<\n Integration,\n 'name' | 'version' | 'configuration' | 'channels' | 'states' | 'events' | 'actions' | 'user'\n
|
|
4
|
+
"sourcesContent": ["import { Integration } from '@botpress/client'\n\nexport type File = { path: string; content: string }\n\nexport type IntegrationDefinition = Pick<\n Integration,\n 'name' | 'version' | 'configuration' | 'channels' | 'states' | 'events' | 'actions' | 'user'\n> & {\n id: string | null\n}\n\ntype Def<T> = NonNullable<T>\n\nexport type ConfigurationDefinition = Def<IntegrationDefinition['configuration']>\nexport type ChannelDefinition = Def<IntegrationDefinition['channels']>[string]\nexport type MessageDefinition = Def<ChannelDefinition['messages']>[string]\nexport type ActionDefinition = Def<IntegrationDefinition['actions']>[string]\nexport type EventDefinition = Def<IntegrationDefinition['events']>[string]\nexport type StateDefinition = Def<IntegrationDefinition['states']>[string]\nexport type UserDefinition = Def<IntegrationDefinition['user']>\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -32,8 +32,10 @@ var import_chalk = __toESM(require("chalk"));
|
|
|
32
32
|
var fs = __toESM(require("fs"));
|
|
33
33
|
var pathlib = __toESM(require("path"));
|
|
34
34
|
var codegen = __toESM(require("../code-generation"));
|
|
35
|
+
var consts = __toESM(require("../consts"));
|
|
35
36
|
var errors = __toESM(require("../errors"));
|
|
36
37
|
var import_integration_ref = require("../integration-ref");
|
|
38
|
+
var utils = __toESM(require("../utils"));
|
|
37
39
|
var import_project_command = require("./project-command");
|
|
38
40
|
class AddCommand extends import_project_command.ProjectCommand {
|
|
39
41
|
async run() {
|
|
@@ -42,15 +44,11 @@ class AddCommand extends import_project_command.ProjectCommand {
|
|
|
42
44
|
throw new errors.ExclusiveBotFeatureError();
|
|
43
45
|
}
|
|
44
46
|
const integrationRef = this.argv.integrationRef;
|
|
45
|
-
const api = await this.ensureLoginAndCreateClient(this.argv);
|
|
46
47
|
const parsedRef = (0, import_integration_ref.parseIntegrationRef)(integrationRef);
|
|
47
48
|
if (!parsedRef) {
|
|
48
49
|
throw new errors.InvalidIntegrationReferenceError(integrationRef);
|
|
49
50
|
}
|
|
50
|
-
const integration = await
|
|
51
|
-
if (!integration) {
|
|
52
|
-
throw new errors.BotpressCLIError(`Integration "${integrationRef}" not found`);
|
|
53
|
-
}
|
|
51
|
+
const integration = parsedRef.type === "path" ? await this._fetchLocalIntegration(parsedRef) : await this._fetchApiIntegration(parsedRef);
|
|
54
52
|
const allInstances = await this._listIntegrationInstances();
|
|
55
53
|
const existingInstance = allInstances.find((i) => i.name === integration.name);
|
|
56
54
|
if (existingInstance) {
|
|
@@ -64,6 +62,30 @@ class AddCommand extends import_project_command.ProjectCommand {
|
|
|
64
62
|
}
|
|
65
63
|
await this._generateIntegrationInstance(integration);
|
|
66
64
|
}
|
|
65
|
+
_fetchLocalIntegration = async (integrationRef) => {
|
|
66
|
+
this.logger.warn(
|
|
67
|
+
"Installing integration from a local path. There is no guarantee that the integration is deployed with the expected schemas."
|
|
68
|
+
);
|
|
69
|
+
const workDir = integrationRef.path;
|
|
70
|
+
const pathStore = new utils.path.PathStore({
|
|
71
|
+
workDir,
|
|
72
|
+
definition: utils.path.absoluteFrom(workDir, consts.fromWorkDir.definition)
|
|
73
|
+
});
|
|
74
|
+
const integrationDefinition = await this.readIntegrationDefinitionFromFS(pathStore);
|
|
75
|
+
if (!integrationDefinition) {
|
|
76
|
+
throw new errors.BotpressCLIError(`Integration definition not found at ${workDir}`);
|
|
77
|
+
}
|
|
78
|
+
return integrationDefinition;
|
|
79
|
+
};
|
|
80
|
+
_fetchApiIntegration = async (integrationRef) => {
|
|
81
|
+
const api = await this.ensureLoginAndCreateClient(this.argv);
|
|
82
|
+
const integration = await api.findIntegration(integrationRef);
|
|
83
|
+
if (!integration) {
|
|
84
|
+
const formattedRef = (0, import_integration_ref.formatIntegrationRef)(integrationRef);
|
|
85
|
+
throw new errors.BotpressCLIError(`Integration "${formattedRef}" not found`);
|
|
86
|
+
}
|
|
87
|
+
return integration;
|
|
88
|
+
};
|
|
67
89
|
async _listIntegrationInstances() {
|
|
68
90
|
const installPath = this.projectPaths.abs.installDir;
|
|
69
91
|
if (!fs.existsSync(installPath)) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/command-implementations/add-command.ts"],
|
|
4
|
-
"sourcesContent": ["import type * as bpclient from '@botpress/client'\nimport bluebird from 'bluebird'\nimport chalk from 'chalk'\nimport * as fs from 'fs'\nimport * as pathlib from 'path'\nimport * as codegen from '../code-generation'\nimport type commandDefinitions from '../command-definitions'\nimport * as errors from '../errors'\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import type * as bpclient from '@botpress/client'\nimport type * as bpsdk from '@botpress/sdk'\nimport bluebird from 'bluebird'\nimport chalk from 'chalk'\nimport * as fs from 'fs'\nimport * as pathlib from 'path'\nimport * as codegen from '../code-generation'\nimport type commandDefinitions from '../command-definitions'\nimport * as consts from '../consts'\nimport * as errors from '../errors'\nimport {\n ApiIntegrationRef,\n formatIntegrationRef,\n LocalPathIntegrationRef,\n parseIntegrationRef,\n} from '../integration-ref'\nimport * as utils from '../utils'\nimport { ProjectCommand } from './project-command'\n\ntype IntegrationInstallDir = codegen.IntegrationInstanceJson & {\n dirname: string\n}\n\nexport type AddCommandDefinition = typeof commandDefinitions.add\nexport class AddCommand extends ProjectCommand<AddCommandDefinition> {\n public async run(): Promise<void> {\n const integrationDef = await this.readIntegrationDefinitionFromFS()\n if (integrationDef) {\n throw new errors.ExclusiveBotFeatureError()\n }\n\n const integrationRef = this.argv.integrationRef\n\n const parsedRef = parseIntegrationRef(integrationRef)\n if (!parsedRef) {\n throw new errors.InvalidIntegrationReferenceError(integrationRef)\n }\n\n const integration =\n parsedRef.type === 'path'\n ? await this._fetchLocalIntegration(parsedRef)\n : await this._fetchApiIntegration(parsedRef)\n\n const allInstances = await this._listIntegrationInstances()\n const existingInstance = allInstances.find((i) => i.name === integration.name)\n if (existingInstance) {\n this.logger.warn(`Integration with name \"${integration.name}\" already installed.`)\n const res = await this.prompt.confirm('Do you want to overwrite the existing instance?')\n if (!res) {\n this.logger.log('Aborted')\n return\n }\n\n await this._uninstallIntegration(existingInstance)\n }\n\n await this._generateIntegrationInstance(integration)\n }\n\n private _fetchLocalIntegration = async (\n integrationRef: LocalPathIntegrationRef\n ): Promise<bpsdk.IntegrationDefinition> => {\n this.logger.warn(\n 'Installing integration from a local path. There is no guarantee that the integration is deployed with the expected schemas.'\n )\n\n const workDir = integrationRef.path\n const pathStore = new utils.path.PathStore<'workDir' | 'definition'>({\n workDir,\n definition: utils.path.absoluteFrom(workDir, consts.fromWorkDir.definition),\n })\n const integrationDefinition = await this.readIntegrationDefinitionFromFS(pathStore)\n if (!integrationDefinition) {\n throw new errors.BotpressCLIError(`Integration definition not found at ${workDir}`)\n }\n return integrationDefinition\n }\n\n private _fetchApiIntegration = async (integrationRef: ApiIntegrationRef): Promise<bpclient.Integration> => {\n const api = await this.ensureLoginAndCreateClient(this.argv)\n const integration = await api.findIntegration(integrationRef)\n if (!integration) {\n const formattedRef = formatIntegrationRef(integrationRef)\n throw new errors.BotpressCLIError(`Integration \"${formattedRef}\" not found`)\n }\n return integration\n }\n\n private async _listIntegrationInstances(): Promise<IntegrationInstallDir[]> {\n const installPath = this.projectPaths.abs.installDir\n if (!fs.existsSync(installPath)) {\n this.logger.debug('Install path does not exist. Skipping listing of integration instances')\n return []\n }\n\n const allFiles = await fs.promises.readdir(installPath)\n const allPaths = allFiles.map((name) => pathlib.join(installPath, name))\n const directories = await bluebird.filter(allPaths, async (path) => {\n const stat = await fs.promises.stat(path)\n return stat.isDirectory()\n })\n\n let jsons = directories.map((root) => ({ root, json: pathlib.join(root, codegen.INTEGRATION_JSON) }))\n jsons = jsons.filter(({ json: x }) => fs.existsSync(x))\n\n return bluebird.map(jsons, async ({ root, json }) => {\n const content: string = await fs.promises.readFile(json, 'utf-8')\n const { name, version, id } = JSON.parse(content) as codegen.IntegrationInstanceJson\n const dirname = pathlib.basename(root)\n return {\n dirname,\n id,\n name,\n version,\n }\n })\n }\n\n private async _uninstallIntegration(instance: IntegrationInstallDir) {\n const installDir = this.projectPaths.abs.installDir\n const instancePath = pathlib.join(installDir, instance.dirname)\n await fs.promises.rm(instancePath, { recursive: true })\n await this._generateBotIndex()\n }\n\n private async _generateIntegrationInstance(integration: bpclient.Integration | bpsdk.IntegrationDefinition) {\n const line = this.logger.line()\n\n const { name, version } = integration\n line.started(`Installing ${chalk.bold(name)} v${version}...`)\n\n const instanceFiles = await codegen.generateIntegrationInstance(\n integration,\n this.projectPaths.rel('outDir').installDir\n )\n await this.writeGeneratedFilesToOutFolder(instanceFiles)\n await this._generateBotIndex()\n\n const rel = this.projectPaths.rel('workDir')\n line.success(`Installed integration available at ${chalk.grey(rel.outDir)}`)\n }\n\n private async _generateBotIndex() {\n const allInstances = await this._listIntegrationInstances()\n const indexFile = await codegen.generateBotIndex(\n this.projectPaths.rel('outDir').installDir,\n allInstances.map((i) => i.dirname)\n )\n await this.writeGeneratedFilesToOutFolder([indexFile])\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["bluebird", "chalk"]
|
|
7
7
|
}
|