@hubspot/cli 6.2.2-experimental.2 → 6.3.0-experimental.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.
- package/bin/cli.js +21 -2
- package/commands/accounts/clean.js +8 -5
- package/commands/accounts/info.js +6 -6
- package/commands/accounts/list.js +14 -10
- package/commands/accounts/remove.js +1 -1
- package/commands/accounts/rename.js +3 -4
- package/commands/auth.js +11 -7
- package/commands/cms/lighthouseScore.js +19 -19
- package/commands/config/set.js +4 -5
- package/commands/create.js +3 -2
- package/commands/customObject/create.js +4 -6
- package/commands/customObject/schema/create.js +8 -9
- package/commands/customObject/schema/delete.js +3 -5
- package/commands/customObject/schema/fetch-all.js +3 -4
- package/commands/customObject/schema/fetch.js +4 -6
- package/commands/customObject/schema/list.js +3 -4
- package/commands/customObject/schema/update.js +8 -9
- package/commands/fetch.js +4 -4
- package/commands/filemanager/fetch.js +4 -5
- package/commands/filemanager/upload.js +9 -10
- package/commands/functions/deploy.js +12 -10
- package/commands/functions/list.js +5 -5
- package/commands/functions/server.js +4 -5
- package/commands/hubdb/clear.js +5 -6
- package/commands/hubdb/create.js +5 -6
- package/commands/hubdb/delete.js +5 -6
- package/commands/hubdb/fetch.js +4 -5
- package/commands/init.js +26 -8
- package/commands/lint.js +5 -5
- package/commands/list.js +4 -5
- package/commands/logs.js +4 -5
- package/commands/module/marketplace-validate.js +6 -7
- package/commands/mv.js +7 -8
- package/commands/open.js +7 -8
- package/commands/project/add.js +2 -3
- package/commands/project/cloneApp.js +14 -14
- package/commands/project/create.js +3 -3
- package/commands/project/deploy.js +15 -12
- package/commands/project/dev.js +13 -13
- package/commands/project/download.js +11 -9
- package/commands/project/listBuilds.js +10 -8
- package/commands/project/logs.js +5 -5
- package/commands/project/migrateApp.js +18 -18
- package/commands/project/open.js +6 -7
- package/commands/project/upload.js +12 -10
- package/commands/project/watch.js +9 -10
- package/commands/remove.js +10 -8
- package/commands/sandbox/create.js +8 -9
- package/commands/sandbox/delete.js +11 -9
- package/commands/secrets/addSecret.js +6 -7
- package/commands/secrets/deleteSecret.js +6 -7
- package/commands/secrets/listSecrets.js +6 -6
- package/commands/secrets/updateSecret.js +6 -7
- package/commands/theme/marketplace-validate.js +6 -7
- package/commands/theme/preview.js +5 -6
- package/commands/upload.js +18 -15
- package/commands/watch.js +9 -10
- package/lang/en.lyaml +3 -0
- package/lib/buildAccount.js +3 -1
- package/lib/commonOpts.d.ts +9 -1
- package/lib/commonOpts.js +14 -12
- package/lib/developerTestAccounts.js +8 -5
- package/lib/oauth.js +3 -1
- package/lib/prompts/accountsPrompt.js +8 -4
- package/lib/prompts/projectDevTargetAccountPrompt.js +3 -2
- package/lib/prompts/sandboxesPrompt.js +10 -7
- package/lib/prompts/setAsDefaultAccountPrompt.js +4 -2
- package/lib/sandboxSync.js +5 -2
- package/lib/sandboxes.js +12 -7
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
// @ts-nocheck
|
|
4
4
|
const path = require('path');
|
|
5
|
-
const { addAccountOptions, addConfigOptions,
|
|
5
|
+
const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
|
|
6
6
|
const { trackCommandUsage, trackCommandMetadataUsage, } = require('../../lib/usageTracking');
|
|
7
7
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
8
8
|
const { createProjectPrompt, } = require('../../lib/prompts/createProjectPrompt');
|
|
@@ -30,10 +30,10 @@ exports.command = 'migrate-app';
|
|
|
30
30
|
exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
|
|
31
31
|
exports.handler = async (options) => {
|
|
32
32
|
await loadAndValidateOptions(options);
|
|
33
|
-
const
|
|
34
|
-
const accountConfig = getAccountConfig(
|
|
35
|
-
const accountName = uiAccountDescription(
|
|
36
|
-
trackCommandUsage('migrate-app', {},
|
|
33
|
+
const { derivedAccountId } = options;
|
|
34
|
+
const accountConfig = getAccountConfig(derivedAccountId);
|
|
35
|
+
const accountName = uiAccountDescription(derivedAccountId);
|
|
36
|
+
trackCommandUsage('migrate-app', {}, derivedAccountId);
|
|
37
37
|
logger.log('');
|
|
38
38
|
logger.log(uiBetaTag(i18n(`${i18nKey}.header.text`), false));
|
|
39
39
|
logger.log(uiLink(i18n(`${i18nKey}.header.link`), 'https://developers.hubspot.com/docs/platform/migrate-a-public-app-to-projects'));
|
|
@@ -51,12 +51,12 @@ exports.handler = async (options) => {
|
|
|
51
51
|
const { appId } = 'appId' in options
|
|
52
52
|
? options
|
|
53
53
|
: await selectPublicAppPrompt({
|
|
54
|
-
accountId,
|
|
54
|
+
accountId: derivedAccountId,
|
|
55
55
|
accountName,
|
|
56
56
|
isMigratingApp: true,
|
|
57
57
|
});
|
|
58
58
|
try {
|
|
59
|
-
const { data: selectedApp } = await fetchPublicAppMetadata(appId,
|
|
59
|
+
const { data: selectedApp } = await fetchPublicAppMetadata(appId, derivedAccountId);
|
|
60
60
|
// preventProjectMigrations returns true if we have not added app to allowlist config.
|
|
61
61
|
// listingInfo will only exist for marketplace apps
|
|
62
62
|
const preventProjectMigrations = selectedApp.preventProjectMigrations;
|
|
@@ -67,7 +67,7 @@ exports.handler = async (options) => {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
catch (error) {
|
|
70
|
-
logError(error, new ApiErrorContext({ accountId }));
|
|
70
|
+
logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
|
|
71
71
|
process.exit(EXIT_CODES.ERROR);
|
|
72
72
|
}
|
|
73
73
|
let projectName;
|
|
@@ -76,7 +76,7 @@ exports.handler = async (options) => {
|
|
|
76
76
|
const { name, location } = await createProjectPrompt('', options, true);
|
|
77
77
|
projectName = options.name || name;
|
|
78
78
|
projectLocation = options.location || location;
|
|
79
|
-
const { projectExists } = await ensureProjectExists(
|
|
79
|
+
const { projectExists } = await ensureProjectExists(derivedAccountId, projectName, {
|
|
80
80
|
allowCreate: false,
|
|
81
81
|
noLogs: true,
|
|
82
82
|
});
|
|
@@ -88,7 +88,7 @@ exports.handler = async (options) => {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
catch (error) {
|
|
91
|
-
logError(error, new ApiErrorContext({ accountId }));
|
|
91
|
+
logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
|
|
92
92
|
process.exit(EXIT_CODES.ERROR);
|
|
93
93
|
}
|
|
94
94
|
logger.log('');
|
|
@@ -125,17 +125,17 @@ exports.handler = async (options) => {
|
|
|
125
125
|
process.exit(EXIT_CODES.SUCCESS);
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
|
-
const { data: migrateResponse } = await migrateApp(
|
|
128
|
+
const { data: migrateResponse } = await migrateApp(derivedAccountId, appId, projectName);
|
|
129
129
|
const { id } = migrateResponse;
|
|
130
|
-
const pollResponse = await poll(checkMigrationStatus,
|
|
130
|
+
const pollResponse = await poll(checkMigrationStatus, derivedAccountId, id);
|
|
131
131
|
const { status, project } = pollResponse;
|
|
132
132
|
if (status === 'SUCCESS') {
|
|
133
133
|
const absoluteDestPath = path.resolve(getCwd(), projectLocation);
|
|
134
|
-
const { env } =
|
|
134
|
+
const { env } = accountConfig;
|
|
135
135
|
const baseUrl = getHubSpotWebsiteOrigin(env);
|
|
136
|
-
const { data: zippedProject } = await downloadProject(
|
|
136
|
+
const { data: zippedProject } = await downloadProject(derivedAccountId, projectName, 1);
|
|
137
137
|
await extractZipArchive(zippedProject, sanitizeFileName(projectName), path.resolve(absoluteDestPath), { includesRootDir: true, hideLogs: true });
|
|
138
|
-
trackCommandMetadataUsage('migrate-app', { type: projectName, assetType: appId, successful: status },
|
|
138
|
+
trackCommandMetadataUsage('migrate-app', { type: projectName, assetType: appId, successful: status }, derivedAccountId);
|
|
139
139
|
SpinniesManager.succeed('migrateApp', {
|
|
140
140
|
text: i18n(`${i18nKey}.migrationStatus.done`),
|
|
141
141
|
succeedColor: 'white',
|
|
@@ -144,12 +144,12 @@ exports.handler = async (options) => {
|
|
|
144
144
|
uiLine();
|
|
145
145
|
logger.success(i18n(`${i18nKey}.migrationStatus.success`));
|
|
146
146
|
logger.log('');
|
|
147
|
-
logger.log(uiLink(i18n(`${i18nKey}.projectDetailsLink`), `${baseUrl}/developer-projects/${
|
|
147
|
+
logger.log(uiLink(i18n(`${i18nKey}.projectDetailsLink`), `${baseUrl}/developer-projects/${derivedAccountId}/project/${encodeURIComponent(project.name)}`));
|
|
148
148
|
process.exit(EXIT_CODES.SUCCESS);
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
catch (error) {
|
|
152
|
-
trackCommandMetadataUsage('migrate-app', { projectName, appId, status: 'FAILURE', error },
|
|
152
|
+
trackCommandMetadataUsage('migrate-app', { projectName, appId, status: 'FAILURE', error }, derivedAccountId);
|
|
153
153
|
SpinniesManager.fail('migrateApp', {
|
|
154
154
|
text: i18n(`${i18nKey}.migrationStatus.failure`),
|
|
155
155
|
failColor: 'white',
|
|
@@ -158,7 +158,7 @@ exports.handler = async (options) => {
|
|
|
158
158
|
error.errors.forEach(logError);
|
|
159
159
|
}
|
|
160
160
|
else {
|
|
161
|
-
logError(error, new ApiErrorContext({ accountId }));
|
|
161
|
+
logError(error, new ApiErrorContext({ accountId: derivedAccountId }));
|
|
162
162
|
}
|
|
163
163
|
process.exit(EXIT_CODES.ERROR);
|
|
164
164
|
}
|
package/commands/project/open.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
// @ts-nocheck
|
|
4
4
|
const open = require('open');
|
|
5
|
-
const { addAccountOptions, addConfigOptions,
|
|
5
|
+
const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, addTestingOptions, } = require('../../lib/commonOpts');
|
|
6
6
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
7
7
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
8
8
|
const { i18n } = require('../../lib/lang');
|
|
@@ -16,13 +16,12 @@ exports.command = 'open [--project]';
|
|
|
16
16
|
exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
|
|
17
17
|
exports.handler = async (options) => {
|
|
18
18
|
await loadAndValidateOptions(options);
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
trackCommandUsage('project-open', null, accountId);
|
|
19
|
+
const { project, derivedAccountId } = options;
|
|
20
|
+
trackCommandUsage('project-open', null, derivedAccountId);
|
|
22
21
|
const { projectConfig } = await getProjectConfig();
|
|
23
22
|
let projectName = project;
|
|
24
23
|
if (projectName) {
|
|
25
|
-
const { projectExists } = await ensureProjectExists(
|
|
24
|
+
const { projectExists } = await ensureProjectExists(derivedAccountId, projectName, {
|
|
26
25
|
allowCreate: false,
|
|
27
26
|
});
|
|
28
27
|
if (!projectExists) {
|
|
@@ -33,13 +32,13 @@ exports.handler = async (options) => {
|
|
|
33
32
|
projectName = projectConfig.name;
|
|
34
33
|
}
|
|
35
34
|
else if (!projectName && !projectConfig) {
|
|
36
|
-
const namePrompt = await projectNamePrompt(
|
|
35
|
+
const namePrompt = await projectNamePrompt(derivedAccountId);
|
|
37
36
|
if (!namePrompt.projectName) {
|
|
38
37
|
process.exit(EXIT_CODES.ERROR);
|
|
39
38
|
}
|
|
40
39
|
projectName = namePrompt.projectName;
|
|
41
40
|
}
|
|
42
|
-
const url = getProjectDetailUrl(projectName,
|
|
41
|
+
const url = getProjectDetailUrl(projectName, derivedAccountId);
|
|
43
42
|
open(url, { url: true });
|
|
44
43
|
logger.success(i18n(`${i18nKey}.success`, { projectName }));
|
|
45
44
|
process.exit(EXIT_CODES.SUCCESS);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
// @ts-nocheck
|
|
4
|
-
const { addAccountOptions, addConfigOptions,
|
|
4
|
+
const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
|
|
5
5
|
const chalk = require('chalk');
|
|
6
6
|
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
7
7
|
const { uiBetaTag, uiCommandReference } = require('../../lib/ui');
|
|
@@ -19,19 +19,18 @@ exports.command = 'upload [path] [--forceCreate] [--message]';
|
|
|
19
19
|
exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
|
|
20
20
|
exports.handler = async (options) => {
|
|
21
21
|
await loadAndValidateOptions(options);
|
|
22
|
-
const { forceCreate, path: projectPath, message } = options;
|
|
23
|
-
const
|
|
24
|
-
const accountConfig = getAccountConfig(accountId);
|
|
22
|
+
const { forceCreate, path: projectPath, message, derivedAccountId } = options;
|
|
23
|
+
const accountConfig = getAccountConfig(derivedAccountId);
|
|
25
24
|
const accountType = accountConfig && accountConfig.accountType;
|
|
26
|
-
trackCommandUsage('project-upload', { type: accountType },
|
|
25
|
+
trackCommandUsage('project-upload', { type: accountType }, derivedAccountId);
|
|
27
26
|
const { projectConfig, projectDir } = await getProjectConfig(projectPath);
|
|
28
27
|
validateProjectConfig(projectConfig, projectDir);
|
|
29
|
-
await ensureProjectExists(
|
|
28
|
+
await ensureProjectExists(derivedAccountId, projectConfig.name, {
|
|
30
29
|
forceCreate,
|
|
31
30
|
uploadCommand: true,
|
|
32
31
|
});
|
|
33
32
|
try {
|
|
34
|
-
const result = await handleProjectUpload(
|
|
33
|
+
const result = await handleProjectUpload(derivedAccountId, projectConfig, projectDir, pollProjectBuildAndDeploy, message);
|
|
35
34
|
if (result.uploadError) {
|
|
36
35
|
if (isSpecifiedError(result.uploadError, {
|
|
37
36
|
subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED,
|
|
@@ -42,7 +41,7 @@ exports.handler = async (options) => {
|
|
|
42
41
|
}
|
|
43
42
|
else {
|
|
44
43
|
logError(result.uploadError, new ApiErrorContext({
|
|
45
|
-
accountId,
|
|
44
|
+
accountId: derivedAccountId,
|
|
46
45
|
request: 'project upload',
|
|
47
46
|
}));
|
|
48
47
|
}
|
|
@@ -56,12 +55,15 @@ exports.handler = async (options) => {
|
|
|
56
55
|
deployCommand: uiCommandReference(`hs project deploy --build=${result.buildId}`),
|
|
57
56
|
}));
|
|
58
57
|
logFeedbackMessage(result.buildId);
|
|
59
|
-
await displayWarnLogs(
|
|
58
|
+
await displayWarnLogs(derivedAccountId, projectConfig.name, result.buildId);
|
|
60
59
|
process.exit(EXIT_CODES.SUCCESS);
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
catch (e) {
|
|
64
|
-
logError(e, new ApiErrorContext({
|
|
63
|
+
logError(e, new ApiErrorContext({
|
|
64
|
+
accountId: derivedAccountId,
|
|
65
|
+
request: 'project upload',
|
|
66
|
+
}));
|
|
65
67
|
process.exit(EXIT_CODES.ERROR);
|
|
66
68
|
}
|
|
67
69
|
};
|
|
@@ -6,7 +6,7 @@ const { createWatcher } = require('../../lib/projectsWatch');
|
|
|
6
6
|
const { logError, ApiErrorContext } = require('../../lib/errorHandlers/index');
|
|
7
7
|
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
8
8
|
const { PROJECT_ERROR_TYPES } = require('../../lib/constants');
|
|
9
|
-
const { addAccountOptions, addConfigOptions,
|
|
9
|
+
const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
|
|
10
10
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
11
11
|
const { uiBetaTag } = require('../../lib/ui');
|
|
12
12
|
const { ensureProjectExists, getProjectConfig, handleProjectUpload, pollBuildStatus, pollDeployStatus, validateProjectConfig, logFeedbackMessage, } = require('../../lib/projects');
|
|
@@ -58,21 +58,20 @@ const handleUserInput = (accountId, projectName, currentBuildId) => {
|
|
|
58
58
|
};
|
|
59
59
|
exports.handler = async (options) => {
|
|
60
60
|
await loadAndValidateOptions(options);
|
|
61
|
-
const { initialUpload, path: projectPath } = options;
|
|
62
|
-
|
|
63
|
-
trackCommandUsage('project-watch', null, accountId);
|
|
61
|
+
const { initialUpload, path: projectPath, derivedAccountId } = options;
|
|
62
|
+
trackCommandUsage('project-watch', null, derivedAccountId);
|
|
64
63
|
const { projectConfig, projectDir } = await getProjectConfig(projectPath);
|
|
65
64
|
validateProjectConfig(projectConfig, projectDir);
|
|
66
|
-
await ensureProjectExists(
|
|
65
|
+
await ensureProjectExists(derivedAccountId, projectConfig.name);
|
|
67
66
|
try {
|
|
68
|
-
const { data: { results: builds }, } = await fetchProjectBuilds(
|
|
67
|
+
const { data: { results: builds }, } = await fetchProjectBuilds(derivedAccountId, projectConfig.name, options);
|
|
69
68
|
const hasNoBuilds = !builds || !builds.length;
|
|
70
69
|
const startWatching = async () => {
|
|
71
|
-
await createWatcher(
|
|
70
|
+
await createWatcher(derivedAccountId, projectConfig, projectDir, handleBuildStatus, handleUserInput);
|
|
72
71
|
};
|
|
73
72
|
// Upload all files if no build exists for this project yet
|
|
74
73
|
if (initialUpload || hasNoBuilds) {
|
|
75
|
-
const result = await handleProjectUpload(
|
|
74
|
+
const result = await handleProjectUpload(derivedAccountId, projectConfig, projectDir, startWatching);
|
|
76
75
|
if (result.uploadError) {
|
|
77
76
|
if (isSpecifiedError(result.uploadError, {
|
|
78
77
|
subCategory: PROJECT_ERROR_TYPES.PROJECT_LOCKED,
|
|
@@ -83,7 +82,7 @@ exports.handler = async (options) => {
|
|
|
83
82
|
}
|
|
84
83
|
else {
|
|
85
84
|
logError(result.uploadError, new ApiErrorContext({
|
|
86
|
-
accountId,
|
|
85
|
+
accountId: derivedAccountId,
|
|
87
86
|
request: 'project upload',
|
|
88
87
|
}));
|
|
89
88
|
}
|
|
@@ -95,7 +94,7 @@ exports.handler = async (options) => {
|
|
|
95
94
|
}
|
|
96
95
|
}
|
|
97
96
|
catch (e) {
|
|
98
|
-
logError(e, new ApiErrorContext({ accountId }));
|
|
97
|
+
logError(e, new ApiErrorContext({ accountId: derivedAccountId }));
|
|
99
98
|
}
|
|
100
99
|
};
|
|
101
100
|
exports.builder = yargs => {
|
package/commands/remove.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
const { deleteFile } = require('@hubspot/local-dev-lib/api/fileMapper');
|
|
5
5
|
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
6
6
|
const { logError, ApiErrorContext } = require('../lib/errorHandlers/index');
|
|
7
|
-
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions,
|
|
7
|
+
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../lib/commonOpts');
|
|
8
8
|
const { loadAndValidateOptions } = require('../lib/validation');
|
|
9
9
|
const { trackCommandUsage } = require('../lib/usageTracking');
|
|
10
10
|
const { i18n } = require('../lib/lang');
|
|
@@ -12,18 +12,20 @@ const i18nKey = 'commands.remove';
|
|
|
12
12
|
exports.command = 'remove <path>';
|
|
13
13
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
14
14
|
exports.handler = async (options) => {
|
|
15
|
-
const { path: hsPath } = options;
|
|
15
|
+
const { path: hsPath, derivedAccountId } = options;
|
|
16
16
|
await loadAndValidateOptions(options);
|
|
17
|
-
|
|
18
|
-
trackCommandUsage('remove', null, accountId);
|
|
17
|
+
trackCommandUsage('remove', null, derivedAccountId);
|
|
19
18
|
try {
|
|
20
|
-
await deleteFile(
|
|
21
|
-
logger.log(i18n(`${i18nKey}.deleted`, { accountId, path: hsPath }));
|
|
19
|
+
await deleteFile(derivedAccountId, hsPath);
|
|
20
|
+
logger.log(i18n(`${i18nKey}.deleted`, { accountId: derivedAccountId, path: hsPath }));
|
|
22
21
|
}
|
|
23
22
|
catch (error) {
|
|
24
|
-
logger.error(i18n(`${i18nKey}.errors.deleteFailed`, {
|
|
23
|
+
logger.error(i18n(`${i18nKey}.errors.deleteFailed`, {
|
|
24
|
+
accountId: derivedAccountId,
|
|
25
|
+
path: hsPath,
|
|
26
|
+
}));
|
|
25
27
|
logError(error, new ApiErrorContext({
|
|
26
|
-
accountId,
|
|
28
|
+
accountId: derivedAccountId,
|
|
27
29
|
request: hsPath,
|
|
28
30
|
}));
|
|
29
31
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
// @ts-nocheck
|
|
4
|
-
const { addAccountOptions, addConfigOptions,
|
|
4
|
+
const { addAccountOptions, addConfigOptions, addUseEnvironmentOptions, addTestingOptions, } = require('../../lib/commonOpts');
|
|
5
5
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
6
6
|
const { i18n } = require('../../lib/lang');
|
|
7
7
|
const { EXIT_CODES } = require('../../lib/enums/exitCodes');
|
|
@@ -25,11 +25,10 @@ exports.command = 'create [--name] [--type]';
|
|
|
25
25
|
exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
|
|
26
26
|
exports.handler = async (options) => {
|
|
27
27
|
await loadAndValidateOptions(options);
|
|
28
|
-
const { name, type, force } = options;
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
trackCommandUsage('sandbox-create', null, accountId);
|
|
28
|
+
const { name, type, force, derivedAccountId } = options;
|
|
29
|
+
const accountConfig = getAccountConfig(derivedAccountId);
|
|
30
|
+
const env = getValidEnv(getEnv(derivedAccountId));
|
|
31
|
+
trackCommandUsage('sandbox-create', null, derivedAccountId);
|
|
33
32
|
// Default account is not a production portal
|
|
34
33
|
if (accountConfig.accountType &&
|
|
35
34
|
accountConfig.accountType !== HUBSPOT_ACCOUNT_TYPES.STANDARD) {
|
|
@@ -60,12 +59,12 @@ exports.handler = async (options) => {
|
|
|
60
59
|
catch (err) {
|
|
61
60
|
if (isMissingScopeError(err)) {
|
|
62
61
|
logger.error(i18n('lib.sandbox.create.failure.scopes.message', {
|
|
63
|
-
accountName: accountConfig.name ||
|
|
62
|
+
accountName: accountConfig.name || derivedAccountId,
|
|
64
63
|
}));
|
|
65
64
|
const websiteOrigin = getHubSpotWebsiteOrigin(env);
|
|
66
|
-
const url = `${websiteOrigin}/personal-access-key/${
|
|
65
|
+
const url = `${websiteOrigin}/personal-access-key/${derivedAccountId}`;
|
|
67
66
|
logger.info(i18n('lib.sandbox.create.failure.scopes.instructions', {
|
|
68
|
-
accountName: accountConfig.name ||
|
|
67
|
+
accountName: accountConfig.name || derivedAccountId,
|
|
69
68
|
url,
|
|
70
69
|
}));
|
|
71
70
|
}
|
|
@@ -10,23 +10,24 @@ const { isSpecifiedError } = require('@hubspot/local-dev-lib/errors/index');
|
|
|
10
10
|
const { deleteSandbox } = require('@hubspot/local-dev-lib/api/sandboxHubs');
|
|
11
11
|
const { i18n } = require('../../lib/lang');
|
|
12
12
|
const { deleteSandboxPrompt } = require('../../lib/prompts/sandboxesPrompt');
|
|
13
|
-
const { getConfig, getEnv, removeSandboxAccountFromConfig, updateDefaultAccount, } = require('@hubspot/local-dev-lib/config');
|
|
13
|
+
const { getConfig, getEnv, removeSandboxAccountFromConfig, updateDefaultAccount, getConfigDefaultAccount, getConfigAccounts, } = require('@hubspot/local-dev-lib/config');
|
|
14
|
+
const { getAccountIdentifier, } = require('@hubspot/local-dev-lib/config/getAccountIdentifier');
|
|
14
15
|
const { selectAccountFromConfig } = require('../../lib/prompts/accountsPrompt');
|
|
15
16
|
const { EXIT_CODES } = require('../../lib/enums/exitCodes');
|
|
16
17
|
const { promptUser } = require('../../lib/prompts/promptUtils');
|
|
18
|
+
const { uiAccountDescription, uiBetaTag } = require('../../lib/ui');
|
|
17
19
|
const { getHubSpotWebsiteOrigin } = require('@hubspot/local-dev-lib/urls');
|
|
18
20
|
const { getValidEnv } = require('@hubspot/local-dev-lib/environment');
|
|
19
|
-
const { uiAccountDescription, uiBetaTag } = require('../../lib/ui');
|
|
20
21
|
const i18nKey = 'commands.sandbox.subcommands.delete';
|
|
21
22
|
exports.command = 'delete [--account]';
|
|
22
23
|
exports.describe = exports.describe = uiBetaTag(i18n(`${i18nKey}.describe`), false);
|
|
23
24
|
exports.handler = async (options) => {
|
|
24
25
|
await loadAndValidateOptions(options, false);
|
|
25
|
-
const {
|
|
26
|
+
const { providedAccountId, force } = options;
|
|
26
27
|
const config = getConfig();
|
|
27
28
|
trackCommandUsage('sandbox-delete', null);
|
|
28
29
|
let accountPrompt;
|
|
29
|
-
if (!
|
|
30
|
+
if (!providedAccountId) {
|
|
30
31
|
if (!force) {
|
|
31
32
|
accountPrompt = await deleteSandboxPrompt(config);
|
|
32
33
|
}
|
|
@@ -43,13 +44,14 @@ exports.handler = async (options) => {
|
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
const sandboxAccountId = getAccountId({
|
|
46
|
-
account:
|
|
47
|
+
account: providedAccountId || accountPrompt.account,
|
|
47
48
|
});
|
|
48
|
-
const isDefaultAccount = sandboxAccountId === getAccountId(config
|
|
49
|
+
const isDefaultAccount = sandboxAccountId === getAccountId(getConfigDefaultAccount(config));
|
|
49
50
|
const baseUrl = getHubSpotWebsiteOrigin(getValidEnv(getEnv(sandboxAccountId)));
|
|
50
51
|
let parentAccountId;
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
const accountsList = getConfigAccounts();
|
|
53
|
+
for (const portal of accountsList) {
|
|
54
|
+
if (getAccountIdentifier(portal) === sandboxAccountId) {
|
|
53
55
|
if (portal.parentAccountId) {
|
|
54
56
|
parentAccountId = portal.parentAccountId;
|
|
55
57
|
}
|
|
@@ -107,7 +109,7 @@ exports.handler = async (options) => {
|
|
|
107
109
|
: `${i18nKey}.success.delete`;
|
|
108
110
|
logger.log('');
|
|
109
111
|
logger.success(i18n(deleteKey, {
|
|
110
|
-
account:
|
|
112
|
+
account: providedAccountId || accountPrompt.account,
|
|
111
113
|
sandboxHubId: sandboxAccountId,
|
|
112
114
|
}));
|
|
113
115
|
logger.log('');
|
|
@@ -6,7 +6,7 @@ const { logError, ApiErrorContext } = require('../../lib/errorHandlers/index');
|
|
|
6
6
|
const { addSecret } = require('@hubspot/local-dev-lib/api/secrets');
|
|
7
7
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
8
8
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
9
|
-
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions,
|
|
9
|
+
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
|
|
10
10
|
const { uiAccountDescription } = require('../../lib/ui');
|
|
11
11
|
const { secretValuePrompt } = require('../../lib/prompts/secretPrompt');
|
|
12
12
|
const { i18n } = require('../../lib/lang');
|
|
@@ -14,15 +14,14 @@ const i18nKey = 'commands.secrets.subcommands.add';
|
|
|
14
14
|
exports.command = 'add <name>';
|
|
15
15
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
16
16
|
exports.handler = async (options) => {
|
|
17
|
-
const { name: secretName } = options;
|
|
17
|
+
const { name: secretName, derivedAccountId } = options;
|
|
18
18
|
await loadAndValidateOptions(options);
|
|
19
|
-
|
|
20
|
-
trackCommandUsage('secrets-add', null, accountId);
|
|
19
|
+
trackCommandUsage('secrets-add', null, derivedAccountId);
|
|
21
20
|
try {
|
|
22
21
|
const { secretValue } = await secretValuePrompt();
|
|
23
|
-
await addSecret(
|
|
22
|
+
await addSecret(derivedAccountId, secretName, secretValue);
|
|
24
23
|
logger.success(i18n(`${i18nKey}.success.add`, {
|
|
25
|
-
accountIdentifier: uiAccountDescription(
|
|
24
|
+
accountIdentifier: uiAccountDescription(derivedAccountId),
|
|
26
25
|
secretName,
|
|
27
26
|
}));
|
|
28
27
|
}
|
|
@@ -32,7 +31,7 @@ exports.handler = async (options) => {
|
|
|
32
31
|
}));
|
|
33
32
|
logError(err, new ApiErrorContext({
|
|
34
33
|
request: 'add secret',
|
|
35
|
-
accountId,
|
|
34
|
+
accountId: derivedAccountId,
|
|
36
35
|
}));
|
|
37
36
|
}
|
|
38
37
|
};
|
|
@@ -7,20 +7,19 @@ const { deleteSecret } = require('@hubspot/local-dev-lib/api/secrets');
|
|
|
7
7
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
8
8
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
9
9
|
const { uiAccountDescription } = require('../../lib/ui');
|
|
10
|
-
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions,
|
|
10
|
+
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
|
|
11
11
|
const { i18n } = require('../../lib/lang');
|
|
12
12
|
const i18nKey = 'commands.secrets.subcommands.delete';
|
|
13
13
|
exports.command = 'delete <name>';
|
|
14
14
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
15
15
|
exports.handler = async (options) => {
|
|
16
|
-
const { name: secretName } = options;
|
|
16
|
+
const { name: secretName, derivedAccountId } = options;
|
|
17
17
|
await loadAndValidateOptions(options);
|
|
18
|
-
|
|
19
|
-
trackCommandUsage('secrets-delete', null, accountId);
|
|
18
|
+
trackCommandUsage('secrets-delete', null, derivedAccountId);
|
|
20
19
|
try {
|
|
21
|
-
await deleteSecret(
|
|
20
|
+
await deleteSecret(derivedAccountId, secretName);
|
|
22
21
|
logger.success(i18n(`${i18nKey}.success.delete`, {
|
|
23
|
-
accountIdentifier: uiAccountDescription(
|
|
22
|
+
accountIdentifier: uiAccountDescription(derivedAccountId),
|
|
24
23
|
secretName,
|
|
25
24
|
}));
|
|
26
25
|
}
|
|
@@ -30,7 +29,7 @@ exports.handler = async (options) => {
|
|
|
30
29
|
}));
|
|
31
30
|
logError(err, new ApiErrorContext({
|
|
32
31
|
request: 'delete a secret',
|
|
33
|
-
accountId,
|
|
32
|
+
accountId: derivedAccountId,
|
|
34
33
|
}));
|
|
35
34
|
}
|
|
36
35
|
};
|
|
@@ -7,19 +7,19 @@ const { fetchSecrets } = require('@hubspot/local-dev-lib/api/secrets');
|
|
|
7
7
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
8
8
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
9
9
|
const { uiAccountDescription } = require('../../lib/ui');
|
|
10
|
-
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions,
|
|
10
|
+
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
|
|
11
11
|
const { i18n } = require('../../lib/lang');
|
|
12
12
|
const i18nKey = 'commands.secrets.subcommands.list';
|
|
13
13
|
exports.command = 'list';
|
|
14
14
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
15
15
|
exports.handler = async (options) => {
|
|
16
16
|
await loadAndValidateOptions(options);
|
|
17
|
-
const
|
|
18
|
-
trackCommandUsage('secrets-list', null,
|
|
17
|
+
const { derivedAccountId } = options;
|
|
18
|
+
trackCommandUsage('secrets-list', null, derivedAccountId);
|
|
19
19
|
try {
|
|
20
|
-
const { data: { results }, } = await fetchSecrets(
|
|
20
|
+
const { data: { results }, } = await fetchSecrets(derivedAccountId);
|
|
21
21
|
const groupLabel = i18n(`${i18nKey}.groupLabel`, {
|
|
22
|
-
accountIdentifier: uiAccountDescription(
|
|
22
|
+
accountIdentifier: uiAccountDescription(derivedAccountId),
|
|
23
23
|
});
|
|
24
24
|
logger.group(groupLabel);
|
|
25
25
|
results.forEach(secret => logger.log(secret));
|
|
@@ -29,7 +29,7 @@ exports.handler = async (options) => {
|
|
|
29
29
|
logger.error(i18n(`${i18nKey}.errors.list`));
|
|
30
30
|
logError(err, new ApiErrorContext({
|
|
31
31
|
request: 'add secret',
|
|
32
|
-
accountId,
|
|
32
|
+
accountId: derivedAccountId,
|
|
33
33
|
}));
|
|
34
34
|
}
|
|
35
35
|
};
|
|
@@ -7,22 +7,21 @@ const { updateSecret } = require('@hubspot/local-dev-lib/api/secrets');
|
|
|
7
7
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
8
8
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
9
9
|
const { uiAccountDescription } = require('../../lib/ui');
|
|
10
|
-
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions,
|
|
10
|
+
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
|
|
11
11
|
const { secretValuePrompt } = require('../../lib/prompts/secretPrompt');
|
|
12
12
|
const { i18n } = require('../../lib/lang');
|
|
13
13
|
const i18nKey = 'commands.secrets.subcommands.update';
|
|
14
14
|
exports.command = 'update <name>';
|
|
15
15
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
16
16
|
exports.handler = async (options) => {
|
|
17
|
-
const { name: secretName } = options;
|
|
17
|
+
const { name: secretName, derivedAccountId } = options;
|
|
18
18
|
await loadAndValidateOptions(options);
|
|
19
|
-
|
|
20
|
-
trackCommandUsage('secrets-update', null, accountId);
|
|
19
|
+
trackCommandUsage('secrets-update', null, derivedAccountId);
|
|
21
20
|
try {
|
|
22
21
|
const { secretValue } = await secretValuePrompt();
|
|
23
|
-
await updateSecret(
|
|
22
|
+
await updateSecret(derivedAccountId, secretName, secretValue);
|
|
24
23
|
logger.success(i18n(`${i18nKey}.success.update`, {
|
|
25
|
-
accountIdentifier: uiAccountDescription(
|
|
24
|
+
accountIdentifier: uiAccountDescription(derivedAccountId),
|
|
26
25
|
secretName,
|
|
27
26
|
}));
|
|
28
27
|
logger.log(i18n(`${i18nKey}.success.updateExplanation`));
|
|
@@ -33,7 +32,7 @@ exports.handler = async (options) => {
|
|
|
33
32
|
}));
|
|
34
33
|
logError(err, new ApiErrorContext({
|
|
35
34
|
request: 'update secret',
|
|
36
|
-
accountId,
|
|
35
|
+
accountId: derivedAccountId,
|
|
37
36
|
}));
|
|
38
37
|
}
|
|
39
38
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
// @ts-nocheck
|
|
4
4
|
const SpinniesManager = require('../../lib/ui/SpinniesManager');
|
|
5
|
-
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions,
|
|
5
|
+
const { addConfigOptions, addAccountOptions, addUseEnvironmentOptions, } = require('../../lib/commonOpts');
|
|
6
6
|
const { loadAndValidateOptions } = require('../../lib/validation');
|
|
7
7
|
const { trackCommandUsage } = require('../../lib/usageTracking');
|
|
8
8
|
const { kickOffValidation, pollForValidationFinish, fetchValidationResults, processValidationErrors, displayValidationResults, } = require('../../lib/marketplaceValidate');
|
|
@@ -11,10 +11,9 @@ const i18nKey = 'commands.theme.subcommands.marketplaceValidate';
|
|
|
11
11
|
exports.command = 'marketplace-validate <src>';
|
|
12
12
|
exports.describe = i18n(`${i18nKey}.describe`);
|
|
13
13
|
exports.handler = async (options) => {
|
|
14
|
-
const { src } = options;
|
|
14
|
+
const { src, derivedAccountId } = options;
|
|
15
15
|
await loadAndValidateOptions(options);
|
|
16
|
-
|
|
17
|
-
trackCommandUsage('validate', null, accountId);
|
|
16
|
+
trackCommandUsage('validate', null, derivedAccountId);
|
|
18
17
|
SpinniesManager.init();
|
|
19
18
|
SpinniesManager.add('marketplaceValidation', {
|
|
20
19
|
text: i18n(`${i18nKey}.logs.validatingTheme`, {
|
|
@@ -22,10 +21,10 @@ exports.handler = async (options) => {
|
|
|
22
21
|
}),
|
|
23
22
|
});
|
|
24
23
|
const assetType = 'THEME';
|
|
25
|
-
const validationId = await kickOffValidation(
|
|
26
|
-
await pollForValidationFinish(
|
|
24
|
+
const validationId = await kickOffValidation(derivedAccountId, assetType, src);
|
|
25
|
+
await pollForValidationFinish(derivedAccountId, validationId);
|
|
27
26
|
SpinniesManager.remove('marketplaceValidation');
|
|
28
|
-
const validationResults = await fetchValidationResults(
|
|
27
|
+
const validationResults = await fetchValidationResults(derivedAccountId, validationId);
|
|
29
28
|
processValidationErrors(i18nKey, validationResults);
|
|
30
29
|
displayValidationResults(i18nKey, validationResults);
|
|
31
30
|
process.exit();
|
|
@@ -5,7 +5,7 @@ const fs = require('fs');
|
|
|
5
5
|
const path = require('path');
|
|
6
6
|
const { i18n } = require('../../lib/lang');
|
|
7
7
|
const { logger } = require('@hubspot/local-dev-lib/logger');
|
|
8
|
-
const { addAccountOptions, addConfigOptions
|
|
8
|
+
const { addAccountOptions, addConfigOptions } = require('../../lib/commonOpts');
|
|
9
9
|
const { getCwd } = require('@hubspot/local-dev-lib/path');
|
|
10
10
|
const { preview } = require('@hubspot/theme-preview-dev-server');
|
|
11
11
|
const { getUploadableFileList } = require('../../lib/upload');
|
|
@@ -89,9 +89,8 @@ const determineSrcAndDest = async (options) => {
|
|
|
89
89
|
return { absoluteSrc, dest };
|
|
90
90
|
};
|
|
91
91
|
exports.handler = async (options) => {
|
|
92
|
-
const { notify, skipUpload, noSsl, port, debug, resetSession } = options;
|
|
92
|
+
const { notify, skipUpload, noSsl, port, debug, derivedAccountId, resetSession, } = options;
|
|
93
93
|
await loadAndValidateOptions(options);
|
|
94
|
-
const accountId = getAccountId(options);
|
|
95
94
|
const { absoluteSrc, dest } = await determineSrcAndDest(options);
|
|
96
95
|
const filePaths = await getUploadableFileList(absoluteSrc, false);
|
|
97
96
|
const startProgressBar = numFiles => {
|
|
@@ -133,7 +132,7 @@ exports.handler = async (options) => {
|
|
|
133
132
|
if (result.resultType == FILE_UPLOAD_RESULT_TYPES.FAILURE) {
|
|
134
133
|
logger.error('Uploading file "%s" to "%s" failed', result.file, dest);
|
|
135
134
|
logError(result.error, new ApiErrorContext({
|
|
136
|
-
accountId,
|
|
135
|
+
accountId: derivedAccountId,
|
|
137
136
|
request: dest,
|
|
138
137
|
payload: result.file,
|
|
139
138
|
}));
|
|
@@ -143,8 +142,8 @@ exports.handler = async (options) => {
|
|
|
143
142
|
};
|
|
144
143
|
return uploadOptions;
|
|
145
144
|
};
|
|
146
|
-
trackCommandUsage('preview',
|
|
147
|
-
preview(
|
|
145
|
+
trackCommandUsage('preview', derivedAccountId);
|
|
146
|
+
preview(derivedAccountId, absoluteSrc, dest, {
|
|
148
147
|
notify,
|
|
149
148
|
filePaths,
|
|
150
149
|
skipUpload,
|