@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.
Files changed (32) hide show
  1. package/dist/api/client.js +14 -19
  2. package/dist/api/client.js.map +2 -2
  3. package/dist/api/paging.js +42 -0
  4. package/dist/api/paging.js.map +7 -0
  5. package/dist/code-generation/index.js +12 -4
  6. package/dist/code-generation/index.js.map +2 -2
  7. package/dist/code-generation/integration-implementation.js +1 -38
  8. package/dist/code-generation/integration-implementation.js.map +2 -2
  9. package/dist/code-generation/integration-instance.js +2 -1
  10. package/dist/code-generation/integration-instance.js.map +2 -2
  11. package/dist/code-generation/map-integration.js +72 -0
  12. package/dist/code-generation/map-integration.js.map +7 -0
  13. package/dist/code-generation/typings.js.map +1 -1
  14. package/dist/command-implementations/add-command.js +27 -5
  15. package/dist/command-implementations/add-command.js.map +2 -2
  16. package/dist/command-implementations/deploy-command.js +8 -2
  17. package/dist/command-implementations/deploy-command.js.map +2 -2
  18. package/dist/command-implementations/dev-command.js +3 -2
  19. package/dist/command-implementations/dev-command.js.map +2 -2
  20. package/dist/command-implementations/integration-commands.js +6 -0
  21. package/dist/command-implementations/integration-commands.js.map +2 -2
  22. package/dist/command-implementations/login-command.js +4 -2
  23. package/dist/command-implementations/login-command.js.map +2 -2
  24. package/dist/command-implementations/project-command.js +35 -6
  25. package/dist/command-implementations/project-command.js.map +3 -3
  26. package/dist/integration-ref.js +10 -0
  27. package/dist/integration-ref.js.map +2 -2
  28. package/dist/integration-ref.test.js +76 -0
  29. package/dist/integration-ref.test.js.map +7 -0
  30. package/package.json +3 -3
  31. package/templates/echo-bot/package.json +2 -2
  32. package/templates/empty-integration/package.json +2 -2
@@ -27,14 +27,15 @@ __export(client_exports, {
27
27
  ApiClient: () => ApiClient
28
28
  });
29
29
  module.exports = __toCommonJS(client_exports);
30
- var import_client = require("@botpress/client");
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 import_client.Client({ apiUrl, token, workspaceId });
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(() => this.client.getIntegration(ref).then((r) => r.integration), 404);
65
+ return this.validateStatus(
66
+ () => this.client.getIntegration(ref).then((r) => ({ ...r.integration, workspaceId })),
67
+ 404
68
+ );
64
69
  }
65
- return this.validateStatus(() => this.client.getIntegrationByName(ref).then((r) => r.integration), 404);
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
- async listAllPages(lister, mapper) {
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 = (0, import_client.isApiError)(err) && err.code && allowedStatusesArray.includes(err.code);
91
+ const isAllowed = bpclient.isApiError(err) && err.code && allowedStatusesArray.includes(err.code);
97
92
  if (isAllowed) {
98
93
  return;
99
94
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/api/client.ts"],
4
- "sourcesContent": ["import { Client, Integration, isApiError } from '@botpress/client'\nimport _ from 'lodash'\nimport { formatIntegrationRef, IntegrationRef } from '../integration-ref'\nimport type { Logger } from '../logger'\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\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: 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 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<Integration | undefined> {\n if (ref.type === 'id') {\n return this.validateStatus(() => this.client.getIntegration(ref).then((r) => r.integration), 404)\n }\n return this.validateStatus(() => this.client.getIntegrationByName(ref).then((r) => r.integration), 404)\n }\n\n public async findPublicIntegration(ref: IntegrationRef): Promise<Integration | 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 async listAllPages<R extends object>(lister: PageLister<R>): Promise<R[]>\n public async listAllPages<R extends object, M>(lister: PageLister<R>, mapper?: (r: R) => M[]): Promise<M[]>\n public async 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\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 = 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,oBAAgD;AAChD,oBAAc;AACd,6BAAqD;AAkB9C,MAAM,UAAU;AAAA,EAQd,YAAY,OAA+B,SAAiB;AAAjB;AAChD,UAAM,EAAE,QAAQ,OAAO,YAAY,IAAI;AACvC,SAAK,SAAS,IAAI,qBAAO,EAAE,QAAQ,OAAO,YAAY,CAAC;AACvD,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,KAAuD;AACzF,QAAI,IAAI,SAAS,MAAM;AACrB,aAAO,KAAK,eAAe,MAAM,KAAK,OAAO,eAAe,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG;AAAA,IAClG;AACA,WAAO,KAAK,eAAe,MAAM,KAAK,OAAO,qBAAqB,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG;AAAA,EACxG;AAAA,EAEA,MAAa,sBAAsB,KAAuD;AACxF,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,EAIA,MAAa,aAAkC,QAAuB,QAAwB;AAC5F,QAAI;AACJ,UAAM,MAAW,CAAC;AAElB,OAAG;AACD,YAAM,EAAE,SAAS,EAAE,IAAI,MAAM,OAAO,EAAE,UAAU,CAAC;AACjD,UAAI,KAAK,CAAM;AACf,kBAAY,KAAK;AAAA,IACnB,SAAS;AAET,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AAEA,UAAM,SAAc,IAAI,QAAQ,CAAC,MAAM,OAAO,CAAC,CAAC;AAChD,WAAO;AAAA,EACT;AAAA,EAEA,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,gBAAY,0BAAW,GAAG,KAAK,IAAI,QAAQ,qBAAqB,SAAS,IAAI,IAAI;AACvF,UAAI,WAAW;AACb;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AACF;",
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 (integration, implementationTypingsPath) => {
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 (integration, secretsPath) => {
52
- const indexModule = await import_integration_secret.IntegrationSecretIndexModule.create(integration);
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 (integration, installPath) => {
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 client from '@botpress/client'\nimport type { IntegrationDefinition } 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 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 integration: IntegrationDefinition,\n implementationTypingsPath: string\n): Promise<types.File[]> => {\n const indexModule = await IntegrationImplementationIndexModule.create(integration)\n indexModule.unshift(implementationTypingsPath)\n return indexModule.flatten()\n}\n\nexport const generateIntegrationSecrets = async (\n integration: IntegrationDefinition,\n secretsPath: string\n): Promise<types.File[]> => {\n const indexModule = await IntegrationSecretIndexModule.create(integration)\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\n}\n\nexport const generateIntegrationInstance = async (\n integration: client.Integration,\n installPath: string\n): Promise<types.File[]> => {\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;AAG7C,qBAAqB;AACrB,IAAAA,6BAAsC;AAC/B,MAAM,mBAAmB;AAEzB,MAAM,2CAA2C,OACtD,aACA,8BAC0B;AAC1B,QAAM,cAAc,MAAM,uEAAqC,OAAO,WAAW;AACjF,cAAY,QAAQ,yBAAyB;AAC7C,SAAO,YAAY,QAAQ;AAC7B;AAEO,MAAM,6BAA6B,OACxC,aACA,gBAC0B;AAC1B,QAAM,cAAc,MAAM,uDAA6B,OAAO,WAAW;AACzE,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,aACA,gBAC0B;AAC1B,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;",
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(sdkIntegration) {
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 * as bpsdk from '@botpress/sdk'\nimport { z } from 'zod'\nimport * as utils 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 IntegrationImplementationIndexModule extends Module {\n public static async create(\n sdkIntegration: bpsdk.IntegrationDefinition\n ): Promise<IntegrationImplementationIndexModule> {\n const integration = this._mapIntegration(sdkIntegration)\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 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 private static _mapIntegration = (i: bpsdk.IntegrationDefinition): types.IntegrationDefinition => ({\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 ? this._mapSchema(i.configuration) : { schema: {} },\n events: i.events ? utils.records.mapValues(i.events, this._mapSchema) : {},\n states: i.states ? utils.records.mapValues(i.states, this._mapSchema) : {},\n actions: i.actions\n ? utils.records.mapValues(i.actions, (a) => ({\n input: this._mapSchema(a.input),\n output: this._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, this._mapSchema),\n }))\n : {},\n })\n\n private static _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": "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",
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 = '${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 type { Integration } from '@botpress/client'\nimport { 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'\n\nexport class IntegrationInstanceIndexModule extends Module {\n public static async create(integration: Integration): 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: Integration,\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 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 = '${id}'`,\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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",
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>\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"],
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 api.findIntegration(parsedRef);
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 { parseIntegrationRef } from '../integration-ref'\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 api = await this.ensureLoginAndCreateClient(this.argv)\n const parsedRef = parseIntegrationRef(integrationRef)\n if (!parsedRef) {\n throw new errors.InvalidIntegrationReferenceError(integrationRef)\n }\n\n const integration = await api.findIntegration(parsedRef)\n if (!integration) {\n throw new errors.BotpressCLIError(`Integration \"${integrationRef}\" not found`)\n }\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 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) {\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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",
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
  }