@salesforce/b2c-cli 1.3.2 → 1.4.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.
@@ -8,9 +8,11 @@ export default class JobImport extends JobCommand<typeof JobImport> {
8
8
  static enableJsonFlag: boolean;
9
9
  static examples: string[];
10
10
  static flags: {
11
+ wait: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
12
  'keep-archive': import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
13
  remote: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
14
  timeout: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'poll-interval': import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
14
16
  'show-log': import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
17
  server: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
18
  'webdav-server': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
@@ -24,6 +24,12 @@ export default class JobImport extends JobCommand {
24
24
  ];
25
25
  static flags = {
26
26
  ...JobCommand.baseFlags,
27
+ wait: Flags.boolean({
28
+ char: 'w',
29
+ description: 'Wait for import job to complete',
30
+ default: true,
31
+ allowNo: true,
32
+ }),
27
33
  'keep-archive': Flags.boolean({
28
34
  char: 'k',
29
35
  description: 'Keep archive on instance after import',
@@ -38,6 +44,11 @@ export default class JobImport extends JobCommand {
38
44
  char: 't',
39
45
  description: 'Timeout in seconds (default: no timeout)',
40
46
  }),
47
+ 'poll-interval': Flags.integer({
48
+ description: 'Polling interval in seconds when using --wait',
49
+ default: 3,
50
+ dependsOn: ['wait'],
51
+ }),
41
52
  'show-log': Flags.boolean({
42
53
  description: 'Show job log on failure',
43
54
  default: true,
@@ -50,7 +61,7 @@ export default class JobImport extends JobCommand {
50
61
  this.requireOAuthCredentials();
51
62
  this.requireWebDavCredentials();
52
63
  const { target } = this.args;
53
- const { 'keep-archive': keepArchive, remote, timeout, 'show-log': showLog = true } = this.flags;
64
+ const { wait, 'keep-archive': keepArchive, remote, timeout, 'poll-interval': pollInterval, 'show-log': showLog = true, } = this.flags;
54
65
  const hostname = this.resolvedConfig.values.hostname;
55
66
  // Safety evaluation — check rules for import job before executing.
56
67
  // Command-level rules are already evaluated generically in BaseCommand.init().
@@ -103,8 +114,10 @@ export default class JobImport extends JobCommand {
103
114
  const importTarget = remote ? { remoteFilename: target } : target;
104
115
  const result = await this.operations.siteArchiveImport(this.instance, importTarget, {
105
116
  keepArchive,
117
+ wait,
106
118
  waitOptions: {
107
119
  timeoutSeconds: timeout,
120
+ pollIntervalSeconds: pollInterval,
108
121
  onPoll: (info) => {
109
122
  if (!this.jsonEnabled()) {
110
123
  this.log(t('commands.job.import.progress', ' Status: {{status}} ({{elapsed}}s elapsed)', {
@@ -115,11 +128,19 @@ export default class JobImport extends JobCommand {
115
128
  },
116
129
  },
117
130
  });
118
- const durationSec = result.execution.duration ? (result.execution.duration / 1000).toFixed(1) : 'N/A';
119
- this.log(t('commands.job.import.completed', 'Import completed: {{status}} (duration: {{duration}}s)', {
120
- status: result.execution.exit_status?.code || result.execution.execution_status,
121
- duration: durationSec,
122
- }));
131
+ if (wait) {
132
+ const durationSec = result.execution.duration ? (result.execution.duration / 1000).toFixed(1) : 'N/A';
133
+ this.log(t('commands.job.import.completed', 'Import completed: {{status}} (duration: {{duration}}s)', {
134
+ status: result.execution.exit_status?.code || result.execution.execution_status,
135
+ duration: durationSec,
136
+ }));
137
+ }
138
+ else {
139
+ this.log(t('commands.job.import.started', 'Import job started: {{executionId}} (status: {{status}})', {
140
+ executionId: result.execution.id,
141
+ status: result.execution.execution_status,
142
+ }));
143
+ }
123
144
  if (result.archiveKept) {
124
145
  this.log(t('commands.job.import.archiveKept', 'Archive kept at: Impex/src/instance/{{filename}}', {
125
146
  filename: result.archiveFilename,
@@ -1 +1 @@
1
- {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/job/import.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/job/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { MrtCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ import { listEnvVars, setEnvVar, setEnvVars } from '@salesforce/b2c-tooling-sdk/operations/mrt';
3
+ /**
4
+ * Push local .env file variables to an MRT project environment.
5
+ *
6
+ * Environment variables read:
7
+ * MRT_PROJECT (optional) - MRT project slug, overridden by --project flag
8
+ * MRT_ENVIRONMENT (optional) - MRT environment, overridden by --environment flag
9
+ */
10
+ export default class MrtEnvVarPush extends MrtCommand<typeof MrtEnvVarPush> {
11
+ static description: string;
12
+ static enableJsonFlag: boolean;
13
+ static examples: string[];
14
+ static flags: {
15
+ file: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'exclude-prefix': import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
17
+ yes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
+ 'api-key': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
19
+ project: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
20
+ environment: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
21
+ 'cloud-origin': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
22
+ 'credentials-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
25
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
26
+ jsonl: import("@oclif/core/interfaces").BooleanFlag<boolean>;
27
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
28
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
29
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
30
+ 'project-directory': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
31
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
32
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
33
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
34
+ };
35
+ protected operations: {
36
+ listEnvVars: typeof listEnvVars;
37
+ setEnvVar: typeof setEnvVar;
38
+ setEnvVars: typeof setEnvVars;
39
+ readEnvFile: (path: string) => string;
40
+ };
41
+ run(): Promise<{
42
+ pushed: number;
43
+ failed: number;
44
+ skipped: number;
45
+ }>;
46
+ }
@@ -0,0 +1,154 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ import { readFileSync } from 'node:fs';
7
+ import { resolve } from 'node:path';
8
+ import { parseEnv } from 'node:util';
9
+ import { Flags, ux } from '@oclif/core';
10
+ import { confirm } from '@inquirer/prompts';
11
+ import { MrtCommand } from '@salesforce/b2c-tooling-sdk/cli';
12
+ import { listEnvVars, setEnvVar, setEnvVars } from '@salesforce/b2c-tooling-sdk/operations/mrt';
13
+ import { t, withDocs } from '../../../../i18n/index.js';
14
+ import { filterByPrefix, computeEnvVarDiff, formatEnvVarDiffSummary } from '../../../../utils/mrt/env-var-diff.js';
15
+ /**
16
+ * Push local .env file variables to an MRT project environment.
17
+ *
18
+ * Environment variables read:
19
+ * MRT_PROJECT (optional) - MRT project slug, overridden by --project flag
20
+ * MRT_ENVIRONMENT (optional) - MRT environment, overridden by --environment flag
21
+ */
22
+ export default class MrtEnvVarPush extends MrtCommand {
23
+ static description = withDocs(t('commands.mrt.env.var.push.description', 'Push local .env file variables to a Managed Runtime environment'), '/cli/mrt.html#b2c-mrt-env-var-push');
24
+ static enableJsonFlag = true;
25
+ static examples = [
26
+ '<%= config.bin %> <%= command.id %> --project acme-storefront --environment production',
27
+ '<%= config.bin %> <%= command.id %> -p my-project -e staging --yes',
28
+ '<%= config.bin %> <%= command.id %> --file config/.env --exclude-prefix INTERNAL_ -p my-project -e staging',
29
+ ];
30
+ static flags = {
31
+ ...MrtCommand.baseFlags,
32
+ file: Flags.string({
33
+ char: 'f',
34
+ description: t('commands.mrt.env.var.push.fileFlag', 'Path to the .env file to push'),
35
+ default: '.env',
36
+ }),
37
+ 'exclude-prefix': Flags.string({
38
+ description: t('commands.mrt.env.var.push.excludePrefixFlag', 'Exclude variables whose keys start with this prefix (repeatable)'),
39
+ multiple: true,
40
+ default: ['MRT_'],
41
+ }),
42
+ yes: Flags.boolean({
43
+ char: 'y',
44
+ description: t('commands.mrt.env.var.push.yesFlag', 'Skip confirmation prompt'),
45
+ default: false,
46
+ }),
47
+ };
48
+ operations = {
49
+ listEnvVars,
50
+ setEnvVar,
51
+ setEnvVars,
52
+ readEnvFile: (path) => readFileSync(path, 'utf8'),
53
+ };
54
+ async run() {
55
+ const { flags } = await this.parse(MrtEnvVarPush);
56
+ const envFilePath = resolve(flags.file);
57
+ // Step 1: Read and parse .env file
58
+ let rawContent;
59
+ try {
60
+ rawContent = this.operations.readEnvFile(envFilePath);
61
+ }
62
+ catch (error_) {
63
+ const error = error_;
64
+ if (error.code === 'ENOENT') {
65
+ this.error(t('commands.mrt.env.var.push.fileNotFound', '.env file not found: {{path}}', { path: envFilePath }));
66
+ }
67
+ throw error_;
68
+ }
69
+ const parsed = parseEnv(rawContent);
70
+ // Step 2: Filter out excluded prefixes
71
+ const localVars = filterByPrefix(new Map(Object.entries(parsed).filter((e) => e[1] !== undefined)), flags['exclude-prefix']);
72
+ // Step 3: Validate MRT target
73
+ const { mrtProject: project, mrtEnvironment: environment } = this.resolvedConfig.values;
74
+ if (!project) {
75
+ this.error(t('commands.mrt.env.var.push.missingProject', 'MRT project is required. Provide --project flag, set MRT_PROJECT, or set mrtProject in dw.json.'));
76
+ }
77
+ if (!environment) {
78
+ this.error(t('commands.mrt.env.var.push.missingEnvironment', 'MRT environment is required. Provide --environment flag, set MRT_ENVIRONMENT, or set mrtEnvironment in dw.json.'));
79
+ }
80
+ // Step 4: Fetch current remote env vars
81
+ this.requireMrtCredentials();
82
+ const { mrtOrigin: origin } = this.resolvedConfig.values;
83
+ const auth = this.getMrtAuth();
84
+ ux.stdout(t('commands.mrt.env.var.push.fetching', 'Fetching remote env vars for {{project}}/{{environment}}...', {
85
+ project,
86
+ environment,
87
+ }));
88
+ const { variables: remoteVariables } = await this.operations.listEnvVars({ projectSlug: project, environment, origin }, auth);
89
+ const remoteVars = new Map(remoteVariables.map((v) => [v.name, v.value]));
90
+ // Step 5: Compute diff
91
+ const diff = computeEnvVarDiff(localVars, remoteVars);
92
+ const toSync = [...diff.add, ...diff.update];
93
+ // Step 6: Display summary
94
+ ux.stdout('');
95
+ ux.stdout(formatEnvVarDiffSummary(diff));
96
+ if (toSync.length === 0) {
97
+ return { pushed: 0, failed: 0, skipped: diff.remoteOnly.length };
98
+ }
99
+ // Step 7: Confirm unless --yes
100
+ if (!flags.yes) {
101
+ const message = t('commands.mrt.env.var.push.confirm', 'Push {{count}} variable(s) ({{add}} new, {{update}} updated) to {{project}}/{{environment}}?', {
102
+ count: toSync.length,
103
+ add: diff.add.length,
104
+ update: diff.update.length,
105
+ project,
106
+ environment,
107
+ });
108
+ const confirmed = await confirm({ message, default: false });
109
+ if (!confirmed) {
110
+ ux.stdout(t('commands.mrt.env.var.push.aborted', 'Aborted.'));
111
+ return { pushed: 0, failed: 0, skipped: diff.remoteOnly.length };
112
+ }
113
+ }
114
+ // Step 8: Push variables — try batch first, fall back to individual calls
115
+ let pushed = 0;
116
+ let failed = 0;
117
+ const baseParams = { projectSlug: project, environment, origin };
118
+ try {
119
+ const variables = Object.fromEntries(toSync.map(({ key, value }) => [key, value]));
120
+ await this.operations.setEnvVars({ ...baseParams, variables }, auth);
121
+ for (const { key } of toSync) {
122
+ ux.stdout(t('commands.mrt.env.var.push.varSuccess', ' ✓ {{key}}', { key }));
123
+ }
124
+ pushed = toSync.length;
125
+ }
126
+ catch {
127
+ this.warn(t('commands.mrt.env.var.push.batchFailed', 'Batch push failed, retrying variables individually...'));
128
+ const results = await Promise.allSettled(toSync.map(({ key, value }) => this.operations.setEnvVar({ ...baseParams, key, value }, auth)));
129
+ for (const [index, result] of results.entries()) {
130
+ const { key } = toSync[index];
131
+ if (result.status === 'fulfilled') {
132
+ ux.stdout(t('commands.mrt.env.var.push.varSuccess', ' ✓ {{key}}', { key }));
133
+ pushed++;
134
+ }
135
+ else {
136
+ this.warn(t('commands.mrt.env.var.push.varFailed', ' ✗ {{key}}: {{message}}', {
137
+ key,
138
+ message: result.reason.message,
139
+ }));
140
+ failed++;
141
+ }
142
+ }
143
+ }
144
+ // Step 9: Summary
145
+ ux.stdout('');
146
+ ux.stdout(t('commands.mrt.env.var.push.summary', 'Summary: {{pushed}} pushed, {{failed}} failed, {{skipped}} remote-only (not deleted)', {
147
+ pushed,
148
+ failed,
149
+ skipped: diff.remoteOnly.length,
150
+ }));
151
+ return { pushed, failed, skipped: diff.remoteOnly.length };
152
+ }
153
+ }
154
+ //# sourceMappingURL=push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../../src/commands/mrt/env/var/push.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * An entry in the "add" or "unchanged" category of a diff.
3
+ */
4
+ export interface EnvVarEntry {
5
+ key: string;
6
+ value: string;
7
+ }
8
+ /**
9
+ * An entry in the "update" category of a diff, showing both old and new values.
10
+ */
11
+ export interface EnvVarUpdateEntry extends EnvVarEntry {
12
+ oldValue: string;
13
+ }
14
+ /**
15
+ * The result of comparing local env vars against remote MRT env vars.
16
+ */
17
+ export interface EnvVarDiff {
18
+ /** Variables present locally but not in MRT — will be added. */
19
+ add: EnvVarEntry[];
20
+ /** Variables present in both with differing values — will be updated. */
21
+ update: EnvVarUpdateEntry[];
22
+ /** Variables present in both with identical values — no action needed. */
23
+ unchanged: EnvVarEntry[];
24
+ /** Variables present in MRT but not locally — will NOT be deleted. */
25
+ remoteOnly: EnvVarEntry[];
26
+ }
27
+ /**
28
+ * Returns a new Map excluding entries whose keys start with any of the given prefixes.
29
+ *
30
+ * @param vars - Map of environment variable key-value pairs
31
+ * @param excludePrefixes - Prefixes to exclude (e.g. ['MRT_', 'SFCC_'])
32
+ */
33
+ export declare function filterByPrefix(vars: Map<string, string>, excludePrefixes: string[]): Map<string, string>;
34
+ /**
35
+ * Computes the diff between local env vars and remote MRT env vars.
36
+ *
37
+ * @param local - Local env vars (already filtered)
38
+ * @param remote - Remote MRT env vars
39
+ */
40
+ export declare function computeEnvVarDiff(local: Map<string, string>, remote: Map<string, string>): EnvVarDiff;
41
+ /**
42
+ * Formats a human-readable diff summary using ASCII markers.
43
+ *
44
+ * @param diff - The diff to format
45
+ */
46
+ export declare function formatEnvVarDiffSummary(diff: EnvVarDiff): string;
@@ -0,0 +1,104 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ /**
7
+ * Returns a new Map excluding entries whose keys start with any of the given prefixes.
8
+ *
9
+ * @param vars - Map of environment variable key-value pairs
10
+ * @param excludePrefixes - Prefixes to exclude (e.g. ['MRT_', 'SFCC_'])
11
+ */
12
+ export function filterByPrefix(vars, excludePrefixes) {
13
+ const result = new Map();
14
+ for (const [key, value] of vars) {
15
+ if (!excludePrefixes.some((prefix) => key.startsWith(prefix))) {
16
+ result.set(key, value);
17
+ }
18
+ }
19
+ return result;
20
+ }
21
+ /**
22
+ * Computes the diff between local env vars and remote MRT env vars.
23
+ *
24
+ * @param local - Local env vars (already filtered)
25
+ * @param remote - Remote MRT env vars
26
+ */
27
+ export function computeEnvVarDiff(local, remote) {
28
+ const add = [];
29
+ const update = [];
30
+ const unchanged = [];
31
+ const remoteOnly = [];
32
+ for (const [key, value] of local) {
33
+ if (remote.has(key)) {
34
+ const remoteValue = remote.get(key);
35
+ if (remoteValue === value) {
36
+ unchanged.push({ key, value });
37
+ }
38
+ else {
39
+ update.push({ key, value, oldValue: remoteValue });
40
+ }
41
+ }
42
+ else {
43
+ add.push({ key, value });
44
+ }
45
+ }
46
+ for (const [key, value] of remote) {
47
+ if (!local.has(key)) {
48
+ remoteOnly.push({ key, value });
49
+ }
50
+ }
51
+ return { add, update, unchanged, remoteOnly };
52
+ }
53
+ /**
54
+ * Formats a human-readable diff summary using ASCII markers.
55
+ *
56
+ * @param diff - The diff to format
57
+ */
58
+ export function formatEnvVarDiffSummary(diff) {
59
+ const { add, update, unchanged, remoteOnly } = diff;
60
+ const lines = [];
61
+ if (add.length === 0 && update.length === 0) {
62
+ lines.push('Nothing to sync — all variables are up-to-date.');
63
+ if (unchanged.length > 0) {
64
+ lines.push('', ` ${unchanged.length} variable(s) unchanged`);
65
+ }
66
+ if (remoteOnly.length > 0) {
67
+ lines.push('', ` ${remoteOnly.length} remote-only variable(s) (not in local file):`);
68
+ for (const { key, value } of remoteOnly) {
69
+ lines.push(` * ${key} = ${value}`);
70
+ }
71
+ }
72
+ return lines.join('\n');
73
+ }
74
+ if (add.length > 0) {
75
+ lines.push(`+ Add (${add.length}):`);
76
+ for (const { key, value } of add) {
77
+ lines.push(` + ${key} = ${value}`);
78
+ }
79
+ lines.push('');
80
+ }
81
+ if (update.length > 0) {
82
+ lines.push(`~ Update (${update.length}):`);
83
+ for (const { key, value, oldValue } of update) {
84
+ lines.push(` ~ ${key}: ${oldValue} → ${value}`);
85
+ }
86
+ lines.push('');
87
+ }
88
+ if (unchanged.length > 0) {
89
+ lines.push(` Unchanged (${unchanged.length}):`);
90
+ for (const { key } of unchanged) {
91
+ lines.push(` = ${key}`);
92
+ }
93
+ lines.push('');
94
+ }
95
+ if (remoteOnly.length > 0) {
96
+ lines.push(` Remote-only (${remoteOnly.length}, not deleted):`);
97
+ for (const { key, value } of remoteOnly) {
98
+ lines.push(` * ${key} = ${value}`);
99
+ }
100
+ lines.push('');
101
+ }
102
+ return lines.join('\n');
103
+ }
104
+ //# sourceMappingURL=env-var-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-var-diff.js","sourceRoot":"","sources":["../../../src/utils/mrt/env-var-diff.ts"],"names":[],"mappings":"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"}