@botpress/cli 6.8.5 → 6.8.6

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.
@@ -39,30 +39,39 @@ export type ProjectDefinition = LintIgnoredConfig & ({
39
39
  definition: sdk.PluginDefinition;
40
40
  });
41
41
  type ProjectDefinitionResolver<T> = () => Promise<LintIgnoredConfig & T>;
42
+ type ResolvedProjectDefinition = {
43
+ type: 'bot';
44
+ definition: sdk.BotDefinition;
45
+ } | {
46
+ type: 'integration';
47
+ definition: sdk.IntegrationDefinition;
48
+ } | {
49
+ type: 'interface';
50
+ definition: sdk.InterfaceDefinition;
51
+ } | {
52
+ type: 'plugin';
53
+ definition: sdk.PluginDefinition;
54
+ };
42
55
  export type ProjectDefinitionLazy = {
43
56
  projectType: 'integration';
44
- resolveProjectDefinition: ProjectDefinitionResolver<{
57
+ resolveProjectDefinition: ProjectDefinitionResolver<Extract<ResolvedProjectDefinition, {
45
58
  type: 'integration';
46
- definition: sdk.IntegrationDefinition;
47
- }>;
59
+ }>>;
48
60
  } | {
49
61
  projectType: 'bot';
50
- resolveProjectDefinition: ProjectDefinitionResolver<{
62
+ resolveProjectDefinition: ProjectDefinitionResolver<Extract<ResolvedProjectDefinition, {
51
63
  type: 'bot';
52
- definition: sdk.BotDefinition;
53
- }>;
64
+ }>>;
54
65
  } | {
55
66
  projectType: 'interface';
56
- resolveProjectDefinition: ProjectDefinitionResolver<{
67
+ resolveProjectDefinition: ProjectDefinitionResolver<Extract<ResolvedProjectDefinition, {
57
68
  type: 'interface';
58
- definition: sdk.InterfaceDefinition;
59
- }>;
69
+ }>>;
60
70
  } | {
61
71
  projectType: 'plugin';
62
- resolveProjectDefinition: ProjectDefinitionResolver<{
72
+ resolveProjectDefinition: ProjectDefinitionResolver<Extract<ResolvedProjectDefinition, {
63
73
  type: 'plugin';
64
- definition: sdk.PluginDefinition;
65
- }>;
74
+ }>>;
66
75
  };
67
76
  type UpdatedBot = client.Bot;
68
77
  declare class ProjectPaths extends utils.path.PathStore<keyof AllProjectPaths> {
@@ -73,6 +82,7 @@ export declare class ProjectDefinitionContext {
73
82
  private _buildContext;
74
83
  getOrResolveDefinition<T extends object>(code: string): T;
75
84
  rebuildEntrypoint(...args: Parameters<utils.esbuild.BuildEntrypointContext['rebuild']>): Promise<utils.esbuild.BuildResult<utils.esbuild.BuildOptions>>;
85
+ dispose(): Promise<void>;
76
86
  }
77
87
  export declare abstract class ProjectCommand<C extends ProjectCommandDefinition> extends GlobalCommand<C> {
78
88
  protected projectContext: ProjectDefinitionContext;
@@ -114,11 +124,20 @@ export declare abstract class ProjectCommand<C extends ProjectCommandDefinition>
114
124
  private _parseArgvSecrets;
115
125
  private _notifyUpdateSdk;
116
126
  protected validateIntegrationRegistration(updatedBot: UpdatedBot, onFailCallback: (failedIntegrations: UpdatedBot['integrations']) => void): void;
117
- protected manageWorkspaceHandle(api: apiUtils.ApiClient, integration: sdk.IntegrationDefinition): Promise<{
118
- integration: sdk.IntegrationDefinition;
127
+ protected manageWorkspaceHandle(api: apiUtils.ApiClient, project: Extract<ResolvedProjectDefinition, {
128
+ type: 'integration';
129
+ }>): Promise<{
130
+ definition: sdk.IntegrationDefinition;
131
+ workspaceId?: string;
132
+ } | undefined>;
133
+ protected manageWorkspaceHandle(api: apiUtils.ApiClient, project: Extract<ResolvedProjectDefinition, {
134
+ type: 'plugin';
135
+ }>): Promise<{
136
+ definition: sdk.PluginDefinition;
119
137
  workspaceId?: string;
120
138
  } | undefined>;
121
- protected _parseIntegrationName: (integrationName: string) => {
139
+ private _cloneDefinition;
140
+ protected _parseHandledName: (artifactName: string) => {
122
141
  name: string;
123
142
  workspaceHandle?: string;
124
143
  };
@@ -68,6 +68,14 @@ class ProjectDefinitionContext {
68
68
  rebuildEntrypoint(...args) {
69
69
  return this._buildContext.rebuild(...args);
70
70
  }
71
+ async dispose() {
72
+ this._codeCache.clear();
73
+ try {
74
+ await this._buildContext.dispose();
75
+ } catch (thrown) {
76
+ throw errors.BotpressCLIError.map(thrown);
77
+ }
78
+ }
71
79
  }
72
80
  class ProjectCommand extends import_global_command.GlobalCommand {
73
81
  projectContext = new ProjectDefinitionContext();
@@ -673,11 +681,12 @@ class ProjectCommand extends import_global_command.GlobalCommand {
673
681
  onFailCallback(failedIntegrations);
674
682
  }
675
683
  }
676
- async manageWorkspaceHandle(api, integration) {
677
- const { name: localName, workspaceHandle: localHandle } = this._parseIntegrationName(integration.name);
684
+ async manageWorkspaceHandle(api, project) {
685
+ const { type, definition } = project;
686
+ const { name: localName, workspaceHandle: localHandle } = this._parseHandledName(definition.name);
678
687
  if (!localHandle && api.isBotpressWorkspace) {
679
688
  this.logger.debug("Botpress workspace detected; workspace handle omitted");
680
- return { integration };
689
+ return { definition };
681
690
  }
682
691
  const { handle: remoteHandle, name: workspaceName } = await api.getWorkspace().catch((thrown) => {
683
692
  throw errors.BotpressCLIError.wrap(thrown, "Could not fetch workspace");
@@ -690,25 +699,25 @@ class ProjectCommand extends import_global_command.GlobalCommand {
690
699
  });
691
700
  if (!remoteWorkspace) {
692
701
  throw new errors.BotpressCLIError(
693
- `The integration handle "${localHandle}" is not associated with any of your workspaces.`
702
+ `The ${type} handle "${localHandle}" is not associated with any of your workspaces.`
694
703
  );
695
704
  }
696
705
  this.logger.warn(
697
- `Your are logged in to workspace "${workspaceName}" but integration handle "${localHandle}" belongs to "${remoteWorkspace.name}".`
706
+ `Your are logged in to workspace "${workspaceName}" but ${type} handle "${localHandle}" belongs to "${remoteWorkspace.name}".`
698
707
  );
699
708
  const confirmUseAlternateWorkspace = await this.prompt.confirm(
700
- "Do you want to deploy integration on this workspace instead?"
709
+ `Do you want to deploy ${type} on this workspace instead?`
701
710
  );
702
711
  if (!confirmUseAlternateWorkspace) {
703
712
  throw new errors.BotpressCLIError(
704
- `Cannot deploy integration with handle "${localHandle}" on workspace "${workspaceName}"`
713
+ `Cannot deploy ${type} with handle "${localHandle}" on workspace "${workspaceName}"`
705
714
  );
706
715
  }
707
716
  workspaceId = remoteWorkspace.id;
708
717
  }
709
- return { integration, workspaceId };
718
+ return { definition, workspaceId };
710
719
  }
711
- const workspaceHandleIsMandatoryMsg = "Cannot deploy integration without workspace handle";
720
+ const workspaceHandleIsMandatoryMsg = `Cannot deploy ${type} without workspace handle`;
712
721
  if (!localHandle && remoteHandle) {
713
722
  const confirmAddHandle = await this.prompt.confirm(
714
723
  `Your current workspace handle is "${remoteHandle}". Do you want to use the name "${remoteHandle}/${localName}"?`
@@ -718,7 +727,7 @@ class ProjectCommand extends import_global_command.GlobalCommand {
718
727
  return;
719
728
  }
720
729
  const newName2 = `${remoteHandle}/${localName}`;
721
- return { integration: new sdk.IntegrationDefinition({ ...integration, name: newName2 }) };
730
+ return { definition: this._cloneDefinition(project, { name: newName2 }) };
722
731
  }
723
732
  if (localHandle && !remoteHandle) {
724
733
  const { available } = await api.client.checkHandleAvailability({ handle: localHandle }).catch((thrown) => {
@@ -737,7 +746,7 @@ class ProjectCommand extends import_global_command.GlobalCommand {
737
746
  throw errors.BotpressCLIError.wrap(thrown, `Could not claim handle "${localHandle}"`);
738
747
  });
739
748
  this.logger.success(`Handle "${localHandle}" is now yours!`);
740
- return { integration };
749
+ return { definition };
741
750
  }
742
751
  this.logger.warn("It seems you don't have a workspace handle yet.");
743
752
  let claimedHandle = void 0;
@@ -758,14 +767,28 @@ class ProjectCommand extends import_global_command.GlobalCommand {
758
767
  } while (!claimedHandle);
759
768
  this.logger.success(`Handle "${claimedHandle}" is yours!`);
760
769
  const newName = `${claimedHandle}/${localName}`;
761
- return { integration: new sdk.IntegrationDefinition({ ...integration, name: newName }) };
770
+ return { definition: this._cloneDefinition(project, { name: newName }) };
762
771
  }
763
- _parseIntegrationName = (integrationName) => {
764
- const parts = integrationName.split("/");
772
+ _cloneDefinition = (def, props) => {
773
+ if (def.type === "integration") {
774
+ return new sdk.IntegrationDefinition({ ...def.definition.props, ...props });
775
+ }
776
+ if (def.type === "plugin") {
777
+ return new sdk.PluginDefinition({ ...def.definition.props, ...props });
778
+ }
779
+ if (def.type === "interface") {
780
+ return new sdk.InterfaceDefinition({ ...def.definition.props, ...props });
781
+ }
782
+ if (def.type === "bot") {
783
+ return new sdk.BotDefinition({ ...def.definition.props, ...props });
784
+ }
785
+ def;
786
+ throw new errors.BotpressCLIError("Unsupported definition type");
787
+ };
788
+ _parseHandledName = (artifactName) => {
789
+ const parts = artifactName.split("/");
765
790
  if (parts.length > 2) {
766
- throw new errors.BotpressCLIError(
767
- `Invalid integration name "${integrationName}": a single forward slash is allowed`
768
- );
791
+ throw new errors.BotpressCLIError(`Invalid name "${artifactName}": a single forward slash is allowed`);
769
792
  }
770
793
  if (parts.length === 2) {
771
794
  const [workspaceHandle, name2] = parts;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/command-implementations/project-command.ts"],
4
- "sourcesContent": ["import type * as client from '@botpress/client'\nimport * as sdk from '@botpress/sdk'\nimport type { YargsConfig } from '@bpinternal/yargs-extra'\nimport chalk from 'chalk'\nimport fs from 'fs'\nimport _ from 'lodash'\nimport semver from 'semver'\nimport * as apiUtils from '../api'\nimport * as codegen from '../code-generation'\nimport * as config from '../config'\nimport * as consts from '../consts'\nimport * as errors from '../errors'\nimport { validateIntegrationDefinition, validateBotDefinition } from '../sdk'\nimport type { CommandArgv, CommandDefinition } from '../typings'\nimport * as utils from '../utils'\nimport { GlobalCommand } from './global-command'\n\nexport type ProjectCommandDefinition = CommandDefinition<typeof config.schemas.project>\nexport type ProjectCache = {\n botId: string\n devId: string\n tunnelId: string\n secrets: {\n [secretName: string]: string\n }\n}\n\ntype ConfigurableProjectPaths = { workDir: string }\ntype ConstantProjectPaths = typeof consts.fromWorkDir\ntype AllProjectPaths = ConfigurableProjectPaths & ConstantProjectPaths\n\ntype LintIgnoredConfig = { bpLintDisabled?: boolean }\n\nexport type ProjectType = ProjectDefinition['type']\nexport type ProjectDefinition = LintIgnoredConfig &\n (\n | { type: 'integration'; definition: sdk.IntegrationDefinition }\n | { type: 'interface'; definition: sdk.InterfaceDefinition }\n | { type: 'bot'; definition: sdk.BotDefinition }\n | { type: 'plugin'; definition: sdk.PluginDefinition }\n )\n\ntype ProjectDefinitionResolver<T> = () => Promise<LintIgnoredConfig & T>\n\nexport type ProjectDefinitionLazy =\n | {\n projectType: 'integration'\n resolveProjectDefinition: ProjectDefinitionResolver<{\n type: 'integration'\n definition: sdk.IntegrationDefinition\n }>\n }\n | {\n projectType: 'bot'\n resolveProjectDefinition: ProjectDefinitionResolver<{ type: 'bot'; definition: sdk.BotDefinition }>\n }\n | {\n projectType: 'interface'\n resolveProjectDefinition: ProjectDefinitionResolver<{ type: 'interface'; definition: sdk.InterfaceDefinition }>\n }\n | {\n projectType: 'plugin'\n resolveProjectDefinition: ProjectDefinitionResolver<{ type: 'plugin'; definition: sdk.PluginDefinition }>\n }\n\ntype UpdatedBot = client.Bot\n\ntype ClientIntegrationDefinitions = Record<string, client.Integration>\ntype ClientIntegration = client.Bot['integrations'][string]\n\nclass ProjectPaths extends utils.path.PathStore<keyof AllProjectPaths> {\n public constructor(argv: CommandArgv<ProjectCommandDefinition>) {\n const absWorkDir = utils.path.absoluteFrom(utils.path.cwd(), argv.workDir)\n super({\n workDir: absWorkDir,\n ..._.mapValues(consts.fromWorkDir, (p) => utils.path.absoluteFrom(absWorkDir, p)),\n })\n }\n}\n\nexport class ProjectDefinitionContext {\n private _codeCache: Map<string, object> = new Map()\n private _buildContext: utils.esbuild.BuildEntrypointContext = new utils.esbuild.BuildEntrypointContext()\n\n public getOrResolveDefinition<T extends object>(code: string): T {\n const definition = this._codeCache.get(code)\n if (definition) {\n return definition as T\n }\n const result = utils.require.requireJsCode<{ default: object }>(code)\n this._codeCache.set(code, result.default)\n return result.default as T\n }\n\n public rebuildEntrypoint(...args: Parameters<utils.esbuild.BuildEntrypointContext['rebuild']>) {\n return this._buildContext.rebuild(...args)\n }\n}\n\ntype ResolvedDependency = { id: string }\ntype DependencyCacheKey = `${'integration' | 'plugin' | 'interface'}:${string}@${string}`\n\nexport abstract class ProjectCommand<C extends ProjectCommandDefinition> extends GlobalCommand<C> {\n protected projectContext: ProjectDefinitionContext = new ProjectDefinitionContext()\n private _dependencyCache = new Map<DependencyCacheKey, ResolvedDependency>()\n\n public setProjectContext(projectContext: ProjectDefinitionContext) {\n this.projectContext = projectContext\n return this\n }\n\n protected override async bootstrap() {\n await super.bootstrap()\n await this._notifyUpdateSdk()\n }\n\n protected get projectPaths() {\n return new ProjectPaths(this.argv)\n }\n\n protected get projectCache() {\n return new utils.cache.FSKeyValueCache<ProjectCache>(this.projectPaths.abs.projectCacheFile)\n }\n\n private _readProjectType(projectPaths: ProjectPaths): ProjectType {\n const abs = projectPaths.abs\n if (fs.existsSync(abs.integrationDefinition)) {\n return 'integration'\n }\n if (fs.existsSync(abs.interfaceDefinition)) {\n return 'interface'\n }\n if (fs.existsSync(abs.botDefinition)) {\n return 'bot'\n }\n if (fs.existsSync(abs.pluginDefinition)) {\n return 'plugin'\n }\n throw new errors.UnsupportedProjectType()\n }\n\n protected readProjectDefinitionFromFS(): ProjectDefinitionLazy {\n try {\n const type = this._readProjectType(this.projectPaths)\n if (type === 'integration') {\n return {\n projectType: 'integration',\n resolveProjectDefinition: async () => ({\n type: 'integration',\n ...(await this._readIntegrationDefinitionFromFS(this.projectPaths)),\n }),\n }\n }\n if (type === 'plugin') {\n return {\n projectType: 'plugin',\n resolveProjectDefinition: async () => ({\n type: 'plugin',\n ...(await this._readPluginDefinitionFromFS(this.projectPaths)),\n }),\n }\n }\n if (type === 'interface') {\n return {\n projectType: 'interface',\n resolveProjectDefinition: async () => ({\n type: 'interface',\n ...(await this._readInterfaceDefinitionFromFS(this.projectPaths)),\n }),\n }\n }\n if (type === 'bot') {\n return {\n projectType: 'bot',\n resolveProjectDefinition: async () => ({\n type: 'bot',\n ...(await this._readBotDefinitionFromFS(this.projectPaths)),\n }),\n }\n }\n } catch (thrown: unknown) {\n throw errors.BotpressCLIError.wrap(thrown, 'Error while reading project definition')\n }\n throw new errors.ProjectDefinitionNotFoundError(this.projectPaths.abs.workDir)\n }\n\n private async _readIntegrationDefinitionFromFS(\n projectPaths: utils.path.PathStore<'workDir' | 'integrationDefinition'>\n ): Promise<{ definition: sdk.IntegrationDefinition } & LintIgnoredConfig> {\n const abs = projectPaths.abs\n const rel = projectPaths.rel('workDir')\n\n if (!fs.existsSync(abs.integrationDefinition)) {\n throw new errors.BotpressCLIError('Could not read integration definition')\n }\n\n const bpLintDisabled = await this._isBpLintDisabled(abs.integrationDefinition)\n\n const { outputFiles } = await this.projectContext.rebuildEntrypoint({\n absWorkingDir: abs.workDir,\n entrypoint: rel.integrationDefinition,\n })\n\n const artifact = outputFiles?.[0]\n if (!artifact) {\n throw new errors.BotpressCLIError('Could not read integration definition')\n }\n\n const definition = this.projectContext.getOrResolveDefinition<sdk.IntegrationDefinition>(artifact.text)\n validateIntegrationDefinition(definition)\n return { definition, bpLintDisabled }\n }\n\n private async _readInterfaceDefinitionFromFS(\n projectPaths: utils.path.PathStore<'workDir' | 'interfaceDefinition'>\n ): Promise<{ definition: sdk.InterfaceDefinition } & LintIgnoredConfig> {\n const abs = projectPaths.abs\n const rel = projectPaths.rel('workDir')\n\n if (!fs.existsSync(abs.interfaceDefinition)) {\n throw new errors.BotpressCLIError('Could not read interface definition')\n }\n\n const bpLintDisabled = await this._isBpLintDisabled(abs.interfaceDefinition)\n\n const { outputFiles } = await this.projectContext.rebuildEntrypoint({\n absWorkingDir: abs.workDir,\n entrypoint: rel.interfaceDefinition,\n })\n\n const artifact = outputFiles?.[0]\n if (!artifact) {\n throw new errors.BotpressCLIError('Could not read interface definition')\n }\n\n const definition = this.projectContext.getOrResolveDefinition<sdk.InterfaceDefinition>(artifact.text)\n\n return { definition, bpLintDisabled }\n }\n\n private async _readBotDefinitionFromFS(\n projectPaths: utils.path.PathStore<'workDir' | 'botDefinition'>\n ): Promise<{ definition: sdk.BotDefinition } & LintIgnoredConfig> {\n const abs = projectPaths.abs\n const rel = projectPaths.rel('workDir')\n\n if (!fs.existsSync(abs.botDefinition)) {\n throw new errors.BotpressCLIError('Could not read bot definition')\n }\n\n const bpLintDisabled = await this._isBpLintDisabled(abs.botDefinition)\n\n const { outputFiles } = await this.projectContext.rebuildEntrypoint({\n absWorkingDir: abs.workDir,\n entrypoint: rel.botDefinition,\n })\n\n const artifact = outputFiles?.[0]\n if (!artifact) {\n throw new errors.BotpressCLIError('Could not read bot definition')\n }\n\n const definition = this.projectContext.getOrResolveDefinition<sdk.BotDefinition>(artifact.text)\n validateBotDefinition(definition)\n return { definition, bpLintDisabled }\n }\n\n private async _readPluginDefinitionFromFS(\n projectPaths: utils.path.PathStore<'workDir' | 'pluginDefinition'>\n ): Promise<{ definition: sdk.PluginDefinition } & LintIgnoredConfig> {\n const abs = projectPaths.abs\n const rel = projectPaths.rel('workDir')\n\n if (!fs.existsSync(abs.pluginDefinition)) {\n throw new errors.BotpressCLIError('Could not read plugin definition')\n }\n\n const bpLintDisabled = await this._isBpLintDisabled(abs.pluginDefinition)\n\n const { outputFiles } = await this.projectContext.rebuildEntrypoint({\n absWorkingDir: abs.workDir,\n entrypoint: rel.pluginDefinition,\n })\n\n const artifact = outputFiles?.[0]\n if (!artifact) {\n throw new errors.BotpressCLIError('Could not read plugin definition')\n }\n\n const definition = this.projectContext.getOrResolveDefinition<sdk.PluginDefinition>(artifact.text)\n // TODO: validate plugin definition\n return { definition, bpLintDisabled }\n }\n\n private async _isBpLintDisabled(definitionPath: string): Promise<boolean> {\n const tsContent = await fs.promises.readFile(definitionPath, 'utf-8')\n const regex = /\\/\\* bplint-disable \\*\\//\n return regex.test(tsContent)\n }\n\n protected async displayIntegrationUrls({ api, bot }: { api: apiUtils.ApiClient; bot: client.Bot }) {\n if (!_.keys(bot.integrations).length) {\n this.logger.debug('No integrations in bot')\n return\n }\n\n const integrationDefinitions = await utils.records.mapValuesAsync(bot.integrations, async (integration) =>\n api.getPublicOrPrivateIntegration({\n type: 'id',\n id: integration.id,\n })\n )\n\n this.logger.log('Integrations:')\n for (const [alias, integration] of Object.entries(bot.integrations)) {\n if (integration.enabled) {\n this.logger.log(`${alias} ${integration.version}:`, { prefix: { symbol: '\u2192', indent: 2 } })\n } else {\n this.logger.log(`${alias} ${integration.version} ${chalk.italic('(disabled)')}:`, {\n prefix: { symbol: '\u2192', indent: 2 },\n })\n }\n\n const integrationDefinition = integrationDefinitions[alias]\n const linkTemplateScript = integrationDefinition\n ? this._getLinkTemplateScript({ integration, integrationDefinition })\n : undefined\n this._displayWebhookUrl({ integration, integrationDefinition, linkTemplateScript })\n if (!integrationDefinition) {\n this.logger.debug(\n `No integration definition for integration ${alias} (${integration.name}, ${integration.id}), skipping OAuth or Sandbox links`\n )\n this.logger.line().commit()\n continue\n }\n const isSandbox =\n integration.configurationType === 'sandbox' && !!integrationDefinition.sandbox?.identifierExtractScript\n const showLink = !!linkTemplateScript && (isSandbox || !!integrationDefinition.identifier?.extractScript)\n if (showLink && isSandbox) {\n await this._displaySandboxLinkAndCode({ integration, alias, bot, api, linkTemplateScript })\n } else if (showLink) {\n this._displayAuthorizationLink({ integration, api, linkTemplateScript })\n }\n this.logger.line().commit()\n }\n }\n\n private _getLinkTemplateScript({\n integration,\n integrationDefinition,\n }: {\n integration: ClientIntegration\n integrationDefinition?: ClientIntegrationDefinitions[string]\n }) {\n const config =\n integration.configurationType === null\n ? integrationDefinition?.configuration\n : integrationDefinition?.configurations[integration.configurationType]\n return config?.identifier?.linkTemplateScript\n }\n\n private _displayWebhookUrl({\n integration,\n integrationDefinition,\n linkTemplateScript,\n }: {\n integration: ClientIntegration\n integrationDefinition?: ClientIntegrationDefinitions[string]\n linkTemplateScript?: string\n }) {\n const needsWebhook = !(integrationDefinition?.identifier && linkTemplateScript)\n const logFn = (needsWebhook ? this.logger.log : this.logger.debug).bind(this.logger)\n\n if (integration.enabled) {\n logFn(`${chalk.bold('Webhook')}: ${integration.webhookUrl}`, {\n prefix: { symbol: '\u25CF', indent: 4 },\n })\n } else {\n logFn(`Webhook: ${integration.webhookUrl}`, {\n prefix: { symbol: '\u25CB', indent: 4 },\n })\n }\n }\n\n private _displayAuthorizationLink({\n integration,\n api,\n linkTemplateScript,\n }: {\n integration: ClientIntegration\n api: apiUtils.ApiClient\n linkTemplateScript: string\n }) {\n const authorizationLink = this._getAuthorizationLink({ integration, api, linkTemplateScript })\n const isAuthorized = !!integration.identifier\n const authorizationStatus = integration.identifier ? 'Authorized \u2713' : 'Authorize'\n if (integration.enabled && isAuthorized) {\n this.logger.log(`${chalk.bold(authorizationStatus)} : ${authorizationLink}`, {\n prefix: { symbol: '\u25CF', indent: 4 },\n })\n } else {\n this.logger.log(`${authorizationStatus}: ${authorizationLink}`, {\n prefix: { symbol: '\u25CB', indent: 4 },\n })\n }\n }\n\n private _getLinkTemplateArgs({ integration, api }: { integration: ClientIntegration; api: apiUtils.ApiClient }) {\n // These are the values used by the studio\n let env: 'development' | 'preview' | 'production'\n if (api.url.includes(consts.stagingBotpressDomain)) {\n env = 'preview'\n } else if (api.url.includes(consts.productionBotpressDomain)) {\n env = 'production'\n } else {\n env = 'development'\n }\n return {\n env,\n webhookId: integration.webhookId,\n webhookUrl: api.url.replace('api', 'webhook'),\n }\n }\n\n private _getAuthorizationLink({\n integration,\n api,\n linkTemplateScript,\n }: {\n integration: client.Bot['integrations'][string]\n api: apiUtils.ApiClient\n linkTemplateScript: string\n }) {\n return utils.vrl.getStringResult({\n code: linkTemplateScript,\n data: this._getLinkTemplateArgs({ integration, api }),\n })\n }\n\n private _getSandboxLink({\n shareableId,\n integration,\n api,\n linkTemplateScript,\n }: {\n shareableId: string\n integration: ClientIntegration\n api: apiUtils.ApiClient\n linkTemplateScript: string\n }) {\n return utils.vrl.getStringResult({\n code: linkTemplateScript,\n data: { shareableId, ...this._getLinkTemplateArgs({ integration, api }) },\n })\n }\n\n private async _displaySandboxLinkAndCode({\n integration,\n alias,\n bot,\n api,\n linkTemplateScript,\n }: {\n integration: ClientIntegration\n alias: string\n bot: client.Bot\n api: apiUtils.ApiClient\n linkTemplateScript: string\n }) {\n const shareableId = await api.getOrGenerateShareableId(bot.id, integration.id, alias)\n const sandboxLink = this._getSandboxLink({ shareableId, integration, api, linkTemplateScript })\n const sandboxInstruction = `Send '${shareableId}' to ${sandboxLink}`\n if (integration.enabled) {\n this.logger.log(`${chalk.bold('Sandbox')}: ${sandboxInstruction}`, {\n prefix: { symbol: '\u25CF', indent: 4 },\n })\n } else {\n this.logger.log(`Sandbox: ${sandboxInstruction}`, {\n prefix: { symbol: '\u25CB', indent: 4 },\n })\n }\n }\n\n protected async promptSecrets(\n def: { secrets?: Record<string, sdk.SecretDefinition> },\n argv: YargsConfig<typeof config.schemas.secrets>,\n opts: { formatEnv?: boolean; knownSecrets?: string[] } = {}\n ): Promise<Record<string, string | null>> {\n const formatEnv = opts.formatEnv ?? false\n const knownSecrets = opts.knownSecrets ?? []\n\n const { secrets: secretDefinitions } = def\n if (!secretDefinitions) {\n return {}\n }\n\n const secretArgv = this._parseArgvSecrets(argv.secrets)\n const invalidSecret = Object.keys(secretArgv).find((s) => !secretDefinitions[s])\n if (invalidSecret) {\n throw new errors.BotpressCLIError(`Secret ${invalidSecret} is not defined in the definition`)\n }\n\n const values: Record<string, string | null> = {}\n for (const [secretName, { optional }] of Object.entries(secretDefinitions)) {\n const argvSecret = secretArgv[secretName]\n if (argvSecret) {\n this.logger.debug(`Using secret \"${secretName}\" from argv`)\n values[secretName] = argvSecret\n continue\n }\n\n const alreadyKnown = knownSecrets.includes(secretName)\n let mode: string\n if (alreadyKnown) {\n mode = 'already set'\n } else if (optional) {\n mode = 'optional'\n } else {\n mode = 'required'\n }\n\n const prompted = await this.prompt.text(`Enter value for secret \"${secretName}\" (${mode})`)\n if (prompted) {\n values[secretName] = prompted\n continue\n }\n\n if (alreadyKnown) {\n this.logger.log(`Secret \"${secretName}\" is unchanged`)\n } else if (optional) {\n this.logger.warn(`Secret \"${secretName}\" is unassigned`)\n } else {\n throw new errors.BotpressCLIError(`Secret \"${secretName}\" is required`)\n }\n }\n\n for (const secretName of knownSecrets) {\n const isDefined = secretName in secretDefinitions\n if (isDefined) {\n continue\n }\n const prompted = await this.prompt.confirm(`Secret \"${secretName}\" was removed. Do you wish to delete it?`)\n if (prompted) {\n this.logger.log(`Deleting secret \"${secretName}\"`, { prefix: { symbol: '\u00D7', fg: 'red' } })\n values[secretName] = null\n }\n }\n\n if (!formatEnv) {\n return values\n }\n\n const envVariables = _.mapKeys(values, (_v, k) => codegen.secretEnvVariableName(k))\n return envVariables\n }\n\n protected async prepareCreateIntegrationBody(\n integrationDef: sdk.IntegrationDefinition\n ): Promise<apiUtils.CreateIntegrationRequestBody> {\n const partialBody = await apiUtils.prepareCreateIntegrationBody(integrationDef)\n\n let code: string | undefined = undefined\n if (fs.existsSync(this.projectPaths.abs.outFileCJS)) {\n code = await this.readProjectFile(this.projectPaths.abs.outFileCJS)\n }\n\n const icon = await this.readProjectFile(integrationDef.icon, 'base64')\n const readme = await this.readProjectFile(integrationDef.readme, 'base64')\n const extractScript = await this.readProjectFile(integrationDef.identifier?.extractScript)\n const fallbackHandlerScript = await this.readProjectFile(integrationDef.identifier?.fallbackHandlerScript)\n return {\n ...partialBody,\n code,\n icon,\n readme,\n identifier: {\n extractScript,\n fallbackHandlerScript,\n },\n configuration: integrationDef.configuration\n ? {\n schema: await utils.schema\n .mapZodToJsonSchema(integrationDef.configuration, {\n useLegacyZuiTransformer: integrationDef.__advanced?.useLegacyZuiTransformer,\n toJSONSchemaOptions: integrationDef.__advanced?.toJSONSchemaOptions,\n })\n .catch((thrown) => {\n throw errors.BotpressCLIError.wrap(\n thrown,\n `Failed to convert ZUI to JSON schema for integration ${integrationDef.name} for configuration`\n )\n }),\n identifier: {\n required: integrationDef.configuration.identifier?.required,\n linkTemplateScript: await this.readProjectFile(\n integrationDef.configuration.identifier?.linkTemplateScript\n ),\n },\n }\n : undefined,\n configurations: integrationDef.configurations\n ? await utils.records.mapValuesAsync(\n integrationDef.configurations,\n async (configuration, configurationName) => ({\n title: configuration.title,\n description: configuration.description,\n schema: await utils.schema\n .mapZodToJsonSchema(configuration, {\n useLegacyZuiTransformer: integrationDef.__advanced?.useLegacyZuiTransformer,\n toJSONSchemaOptions: integrationDef.__advanced?.toJSONSchemaOptions,\n })\n .catch((thrown) => {\n throw errors.BotpressCLIError.wrap(\n thrown,\n `Failed to convert ZUI to JSON schema for integration ${integrationDef.name} for configuration ${configurationName}`\n )\n }),\n identifier: {\n required: configuration.identifier?.required,\n linkTemplateScript: await this.readProjectFile(configuration.identifier?.linkTemplateScript),\n },\n })\n )\n : undefined,\n }\n }\n\n protected async prepareBotDependencies(\n botDef: sdk.BotDefinition,\n api: apiUtils.ApiClient\n ): Promise<Partial<apiUtils.UpdateBotRequestBody>> {\n const integrations = await this._fetchDependencies({\n deps: botDef.integrations ?? {},\n fetcher: ({ name, version }) => api.getPublicOrPrivateIntegration({ type: 'name', name, version }),\n cacheKey: ({ name, version }) => `integration:${name}@${version}`,\n })\n\n const plugins = await this._fetchDependencies({\n deps: botDef.plugins ?? {},\n fetcher: async ({ name, version }) => await api.getPublicOrPrivatePlugin({ type: 'name', name, version }),\n cacheKey: ({ name, version }) => `plugin:${name}@${version}`,\n })\n\n const pluginsWithBackingIntegrations = await utils.records.mapValuesAsync(plugins, async (plugin) => ({\n ...plugin,\n interfaces: await this._fetchDependencies({\n deps: plugin.interfaces ?? {},\n fetcher: async ({ name, version }) => await api.getPublicOrPrivateIntegration({ name, version, type: 'name' }),\n cacheKey: ({ name, version }) => `interface:${name}@${version}`,\n }),\n integrations: await this._fetchDependencies({\n deps: plugin.integrations ?? {},\n fetcher: async ({ name, version }) => await api.getPublicOrPrivateIntegration({ name, version, type: 'name' }),\n cacheKey: ({ name, version }) => `integration:${name}@${version}`,\n }),\n }))\n\n return {\n integrations: utils.records.mapValues(\n integrations,\n ({ enabled, configurationType, configuration, disabledChannels, id }) =>\n ({\n enabled,\n configurationType,\n configuration,\n disabledChannels,\n integrationId: id,\n }) satisfies NonNullable<apiUtils.UpdateBotRequestBody['integrations']>[string]\n ),\n plugins: utils.records.mapValues(pluginsWithBackingIntegrations, (plugin) => ({\n ...plugin,\n interfaces: utils.records.mapValues(\n plugin.interfaces ?? {},\n (iface) =>\n ({\n integrationId: iface.id,\n integrationAlias: iface.integrationAlias,\n integrationInterfaceAlias: iface.integrationInterfaceAlias,\n }) satisfies NonNullable<\n NonNullable<NonNullable<apiUtils.UpdateBotRequestBody['plugins']>[string]>['interfaces']\n >[string]\n ),\n integrations: utils.records.mapValues(\n plugin.integrations ?? {},\n (integration) =>\n ({\n integrationId: integration.id,\n integrationAlias: integration.integrationAlias,\n }) satisfies NonNullable<\n NonNullable<NonNullable<apiUtils.UpdateBotRequestBody['plugins']>[string]>['integrations']\n >[string]\n ),\n })),\n }\n }\n\n protected async prepareIntegrationDependencies(\n integrationDef: sdk.IntegrationDefinition,\n api: apiUtils.ApiClient\n ): Promise<Partial<apiUtils.CreateIntegrationRequestBody>> {\n const interfaces = await this._fetchDependencies({\n deps: integrationDef.interfaces ?? {},\n fetcher: ({ name, version }) => api.getPublicInterface({ type: 'name', name, version }),\n cacheKey: (dep) => `interface:${dep.name}@${dep.version}`,\n })\n return { interfaces }\n }\n\n protected async preparePluginDependencies(\n pluginDef: sdk.PluginDefinition,\n api: apiUtils.ApiClient\n ): Promise<Partial<apiUtils.CreatePluginRequestBody>> {\n const integrations = await this._fetchDependencies({\n deps: pluginDef.integrations ?? {},\n fetcher: ({ name, version }) => api.getPublicOrPrivateIntegration({ type: 'name', name, version }),\n cacheKey: (dep) => `integration:${dep.name}@${dep.version}`,\n })\n const interfaces = await this._fetchDependencies({\n deps: pluginDef.interfaces ?? {},\n fetcher: ({ name, version }) => api.getPublicInterface({ type: 'name', name, version }),\n cacheKey: (dep) => `interface:${dep.name}@${dep.version}`,\n })\n return {\n dependencies: {\n integrations,\n interfaces,\n },\n }\n }\n\n private _fetchDependencies = async <T extends { id?: string; name: string; version: string }>({\n deps,\n fetcher,\n cacheKey: getCacheKey,\n }: {\n deps: Record<string, T>\n fetcher: (dep: T) => Promise<ResolvedDependency>\n cacheKey: (dep: T) => DependencyCacheKey\n }): Promise<Record<string, T & ResolvedDependency>> => {\n const isRemote = (dep: T): dep is T & ResolvedDependency => dep.id !== undefined\n return utils.records.mapValuesAsync(deps, async (dep): Promise<T & ResolvedDependency> => {\n if (isRemote(dep)) {\n return dep\n }\n\n const cacheKey = getCacheKey(dep)\n const cached = this._dependencyCache.get(cacheKey)\n\n if (cached) {\n return { ...dep, id: cached.id }\n }\n\n const { id } = await fetcher(dep)\n this._dependencyCache.set(cacheKey, { id })\n\n return { ...dep, id }\n })\n }\n\n protected readProjectFile = async (\n filePath: string | undefined,\n encoding: BufferEncoding = 'utf-8'\n ): Promise<string | undefined> => {\n if (!filePath) {\n return undefined\n }\n const absoluteFilePath = utils.path.absoluteFrom(this.projectPaths.abs.workDir, filePath)\n return fs.promises.readFile(absoluteFilePath, encoding).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, `Could not read file \"${absoluteFilePath}\"`)\n })\n }\n\n private _parseArgvSecrets(argvSecrets: string[]): Record<string, string> {\n const parsed: Record<string, string> = {}\n for (const secret of argvSecrets) {\n const [key, value] = utils.string.splitOnce(secret, '=')\n if (!value) {\n throw new errors.BotpressCLIError(\n `Secret \"${key}\" is missing a value. Expected format: \"SECRET_NAME=secretValue\"`\n )\n }\n parsed[key!] = value\n }\n\n return parsed\n }\n\n private _notifyUpdateSdk = async (): Promise<void> => {\n try {\n this.logger.debug('Checking if sdk is up to date')\n\n const { workDir } = this.projectPaths.abs\n const readProjectPkgJsonResult = await utils.pkgJson.safeReadPackageJson(workDir)\n if (!readProjectPkgJsonResult.success) {\n this.logger.debug(`Could not read package.json at \"${workDir}\": ${readProjectPkgJsonResult.error.message}`)\n return\n }\n\n if (!readProjectPkgJsonResult.pkgJson) {\n this.logger.debug(`Could not find package.json at \"${workDir}\"`)\n return\n }\n\n const { pkgJson: projectPkgJson } = readProjectPkgJsonResult\n const sdkPackageName = '@botpress/sdk'\n const actualSdkVersion = utils.pkgJson.findDependency(projectPkgJson, sdkPackageName)\n if (!actualSdkVersion) {\n this.logger.debug(`Could not find dependency \"${sdkPackageName}\" in project package.json`)\n return\n }\n\n if (actualSdkVersion.startsWith('workspace:')) {\n return\n }\n\n const actualCleanedSdkVersion = semver.valid(semver.coerce(actualSdkVersion))\n if (!actualCleanedSdkVersion) {\n this.logger.debug(`Invalid sdk version \"${actualSdkVersion}\" in project package.json`)\n return\n }\n\n const cliPkgJson = await this.readCLIPkgJson()\n const expectedSdkVersion = utils.pkgJson.findDependency(cliPkgJson, sdkPackageName)\n if (!expectedSdkVersion) {\n this.logger.debug(`Could not find dependency \"${sdkPackageName}\" in cli package.json`)\n return\n }\n\n const expectedCleanedSdkVersion = semver.valid(semver.coerce(expectedSdkVersion))\n if (!expectedCleanedSdkVersion) {\n this.logger.debug(`Invalid sdk version \"${expectedSdkVersion}\" in cli package.json`)\n return\n }\n\n if (semver.eq(actualCleanedSdkVersion, expectedCleanedSdkVersion)) {\n return\n }\n\n const diff = semver.diff(actualCleanedSdkVersion, expectedCleanedSdkVersion)\n if (!diff) {\n this.logger.debug(`Could not compare versions \"${actualCleanedSdkVersion}\" and \"${expectedCleanedSdkVersion}\"`)\n return\n }\n\n const errorMsg = `Project SDK version is \"${actualCleanedSdkVersion}\", but expected \"${expectedCleanedSdkVersion}\"`\n if (utils.semver.releases.lt(diff, 'minor')) {\n this.logger.debug(`${errorMsg}. This may cause compatibility issues.`)\n return\n }\n\n this.logger.warn(chalk.bold(`${errorMsg}. This will cause compatibility issues.`))\n } catch (thrown) {\n const err = errors.BotpressCLIError.map(thrown)\n this.logger.debug(`Failed to check if sdk is up to date: ${err.message}`)\n }\n }\n protected validateIntegrationRegistration(\n updatedBot: UpdatedBot,\n onFailCallback: (failedIntegrations: UpdatedBot['integrations']) => void\n ) {\n let failedIntegrations: UpdatedBot['integrations'] = {}\n for (const [integrationName, integration] of Object.entries(updatedBot.integrations)) {\n if (integration.status === 'registration_failed') {\n failedIntegrations = { ...failedIntegrations, [integrationName]: integration }\n }\n }\n if (Object.keys(failedIntegrations).length > 0) {\n onFailCallback(failedIntegrations)\n }\n }\n\n protected async manageWorkspaceHandle(\n api: apiUtils.ApiClient,\n integration: sdk.IntegrationDefinition\n ): Promise<\n | {\n integration: sdk.IntegrationDefinition\n workspaceId?: string\n }\n | undefined\n > {\n const { name: localName, workspaceHandle: localHandle } = this._parseIntegrationName(integration.name)\n if (!localHandle && api.isBotpressWorkspace) {\n this.logger.debug('Botpress workspace detected; workspace handle omitted')\n return { integration } // botpress has the right to omit workspace handle\n }\n\n const { handle: remoteHandle, name: workspaceName } = await api.getWorkspace().catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, 'Could not fetch workspace')\n })\n\n if (localHandle && remoteHandle) {\n let workspaceId: string | undefined = undefined\n if (localHandle !== remoteHandle) {\n const remoteWorkspace = await api.findWorkspaceByHandle(localHandle).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, 'Could not list workspaces')\n })\n if (!remoteWorkspace) {\n throw new errors.BotpressCLIError(\n `The integration handle \"${localHandle}\" is not associated with any of your workspaces.`\n )\n }\n this.logger.warn(\n `Your are logged in to workspace \"${workspaceName}\" but integration handle \"${localHandle}\" belongs to \"${remoteWorkspace.name}\".`\n )\n const confirmUseAlternateWorkspace = await this.prompt.confirm(\n 'Do you want to deploy integration on this workspace instead?'\n )\n if (!confirmUseAlternateWorkspace) {\n throw new errors.BotpressCLIError(\n `Cannot deploy integration with handle \"${localHandle}\" on workspace \"${workspaceName}\"`\n )\n }\n\n workspaceId = remoteWorkspace.id\n }\n return { integration, workspaceId }\n }\n\n const workspaceHandleIsMandatoryMsg = 'Cannot deploy integration without workspace handle'\n\n if (!localHandle && remoteHandle) {\n const confirmAddHandle = await this.prompt.confirm(\n `Your current workspace handle is \"${remoteHandle}\". Do you want to use the name \"${remoteHandle}/${localName}\"?`\n )\n if (!confirmAddHandle) {\n this.logger.log('Aborted')\n return\n }\n const newName = `${remoteHandle}/${localName}`\n return { integration: new sdk.IntegrationDefinition({ ...integration, name: newName }) }\n }\n\n if (localHandle && !remoteHandle) {\n const { available } = await api.client.checkHandleAvailability({ handle: localHandle }).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, 'Could not check handle availability')\n })\n\n if (!available) {\n throw new errors.BotpressCLIError(`Handle \"${localHandle}\" is not yours and is not available`)\n }\n\n const confirmClaimHandle = await this.prompt.confirm(\n `Handle \"${localHandle}\" is available. Do you want to claim it for your workspace ${workspaceName}?`\n )\n if (!confirmClaimHandle) {\n throw new errors.BotpressCLIError(workspaceHandleIsMandatoryMsg)\n }\n\n await api.updateWorkspace({ handle: localHandle }).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, `Could not claim handle \"${localHandle}\"`)\n })\n\n this.logger.success(`Handle \"${localHandle}\" is now yours!`)\n return { integration }\n }\n\n this.logger.warn(\"It seems you don't have a workspace handle yet.\")\n let claimedHandle: string | undefined = undefined\n do {\n const prompted = await this.prompt.text('Please enter a workspace handle')\n if (!prompted) {\n throw new errors.BotpressCLIError(workspaceHandleIsMandatoryMsg)\n }\n\n const { available, suggestions } = await api.client.checkHandleAvailability({ handle: prompted })\n if (!available) {\n this.logger.warn(`Handle \"${prompted}\" is not available. Suggestions: ${suggestions.join(', ')}`)\n continue\n }\n\n claimedHandle = prompted\n await api.updateWorkspace({ handle: claimedHandle }).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, `Could not claim handle \"${claimedHandle}\"`)\n })\n } while (!claimedHandle)\n\n this.logger.success(`Handle \"${claimedHandle}\" is yours!`)\n const newName = `${claimedHandle}/${localName}`\n return { integration: new sdk.IntegrationDefinition({ ...integration, name: newName }) }\n }\n\n protected _parseIntegrationName = (integrationName: string): { name: string; workspaceHandle?: string } => {\n const parts = integrationName.split('/')\n if (parts.length > 2) {\n throw new errors.BotpressCLIError(\n `Invalid integration name \"${integrationName}\": a single forward slash is allowed`\n )\n }\n if (parts.length === 2) {\n const [workspaceHandle, name] = parts as [string, string]\n return { name, workspaceHandle }\n }\n const [name] = parts as [string]\n return { name }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type * as client from '@botpress/client'\nimport * as sdk from '@botpress/sdk'\nimport type { YargsConfig } from '@bpinternal/yargs-extra'\nimport chalk from 'chalk'\nimport fs from 'fs'\nimport _ from 'lodash'\nimport semver from 'semver'\nimport * as apiUtils from '../api'\nimport * as codegen from '../code-generation'\nimport * as config from '../config'\nimport * as consts from '../consts'\nimport * as errors from '../errors'\nimport { validateIntegrationDefinition, validateBotDefinition } from '../sdk'\nimport type { CommandArgv, CommandDefinition } from '../typings'\nimport * as utils from '../utils'\nimport { GlobalCommand } from './global-command'\n\nexport type ProjectCommandDefinition = CommandDefinition<typeof config.schemas.project>\nexport type ProjectCache = {\n botId: string\n devId: string\n tunnelId: string\n secrets: {\n [secretName: string]: string\n }\n}\n\ntype ConfigurableProjectPaths = { workDir: string }\ntype ConstantProjectPaths = typeof consts.fromWorkDir\ntype AllProjectPaths = ConfigurableProjectPaths & ConstantProjectPaths\n\ntype LintIgnoredConfig = { bpLintDisabled?: boolean }\n\nexport type ProjectType = ProjectDefinition['type']\nexport type ProjectDefinition = LintIgnoredConfig &\n (\n | { type: 'integration'; definition: sdk.IntegrationDefinition }\n | { type: 'interface'; definition: sdk.InterfaceDefinition }\n | { type: 'bot'; definition: sdk.BotDefinition }\n | { type: 'plugin'; definition: sdk.PluginDefinition }\n )\n\ntype ProjectDefinitionResolver<T> = () => Promise<LintIgnoredConfig & T>\n\ntype ResolvedProjectDefinition =\n | { type: 'bot'; definition: sdk.BotDefinition }\n | { type: 'integration'; definition: sdk.IntegrationDefinition }\n | { type: 'interface'; definition: sdk.InterfaceDefinition }\n | { type: 'plugin'; definition: sdk.PluginDefinition }\n\nexport type ProjectDefinitionLazy =\n | {\n projectType: 'integration'\n resolveProjectDefinition: ProjectDefinitionResolver<Extract<ResolvedProjectDefinition, { type: 'integration' }>>\n }\n | {\n projectType: 'bot'\n resolveProjectDefinition: ProjectDefinitionResolver<Extract<ResolvedProjectDefinition, { type: 'bot' }>>\n }\n | {\n projectType: 'interface'\n resolveProjectDefinition: ProjectDefinitionResolver<Extract<ResolvedProjectDefinition, { type: 'interface' }>>\n }\n | {\n projectType: 'plugin'\n resolveProjectDefinition: ProjectDefinitionResolver<Extract<ResolvedProjectDefinition, { type: 'plugin' }>>\n }\n\ntype UpdatedBot = client.Bot\n\ntype ClientIntegrationDefinitions = Record<string, client.Integration>\ntype ClientIntegration = client.Bot['integrations'][string]\n\nclass ProjectPaths extends utils.path.PathStore<keyof AllProjectPaths> {\n public constructor(argv: CommandArgv<ProjectCommandDefinition>) {\n const absWorkDir = utils.path.absoluteFrom(utils.path.cwd(), argv.workDir)\n super({\n workDir: absWorkDir,\n ..._.mapValues(consts.fromWorkDir, (p) => utils.path.absoluteFrom(absWorkDir, p)),\n })\n }\n}\n\nexport class ProjectDefinitionContext {\n private _codeCache: Map<string, object> = new Map()\n private _buildContext: utils.esbuild.BuildEntrypointContext = new utils.esbuild.BuildEntrypointContext()\n\n public getOrResolveDefinition<T extends object>(code: string): T {\n const definition = this._codeCache.get(code)\n if (definition) {\n return definition as T\n }\n const result = utils.require.requireJsCode<{ default: object }>(code)\n this._codeCache.set(code, result.default)\n return result.default as T\n }\n\n public rebuildEntrypoint(...args: Parameters<utils.esbuild.BuildEntrypointContext['rebuild']>) {\n return this._buildContext.rebuild(...args)\n }\n\n public async dispose() {\n // Drop the resolved-definition cache up front so a failed esbuild teardown can't leave stale state behind.\n this._codeCache.clear()\n try {\n await this._buildContext.dispose()\n } catch (thrown: unknown) {\n throw errors.BotpressCLIError.map(thrown)\n }\n }\n}\n\ntype ResolvedDependency = { id: string }\ntype DependencyCacheKey = `${'integration' | 'plugin' | 'interface'}:${string}@${string}`\n\nexport abstract class ProjectCommand<C extends ProjectCommandDefinition> extends GlobalCommand<C> {\n protected projectContext: ProjectDefinitionContext = new ProjectDefinitionContext()\n private _dependencyCache = new Map<DependencyCacheKey, ResolvedDependency>()\n\n public setProjectContext(projectContext: ProjectDefinitionContext) {\n this.projectContext = projectContext\n return this\n }\n\n protected override async bootstrap() {\n await super.bootstrap()\n await this._notifyUpdateSdk()\n }\n\n protected get projectPaths() {\n return new ProjectPaths(this.argv)\n }\n\n protected get projectCache() {\n return new utils.cache.FSKeyValueCache<ProjectCache>(this.projectPaths.abs.projectCacheFile)\n }\n\n private _readProjectType(projectPaths: ProjectPaths): ProjectType {\n const abs = projectPaths.abs\n if (fs.existsSync(abs.integrationDefinition)) {\n return 'integration'\n }\n if (fs.existsSync(abs.interfaceDefinition)) {\n return 'interface'\n }\n if (fs.existsSync(abs.botDefinition)) {\n return 'bot'\n }\n if (fs.existsSync(abs.pluginDefinition)) {\n return 'plugin'\n }\n throw new errors.UnsupportedProjectType()\n }\n\n protected readProjectDefinitionFromFS(): ProjectDefinitionLazy {\n try {\n const type = this._readProjectType(this.projectPaths)\n if (type === 'integration') {\n return {\n projectType: 'integration',\n resolveProjectDefinition: async () => ({\n type: 'integration',\n ...(await this._readIntegrationDefinitionFromFS(this.projectPaths)),\n }),\n }\n }\n if (type === 'plugin') {\n return {\n projectType: 'plugin',\n resolveProjectDefinition: async () => ({\n type: 'plugin',\n ...(await this._readPluginDefinitionFromFS(this.projectPaths)),\n }),\n }\n }\n if (type === 'interface') {\n return {\n projectType: 'interface',\n resolveProjectDefinition: async () => ({\n type: 'interface',\n ...(await this._readInterfaceDefinitionFromFS(this.projectPaths)),\n }),\n }\n }\n if (type === 'bot') {\n return {\n projectType: 'bot',\n resolveProjectDefinition: async () => ({\n type: 'bot',\n ...(await this._readBotDefinitionFromFS(this.projectPaths)),\n }),\n }\n }\n } catch (thrown: unknown) {\n throw errors.BotpressCLIError.wrap(thrown, 'Error while reading project definition')\n }\n throw new errors.ProjectDefinitionNotFoundError(this.projectPaths.abs.workDir)\n }\n\n private async _readIntegrationDefinitionFromFS(\n projectPaths: utils.path.PathStore<'workDir' | 'integrationDefinition'>\n ): Promise<{ definition: sdk.IntegrationDefinition } & LintIgnoredConfig> {\n const abs = projectPaths.abs\n const rel = projectPaths.rel('workDir')\n\n if (!fs.existsSync(abs.integrationDefinition)) {\n throw new errors.BotpressCLIError('Could not read integration definition')\n }\n\n const bpLintDisabled = await this._isBpLintDisabled(abs.integrationDefinition)\n\n const { outputFiles } = await this.projectContext.rebuildEntrypoint({\n absWorkingDir: abs.workDir,\n entrypoint: rel.integrationDefinition,\n })\n\n const artifact = outputFiles?.[0]\n if (!artifact) {\n throw new errors.BotpressCLIError('Could not read integration definition')\n }\n\n const definition = this.projectContext.getOrResolveDefinition<sdk.IntegrationDefinition>(artifact.text)\n validateIntegrationDefinition(definition)\n return { definition, bpLintDisabled }\n }\n\n private async _readInterfaceDefinitionFromFS(\n projectPaths: utils.path.PathStore<'workDir' | 'interfaceDefinition'>\n ): Promise<{ definition: sdk.InterfaceDefinition } & LintIgnoredConfig> {\n const abs = projectPaths.abs\n const rel = projectPaths.rel('workDir')\n\n if (!fs.existsSync(abs.interfaceDefinition)) {\n throw new errors.BotpressCLIError('Could not read interface definition')\n }\n\n const bpLintDisabled = await this._isBpLintDisabled(abs.interfaceDefinition)\n\n const { outputFiles } = await this.projectContext.rebuildEntrypoint({\n absWorkingDir: abs.workDir,\n entrypoint: rel.interfaceDefinition,\n })\n\n const artifact = outputFiles?.[0]\n if (!artifact) {\n throw new errors.BotpressCLIError('Could not read interface definition')\n }\n\n const definition = this.projectContext.getOrResolveDefinition<sdk.InterfaceDefinition>(artifact.text)\n\n return { definition, bpLintDisabled }\n }\n\n private async _readBotDefinitionFromFS(\n projectPaths: utils.path.PathStore<'workDir' | 'botDefinition'>\n ): Promise<{ definition: sdk.BotDefinition } & LintIgnoredConfig> {\n const abs = projectPaths.abs\n const rel = projectPaths.rel('workDir')\n\n if (!fs.existsSync(abs.botDefinition)) {\n throw new errors.BotpressCLIError('Could not read bot definition')\n }\n\n const bpLintDisabled = await this._isBpLintDisabled(abs.botDefinition)\n\n const { outputFiles } = await this.projectContext.rebuildEntrypoint({\n absWorkingDir: abs.workDir,\n entrypoint: rel.botDefinition,\n })\n\n const artifact = outputFiles?.[0]\n if (!artifact) {\n throw new errors.BotpressCLIError('Could not read bot definition')\n }\n\n const definition = this.projectContext.getOrResolveDefinition<sdk.BotDefinition>(artifact.text)\n validateBotDefinition(definition)\n return { definition, bpLintDisabled }\n }\n\n private async _readPluginDefinitionFromFS(\n projectPaths: utils.path.PathStore<'workDir' | 'pluginDefinition'>\n ): Promise<{ definition: sdk.PluginDefinition } & LintIgnoredConfig> {\n const abs = projectPaths.abs\n const rel = projectPaths.rel('workDir')\n\n if (!fs.existsSync(abs.pluginDefinition)) {\n throw new errors.BotpressCLIError('Could not read plugin definition')\n }\n\n const bpLintDisabled = await this._isBpLintDisabled(abs.pluginDefinition)\n\n const { outputFiles } = await this.projectContext.rebuildEntrypoint({\n absWorkingDir: abs.workDir,\n entrypoint: rel.pluginDefinition,\n })\n\n const artifact = outputFiles?.[0]\n if (!artifact) {\n throw new errors.BotpressCLIError('Could not read plugin definition')\n }\n\n const definition = this.projectContext.getOrResolveDefinition<sdk.PluginDefinition>(artifact.text)\n // TODO: validate plugin definition\n return { definition, bpLintDisabled }\n }\n\n private async _isBpLintDisabled(definitionPath: string): Promise<boolean> {\n const tsContent = await fs.promises.readFile(definitionPath, 'utf-8')\n const regex = /\\/\\* bplint-disable \\*\\//\n return regex.test(tsContent)\n }\n\n protected async displayIntegrationUrls({ api, bot }: { api: apiUtils.ApiClient; bot: client.Bot }) {\n if (!_.keys(bot.integrations).length) {\n this.logger.debug('No integrations in bot')\n return\n }\n\n const integrationDefinitions = await utils.records.mapValuesAsync(bot.integrations, async (integration) =>\n api.getPublicOrPrivateIntegration({\n type: 'id',\n id: integration.id,\n })\n )\n\n this.logger.log('Integrations:')\n for (const [alias, integration] of Object.entries(bot.integrations)) {\n if (integration.enabled) {\n this.logger.log(`${alias} ${integration.version}:`, { prefix: { symbol: '\u2192', indent: 2 } })\n } else {\n this.logger.log(`${alias} ${integration.version} ${chalk.italic('(disabled)')}:`, {\n prefix: { symbol: '\u2192', indent: 2 },\n })\n }\n\n const integrationDefinition = integrationDefinitions[alias]\n const linkTemplateScript = integrationDefinition\n ? this._getLinkTemplateScript({ integration, integrationDefinition })\n : undefined\n this._displayWebhookUrl({ integration, integrationDefinition, linkTemplateScript })\n if (!integrationDefinition) {\n this.logger.debug(\n `No integration definition for integration ${alias} (${integration.name}, ${integration.id}), skipping OAuth or Sandbox links`\n )\n this.logger.line().commit()\n continue\n }\n const isSandbox =\n integration.configurationType === 'sandbox' && !!integrationDefinition.sandbox?.identifierExtractScript\n const showLink = !!linkTemplateScript && (isSandbox || !!integrationDefinition.identifier?.extractScript)\n if (showLink && isSandbox) {\n await this._displaySandboxLinkAndCode({ integration, alias, bot, api, linkTemplateScript })\n } else if (showLink) {\n this._displayAuthorizationLink({ integration, api, linkTemplateScript })\n }\n this.logger.line().commit()\n }\n }\n\n private _getLinkTemplateScript({\n integration,\n integrationDefinition,\n }: {\n integration: ClientIntegration\n integrationDefinition?: ClientIntegrationDefinitions[string]\n }) {\n const config =\n integration.configurationType === null\n ? integrationDefinition?.configuration\n : integrationDefinition?.configurations[integration.configurationType]\n return config?.identifier?.linkTemplateScript\n }\n\n private _displayWebhookUrl({\n integration,\n integrationDefinition,\n linkTemplateScript,\n }: {\n integration: ClientIntegration\n integrationDefinition?: ClientIntegrationDefinitions[string]\n linkTemplateScript?: string\n }) {\n const needsWebhook = !(integrationDefinition?.identifier && linkTemplateScript)\n const logFn = (needsWebhook ? this.logger.log : this.logger.debug).bind(this.logger)\n\n if (integration.enabled) {\n logFn(`${chalk.bold('Webhook')}: ${integration.webhookUrl}`, {\n prefix: { symbol: '\u25CF', indent: 4 },\n })\n } else {\n logFn(`Webhook: ${integration.webhookUrl}`, {\n prefix: { symbol: '\u25CB', indent: 4 },\n })\n }\n }\n\n private _displayAuthorizationLink({\n integration,\n api,\n linkTemplateScript,\n }: {\n integration: ClientIntegration\n api: apiUtils.ApiClient\n linkTemplateScript: string\n }) {\n const authorizationLink = this._getAuthorizationLink({ integration, api, linkTemplateScript })\n const isAuthorized = !!integration.identifier\n const authorizationStatus = integration.identifier ? 'Authorized \u2713' : 'Authorize'\n if (integration.enabled && isAuthorized) {\n this.logger.log(`${chalk.bold(authorizationStatus)} : ${authorizationLink}`, {\n prefix: { symbol: '\u25CF', indent: 4 },\n })\n } else {\n this.logger.log(`${authorizationStatus}: ${authorizationLink}`, {\n prefix: { symbol: '\u25CB', indent: 4 },\n })\n }\n }\n\n private _getLinkTemplateArgs({ integration, api }: { integration: ClientIntegration; api: apiUtils.ApiClient }) {\n // These are the values used by the studio\n let env: 'development' | 'preview' | 'production'\n if (api.url.includes(consts.stagingBotpressDomain)) {\n env = 'preview'\n } else if (api.url.includes(consts.productionBotpressDomain)) {\n env = 'production'\n } else {\n env = 'development'\n }\n return {\n env,\n webhookId: integration.webhookId,\n webhookUrl: api.url.replace('api', 'webhook'),\n }\n }\n\n private _getAuthorizationLink({\n integration,\n api,\n linkTemplateScript,\n }: {\n integration: client.Bot['integrations'][string]\n api: apiUtils.ApiClient\n linkTemplateScript: string\n }) {\n return utils.vrl.getStringResult({\n code: linkTemplateScript,\n data: this._getLinkTemplateArgs({ integration, api }),\n })\n }\n\n private _getSandboxLink({\n shareableId,\n integration,\n api,\n linkTemplateScript,\n }: {\n shareableId: string\n integration: ClientIntegration\n api: apiUtils.ApiClient\n linkTemplateScript: string\n }) {\n return utils.vrl.getStringResult({\n code: linkTemplateScript,\n data: { shareableId, ...this._getLinkTemplateArgs({ integration, api }) },\n })\n }\n\n private async _displaySandboxLinkAndCode({\n integration,\n alias,\n bot,\n api,\n linkTemplateScript,\n }: {\n integration: ClientIntegration\n alias: string\n bot: client.Bot\n api: apiUtils.ApiClient\n linkTemplateScript: string\n }) {\n const shareableId = await api.getOrGenerateShareableId(bot.id, integration.id, alias)\n const sandboxLink = this._getSandboxLink({ shareableId, integration, api, linkTemplateScript })\n const sandboxInstruction = `Send '${shareableId}' to ${sandboxLink}`\n if (integration.enabled) {\n this.logger.log(`${chalk.bold('Sandbox')}: ${sandboxInstruction}`, {\n prefix: { symbol: '\u25CF', indent: 4 },\n })\n } else {\n this.logger.log(`Sandbox: ${sandboxInstruction}`, {\n prefix: { symbol: '\u25CB', indent: 4 },\n })\n }\n }\n\n protected async promptSecrets(\n def: { secrets?: Record<string, sdk.SecretDefinition> },\n argv: YargsConfig<typeof config.schemas.secrets>,\n opts: { formatEnv?: boolean; knownSecrets?: string[] } = {}\n ): Promise<Record<string, string | null>> {\n const formatEnv = opts.formatEnv ?? false\n const knownSecrets = opts.knownSecrets ?? []\n\n const { secrets: secretDefinitions } = def\n if (!secretDefinitions) {\n return {}\n }\n\n const secretArgv = this._parseArgvSecrets(argv.secrets)\n const invalidSecret = Object.keys(secretArgv).find((s) => !secretDefinitions[s])\n if (invalidSecret) {\n throw new errors.BotpressCLIError(`Secret ${invalidSecret} is not defined in the definition`)\n }\n\n const values: Record<string, string | null> = {}\n for (const [secretName, { optional }] of Object.entries(secretDefinitions)) {\n const argvSecret = secretArgv[secretName]\n if (argvSecret) {\n this.logger.debug(`Using secret \"${secretName}\" from argv`)\n values[secretName] = argvSecret\n continue\n }\n\n const alreadyKnown = knownSecrets.includes(secretName)\n let mode: string\n if (alreadyKnown) {\n mode = 'already set'\n } else if (optional) {\n mode = 'optional'\n } else {\n mode = 'required'\n }\n\n const prompted = await this.prompt.text(`Enter value for secret \"${secretName}\" (${mode})`)\n if (prompted) {\n values[secretName] = prompted\n continue\n }\n\n if (alreadyKnown) {\n this.logger.log(`Secret \"${secretName}\" is unchanged`)\n } else if (optional) {\n this.logger.warn(`Secret \"${secretName}\" is unassigned`)\n } else {\n throw new errors.BotpressCLIError(`Secret \"${secretName}\" is required`)\n }\n }\n\n for (const secretName of knownSecrets) {\n const isDefined = secretName in secretDefinitions\n if (isDefined) {\n continue\n }\n const prompted = await this.prompt.confirm(`Secret \"${secretName}\" was removed. Do you wish to delete it?`)\n if (prompted) {\n this.logger.log(`Deleting secret \"${secretName}\"`, { prefix: { symbol: '\u00D7', fg: 'red' } })\n values[secretName] = null\n }\n }\n\n if (!formatEnv) {\n return values\n }\n\n const envVariables = _.mapKeys(values, (_v, k) => codegen.secretEnvVariableName(k))\n return envVariables\n }\n\n protected async prepareCreateIntegrationBody(\n integrationDef: sdk.IntegrationDefinition\n ): Promise<apiUtils.CreateIntegrationRequestBody> {\n const partialBody = await apiUtils.prepareCreateIntegrationBody(integrationDef)\n\n let code: string | undefined = undefined\n if (fs.existsSync(this.projectPaths.abs.outFileCJS)) {\n code = await this.readProjectFile(this.projectPaths.abs.outFileCJS)\n }\n\n const icon = await this.readProjectFile(integrationDef.icon, 'base64')\n const readme = await this.readProjectFile(integrationDef.readme, 'base64')\n const extractScript = await this.readProjectFile(integrationDef.identifier?.extractScript)\n const fallbackHandlerScript = await this.readProjectFile(integrationDef.identifier?.fallbackHandlerScript)\n return {\n ...partialBody,\n code,\n icon,\n readme,\n identifier: {\n extractScript,\n fallbackHandlerScript,\n },\n configuration: integrationDef.configuration\n ? {\n schema: await utils.schema\n .mapZodToJsonSchema(integrationDef.configuration, {\n useLegacyZuiTransformer: integrationDef.__advanced?.useLegacyZuiTransformer,\n toJSONSchemaOptions: integrationDef.__advanced?.toJSONSchemaOptions,\n })\n .catch((thrown) => {\n throw errors.BotpressCLIError.wrap(\n thrown,\n `Failed to convert ZUI to JSON schema for integration ${integrationDef.name} for configuration`\n )\n }),\n identifier: {\n required: integrationDef.configuration.identifier?.required,\n linkTemplateScript: await this.readProjectFile(\n integrationDef.configuration.identifier?.linkTemplateScript\n ),\n },\n }\n : undefined,\n configurations: integrationDef.configurations\n ? await utils.records.mapValuesAsync(\n integrationDef.configurations,\n async (configuration, configurationName) => ({\n title: configuration.title,\n description: configuration.description,\n schema: await utils.schema\n .mapZodToJsonSchema(configuration, {\n useLegacyZuiTransformer: integrationDef.__advanced?.useLegacyZuiTransformer,\n toJSONSchemaOptions: integrationDef.__advanced?.toJSONSchemaOptions,\n })\n .catch((thrown) => {\n throw errors.BotpressCLIError.wrap(\n thrown,\n `Failed to convert ZUI to JSON schema for integration ${integrationDef.name} for configuration ${configurationName}`\n )\n }),\n identifier: {\n required: configuration.identifier?.required,\n linkTemplateScript: await this.readProjectFile(configuration.identifier?.linkTemplateScript),\n },\n })\n )\n : undefined,\n }\n }\n\n protected async prepareBotDependencies(\n botDef: sdk.BotDefinition,\n api: apiUtils.ApiClient\n ): Promise<Partial<apiUtils.UpdateBotRequestBody>> {\n const integrations = await this._fetchDependencies({\n deps: botDef.integrations ?? {},\n fetcher: ({ name, version }) => api.getPublicOrPrivateIntegration({ type: 'name', name, version }),\n cacheKey: ({ name, version }) => `integration:${name}@${version}`,\n })\n\n const plugins = await this._fetchDependencies({\n deps: botDef.plugins ?? {},\n fetcher: async ({ name, version }) => await api.getPublicOrPrivatePlugin({ type: 'name', name, version }),\n cacheKey: ({ name, version }) => `plugin:${name}@${version}`,\n })\n\n const pluginsWithBackingIntegrations = await utils.records.mapValuesAsync(plugins, async (plugin) => ({\n ...plugin,\n interfaces: await this._fetchDependencies({\n deps: plugin.interfaces ?? {},\n fetcher: async ({ name, version }) => await api.getPublicOrPrivateIntegration({ name, version, type: 'name' }),\n cacheKey: ({ name, version }) => `interface:${name}@${version}`,\n }),\n integrations: await this._fetchDependencies({\n deps: plugin.integrations ?? {},\n fetcher: async ({ name, version }) => await api.getPublicOrPrivateIntegration({ name, version, type: 'name' }),\n cacheKey: ({ name, version }) => `integration:${name}@${version}`,\n }),\n }))\n\n return {\n integrations: utils.records.mapValues(\n integrations,\n ({ enabled, configurationType, configuration, disabledChannels, id }) =>\n ({\n enabled,\n configurationType,\n configuration,\n disabledChannels,\n integrationId: id,\n }) satisfies NonNullable<apiUtils.UpdateBotRequestBody['integrations']>[string]\n ),\n plugins: utils.records.mapValues(pluginsWithBackingIntegrations, (plugin) => ({\n ...plugin,\n interfaces: utils.records.mapValues(\n plugin.interfaces ?? {},\n (iface) =>\n ({\n integrationId: iface.id,\n integrationAlias: iface.integrationAlias,\n integrationInterfaceAlias: iface.integrationInterfaceAlias,\n }) satisfies NonNullable<\n NonNullable<NonNullable<apiUtils.UpdateBotRequestBody['plugins']>[string]>['interfaces']\n >[string]\n ),\n integrations: utils.records.mapValues(\n plugin.integrations ?? {},\n (integration) =>\n ({\n integrationId: integration.id,\n integrationAlias: integration.integrationAlias,\n }) satisfies NonNullable<\n NonNullable<NonNullable<apiUtils.UpdateBotRequestBody['plugins']>[string]>['integrations']\n >[string]\n ),\n })),\n }\n }\n\n protected async prepareIntegrationDependencies(\n integrationDef: sdk.IntegrationDefinition,\n api: apiUtils.ApiClient\n ): Promise<Partial<apiUtils.CreateIntegrationRequestBody>> {\n const interfaces = await this._fetchDependencies({\n deps: integrationDef.interfaces ?? {},\n fetcher: ({ name, version }) => api.getPublicInterface({ type: 'name', name, version }),\n cacheKey: (dep) => `interface:${dep.name}@${dep.version}`,\n })\n return { interfaces }\n }\n\n protected async preparePluginDependencies(\n pluginDef: sdk.PluginDefinition,\n api: apiUtils.ApiClient\n ): Promise<Partial<apiUtils.CreatePluginRequestBody>> {\n const integrations = await this._fetchDependencies({\n deps: pluginDef.integrations ?? {},\n fetcher: ({ name, version }) => api.getPublicOrPrivateIntegration({ type: 'name', name, version }),\n cacheKey: (dep) => `integration:${dep.name}@${dep.version}`,\n })\n const interfaces = await this._fetchDependencies({\n deps: pluginDef.interfaces ?? {},\n fetcher: ({ name, version }) => api.getPublicInterface({ type: 'name', name, version }),\n cacheKey: (dep) => `interface:${dep.name}@${dep.version}`,\n })\n return {\n dependencies: {\n integrations,\n interfaces,\n },\n }\n }\n\n private _fetchDependencies = async <T extends { id?: string; name: string; version: string }>({\n deps,\n fetcher,\n cacheKey: getCacheKey,\n }: {\n deps: Record<string, T>\n fetcher: (dep: T) => Promise<ResolvedDependency>\n cacheKey: (dep: T) => DependencyCacheKey\n }): Promise<Record<string, T & ResolvedDependency>> => {\n const isRemote = (dep: T): dep is T & ResolvedDependency => dep.id !== undefined\n return utils.records.mapValuesAsync(deps, async (dep): Promise<T & ResolvedDependency> => {\n if (isRemote(dep)) {\n return dep\n }\n\n const cacheKey = getCacheKey(dep)\n const cached = this._dependencyCache.get(cacheKey)\n\n if (cached) {\n return { ...dep, id: cached.id }\n }\n\n const { id } = await fetcher(dep)\n this._dependencyCache.set(cacheKey, { id })\n\n return { ...dep, id }\n })\n }\n\n protected readProjectFile = async (\n filePath: string | undefined,\n encoding: BufferEncoding = 'utf-8'\n ): Promise<string | undefined> => {\n if (!filePath) {\n return undefined\n }\n const absoluteFilePath = utils.path.absoluteFrom(this.projectPaths.abs.workDir, filePath)\n return fs.promises.readFile(absoluteFilePath, encoding).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, `Could not read file \"${absoluteFilePath}\"`)\n })\n }\n\n private _parseArgvSecrets(argvSecrets: string[]): Record<string, string> {\n const parsed: Record<string, string> = {}\n for (const secret of argvSecrets) {\n const [key, value] = utils.string.splitOnce(secret, '=')\n if (!value) {\n throw new errors.BotpressCLIError(\n `Secret \"${key}\" is missing a value. Expected format: \"SECRET_NAME=secretValue\"`\n )\n }\n parsed[key!] = value\n }\n\n return parsed\n }\n\n private _notifyUpdateSdk = async (): Promise<void> => {\n try {\n this.logger.debug('Checking if sdk is up to date')\n\n const { workDir } = this.projectPaths.abs\n const readProjectPkgJsonResult = await utils.pkgJson.safeReadPackageJson(workDir)\n if (!readProjectPkgJsonResult.success) {\n this.logger.debug(`Could not read package.json at \"${workDir}\": ${readProjectPkgJsonResult.error.message}`)\n return\n }\n\n if (!readProjectPkgJsonResult.pkgJson) {\n this.logger.debug(`Could not find package.json at \"${workDir}\"`)\n return\n }\n\n const { pkgJson: projectPkgJson } = readProjectPkgJsonResult\n const sdkPackageName = '@botpress/sdk'\n const actualSdkVersion = utils.pkgJson.findDependency(projectPkgJson, sdkPackageName)\n if (!actualSdkVersion) {\n this.logger.debug(`Could not find dependency \"${sdkPackageName}\" in project package.json`)\n return\n }\n\n if (actualSdkVersion.startsWith('workspace:')) {\n return\n }\n\n const actualCleanedSdkVersion = semver.valid(semver.coerce(actualSdkVersion))\n if (!actualCleanedSdkVersion) {\n this.logger.debug(`Invalid sdk version \"${actualSdkVersion}\" in project package.json`)\n return\n }\n\n const cliPkgJson = await this.readCLIPkgJson()\n const expectedSdkVersion = utils.pkgJson.findDependency(cliPkgJson, sdkPackageName)\n if (!expectedSdkVersion) {\n this.logger.debug(`Could not find dependency \"${sdkPackageName}\" in cli package.json`)\n return\n }\n\n const expectedCleanedSdkVersion = semver.valid(semver.coerce(expectedSdkVersion))\n if (!expectedCleanedSdkVersion) {\n this.logger.debug(`Invalid sdk version \"${expectedSdkVersion}\" in cli package.json`)\n return\n }\n\n if (semver.eq(actualCleanedSdkVersion, expectedCleanedSdkVersion)) {\n return\n }\n\n const diff = semver.diff(actualCleanedSdkVersion, expectedCleanedSdkVersion)\n if (!diff) {\n this.logger.debug(`Could not compare versions \"${actualCleanedSdkVersion}\" and \"${expectedCleanedSdkVersion}\"`)\n return\n }\n\n const errorMsg = `Project SDK version is \"${actualCleanedSdkVersion}\", but expected \"${expectedCleanedSdkVersion}\"`\n if (utils.semver.releases.lt(diff, 'minor')) {\n this.logger.debug(`${errorMsg}. This may cause compatibility issues.`)\n return\n }\n\n this.logger.warn(chalk.bold(`${errorMsg}. This will cause compatibility issues.`))\n } catch (thrown) {\n const err = errors.BotpressCLIError.map(thrown)\n this.logger.debug(`Failed to check if sdk is up to date: ${err.message}`)\n }\n }\n protected validateIntegrationRegistration(\n updatedBot: UpdatedBot,\n onFailCallback: (failedIntegrations: UpdatedBot['integrations']) => void\n ) {\n let failedIntegrations: UpdatedBot['integrations'] = {}\n for (const [integrationName, integration] of Object.entries(updatedBot.integrations)) {\n if (integration.status === 'registration_failed') {\n failedIntegrations = { ...failedIntegrations, [integrationName]: integration }\n }\n }\n if (Object.keys(failedIntegrations).length > 0) {\n onFailCallback(failedIntegrations)\n }\n }\n\n protected async manageWorkspaceHandle(\n api: apiUtils.ApiClient,\n project: Extract<ResolvedProjectDefinition, { type: 'integration' }>\n ): Promise<{ definition: sdk.IntegrationDefinition; workspaceId?: string } | undefined>\n protected async manageWorkspaceHandle(\n api: apiUtils.ApiClient,\n project: Extract<ResolvedProjectDefinition, { type: 'plugin' }>\n ): Promise<{ definition: sdk.PluginDefinition; workspaceId?: string } | undefined>\n protected async manageWorkspaceHandle(\n api: apiUtils.ApiClient,\n project: Extract<ResolvedProjectDefinition, { type: 'integration' | 'plugin' }>\n ): Promise<{ definition: sdk.IntegrationDefinition | sdk.PluginDefinition; workspaceId?: string } | undefined> {\n const { type, definition } = project\n const { name: localName, workspaceHandle: localHandle } = this._parseHandledName(definition.name)\n if (!localHandle && api.isBotpressWorkspace) {\n this.logger.debug('Botpress workspace detected; workspace handle omitted')\n return { definition } // botpress has the right to omit workspace handle\n }\n\n const { handle: remoteHandle, name: workspaceName } = await api.getWorkspace().catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, 'Could not fetch workspace')\n })\n\n if (localHandle && remoteHandle) {\n let workspaceId: string | undefined = undefined\n if (localHandle !== remoteHandle) {\n const remoteWorkspace = await api.findWorkspaceByHandle(localHandle).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, 'Could not list workspaces')\n })\n if (!remoteWorkspace) {\n throw new errors.BotpressCLIError(\n `The ${type} handle \"${localHandle}\" is not associated with any of your workspaces.`\n )\n }\n this.logger.warn(\n `Your are logged in to workspace \"${workspaceName}\" but ${type} handle \"${localHandle}\" belongs to \"${remoteWorkspace.name}\".`\n )\n const confirmUseAlternateWorkspace = await this.prompt.confirm(\n `Do you want to deploy ${type} on this workspace instead?`\n )\n if (!confirmUseAlternateWorkspace) {\n throw new errors.BotpressCLIError(\n `Cannot deploy ${type} with handle \"${localHandle}\" on workspace \"${workspaceName}\"`\n )\n }\n\n workspaceId = remoteWorkspace.id\n }\n return { definition, workspaceId }\n }\n\n const workspaceHandleIsMandatoryMsg = `Cannot deploy ${type} without workspace handle`\n\n if (!localHandle && remoteHandle) {\n const confirmAddHandle = await this.prompt.confirm(\n `Your current workspace handle is \"${remoteHandle}\". Do you want to use the name \"${remoteHandle}/${localName}\"?`\n )\n if (!confirmAddHandle) {\n this.logger.log('Aborted')\n return\n }\n const newName = `${remoteHandle}/${localName}`\n return { definition: this._cloneDefinition(project, { name: newName }) }\n }\n\n if (localHandle && !remoteHandle) {\n const { available } = await api.client.checkHandleAvailability({ handle: localHandle }).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, 'Could not check handle availability')\n })\n\n if (!available) {\n throw new errors.BotpressCLIError(`Handle \"${localHandle}\" is not yours and is not available`)\n }\n\n const confirmClaimHandle = await this.prompt.confirm(\n `Handle \"${localHandle}\" is available. Do you want to claim it for your workspace ${workspaceName}?`\n )\n if (!confirmClaimHandle) {\n throw new errors.BotpressCLIError(workspaceHandleIsMandatoryMsg)\n }\n\n await api.updateWorkspace({ handle: localHandle }).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, `Could not claim handle \"${localHandle}\"`)\n })\n\n this.logger.success(`Handle \"${localHandle}\" is now yours!`)\n return { definition }\n }\n\n this.logger.warn(\"It seems you don't have a workspace handle yet.\")\n let claimedHandle: string | undefined = undefined\n do {\n const prompted = await this.prompt.text('Please enter a workspace handle')\n if (!prompted) {\n throw new errors.BotpressCLIError(workspaceHandleIsMandatoryMsg)\n }\n\n const { available, suggestions } = await api.client.checkHandleAvailability({ handle: prompted })\n if (!available) {\n this.logger.warn(`Handle \"${prompted}\" is not available. Suggestions: ${suggestions.join(', ')}`)\n continue\n }\n\n claimedHandle = prompted\n await api.updateWorkspace({ handle: claimedHandle }).catch((thrown) => {\n throw errors.BotpressCLIError.wrap(thrown, `Could not claim handle \"${claimedHandle}\"`)\n })\n } while (!claimedHandle)\n\n this.logger.success(`Handle \"${claimedHandle}\" is yours!`)\n const newName = `${claimedHandle}/${localName}`\n return { definition: this._cloneDefinition(project, { name: newName }) }\n }\n\n private _cloneDefinition = <T extends ResolvedProjectDefinition>(\n def: T,\n props: Partial<T['definition']['props']>\n ): T['definition'] => {\n if (def.type === 'integration') {\n return new sdk.IntegrationDefinition({ ...def.definition.props, ...props }) as T['definition']\n }\n if (def.type === 'plugin') {\n return new sdk.PluginDefinition({ ...def.definition.props, ...props }) as T['definition']\n }\n if (def.type === 'interface') {\n return new sdk.InterfaceDefinition({ ...def.definition.props, ...props }) as T['definition']\n }\n if (def.type === 'bot') {\n return new sdk.BotDefinition({ ...def.definition.props, ...props }) as T['definition']\n }\n def satisfies never\n throw new errors.BotpressCLIError('Unsupported definition type')\n }\n\n protected _parseHandledName = (artifactName: string): { name: string; workspaceHandle?: string } => {\n const parts = artifactName.split('/')\n if (parts.length > 2) {\n throw new errors.BotpressCLIError(`Invalid name \"${artifactName}\": a single forward slash is allowed`)\n }\n if (parts.length === 2) {\n const [workspaceHandle, name] = parts as [string, string]\n return { name, workspaceHandle }\n }\n const [name] = parts as [string]\n return { name }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["_", "fs", "chalk", "config", "semver", "newName", "name"]
7
7
  }
package/dist/config.d.ts CHANGED
@@ -1263,6 +1263,11 @@ export declare const schemas: {
1263
1263
  description: string;
1264
1264
  default: boolean;
1265
1265
  };
1266
+ watch: {
1267
+ type: "boolean";
1268
+ description: string;
1269
+ default: boolean;
1270
+ };
1266
1271
  port: {
1267
1272
  type: "number";
1268
1273
  description: string;
package/dist/config.js CHANGED
@@ -113,6 +113,11 @@ const dev = {
113
113
  description: "List only dev bots / dev integrations",
114
114
  default: false
115
115
  };
116
+ const watch = {
117
+ type: "boolean",
118
+ description: "Watch project files and hot reload on changes",
119
+ default: true
120
+ };
116
121
  const globalSchema = {
117
122
  verbose: {
118
123
  type: "boolean",
@@ -216,6 +221,7 @@ const devSchema = {
216
221
  ...secretsSchema,
217
222
  sourceMap,
218
223
  minify,
224
+ watch,
219
225
  port,
220
226
  tunnelUrl: {
221
227
  type: "string",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/config.ts"],
4
- "sourcesContent": ["import type { ServerEventsProtocol } from '@botpress/chat'\nimport * as consts from './consts'\nimport { ProjectTemplates } from './project-templates'\nimport type { CommandOption, CommandSchema } from './typings'\n\n// command options\n\nconst port = {\n type: 'number',\n description: 'The port to use',\n} satisfies CommandOption\n\nconst workDir = {\n type: 'string',\n description: 'The path to the project',\n default: consts.defaultWorkDir,\n} satisfies CommandOption\n\nconst noBuild = {\n type: 'boolean',\n description: 'Skip the build step',\n default: false,\n} satisfies CommandOption\n\nconst dryRun = {\n type: 'boolean',\n description: 'Ask the API not to perform the actual operation',\n default: false,\n} as const satisfies CommandOption\n\nconst apiUrl = {\n type: 'string',\n description: 'The URL of the Botpress server',\n} satisfies CommandOption\n\nconst token = {\n type: 'string',\n description: 'You Personal Access Token ',\n} satisfies CommandOption\n\nconst workspaceId = {\n type: 'string',\n description: 'The Workspace Id to deploy to',\n} satisfies CommandOption\n\nconst secrets = {\n type: 'string',\n description: 'Values for the bot or integration secrets',\n array: true,\n default: [],\n} satisfies CommandOption\n\nconst botRef = {\n type: 'string',\n description: 'The bot ID. Bot Name is not supported.',\n demandOption: true,\n positional: true,\n idx: 0,\n} satisfies CommandOption\n\nconst packageRef = {\n type: 'string',\n description:\n 'The package ID or name with optional version. The package can be either an integration or an interface. Ex: teams, teams@0.2.0, llm@5.1.0',\n positional: true,\n idx: 0,\n} satisfies CommandOption\n\nconst integrationRef = {\n ...packageRef,\n demandOption: true,\n description: 'The integration ID or name with optional version. Ex: teams or teams@0.2.0',\n} satisfies CommandOption\n\nconst interfaceRef = {\n ...packageRef,\n demandOption: true,\n description: 'The interface ID or name and version. Ex: llm@5.1.0',\n} satisfies CommandOption\n\nconst pluginRef = {\n ...packageRef,\n demandOption: true,\n description: 'The plugin ID or name and version. Ex: knowledge@0.0.1',\n} satisfies CommandOption\n\nconst sourceMap = {\n type: 'boolean',\n description: 'Generate sourcemaps',\n default: false,\n} satisfies CommandOption\n\nconst minify = {\n type: 'boolean',\n description: 'Minify the bundled code',\n default: true,\n} satisfies CommandOption\n\nconst dev = {\n type: 'boolean',\n description: 'List only dev bots / dev integrations',\n default: false,\n} satisfies CommandOption\n\n// base schemas\n\nconst globalSchema = {\n verbose: {\n type: 'boolean',\n description: 'Enable verbose logging',\n alias: 'v',\n default: false,\n },\n confirm: {\n type: 'boolean',\n description: 'Confirm all prompts',\n alias: 'y',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Prevent logging anything else than raw json in stdout. Useful for piping output to other tools',\n default: false,\n },\n botpressHome: {\n type: 'string',\n description: 'The path to the Botpress home directory',\n default: consts.defaultBotpressHome,\n },\n profile: {\n type: 'string',\n description: 'The CLI profile defined in the $BP_BOTPRESS_HOME/profiles.json',\n alias: 'p',\n },\n} satisfies CommandSchema\n\nconst projectSchema = {\n ...globalSchema,\n workDir,\n} satisfies CommandSchema\n\nconst credentialsSchema = {\n apiUrl,\n workspaceId,\n token,\n} satisfies CommandSchema\n\nconst secretsSchema = {\n secrets,\n} satisfies CommandSchema\n\n// command schemas\n\nconst generateSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst bundleSchema = {\n ...projectSchema,\n sourceMap,\n minify,\n} satisfies CommandSchema\n\nconst buildSchema = {\n ...projectSchema,\n sourceMap,\n minify,\n} satisfies CommandSchema\n\nconst readSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst serveSchema = {\n ...projectSchema,\n ...secretsSchema,\n port,\n} satisfies CommandSchema\n\nconst deploySchema = {\n ...projectSchema,\n ...credentialsSchema,\n ...secretsSchema,\n botId: { type: 'string', description: 'The bot ID to deploy. Only used when deploying a bot' },\n noBuild,\n dryRun,\n createNewBot: {\n type: 'boolean',\n description: 'Create a new bot when deploying. Only used when deploying a bot',\n },\n sourceMap,\n minify,\n visibility: {\n type: 'string',\n choices: ['public', 'private', 'unlisted'] as const,\n description:\n 'The visibility of the project. By default, projects are always private. Unlisted visibility is only supported for integrations and plugins.',\n default: 'private',\n },\n public: {\n type: 'boolean',\n description: 'DEPRECATED: Please use \"--visibility public\" instead.',\n default: false,\n deprecated: true,\n } satisfies CommandOption,\n allowDeprecated: {\n type: 'boolean',\n description: 'Allow deprecated features in the project',\n default: false,\n },\n url: {\n type: 'string',\n description: 'Custom URL for the integration. Only used when deploying an integration',\n },\n} as const satisfies CommandSchema\n\nconst devSchema = {\n ...projectSchema,\n ...credentialsSchema,\n ...secretsSchema,\n sourceMap,\n minify,\n port,\n tunnelUrl: {\n type: 'string',\n description: 'The tunnel HTTP URL to use',\n default: consts.defaultTunnelUrl,\n },\n tunnelId: {\n type: 'string',\n description: 'The tunnel ID to use. The ID will be generated if not specified',\n },\n noSecretCaching: {\n type: 'boolean',\n description: 'Do not save the secrets locally',\n default: false,\n alias: 'nsc',\n },\n} satisfies CommandSchema\n\nconst addSchema = {\n ...globalSchema,\n ...credentialsSchema,\n packageRef,\n installPath: {\n type: 'string',\n description: 'The path where to install the package',\n default: consts.defaultInstallPath,\n },\n useDev: {\n type: 'boolean',\n description: 'If a dev version of the package is found, use it',\n default: false,\n },\n alias: {\n type: 'string',\n description: 'The alias to install the package with',\n },\n} satisfies CommandSchema\n\nconst removeSchema = {\n ...globalSchema,\n ...credentialsSchema,\n workDir,\n alias: {\n idx: 0,\n positional: true,\n type: 'string',\n description: 'The alias of the package to uninstall',\n },\n} satisfies CommandSchema\n\nconst loginSchema = {\n ...globalSchema,\n token,\n workspaceId,\n apiUrl: { ...apiUrl, default: consts.defaultBotpressApiUrl },\n} satisfies CommandSchema\n\nconst logoutSchema = {\n ...globalSchema,\n} satisfies CommandSchema\n\nconst createBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name of the bot to create' },\n ifNotExists: {\n type: 'boolean',\n description: 'Do not create if a bot with the same name already exists',\n default: false,\n },\n} satisfies CommandSchema\n\nconst getBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n botRef,\n} satisfies CommandSchema\n\nconst deleteBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n botRef,\n} satisfies CommandSchema\n\nconst listBotsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n dev,\n} satisfies CommandSchema\n\nconst getIntegrationSchema = {\n ...globalSchema,\n ...credentialsSchema,\n integrationRef,\n} satisfies CommandSchema\n\nconst listIntegrationsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name filter when listing integrations' },\n versionNumber: { type: 'string', description: 'The version filter when listing integrations' },\n owned: { type: 'boolean', description: 'List only owned integrations' },\n public: { type: 'boolean', description: 'List only public integrations' },\n limit: { type: 'number', description: 'Limit the number of integrations returned' },\n dev,\n} satisfies CommandSchema\n\nconst deleteIntegrationSchema = {\n ...globalSchema,\n ...credentialsSchema,\n integrationRef,\n} satisfies CommandSchema\n\nconst getInterfaceSchema = {\n ...globalSchema,\n ...credentialsSchema,\n interfaceRef,\n} satisfies CommandSchema\n\nconst listInterfacesSchema = {\n ...globalSchema,\n ...credentialsSchema,\n} satisfies CommandSchema\n\nconst deleteInterfaceSchema = {\n ...globalSchema,\n ...credentialsSchema,\n interfaceRef,\n} satisfies CommandSchema\n\nconst getPluginSchema = {\n ...globalSchema,\n ...credentialsSchema,\n pluginRef,\n} satisfies CommandSchema\n\nconst listPluginsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name filter when listing plugins' },\n versionNumber: { type: 'string', description: 'The version filter when listing plugins' },\n} satisfies CommandSchema\n\nconst deletePluginSchema = {\n ...globalSchema,\n ...credentialsSchema,\n pluginRef,\n} satisfies CommandSchema\n\nconst initSchema = {\n ...globalSchema,\n workDir,\n type: { type: 'string', choices: ['bot', 'integration', 'plugin'] as const },\n template: {\n type: 'string',\n choices: ProjectTemplates.getAllChoices(),\n description: 'The template to use',\n },\n name: { type: 'string', description: 'The name of the project' },\n} satisfies CommandSchema\n\nconst lintSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst chatSchema = {\n ...globalSchema,\n ...credentialsSchema,\n chatApiUrl: {\n type: 'string',\n description: 'The URL of the chat server',\n },\n botId: {\n type: 'string',\n positional: true,\n idx: 0,\n description: 'The bot ID to chat with',\n },\n protocol: {\n choices: ['sse', 'websocket'] satisfies ReadonlyArray<ServerEventsProtocol>,\n default: 'sse' as const,\n description: 'The protocol to use for long lived connections',\n },\n} satisfies CommandSchema\n\nconst listProfilesSchema = {\n ...globalSchema,\n displayToken: {\n type: 'boolean',\n description: 'Display the token in each of the bp profiles',\n default: false,\n },\n} satisfies CommandSchema\n\nconst activeProfileSchema = {\n ...globalSchema,\n displayToken: {\n type: 'boolean',\n description: 'Display the token in the bp profile',\n default: false,\n },\n} satisfies CommandSchema\n\nconst useProfileSchema = {\n ...globalSchema,\n profileToUse: {\n type: 'string',\n description: 'The CLI profile defined in the $BP_BOTPRESS_HOME/profiles.json',\n positional: true,\n idx: 0,\n },\n} satisfies CommandSchema\n\nconst getProfileSchema = {\n ...globalSchema,\n profileToGet: {\n type: 'string',\n description: 'The CLI profile defined in the $BP_BOTPRESS_HOME/profiles.json',\n positional: true,\n idx: 0,\n },\n displayToken: {\n type: 'boolean',\n description: 'Display the token in the bp profile',\n default: false,\n },\n} satisfies CommandSchema\n\n// exports\n\nexport const schemas = {\n global: globalSchema,\n project: projectSchema,\n credentials: credentialsSchema,\n secrets: secretsSchema,\n login: loginSchema,\n logout: logoutSchema,\n createBot: createBotSchema,\n getBot: getBotSchema,\n deleteBot: deleteBotSchema,\n listBots: listBotsSchema,\n getIntegration: getIntegrationSchema,\n listIntegrations: listIntegrationsSchema,\n deleteIntegration: deleteIntegrationSchema,\n getInterface: getInterfaceSchema,\n listInterfaces: listInterfacesSchema,\n deleteInterface: deleteInterfaceSchema,\n getPlugin: getPluginSchema,\n listPlugins: listPluginsSchema,\n deletePlugin: deletePluginSchema,\n init: initSchema,\n generate: generateSchema,\n bundle: bundleSchema,\n build: buildSchema,\n read: readSchema,\n serve: serveSchema,\n deploy: deploySchema,\n add: addSchema,\n remove: removeSchema,\n dev: devSchema,\n lint: lintSchema,\n chat: chatSchema,\n listProfiles: listProfilesSchema,\n activeProfile: activeProfileSchema,\n useProfile: useProfileSchema,\n getProfile: getProfileSchema,\n} as const\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { ServerEventsProtocol } from '@botpress/chat'\nimport * as consts from './consts'\nimport { ProjectTemplates } from './project-templates'\nimport type { CommandOption, CommandSchema } from './typings'\n\n// command options\n\nconst port = {\n type: 'number',\n description: 'The port to use',\n} satisfies CommandOption\n\nconst workDir = {\n type: 'string',\n description: 'The path to the project',\n default: consts.defaultWorkDir,\n} satisfies CommandOption\n\nconst noBuild = {\n type: 'boolean',\n description: 'Skip the build step',\n default: false,\n} satisfies CommandOption\n\nconst dryRun = {\n type: 'boolean',\n description: 'Ask the API not to perform the actual operation',\n default: false,\n} as const satisfies CommandOption\n\nconst apiUrl = {\n type: 'string',\n description: 'The URL of the Botpress server',\n} satisfies CommandOption\n\nconst token = {\n type: 'string',\n description: 'You Personal Access Token ',\n} satisfies CommandOption\n\nconst workspaceId = {\n type: 'string',\n description: 'The Workspace Id to deploy to',\n} satisfies CommandOption\n\nconst secrets = {\n type: 'string',\n description: 'Values for the bot or integration secrets',\n array: true,\n default: [],\n} satisfies CommandOption\n\nconst botRef = {\n type: 'string',\n description: 'The bot ID. Bot Name is not supported.',\n demandOption: true,\n positional: true,\n idx: 0,\n} satisfies CommandOption\n\nconst packageRef = {\n type: 'string',\n description:\n 'The package ID or name with optional version. The package can be either an integration or an interface. Ex: teams, teams@0.2.0, llm@5.1.0',\n positional: true,\n idx: 0,\n} satisfies CommandOption\n\nconst integrationRef = {\n ...packageRef,\n demandOption: true,\n description: 'The integration ID or name with optional version. Ex: teams or teams@0.2.0',\n} satisfies CommandOption\n\nconst interfaceRef = {\n ...packageRef,\n demandOption: true,\n description: 'The interface ID or name and version. Ex: llm@5.1.0',\n} satisfies CommandOption\n\nconst pluginRef = {\n ...packageRef,\n demandOption: true,\n description: 'The plugin ID or name and version. Ex: knowledge@0.0.1',\n} satisfies CommandOption\n\nconst sourceMap = {\n type: 'boolean',\n description: 'Generate sourcemaps',\n default: false,\n} satisfies CommandOption\n\nconst minify = {\n type: 'boolean',\n description: 'Minify the bundled code',\n default: true,\n} satisfies CommandOption\n\nconst dev = {\n type: 'boolean',\n description: 'List only dev bots / dev integrations',\n default: false,\n} satisfies CommandOption\n\nconst watch = {\n type: 'boolean',\n description: 'Watch project files and hot reload on changes',\n default: true,\n} satisfies CommandOption\n\n// base schemas\n\nconst globalSchema = {\n verbose: {\n type: 'boolean',\n description: 'Enable verbose logging',\n alias: 'v',\n default: false,\n },\n confirm: {\n type: 'boolean',\n description: 'Confirm all prompts',\n alias: 'y',\n default: false,\n },\n json: {\n type: 'boolean',\n description: 'Prevent logging anything else than raw json in stdout. Useful for piping output to other tools',\n default: false,\n },\n botpressHome: {\n type: 'string',\n description: 'The path to the Botpress home directory',\n default: consts.defaultBotpressHome,\n },\n profile: {\n type: 'string',\n description: 'The CLI profile defined in the $BP_BOTPRESS_HOME/profiles.json',\n alias: 'p',\n },\n} satisfies CommandSchema\n\nconst projectSchema = {\n ...globalSchema,\n workDir,\n} satisfies CommandSchema\n\nconst credentialsSchema = {\n apiUrl,\n workspaceId,\n token,\n} satisfies CommandSchema\n\nconst secretsSchema = {\n secrets,\n} satisfies CommandSchema\n\n// command schemas\n\nconst generateSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst bundleSchema = {\n ...projectSchema,\n sourceMap,\n minify,\n} satisfies CommandSchema\n\nconst buildSchema = {\n ...projectSchema,\n sourceMap,\n minify,\n} satisfies CommandSchema\n\nconst readSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst serveSchema = {\n ...projectSchema,\n ...secretsSchema,\n port,\n} satisfies CommandSchema\n\nconst deploySchema = {\n ...projectSchema,\n ...credentialsSchema,\n ...secretsSchema,\n botId: { type: 'string', description: 'The bot ID to deploy. Only used when deploying a bot' },\n noBuild,\n dryRun,\n createNewBot: {\n type: 'boolean',\n description: 'Create a new bot when deploying. Only used when deploying a bot',\n },\n sourceMap,\n minify,\n visibility: {\n type: 'string',\n choices: ['public', 'private', 'unlisted'] as const,\n description:\n 'The visibility of the project. By default, projects are always private. Unlisted visibility is only supported for integrations and plugins.',\n default: 'private',\n },\n public: {\n type: 'boolean',\n description: 'DEPRECATED: Please use \"--visibility public\" instead.',\n default: false,\n deprecated: true,\n } satisfies CommandOption,\n allowDeprecated: {\n type: 'boolean',\n description: 'Allow deprecated features in the project',\n default: false,\n },\n url: {\n type: 'string',\n description: 'Custom URL for the integration. Only used when deploying an integration',\n },\n} as const satisfies CommandSchema\n\nconst devSchema = {\n ...projectSchema,\n ...credentialsSchema,\n ...secretsSchema,\n sourceMap,\n minify,\n watch,\n port,\n tunnelUrl: {\n type: 'string',\n description: 'The tunnel HTTP URL to use',\n default: consts.defaultTunnelUrl,\n },\n tunnelId: {\n type: 'string',\n description: 'The tunnel ID to use. The ID will be generated if not specified',\n },\n noSecretCaching: {\n type: 'boolean',\n description: 'Do not save the secrets locally',\n default: false,\n alias: 'nsc',\n },\n} satisfies CommandSchema\n\nconst addSchema = {\n ...globalSchema,\n ...credentialsSchema,\n packageRef,\n installPath: {\n type: 'string',\n description: 'The path where to install the package',\n default: consts.defaultInstallPath,\n },\n useDev: {\n type: 'boolean',\n description: 'If a dev version of the package is found, use it',\n default: false,\n },\n alias: {\n type: 'string',\n description: 'The alias to install the package with',\n },\n} satisfies CommandSchema\n\nconst removeSchema = {\n ...globalSchema,\n ...credentialsSchema,\n workDir,\n alias: {\n idx: 0,\n positional: true,\n type: 'string',\n description: 'The alias of the package to uninstall',\n },\n} satisfies CommandSchema\n\nconst loginSchema = {\n ...globalSchema,\n token,\n workspaceId,\n apiUrl: { ...apiUrl, default: consts.defaultBotpressApiUrl },\n} satisfies CommandSchema\n\nconst logoutSchema = {\n ...globalSchema,\n} satisfies CommandSchema\n\nconst createBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name of the bot to create' },\n ifNotExists: {\n type: 'boolean',\n description: 'Do not create if a bot with the same name already exists',\n default: false,\n },\n} satisfies CommandSchema\n\nconst getBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n botRef,\n} satisfies CommandSchema\n\nconst deleteBotSchema = {\n ...globalSchema,\n ...credentialsSchema,\n botRef,\n} satisfies CommandSchema\n\nconst listBotsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n dev,\n} satisfies CommandSchema\n\nconst getIntegrationSchema = {\n ...globalSchema,\n ...credentialsSchema,\n integrationRef,\n} satisfies CommandSchema\n\nconst listIntegrationsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name filter when listing integrations' },\n versionNumber: { type: 'string', description: 'The version filter when listing integrations' },\n owned: { type: 'boolean', description: 'List only owned integrations' },\n public: { type: 'boolean', description: 'List only public integrations' },\n limit: { type: 'number', description: 'Limit the number of integrations returned' },\n dev,\n} satisfies CommandSchema\n\nconst deleteIntegrationSchema = {\n ...globalSchema,\n ...credentialsSchema,\n integrationRef,\n} satisfies CommandSchema\n\nconst getInterfaceSchema = {\n ...globalSchema,\n ...credentialsSchema,\n interfaceRef,\n} satisfies CommandSchema\n\nconst listInterfacesSchema = {\n ...globalSchema,\n ...credentialsSchema,\n} satisfies CommandSchema\n\nconst deleteInterfaceSchema = {\n ...globalSchema,\n ...credentialsSchema,\n interfaceRef,\n} satisfies CommandSchema\n\nconst getPluginSchema = {\n ...globalSchema,\n ...credentialsSchema,\n pluginRef,\n} satisfies CommandSchema\n\nconst listPluginsSchema = {\n ...globalSchema,\n ...credentialsSchema,\n name: { type: 'string', description: 'The name filter when listing plugins' },\n versionNumber: { type: 'string', description: 'The version filter when listing plugins' },\n} satisfies CommandSchema\n\nconst deletePluginSchema = {\n ...globalSchema,\n ...credentialsSchema,\n pluginRef,\n} satisfies CommandSchema\n\nconst initSchema = {\n ...globalSchema,\n workDir,\n type: { type: 'string', choices: ['bot', 'integration', 'plugin'] as const },\n template: {\n type: 'string',\n choices: ProjectTemplates.getAllChoices(),\n description: 'The template to use',\n },\n name: { type: 'string', description: 'The name of the project' },\n} satisfies CommandSchema\n\nconst lintSchema = {\n ...projectSchema,\n} satisfies CommandSchema\n\nconst chatSchema = {\n ...globalSchema,\n ...credentialsSchema,\n chatApiUrl: {\n type: 'string',\n description: 'The URL of the chat server',\n },\n botId: {\n type: 'string',\n positional: true,\n idx: 0,\n description: 'The bot ID to chat with',\n },\n protocol: {\n choices: ['sse', 'websocket'] satisfies ReadonlyArray<ServerEventsProtocol>,\n default: 'sse' as const,\n description: 'The protocol to use for long lived connections',\n },\n} satisfies CommandSchema\n\nconst listProfilesSchema = {\n ...globalSchema,\n displayToken: {\n type: 'boolean',\n description: 'Display the token in each of the bp profiles',\n default: false,\n },\n} satisfies CommandSchema\n\nconst activeProfileSchema = {\n ...globalSchema,\n displayToken: {\n type: 'boolean',\n description: 'Display the token in the bp profile',\n default: false,\n },\n} satisfies CommandSchema\n\nconst useProfileSchema = {\n ...globalSchema,\n profileToUse: {\n type: 'string',\n description: 'The CLI profile defined in the $BP_BOTPRESS_HOME/profiles.json',\n positional: true,\n idx: 0,\n },\n} satisfies CommandSchema\n\nconst getProfileSchema = {\n ...globalSchema,\n profileToGet: {\n type: 'string',\n description: 'The CLI profile defined in the $BP_BOTPRESS_HOME/profiles.json',\n positional: true,\n idx: 0,\n },\n displayToken: {\n type: 'boolean',\n description: 'Display the token in the bp profile',\n default: false,\n },\n} satisfies CommandSchema\n\n// exports\n\nexport const schemas = {\n global: globalSchema,\n project: projectSchema,\n credentials: credentialsSchema,\n secrets: secretsSchema,\n login: loginSchema,\n logout: logoutSchema,\n createBot: createBotSchema,\n getBot: getBotSchema,\n deleteBot: deleteBotSchema,\n listBots: listBotsSchema,\n getIntegration: getIntegrationSchema,\n listIntegrations: listIntegrationsSchema,\n deleteIntegration: deleteIntegrationSchema,\n getInterface: getInterfaceSchema,\n listInterfaces: listInterfacesSchema,\n deleteInterface: deleteInterfaceSchema,\n getPlugin: getPluginSchema,\n listPlugins: listPluginsSchema,\n deletePlugin: deletePluginSchema,\n init: initSchema,\n generate: generateSchema,\n bundle: bundleSchema,\n build: buildSchema,\n read: readSchema,\n serve: serveSchema,\n deploy: deploySchema,\n add: addSchema,\n remove: removeSchema,\n dev: devSchema,\n lint: lintSchema,\n chat: chatSchema,\n listProfiles: listProfilesSchema,\n activeProfile: activeProfileSchema,\n useProfile: useProfileSchema,\n getProfile: getProfileSchema,\n} as const\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1 @@
1
+ export {};