@dotcms/create-app 1.2.3 → 1.2.4-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,11 +3,12 @@
3
3
  > 🚧 **Beta Notice:**
4
4
  > This CLI is currently in **beta**. Features and APIs may change as we continue improving the tool.
5
5
 
6
- With a single command, you can bootstrap a fully functional frontend (Next.js,Vue,Angular, etc.) connected to dotCMS APIs — including the following:
6
+ With a single command, you can bootstrap a fully functional frontend (Next.js, Angular, Astro, etc.) connected to dotCMS APIs — including the following:
7
7
 
8
- - Spinning up dotCMS using docker
9
- - Universal Visual Editor pre configured
10
- - Generating site id and authentication token (just copy paste them in frontend .env and enjoy).
8
+ - Spinning up dotCMS using Docker with intelligent pre-flight checks
9
+ - Universal Visual Editor pre-configured
10
+ - Generating site ID and authentication token (just copy paste them in frontend .env and enjoy)
11
+ - Comprehensive validation and helpful error messages
11
12
 
12
13
  ---
13
14
 
@@ -17,12 +18,13 @@ With a single command, you can bootstrap a fully functional frontend (Next.js,Vu
17
18
 
18
19
  It automates the tedious work of:
19
20
 
20
- - Setting up a framework
21
+ - Setting up a framework with best practices
21
22
  - Connecting to dotCMS REST & GraphQL APIs
22
23
  - Providing content-fetching helpers
23
24
  - Adding example components & pages
24
25
  - Creating environment variable templates
25
- - Optional Setting up local dotCMS instance using docker.
26
+ - Optionally setting up local dotCMS instance using Docker
27
+ - Validating your environment (Docker, ports, URLs)
26
28
 
27
29
  This tool lets you focus on **building**, not configuring.
28
30
 
@@ -65,8 +67,12 @@ npx @dotcms/create-app <project-name>
65
67
  This will:
66
68
 
67
69
  - Ask for the target directory
68
- - Ask which frontend framework you want (Next.js,Angular,Vue, etc.)
69
- - Ask if youre using dotCMS Cloud or Local Docker dotCMS
70
+ - Ask which frontend framework you want (Next.js, Angular, Astro, etc.)
71
+ - Ask if you're using dotCMS Cloud or Local Docker dotCMS
72
+ - **For local Docker setup:**
73
+ - Check if Docker is installed and running
74
+ - Verify required ports are available (8082, 8443, 9200, 9600)
75
+ - Provide specific error messages and solutions if issues are found
70
76
  - Automatically scaffold your project
71
77
  - Configure UVE (Edit Mode Anywhere)
72
78
  - Start dotCMS (if using Docker)
@@ -88,12 +94,145 @@ API Token : YOUR_API_TOKEN
88
94
  create-dotcms-app <project-name> [options]
89
95
  ```
90
96
 
91
- | Option | Description |
92
- |--------------------------|-----------------------------------------------------------------------------------------------------------------|
93
- | `-f, --framework <name>` | Skip prompts and directly choose a framework. Must be one of: `nextjs`, `angular`, `angular-ssr`, `astro`, etc. |
94
- | `-d, --directory` | Project Directory |
95
- | `--local` | Use local dotCMS instance using docker: |
96
- | `-u, --username` | dotCMS instance username (skip in case of local) |
97
- | `-p, --password` | dotCMS instance password (skip in case of local)
98
- | `--url` | dotCMS instance url (skip in case of local) |
99
- | `-V, --version` | Show CLI version |
97
+ | Option | Description |
98
+ |--------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
99
+ | `-f, --framework <name>` | Skip prompts and directly choose a framework. Supported: `nextjs`, `angular`, `angular-ssr`, `astro`. Case-insensitive. Aliases: `next`, `ng`, `next.js`, `angular-server` |
100
+ | `-d, --directory` | Project Directory |
101
+ | `--local` | Use local dotCMS instance using docker |
102
+ | `-u, --username` | dotCMS instance username (skip in case of local) |
103
+ | `-p, --password` | dotCMS instance password (skip in case of local) |
104
+ | `--url` | dotCMS instance URL (skip in case of local). Must include protocol (http:// or https://) |
105
+ | `-V, --version` | Show CLI version |
106
+
107
+ ### Framework Aliases
108
+
109
+ For convenience, the CLI accepts common framework name variations (case-insensitive):
110
+
111
+ - `next`, `next.js`, `Next.js` → `nextjs`
112
+ - `ng`, `Angular` → `angular`
113
+ - `angular-server` → `angular-ssr`
114
+ - `angular-server` → `angular-ssr`
115
+
116
+ ### URL Format
117
+
118
+ When using `--url`, make sure to include the full URL with protocol:
119
+
120
+ ✅ **Valid:** `https://demo.dotcms.com`, `http://localhost:8082`
121
+ ❌ **Invalid:** `demo.dotcms.com`, `localhost:8082` (missing protocol)
122
+
123
+ ---
124
+
125
+ ## 🛡️ Built-in Validation & Error Handling
126
+
127
+ The CLI includes comprehensive validation to help you avoid common setup issues:
128
+
129
+ ### Input Validation
130
+ - **Project names:** Validates against filesystem limitations, reserved names, special characters, and path traversal
131
+ - **Framework names:** Supports aliases and case-insensitive matching
132
+ - **URLs:** Ensures proper protocol and format
133
+ - **Conflicting parameters:** Warns when mixing `--local` with cloud parameters
134
+
135
+ ### Docker Environment Checks
136
+ When using local Docker setup, the CLI performs pre-flight checks:
137
+
138
+ 1. **Docker Availability**
139
+ - Verifies Docker is installed and running
140
+ - Provides installation instructions if not found
141
+ - Direct link to Docker Desktop download
142
+
143
+ 2. **Port Availability**
144
+ - Checks all required ports before starting containers
145
+ - Lists which specific ports are busy
146
+ - Provides platform-specific commands to identify blocking processes
147
+ - Suggests `docker compose down` to stop existing containers
148
+
149
+ 3. **Container Health**
150
+ - Monitors dotCMS startup with intelligent retries
151
+ - Shows detailed diagnostics if startup fails
152
+ - Displays container status and recent logs
153
+
154
+ ### Error Messages
155
+ All error messages include:
156
+ - **Clear problem description** - What went wrong
157
+ - **Specific suggestions** - How to fix it
158
+ - **Alternative solutions** - Other ways to proceed
159
+ - **Platform-specific commands** - Commands tailored to your OS
160
+
161
+ ### Debug Mode
162
+ Run with `DEBUG=1` to see detailed stack traces:
163
+ ```sh
164
+ DEBUG=1 npx @dotcms/create-app my-project
165
+ ```
166
+
167
+ ---
168
+
169
+ ## 🔧 Troubleshooting
170
+
171
+ ### Docker Issues
172
+
173
+ **"Docker is not available"**
174
+ - Ensure Docker Desktop is installed and running
175
+ - Check the Docker icon in your system tray
176
+ - Download from: https://www.docker.com/products/docker-desktop
177
+
178
+ **"Required ports are already in use"**
179
+ - Check what's using the ports:
180
+ - macOS/Linux: `lsof -i :8082`
181
+ - Windows: `netstat -ano | findstr ":8082"`
182
+ - Stop existing dotCMS containers: `docker compose down`
183
+ - Stop conflicting services or choose a different port mapping
184
+
185
+ **"dotCMS failed to start properly"**
186
+ - Check container logs: `docker logs <container-name>`
187
+ - Verify sufficient system resources (RAM, disk space)
188
+ - Review Docker diagnostics output from the CLI
189
+
190
+ ### Validation Errors
191
+
192
+ **"Invalid project name"**
193
+ - Avoid special characters: `< > : " | ? *`
194
+ - Don't use Windows reserved names: `CON`, `PRN`, `AUX`, `NUL`, etc.
195
+ - Maximum 255 characters
196
+ - No path traversal patterns (`..`)
197
+
198
+ **"Invalid URL format"**
199
+ - Include protocol: `https://` or `http://`
200
+ - Verify hostname is correct
201
+ - For localhost, default port is 8082
202
+
203
+ ---
204
+
205
+ ## 🚀 Examples
206
+
207
+ ### Quick Start with Interactive Prompts
208
+ ```sh
209
+ npx @dotcms/create-app my-blog
210
+ ```
211
+
212
+ ### Using CLI Flags (Skip Prompts)
213
+ ```sh
214
+ # Local Docker setup
215
+ npx @dotcms/create-app my-blog --framework nextjs --local
216
+
217
+ # Cloud instance
218
+ npx @dotcms/create-app my-blog \
219
+ --framework angular \
220
+ --url https://demo.dotcms.com \
221
+ --username admin@dotcms.com \
222
+ --password mypassword
223
+ ```
224
+
225
+ ### Debug Mode
226
+ ```sh
227
+ DEBUG=1 npx @dotcms/create-app my-blog --framework nextjs --local
228
+ ```
229
+
230
+ ---
231
+
232
+ ## 🔒 Security Notes
233
+
234
+ - Never commit API tokens or passwords to version control
235
+ - The CLI validates all inputs to prevent injection attacks
236
+ - Project names are sanitized to prevent path traversal
237
+ - Shell commands are properly escaped for cross-platform safety
238
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dotcms/create-app",
3
- "version": "1.2.3",
3
+ "version": "1.2.4-next.2",
4
4
  "type": "commonjs",
5
5
  "main": "./src/index.js",
6
6
  "types": "./src/index.d.ts",
@@ -23,4 +23,4 @@
23
23
  "tslib": "^2.3.0",
24
24
  "cfonts": "^3.3.1"
25
25
  }
26
- }
26
+ }
@@ -1,5 +1,5 @@
1
1
  import { type Result } from 'ts-results';
2
- import { FailedToGetDemoSiteIdentifierError, FailedToGetDotcmsTokenError, FailedToSetUpUVEConfig } from '../errors';
2
+ import { FailedToGetDemoSiteIdentifierError, FailedToSetUpUVEConfig } from '../errors';
3
3
  import type { DemoSiteResponse, GetUserTokenRequest, UVEConfigRequest } from '../types';
4
4
  export declare class DotCMSApi {
5
5
  private static defaultTokenApi;
@@ -9,7 +9,7 @@ export declare class DotCMSApi {
9
9
  static getAuthToken({ payload, url }: {
10
10
  payload: GetUserTokenRequest;
11
11
  url?: string;
12
- }): Promise<Result<string, FailedToGetDotcmsTokenError>>;
12
+ }): Promise<Result<string, string>>;
13
13
  /** Get demo site identifier */
14
14
  static getDemoSiteIdentifier({ siteName, authenticationToken, url }: {
15
15
  siteName: string;
package/src/api/index.js CHANGED
@@ -3,20 +3,45 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DotCMSApi = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
6
7
  const ts_results_1 = require("ts-results");
7
8
  const constants_1 = require("../constants");
8
9
  const errors_1 = require("../errors");
9
10
  class DotCMSApi {
10
11
  /** Get authentication token */
11
12
  static async getAuthToken({ payload, url }) {
13
+ const endpoint = url || this.defaultTokenApi;
12
14
  try {
13
- const endpoint = url || this.defaultTokenApi;
14
15
  const res = await axios_1.default.post(endpoint, payload);
15
16
  return (0, ts_results_1.Ok)(res.data.entity.token);
16
17
  }
17
18
  catch (err) {
18
- console.error('dotCMS failed to get token' + JSON.stringify(err));
19
- return (0, ts_results_1.Err)(new errors_1.FailedToGetDotcmsTokenError());
19
+ // Provide specific error messages based on error type
20
+ if (axios_1.default.isAxiosError(err)) {
21
+ if (err.response?.status === 401) {
22
+ return (0, ts_results_1.Err)(chalk_1.default.red('\n❌ Authentication failed\n\n') +
23
+ chalk_1.default.white('Invalid username or password.\n\n') +
24
+ chalk_1.default.yellow('Please check your credentials and try again:\n') +
25
+ chalk_1.default.white(' • Verify your username is correct\n') +
26
+ chalk_1.default.white(' • Ensure your password is correct\n') +
27
+ chalk_1.default.white(' • Check if your account is active\n'));
28
+ }
29
+ else if (err.code === 'ECONNREFUSED') {
30
+ return (0, ts_results_1.Err)(chalk_1.default.red('\n❌ Connection refused\n\n') +
31
+ chalk_1.default.white(`Could not connect to dotCMS at: ${endpoint}\n\n`) +
32
+ chalk_1.default.yellow('Please verify:\n') +
33
+ chalk_1.default.white(' • The URL is correct\n') +
34
+ chalk_1.default.white(' • The dotCMS instance is running\n') +
35
+ chalk_1.default.white(' • There are no firewall issues\n'));
36
+ }
37
+ else if (err.response) {
38
+ return (0, ts_results_1.Err)(chalk_1.default.red(`\n❌ Server error (${err.response.status})\n\n`) +
39
+ chalk_1.default.white('The dotCMS server returned an error.\n') +
40
+ chalk_1.default.gray(`Details: ${err.response.statusText || 'Unknown error'}\n`));
41
+ }
42
+ }
43
+ return (0, ts_results_1.Err)(chalk_1.default.red('\n❌ Failed to get authentication token\n\n') +
44
+ chalk_1.default.gray(err instanceof Error ? err.message : String(err)));
20
45
  }
21
46
  }
22
47
  /** Get demo site identifier */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/api/index.ts"],"names":[],"mappings":";;;;AAAA,0DAA0B;AAC1B,2CAAkD;AAElD,4CAAyF;AACzF,sCAImB;AASnB,MAAa,SAAS;IAKlB,+BAA+B;IAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EACtB,OAAO,EACP,GAAG,EAIN;QACG,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,IAAI,CAAuB,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtE,OAAO,IAAA,eAAE,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,OAAO,IAAA,gBAAG,EAAC,IAAI,oCAA2B,EAAE,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAC/B,QAAQ,EACR,mBAAmB,EACnB,GAAG,EAKN;QACG,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,QAAQ,CAAC;YAC7D,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,GAAG,CAAmB,QAAQ,EAAE;gBACpD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,mBAAmB,EAAE,EAAE;aAC9D,CAAC,CAAC;YACH,OAAO,IAAA,eAAE,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7E,OAAO,IAAA,gBAAG,EAAC,IAAI,2CAAkC,EAAE,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED,uBAAuB;IACvB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EACxB,OAAO,EACP,MAAM,EACN,mBAAmB,EACnB,GAAG,EAMN;QACG,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,eAAK,CAAC,IAAI,CAAoB,QAAQ,EAAE,OAAO,EAAE;gBAC/D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,mBAAmB,EAAE,EAAE;aAC9D,CAAC,CAAC;YACH,OAAO,IAAA,eAAE,EAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,OAAO,IAAA,gBAAG,EAAC,IAAI,+BAAsB,EAAE,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;;AAnEL,8BAoEC;AAnEkB,yBAAe,GAAG,4BAAgB,CAAC;AACnC,4BAAkB,GAAG,4BAAgB,CAAC;AACtC,6BAAmB,GAAG,iCAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/api/index.ts"],"names":[],"mappings":"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"}
package/src/asks.d.ts CHANGED
@@ -20,7 +20,7 @@ export declare function askDotcmsCloudUrl(): Promise<any>;
20
20
  */
21
21
  export declare function askUserNameForDotcmsCloud(): Promise<any>;
22
22
  /**
23
- * Ask user the ulsername of the dotCMS instance
23
+ * Ask user the password of the dotCMS instance
24
24
  */
25
25
  export declare function askPasswordForDotcmsCloud(): Promise<any>;
26
26
  /**
@@ -38,5 +38,10 @@ export declare function askCloudOrLocalInstance(): Promise<boolean>;
38
38
  * user enters: "."
39
39
  * projectName: "my-app"
40
40
  * final path becomes "./my-app"
41
+ *
42
+ * @remarks
43
+ * - Prevents nested directories when basePath already ends with projectName
44
+ * - Example: basePath="/tmp/my-app" + projectName="my-app" → "/tmp/my-app" (not "/tmp/my-app/my-app")
45
+ * - Handles both absolute and relative paths correctly
41
46
  */
42
47
  export declare function prepareDirectory(basePath: string, projectName: string): Promise<string>;
package/src/asks.js CHANGED
@@ -13,6 +13,7 @@ const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
13
13
  const inquirer_1 = tslib_1.__importDefault(require("inquirer"));
14
14
  const path_1 = tslib_1.__importDefault(require("path"));
15
15
  const constants_1 = require("./constants");
16
+ const validation_1 = require("./utils/validation");
16
17
  /**
17
18
  * Ask interactively if framework not specified
18
19
  */
@@ -37,7 +38,16 @@ async function askProjectName() {
37
38
  type: 'input',
38
39
  name: 'projectName',
39
40
  message: 'What is your project name ?',
40
- default: `my-dotcms-app`
41
+ default: `my-dotcms-app`,
42
+ validate: (input) => {
43
+ try {
44
+ (0, validation_1.validateProjectName)(input);
45
+ return true;
46
+ }
47
+ catch (error) {
48
+ return error instanceof Error ? error.message : String(error);
49
+ }
50
+ }
41
51
  }
42
52
  ]);
43
53
  return ans.projectName;
@@ -65,7 +75,16 @@ async function askDotcmsCloudUrl() {
65
75
  type: 'input',
66
76
  name: 'url',
67
77
  message: 'dotCMS instance URL:',
68
- default: `https://demo.dotcms.com`
78
+ default: `https://demo.dotcms.com`,
79
+ validate: (input) => {
80
+ try {
81
+ (0, validation_1.validateUrl)(input);
82
+ return true;
83
+ }
84
+ catch (error) {
85
+ return error instanceof Error ? error.message : String(error);
86
+ }
87
+ }
69
88
  }
70
89
  ]);
71
90
  return ans.url;
@@ -79,13 +98,19 @@ async function askUserNameForDotcmsCloud() {
79
98
  type: 'input',
80
99
  name: 'username',
81
100
  message: 'Username:',
82
- default: `admin@dotcms.com`
101
+ default: `admin@dotcms.com`,
102
+ validate: (input) => {
103
+ if (!input || input.trim() === '') {
104
+ return 'Username cannot be empty';
105
+ }
106
+ return true;
107
+ }
83
108
  }
84
109
  ]);
85
110
  return ans.username;
86
111
  }
87
112
  /**
88
- * Ask user the ulsername of the dotCMS instance
113
+ * Ask user the password of the dotCMS instance
89
114
  */
90
115
  async function askPasswordForDotcmsCloud() {
91
116
  const ans = await inquirer_1.default.prompt([
@@ -94,7 +119,13 @@ async function askPasswordForDotcmsCloud() {
94
119
  name: 'password',
95
120
  mask: '•',
96
121
  message: 'Password:',
97
- default: `admin`
122
+ default: `admin`,
123
+ validate: (input) => {
124
+ if (!input || input.trim() === '') {
125
+ return 'Password cannot be empty';
126
+ }
127
+ return true;
128
+ }
98
129
  }
99
130
  ]);
100
131
  return ans.password;
@@ -124,7 +155,7 @@ async function askCloudOrLocalInstance() {
124
155
  {
125
156
  type: 'select',
126
157
  name: 'isCloud',
127
- message: 'Do you have an exsisting dotCMS instance?',
158
+ message: 'Do you have an existing dotCMS instance?',
128
159
  choices: [
129
160
  { name: 'Yes - I have a dotCMS instance URL', value: true },
130
161
  { name: 'No - Spin up dotCMS locally with Docker', value: false }
@@ -140,9 +171,27 @@ async function askCloudOrLocalInstance() {
140
171
  * user enters: "."
141
172
  * projectName: "my-app"
142
173
  * final path becomes "./my-app"
174
+ *
175
+ * @remarks
176
+ * - Prevents nested directories when basePath already ends with projectName
177
+ * - Example: basePath="/tmp/my-app" + projectName="my-app" → "/tmp/my-app" (not "/tmp/my-app/my-app")
178
+ * - Handles both absolute and relative paths correctly
143
179
  */
144
180
  async function prepareDirectory(basePath, projectName) {
145
- const targetPath = path_1.default.resolve(basePath, projectName);
181
+ // Resolve basePath to absolute path for consistent comparison
182
+ const resolvedBasePath = path_1.default.resolve(basePath);
183
+ const basePathDirName = path_1.default.basename(resolvedBasePath);
184
+ // Check if basePath already ends with the project name
185
+ // This prevents nested directories like "/tmp/my-app/my-app"
186
+ let targetPath;
187
+ if (basePathDirName === projectName) {
188
+ // User specified full path including project name (e.g., "-d /tmp/my-app" with projectName="my-app")
189
+ targetPath = resolvedBasePath;
190
+ }
191
+ else {
192
+ // User specified parent directory (e.g., "-d /tmp" with projectName="my-app")
193
+ targetPath = path_1.default.resolve(resolvedBasePath, projectName);
194
+ }
146
195
  // If path doesn't exist → create
147
196
  if (!fs_extra_1.default.existsSync(targetPath)) {
148
197
  fs_extra_1.default.mkdirSync(targetPath, { recursive: true });
package/src/asks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"asks.js","sourceRoot":"","sources":["../../../../../libs/sdk/create-app/src/asks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asks.js","sourceRoot":"","sources":["../../../../../libs/sdk/create-app/src/asks.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,12 @@ export declare const DOTCMS_USER: {
4
4
  username: string;
5
5
  password: string;
6
6
  };
7
- export declare const DOTCMS_HEALTH_API = "http://localhost:8082/api/v1/probes/alive";
7
+ export declare const DOTCMS_HEALTH_API = "http://localhost:8082/api/v1/appconfiguration";
8
8
  export declare const DOTCMS_TOKEN_API = "http://localhost:8082/api/v1/authentication/api-token";
9
9
  export declare const DOTCMS_EMA_CONFIG_API = "http://localhost:8082/api/v1/apps/dotema-config-v2/";
10
10
  export declare const DOTCMS_DEMO_SITE = "http://localhost:8082/api/v1/site/";
11
+ export declare const CLOUD_HEALTH_CHECK_RETRIES = 5;
12
+ export declare const LOCAL_HEALTH_CHECK_RETRIES = 60;
11
13
  export declare const FRAMEWORKS: SupportedFrontEndFrameworks[];
12
14
  export declare const FRAMEWORKS_CHOICES: FrameworkChoices[];
13
15
  export declare const NEXTJS_DEPENDENCIES: string[];
@@ -1,16 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ANGULAR_SSR_DEPENDENCIES_DEV = exports.ANGULAR_SSR_DEPENDENCIES = exports.ANGULAR_DEPENDENCIES_DEV = exports.ANGULAR_DEPENDENCIES = exports.ASTRO_DEPENDENCIES_DEV = exports.ASTRO_DEPENDENCIES = exports.NEXTJS_DEPENDENCIES_DEV = exports.NEXTJS_DEPENDENCIES = exports.FRAMEWORKS_CHOICES = exports.FRAMEWORKS = exports.DOTCMS_DEMO_SITE = exports.DOTCMS_EMA_CONFIG_API = exports.DOTCMS_TOKEN_API = exports.DOTCMS_HEALTH_API = exports.DOTCMS_USER = exports.DOTCMS_HOST = void 0;
3
+ exports.ANGULAR_SSR_DEPENDENCIES_DEV = exports.ANGULAR_SSR_DEPENDENCIES = exports.ANGULAR_DEPENDENCIES_DEV = exports.ANGULAR_DEPENDENCIES = exports.ASTRO_DEPENDENCIES_DEV = exports.ASTRO_DEPENDENCIES = exports.NEXTJS_DEPENDENCIES_DEV = exports.NEXTJS_DEPENDENCIES = exports.FRAMEWORKS_CHOICES = exports.FRAMEWORKS = exports.LOCAL_HEALTH_CHECK_RETRIES = exports.CLOUD_HEALTH_CHECK_RETRIES = exports.DOTCMS_DEMO_SITE = exports.DOTCMS_EMA_CONFIG_API = exports.DOTCMS_TOKEN_API = exports.DOTCMS_HEALTH_API = exports.DOTCMS_USER = exports.DOTCMS_HOST = void 0;
4
4
  exports.DOTCMS_HOST = 'http://localhost:8082';
5
5
  exports.DOTCMS_USER = {
6
6
  username: 'admin@dotcms.com',
7
7
  password: 'admin'
8
8
  };
9
9
  // USED APIS
10
- exports.DOTCMS_HEALTH_API = `${exports.DOTCMS_HOST}/api/v1/probes/alive`;
10
+ // Note: Using /appconfiguration instead of /probes/alive because the probe endpoints
11
+ // have IP ACL restrictions that block requests from Docker host. See GitHub issue #34509
12
+ exports.DOTCMS_HEALTH_API = `${exports.DOTCMS_HOST}/api/v1/appconfiguration`;
11
13
  exports.DOTCMS_TOKEN_API = `${exports.DOTCMS_HOST}/api/v1/authentication/api-token`;
12
14
  exports.DOTCMS_EMA_CONFIG_API = `${exports.DOTCMS_HOST}/api/v1/apps/dotema-config-v2/`;
13
15
  exports.DOTCMS_DEMO_SITE = `${exports.DOTCMS_HOST}/api/v1/site/`;
16
+ // Health check configuration
17
+ exports.CLOUD_HEALTH_CHECK_RETRIES = 5; // Retries for cloud instances (faster expected startup)
18
+ exports.LOCAL_HEALTH_CHECK_RETRIES = 60; // Retries for local Docker (slower startup)
14
19
  // App constants
15
20
  exports.FRAMEWORKS = [
16
21
  'nextjs',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/constants/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/sdk/create-app/src/constants/index.ts"],"names":[],"mappings":";;;AAEa,QAAA,WAAW,GAAG,uBAAuB,CAAC;AACtC,QAAA,WAAW,GAAG;IACvB,QAAQ,EAAE,kBAAkB;IAC5B,QAAQ,EAAE,OAAO;CACpB,CAAC;AAEF,YAAY;AACZ,qFAAqF;AACrF,yFAAyF;AAC5E,QAAA,iBAAiB,GAAG,GAAG,mBAAW,0BAA0B,CAAC;AAC7D,QAAA,gBAAgB,GAAG,GAAG,mBAAW,kCAAkC,CAAC;AACpE,QAAA,qBAAqB,GAAG,GAAG,mBAAW,gCAAgC,CAAC;AACvE,QAAA,gBAAgB,GAAG,GAAG,mBAAW,eAAe,CAAC;AAE9D,6BAA6B;AAChB,QAAA,0BAA0B,GAAG,CAAC,CAAC,CAAC,wDAAwD;AACxF,QAAA,0BAA0B,GAAG,EAAE,CAAC,CAAC,4CAA4C;AAE1F,gBAAgB;AACH,QAAA,UAAU,GAAkC;IACrD,QAAQ;IACR,OAAO;IACP,SAAS;IACT,aAAa;CAChB,CAAC;AAEW,QAAA,kBAAkB,GAAuB;IAClD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IACjC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACrC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,EAAE;CAClD,CAAC;AAEW,QAAA,mBAAmB,GAAa;IACzC,gBAAgB;IAChB,qBAAqB;IACrB,eAAe;IACf,eAAe;IACf,aAAa;IACb,wBAAwB;IACxB,MAAM;IACN,OAAO;IACP,WAAW;CACd,CAAC;AAEW,QAAA,uBAAuB,GAAa;IAC7C,sBAAsB;IACtB,yBAAyB;IACzB,QAAQ;IACR,oBAAoB;IACpB,SAAS;IACT,UAAU;IACV,aAAa;CAChB,CAAC;AAEW,QAAA,kBAAkB,GAAa;IACxC,gBAAgB;IAChB,gBAAgB;IAChB,oBAAoB;IACpB,iBAAiB;IACjB,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,aAAa;IACb,yBAAyB;IACzB,mBAAmB;IACnB,wBAAwB;IACxB,cAAc;IACd,kBAAkB;IAClB,OAAO;IACP,QAAQ;IACR,OAAO;IACP,WAAW;IACX,aAAa;IACb,YAAY;CACf,CAAC;AAEW,QAAA,sBAAsB,GAAa;IAC5C,aAAa;IACb,UAAU;IACV,uBAAuB;CAC1B,CAAC;AAEW,QAAA,oBAAoB,GAAa;IAC1C,qBAAqB;IACrB,iBAAiB;IACjB,mBAAmB;IACnB,eAAe;IACf,gBAAgB;IAChB,2BAA2B;IAC3B,mCAAmC;IACnC,iBAAiB;IACjB,iBAAiB;IACjB,gBAAgB;IAChB,eAAe;IACf,aAAa;IACb,MAAM;IACN,OAAO;IACP,SAAS;CACZ,CAAC;AAEW,QAAA,wBAAwB,GAAa;IAC9C,gBAAgB;IAChB,cAAc;IACd,uBAAuB;IACvB,yBAAyB;IACzB,gBAAgB;IAChB,cAAc;IACd,cAAc;IACd,OAAO;IACP,uBAAuB;IACvB,gBAAgB;IAChB,eAAe;IACf,6BAA6B;IAC7B,SAAS;IACT,aAAa;IACb,YAAY;CACf,CAAC;AAEW,QAAA,wBAAwB,GAAa;IAC9C,iBAAiB;IACjB,mBAAmB;IACnB,eAAe;IACf,gBAAgB;IAChB,2BAA2B;IAC3B,0BAA0B;IAC1B,iBAAiB;IACjB,cAAc;IACd,iBAAiB;IACjB,gBAAgB;IAChB,eAAe;IACf,aAAa;IACb,sBAAsB;IACtB,eAAe;IACf,QAAQ;IACR,SAAS;IACT,SAAS;IACT,MAAM;IACN,aAAa;IACb,OAAO;IACP,SAAS;CACZ,CAAC;AAEW,QAAA,4BAA4B,GAAa;IAClD,gBAAgB;IAChB,cAAc;IACd,uBAAuB;IACvB,yBAAyB;IACzB,gBAAgB;IAChB,gBAAgB;IAChB,aAAa;IACb,cAAc;IACd,OAAO;IACP,uBAAuB;IACvB,gBAAgB;IAChB,eAAe;IACf,6BAA6B;IAC7B,YAAY;CACf,CAAC"}