@botonic/nx-plugin 2.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/CHANGELOG.md +420 -0
  2. package/README.md +279 -0
  3. package/executors.json +55 -0
  4. package/generators.json +61 -0
  5. package/migrations.json +40 -0
  6. package/package.json +54 -0
  7. package/src/cursor-commands/update-bot.md +114 -0
  8. package/src/cursor-commands/update-botonic.md +63 -0
  9. package/src/executors/build-node-app/executor.d.ts +5 -0
  10. package/src/executors/build-node-app/executor.js +65 -0
  11. package/src/executors/build-node-app/schema.d.js +16 -0
  12. package/src/executors/build-node-app/schema.json +25 -0
  13. package/src/executors/delete-bot/executor.d.ts +5 -0
  14. package/src/executors/delete-bot/executor.js +112 -0
  15. package/src/executors/delete-bot/schema.d.js +16 -0
  16. package/src/executors/delete-bot/schema.json +35 -0
  17. package/src/executors/deploy-local-runtime/executor.d.ts +5 -0
  18. package/src/executors/deploy-local-runtime/executor.js +144 -0
  19. package/src/executors/deploy-local-runtime/schema.d.js +16 -0
  20. package/src/executors/deploy-local-runtime/schema.json +34 -0
  21. package/src/executors/deploy-netlify-snapshot/executor.d.ts +8 -0
  22. package/src/executors/deploy-netlify-snapshot/executor.js +79 -0
  23. package/src/executors/deploy-netlify-snapshot/schema.d.js +16 -0
  24. package/src/executors/deploy-netlify-snapshot/schema.json +31 -0
  25. package/src/executors/deploy-to-hubtype/executor.d.ts +5 -0
  26. package/src/executors/deploy-to-hubtype/executor.js +308 -0
  27. package/src/executors/deploy-to-hubtype/schema.d.js +16 -0
  28. package/src/executors/deploy-to-hubtype/schema.json +31 -0
  29. package/src/executors/e2e-webchat/botonic-package-publish.spec.ts +84 -0
  30. package/src/executors/e2e-webchat/executor.d.ts +5 -0
  31. package/src/executors/e2e-webchat/executor.js +134 -0
  32. package/src/executors/e2e-webchat/schema.d.js +16 -0
  33. package/src/executors/e2e-webchat/schema.json +35 -0
  34. package/src/executors/integrate-provider/executor.d.ts +5 -0
  35. package/src/executors/integrate-provider/executor.js +155 -0
  36. package/src/executors/integrate-provider/schema.d.js +16 -0
  37. package/src/executors/integrate-provider/schema.json +30 -0
  38. package/src/executors/login-to-hubtype/executor.d.ts +5 -0
  39. package/src/executors/login-to-hubtype/executor.js +79 -0
  40. package/src/executors/login-to-hubtype/schema.d.js +16 -0
  41. package/src/executors/login-to-hubtype/schema.json +25 -0
  42. package/src/executors/logout-from-hubtype/executor.d.ts +3 -0
  43. package/src/executors/logout-from-hubtype/executor.js +54 -0
  44. package/src/executors/logout-from-hubtype/schema.d.js +16 -0
  45. package/src/executors/logout-from-hubtype/schema.json +9 -0
  46. package/src/executors/run-lambda/executor.d.ts +5 -0
  47. package/src/executors/run-lambda/executor.js +65 -0
  48. package/src/executors/run-lambda/schema.d.js +16 -0
  49. package/src/executors/run-lambda/schema.json +20 -0
  50. package/src/executors/serve-bot/executor.d.ts +5 -0
  51. package/src/executors/serve-bot/executor.js +330 -0
  52. package/src/executors/serve-bot/schema.d.js +16 -0
  53. package/src/executors/serve-bot/schema.json +40 -0
  54. package/src/generators/action/files/__name__.spec.ts.template +15 -0
  55. package/src/generators/action/files/__name__.ts.template +15 -0
  56. package/src/generators/action/generator.d.ts +4 -0
  57. package/src/generators/action/generator.js +112 -0
  58. package/src/generators/action/schema.d.ts +7 -0
  59. package/src/generators/action/schema.js +16 -0
  60. package/src/generators/action/schema.json +43 -0
  61. package/src/generators/bot-app/files/.eslintrc.json.template +18 -0
  62. package/src/generators/bot-app/files/README.md.template +148 -0
  63. package/src/generators/bot-app/files/src/client/custom-messages/index.ts.template +2 -0
  64. package/src/generators/bot-app/files/src/client/webchat/index.html.template +35 -0
  65. package/src/generators/bot-app/files/src/client/webchat/index.tsx.template +107 -0
  66. package/src/generators/bot-app/files/src/client/webchat/styles.css.template +17 -0
  67. package/src/generators/bot-app/files/src/client/webchat/webchat-tokens-overrides.css.template +2 -0
  68. package/src/generators/bot-app/files/src/client/webviews/app.tsx.template +8 -0
  69. package/src/generators/bot-app/files/src/client/webviews/index.html.template +32 -0
  70. package/src/generators/bot-app/files/src/client/webviews/index.tsx.template +18 -0
  71. package/src/generators/bot-app/files/src/server/bot/actions/index.ts.template +2 -0
  72. package/src/generators/bot-app/files/src/server/bot/actions/not-found.ts.template +13 -0
  73. package/src/generators/bot-app/files/src/server/bot/actions/welcome.ts.template +13 -0
  74. package/src/generators/bot-app/files/src/server/bot/index.ts.template +43 -0
  75. package/src/generators/bot-app/files/src/server/bot/plugins/ai-agents/index.ts.template +30 -0
  76. package/src/generators/bot-app/files/src/server/bot/plugins/flow-builder/index.ts.template +28 -0
  77. package/src/generators/bot-app/files/src/server/bot/plugins/index.ts.template +11 -0
  78. package/src/generators/bot-app/files/src/server/bot/routes.ts.template +23 -0
  79. package/src/generators/bot-app/files/src/server/bot/tools/index.ts.template +5 -0
  80. package/src/generators/bot-app/files/src/server/bot/tracking.ts.template +35 -0
  81. package/src/generators/bot-app/files/src/server/bot/types.ts.template +4 -0
  82. package/src/generators/bot-app/files/src/server/bot/utils.ts.template +9 -0
  83. package/src/generators/bot-app/files/src/server/lambda/handler.js.template +24 -0
  84. package/src/generators/bot-app/files/src/server/lambda/package.json +20 -0
  85. package/src/generators/bot-app/files/src/server/lambda/template.yaml.template +20 -0
  86. package/src/generators/bot-app/files/src/shared/constants.ts.template +12 -0
  87. package/src/generators/bot-app/files/vite/base-client.config.ts.template +14 -0
  88. package/src/generators/bot-app/files/vite/base.config.ts.template +20 -0
  89. package/src/generators/bot-app/files/vite/build.config.ts.template +65 -0
  90. package/src/generators/bot-app/files/vite/node.config.ts.template +41 -0
  91. package/src/generators/bot-app/files/vite/plugins/move-html.plugin.ts.template +36 -0
  92. package/src/generators/bot-app/files/vite/webchat.config.ts.template +58 -0
  93. package/src/generators/bot-app/files/vite/webviews.config.ts.template +57 -0
  94. package/src/generators/bot-app/files/vite.config.ts.template +36 -0
  95. package/src/generators/bot-app/generator.d.ts +4 -0
  96. package/src/generators/bot-app/generator.js +294 -0
  97. package/src/generators/bot-app/schema.d.ts +6 -0
  98. package/src/generators/bot-app/schema.js +16 -0
  99. package/src/generators/bot-app/schema.json +36 -0
  100. package/src/generators/bot-app-migrations/migrate-fix-css-code-split/generator.d.ts +5 -0
  101. package/src/generators/bot-app-migrations/migrate-fix-css-code-split/generator.js +92 -0
  102. package/src/generators/bot-app-migrations/migrate-fix-css-code-split/schema.json +15 -0
  103. package/src/generators/bot-app-migrations/migrate-pnpm-compat/generator.d.ts +5 -0
  104. package/src/generators/bot-app-migrations/migrate-pnpm-compat/generator.js +97 -0
  105. package/src/generators/bot-app-migrations/migrate-pnpm-compat/schema.json +15 -0
  106. package/src/generators/bot-app-migrations/migrate-webchat-trigger/generator.d.ts +5 -0
  107. package/src/generators/bot-app-migrations/migrate-webchat-trigger/generator.js +165 -0
  108. package/src/generators/bot-app-migrations/migrate-webchat-trigger/schema.json +15 -0
  109. package/src/generators/custom-message/files/__name__-output.ts.template +21 -0
  110. package/src/generators/custom-message/files/__name__.spec.tsx.template +27 -0
  111. package/src/generators/custom-message/files/__name__.tsx.template +18 -0
  112. package/src/generators/custom-message/generator.d.ts +4 -0
  113. package/src/generators/custom-message/generator.js +235 -0
  114. package/src/generators/custom-message/schema.d.ts +7 -0
  115. package/src/generators/custom-message/schema.js +16 -0
  116. package/src/generators/custom-message/schema.json +44 -0
  117. package/src/generators/preset/files/.cursor/commands/update-bot.md +5 -0
  118. package/src/generators/preset/files/.cursor/commands/update-botonic.md +5 -0
  119. package/src/generators/preset/files/.cursor/scripts/update-bot/discover-bots.sh +67 -0
  120. package/src/generators/preset/files/.cursor/scripts/update-bot/find-migration-guides.sh +70 -0
  121. package/src/generators/preset/files/.cursor/skills/botonic-action/SKILL.md +167 -0
  122. package/src/generators/preset/files/.cursor/skills/botonic-custom-message/SKILL.md +231 -0
  123. package/src/generators/preset/files/.cursor/skills/botonic-webview/SKILL.md +179 -0
  124. package/src/generators/preset/files/.env.prod.template +2 -0
  125. package/src/generators/preset/files/.env.template +2 -0
  126. package/src/generators/preset/files/.npmrc.template +1 -0
  127. package/src/generators/preset/files/README.md.template +174 -0
  128. package/src/generators/preset/files/nx.json +66 -0
  129. package/src/generators/preset/files/package.json +26 -0
  130. package/src/generators/preset/files/tsconfig.base.json +27 -0
  131. package/src/generators/preset/files/tsconfig.base.json.template +27 -0
  132. package/src/generators/preset/files/tsconfig.json +9 -0
  133. package/src/generators/preset/generator.d.ts +4 -0
  134. package/src/generators/preset/generator.js +127 -0
  135. package/src/generators/preset/schema.d.ts +6 -0
  136. package/src/generators/preset/schema.js +16 -0
  137. package/src/generators/preset/schema.json +50 -0
  138. package/src/generators/remove-custom-message/generator.d.ts +4 -0
  139. package/src/generators/remove-custom-message/generator.js +259 -0
  140. package/src/generators/remove-custom-message/schema.d.ts +6 -0
  141. package/src/generators/remove-custom-message/schema.js +16 -0
  142. package/src/generators/remove-custom-message/schema.json +39 -0
  143. package/src/generators/shared/bot-app-utils.d.ts +25 -0
  144. package/src/generators/shared/bot-app-utils.js +209 -0
  145. package/src/generators/webview/files/__name__.spec.tsx.template +20 -0
  146. package/src/generators/webview/files/__name__.tsx.template +19 -0
  147. package/src/generators/webview/generator.d.ts +4 -0
  148. package/src/generators/webview/generator.js +179 -0
  149. package/src/generators/webview/schema.d.ts +5 -0
  150. package/src/generators/webview/schema.js +16 -0
  151. package/src/generators/webview/schema.json +34 -0
  152. package/src/index.d.ts +7 -0
  153. package/src/index.js +56 -0
  154. package/src/lib/api-service.d.ts +110 -0
  155. package/src/lib/api-service.js +591 -0
  156. package/src/lib/bot-config.d.ts +30 -0
  157. package/src/lib/bot-config.js +203 -0
  158. package/src/lib/cloudflared-tunnel.d.ts +29 -0
  159. package/src/lib/cloudflared-tunnel.js +95 -0
  160. package/src/lib/constants.d.ts +13 -0
  161. package/src/lib/constants.js +60 -0
  162. package/src/lib/credentials-handler.d.ts +40 -0
  163. package/src/lib/credentials-handler.js +115 -0
  164. package/src/lib/index.d.ts +10 -0
  165. package/src/lib/index.js +47 -0
  166. package/src/lib/interfaces.d.ts +49 -0
  167. package/src/lib/interfaces.js +16 -0
  168. package/src/lib/util/executor-helpers.d.ts +97 -0
  169. package/src/lib/util/executor-helpers.js +574 -0
  170. package/src/lib/util/file-system.d.ts +8 -0
  171. package/src/lib/util/file-system.js +65 -0
  172. package/src/lib/util/sam-container-cleanup.d.ts +11 -0
  173. package/src/lib/util/sam-container-cleanup.js +55 -0
  174. package/src/lib/util/sam-template.d.ts +9 -0
  175. package/src/lib/util/sam-template.js +71 -0
  176. package/src/lib/util/system.d.ts +1 -0
  177. package/src/lib/util/system.js +30 -0
  178. package/src/migrations/add-botonic-update-bots-skill/add-botonic-update-bots-skill.migration.d.ts +2 -0
  179. package/src/migrations/add-botonic-update-bots-skill/add-botonic-update-bots-skill.migration.js +52 -0
  180. package/src/migrations/add-botonic-update-bots-skill/add-botonic-update-bots-skill.migration.md +23 -0
  181. package/src/migrations/add-botonic-update-bots-skill/files/.cursor/commands/update-bot.md +5 -0
  182. package/src/migrations/add-botonic-update-bots-skill/files/.cursor/commands/update-botonic.md +5 -0
  183. package/src/migrations/add-botonic-update-bots-skill/files/.cursor/scripts/update-bot/discover-bots.sh +67 -0
  184. package/src/migrations/add-botonic-update-bots-skill/files/.cursor/scripts/update-bot/find-migration-guides.sh +70 -0
  185. package/src/migrations/add-botonic-update-bots-skill/schema.json +5 -0
  186. package/src/migrations/add-lilara-registry/add-lilara-registry.migration.d.ts +2 -0
  187. package/src/migrations/add-lilara-registry/add-lilara-registry.migration.js +49 -0
  188. package/src/migrations/add-lilara-registry/schema.json +5 -0
  189. package/src/migrations/fix-css-code-split/fix-css-code-split.migration.md +45 -0
  190. package/src/migrations/remove-codeartifact-registry/remove-codeartifact-registry.migration.d.ts +2 -0
  191. package/src/migrations/remove-codeartifact-registry/remove-codeartifact-registry.migration.js +59 -0
  192. package/src/migrations/remove-codeartifact-registry/schema.json +5 -0
  193. package/src/migrations/sync-pending-bot-migrations/schema.json +5 -0
  194. package/src/migrations/sync-pending-bot-migrations/sync-pending-bot-migrations.migration.d.ts +2 -0
  195. package/src/migrations/sync-pending-bot-migrations/sync-pending-bot-migrations.migration.js +137 -0
  196. package/src/migrations/sync-pending-bot-migrations/sync-pending-bot-migrations.migration.md +19 -0
  197. package/src/migrations/update-cursor-commands-to-stubs/schema.json +5 -0
  198. package/src/migrations/update-cursor-commands-to-stubs/update-cursor-commands-to-stubs.migration.d.ts +2 -0
  199. package/src/migrations/update-cursor-commands-to-stubs/update-cursor-commands-to-stubs.migration.js +61 -0
  200. package/src/migrations/update-pnpm-workspace-scripts/schema.json +4 -0
  201. package/src/migrations/update-pnpm-workspace-scripts/update-pnpm-workspace-scripts.migration.d.ts +2 -0
  202. package/src/migrations/update-pnpm-workspace-scripts/update-pnpm-workspace-scripts.migration.js +47 -0
  203. package/src/migrations/utils/migration-utils.d.ts +109 -0
  204. package/src/migrations/utils/migration-utils.js +448 -0
  205. package/src/plugin.d.ts +15 -0
  206. package/src/plugin.js +246 -0
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "DeleteBotExecutor",
4
+ "title": "Delete bot from Hubtype executor",
5
+ "type": "object",
6
+ "properties": {
7
+ "configuration": {
8
+ "type": "string",
9
+ "enum": ["local", "dev", "dev2", "qa", "prod"],
10
+ "description": "Environment to delete the bot from"
11
+ },
12
+ "botName": {
13
+ "type": "string",
14
+ "description": "Name of the bot to delete from Hubtype"
15
+ },
16
+ "botId": {
17
+ "type": "string",
18
+ "description": "ID of the bot to delete from Hubtype (alternative to botName)"
19
+ },
20
+ "email": {
21
+ "type": "string",
22
+ "description": "Email from Hubtype Organization"
23
+ },
24
+ "password": {
25
+ "type": "string",
26
+ "description": "Password from Hubtype Organization"
27
+ },
28
+ "skipConfirmation": {
29
+ "type": "boolean",
30
+ "description": "Skip confirmation prompt (for CI/automated environments)",
31
+ "default": false
32
+ }
33
+ },
34
+ "additionalProperties": true
35
+ }
@@ -0,0 +1,5 @@
1
+ import type { ExecutorContext } from '@nx/devkit';
2
+ import type { DeployLocalRuntimeExecutorSchema } from './schema';
3
+ export default function deployLocalRuntimeExecutor(options: DeployLocalRuntimeExecutorSchema, context: ExecutorContext): Promise<{
4
+ success: boolean;
5
+ }>;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var executor_exports = {};
30
+ __export(executor_exports, {
31
+ default: () => deployLocalRuntimeExecutor
32
+ });
33
+ module.exports = __toCommonJS(executor_exports);
34
+ var import_enquirer = require("enquirer");
35
+ var fs = __toESM(require("fs"));
36
+ var path = __toESM(require("path"));
37
+ var import_lib = require("../../lib");
38
+ var import_api_service = require("../../lib/api-service");
39
+ var import_executor_helpers = require("../../lib/util/executor-helpers");
40
+ async function deployLocalRuntimeExecutor(options, context) {
41
+ const projectRoot = (0, import_executor_helpers.resolveProjectPath)(context);
42
+ try {
43
+ const { targetEnvironment, environmentVariables } = (0, import_executor_helpers.resolveHubtypeEnvironment)(context, options);
44
+ const botonicApiService = new import_api_service.BotonicAPIService({
45
+ isLocalRuntimeDeployment: true,
46
+ projectRoot,
47
+ workspaceRoot: path.resolve(context.root),
48
+ environmentVariables,
49
+ targetEnvironment
50
+ });
51
+ if (!botonicApiService.oauth) {
52
+ if (options.email && options.password) {
53
+ await botonicApiService.login(options.email, options.password);
54
+ botonicApiService.saveAllCredentials();
55
+ } else {
56
+ await (0, import_executor_helpers.handleAuthentication)(botonicApiService);
57
+ }
58
+ }
59
+ await (0, import_executor_helpers.logWorkingAsAndEnvironment)(botonicApiService);
60
+ console.log(
61
+ `\u{1F680} Deploying to Hubtype Local Runtime...[${environmentVariables["VITE_HUBTYPE_API_URL"]}]
62
+ `
63
+ );
64
+ await (0, import_executor_helpers.ensureLocalRuntimeBot)(botonicApiService);
65
+ const lambdaFunctionName = options.lambdaFunctionName || environmentVariables["VITE_HUBTYPE_LAMBDA_FUNCTION_NAME"];
66
+ const lambdaEndpoint = options.lambdaEndpoint || environmentVariables["VITE_HUBTYPE_LOCAL_LAMBDA_ENDPOINT"];
67
+ await deployLocalRuntime(botonicApiService, projectRoot, {
68
+ lambdaFunctionName,
69
+ lambdaEndpoint
70
+ });
71
+ return { success: true };
72
+ } catch (error) {
73
+ return (0, import_executor_helpers.handleExecutorError)(error, "Local runtime deployment");
74
+ }
75
+ }
76
+ function updateEnvLocal(projectRoot, appId) {
77
+ const envLocalPath = path.join(projectRoot, ".env.local");
78
+ const envKey = "VITE_HUBTYPE_APP_ID";
79
+ try {
80
+ if (fs.existsSync(envLocalPath)) {
81
+ let content = fs.readFileSync(envLocalPath, "utf-8");
82
+ const regex = new RegExp(`^${envKey}=.*$`, "m");
83
+ if (regex.test(content)) {
84
+ content = content.replace(regex, `${envKey}=${appId}`);
85
+ console.log(`\u{1F4DD} Updated ${envKey} in .env.local`);
86
+ } else {
87
+ content = content.trimEnd() + `
88
+ ${envKey}=${appId}
89
+ `;
90
+ console.log(`\u{1F4DD} Added ${envKey} to .env.local`);
91
+ }
92
+ fs.writeFileSync(envLocalPath, content);
93
+ } else {
94
+ const content = `# HUBTYPE
95
+ ${envKey}=${appId}
96
+ `;
97
+ fs.writeFileSync(envLocalPath, content);
98
+ console.log(`\u{1F4DD} Created .env.local with ${envKey}`);
99
+ }
100
+ } catch (error) {
101
+ console.warn(`\u26A0\uFE0F Could not update .env.local: ${error}`);
102
+ console.log(`\u{1F194} Manually add to .env.local: ${envKey}=${appId}`);
103
+ }
104
+ }
105
+ async function deployLocalRuntime(botonicApiService, projectRoot, params) {
106
+ console.log("\u{1F528} Generating bot config for local runtime deployment...\n");
107
+ const botConfigJson = await import_lib.BotConfig.get(projectRoot);
108
+ let { lambdaEndpoint } = params;
109
+ if (!lambdaEndpoint) {
110
+ const response = await (0, import_enquirer.prompt)({
111
+ type: "input",
112
+ name: "lambda_endpoint",
113
+ message: "\u{1F310} Local runtime URL (e.g. http://localhost:3001):",
114
+ validate: (input) => {
115
+ try {
116
+ new URL(input);
117
+ return true;
118
+ } catch {
119
+ return "Please enter a valid URL";
120
+ }
121
+ }
122
+ });
123
+ lambdaEndpoint = response.lambda_endpoint;
124
+ }
125
+ console.log("\u{1F680} Deploying to Hubtype Local Runtime...");
126
+ try {
127
+ await botonicApiService.deployLocalRuntime({
128
+ botConfigJson,
129
+ lambdaFunctionName: params.lambdaFunctionName,
130
+ lambdaEndpoint
131
+ });
132
+ const allProviders = await botonicApiService.getProviders();
133
+ const appId = allProviders.data.results.filter(
134
+ (provider) => provider.is_test && provider.is_active
135
+ )[0].id;
136
+ console.log("\u2705 Local runtime deployment completed!");
137
+ updateEnvLocal(projectRoot, appId);
138
+ console.log(`\u{1F194} APP_ID: ${appId}`);
139
+ } catch (error) {
140
+ console.error("\u274C Local runtime deployment failed");
141
+ console.error(`${String(error)}`);
142
+ }
143
+ botonicApiService.saveAllCredentials();
144
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var schema_d_exports = {};
16
+ module.exports = __toCommonJS(schema_d_exports);
@@ -0,0 +1,34 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "DeployLocalRuntimeExecutor",
4
+ "title": "Deploy to Hubtype Local Runtime executor",
5
+ "type": "object",
6
+ "properties": {
7
+ "configuration": {
8
+ "type": "string",
9
+ "enum": ["local"],
10
+ "description": "Environment to deploy to"
11
+ },
12
+ "command": {
13
+ "type": "string",
14
+ "description": "Command to execute from the package scripts object"
15
+ },
16
+ "email": {
17
+ "type": "string",
18
+ "description": "Email from Hubtype Organization"
19
+ },
20
+ "password": {
21
+ "type": "string",
22
+ "description": "Password from Hubtype Organization"
23
+ },
24
+ "lambdaFunctionName": {
25
+ "type": "string",
26
+ "description": "Name of the Lambda function for the local runtime. Falls back to VITE_HUBTYPE_LAMBDA_FUNCTION_NAME or prompts if missing."
27
+ },
28
+ "lambdaEndpoint": {
29
+ "type": "string",
30
+ "description": "URL where the local runtime is reachable (e.g. http://localhost:3001). Falls back to VITE_HUBTYPE_LOCAL_LAMBDA_ENDPOINT env or prompts if missing."
31
+ }
32
+ },
33
+ "additionalProperties": false
34
+ }
@@ -0,0 +1,8 @@
1
+ import type { ExecutorContext } from '@nx/devkit';
2
+ import type { DeployNetlifySnapshotExecutorSchema } from './schema';
3
+ export interface DeployNetlifySnapshotResult {
4
+ success: boolean;
5
+ deployUrl?: string;
6
+ claimUrl?: string;
7
+ }
8
+ export default function deployNetlifySnapshotExecutor(options: DeployNetlifySnapshotExecutorSchema, context: ExecutorContext): Promise<DeployNetlifySnapshotResult>;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var executor_exports = {};
20
+ __export(executor_exports, {
21
+ default: () => deployNetlifySnapshotExecutor
22
+ });
23
+ module.exports = __toCommonJS(executor_exports);
24
+ var import_child_process = require("child_process");
25
+ var import_fs = require("fs");
26
+ var import_path = require("path");
27
+ async function deployNetlifySnapshotExecutor(options, context) {
28
+ const siteId = options.siteId || process.env["BOTONIC_E2E_NETLIFY_SITE_ID"];
29
+ const authToken = options.authToken || process.env["NETLIFY_AUTH_TOKEN"];
30
+ const alias = options.alias || `deploy-${Date.now()}`;
31
+ if (!siteId) {
32
+ console.error(
33
+ "\u274C No Netlify site ID provided. Pass --siteId or set BOTONIC_E2E_NETLIFY_SITE_ID env var."
34
+ );
35
+ return { success: false };
36
+ }
37
+ if (!authToken) {
38
+ console.error(
39
+ "\u274C No Netlify auth token provided. Pass --authToken or set NETLIFY_AUTH_TOKEN env var."
40
+ );
41
+ return { success: false };
42
+ }
43
+ const projectRoot = context.projectsConfigurations?.projects[context.projectName ?? ""]?.root ?? "";
44
+ const dir = (0, import_path.resolve)(context.root, projectRoot, options.dir);
45
+ if (!(0, import_fs.existsSync)(dir)) {
46
+ console.error(`\u274C Deploy directory does not exist: ${dir}`);
47
+ return { success: false };
48
+ }
49
+ const deployArgs = [
50
+ `--dir="${dir}"`,
51
+ `--site="${siteId}"`,
52
+ `--auth="${authToken}"`,
53
+ "--json"
54
+ ];
55
+ if (options.prod) {
56
+ deployArgs.push("--prod");
57
+ } else {
58
+ deployArgs.push(`--alias="${alias}"`);
59
+ }
60
+ console.log(`\u{1F680} Deploying ${dir} to Netlify...`);
61
+ console.log(` Site: ${siteId}`);
62
+ console.log(` Alias: ${options.prod ? "production" : alias}`);
63
+ try {
64
+ const output = (0, import_child_process.execSync)(`npx netlify-cli deploy ${deployArgs.join(" ")}`, {
65
+ encoding: "utf-8",
66
+ stdio: ["pipe", "pipe", "inherit"],
67
+ cwd: dir
68
+ });
69
+ const result = JSON.parse(output);
70
+ const deployUrl = result.deploy_url || result.url;
71
+ console.log(`\u2705 Snapshot deployed successfully!`);
72
+ console.log(` Deploy URL: ${deployUrl}`);
73
+ console.log(`NETLIFY_DEPLOY_URL=${deployUrl}`);
74
+ return { success: true, deployUrl, claimUrl: result.claim_url };
75
+ } catch (error) {
76
+ console.error(`\u274C Netlify deploy failed: ${error.message}`);
77
+ return { success: false };
78
+ }
79
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var schema_d_exports = {};
16
+ module.exports = __toCommonJS(schema_d_exports);
@@ -0,0 +1,31 @@
1
+ {
2
+ "$schema": "http://json-schema.org/schema",
3
+ "$id": "DeployNetlifySnapshotExecutor",
4
+ "title": "Deploy Netlify Snapshot executor",
5
+ "type": "object",
6
+ "properties": {
7
+ "dir": {
8
+ "type": "string",
9
+ "description": "Directory of static files to deploy"
10
+ },
11
+ "siteId": {
12
+ "type": "string",
13
+ "description": "Netlify site API ID (UUID). Falls back to BOTONIC_E2E_NETLIFY_SITE_ID env var"
14
+ },
15
+ "authToken": {
16
+ "type": "string",
17
+ "description": "Netlify personal access token. Falls back to NETLIFY_AUTH_TOKEN env var"
18
+ },
19
+ "alias": {
20
+ "type": "string",
21
+ "description": "Deploy alias for a unique snapshot URL (e.g. run-12345). Defaults to a timestamp"
22
+ },
23
+ "prod": {
24
+ "type": "boolean",
25
+ "description": "Deploy to production URL instead of a preview URL",
26
+ "default": false
27
+ }
28
+ },
29
+ "required": ["dir"],
30
+ "additionalProperties": false
31
+ }
@@ -0,0 +1,5 @@
1
+ import type { ExecutorContext } from '@nx/devkit';
2
+ import type { DeployToHubtypeExecutorSchema } from './schema';
3
+ export default function deployToHubtypeExecutor(options: DeployToHubtypeExecutorSchema, context: ExecutorContext): Promise<{
4
+ success: boolean;
5
+ }>;