sf-plugin-cms 0.1.0 → 0.3.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 (64) hide show
  1. package/README.md +143 -25
  2. package/lib/{commands/cms/command-base.d.ts → command-base.d.ts} +2 -1
  3. package/lib/{commands/cms/command-base.js → command-base.js} +3 -0
  4. package/lib/command-base.js.map +1 -0
  5. package/lib/commands/cms/export/workspace.d.ts +15 -7
  6. package/lib/commands/cms/export/workspace.js +114 -12
  7. package/lib/commands/cms/export/workspace.js.map +1 -1
  8. package/lib/commands/cms/get/channel.d.ts +1 -1
  9. package/lib/commands/cms/get/channel.js +1 -1
  10. package/lib/commands/cms/get/channel.js.map +1 -1
  11. package/lib/commands/cms/get/content.d.ts +1 -1
  12. package/lib/commands/cms/get/content.js +1 -1
  13. package/lib/commands/cms/get/content.js.map +1 -1
  14. package/lib/commands/cms/get/variant.d.ts +1 -1
  15. package/lib/commands/cms/get/variant.js +1 -1
  16. package/lib/commands/cms/get/variant.js.map +1 -1
  17. package/lib/commands/cms/get/workspace.d.ts +1 -1
  18. package/lib/commands/cms/get/workspace.js +1 -1
  19. package/lib/commands/cms/get/workspace.js.map +1 -1
  20. package/lib/commands/cms/import/workspace.d.ts +10 -6
  21. package/lib/commands/cms/import/workspace.js +127 -35
  22. package/lib/commands/cms/import/workspace.js.map +1 -1
  23. package/lib/commands/cms/info.d.ts +11 -10
  24. package/lib/commands/cms/info.js +123 -8
  25. package/lib/commands/cms/info.js.map +1 -1
  26. package/lib/commands/cms/list/channel.d.ts +1 -1
  27. package/lib/commands/cms/list/channel.js +1 -1
  28. package/lib/commands/cms/list/channel.js.map +1 -1
  29. package/lib/commands/cms/list/workspace.d.ts +1 -1
  30. package/lib/commands/cms/list/workspace.js +1 -1
  31. package/lib/commands/cms/list/workspace.js.map +1 -1
  32. package/lib/contracts/info.d.ts +43 -0
  33. package/lib/contracts/info.js +69 -0
  34. package/lib/contracts/info.js.map +1 -0
  35. package/lib/contracts/shared.d.ts +81 -0
  36. package/lib/contracts/shared.js +218 -0
  37. package/lib/contracts/shared.js.map +1 -0
  38. package/lib/contracts/workspace-export.d.ts +91 -0
  39. package/lib/contracts/workspace-export.js +324 -0
  40. package/lib/contracts/workspace-export.js.map +1 -0
  41. package/lib/contracts/workspace-import.d.ts +46 -0
  42. package/lib/contracts/workspace-import.js +108 -0
  43. package/lib/contracts/workspace-import.js.map +1 -0
  44. package/lib/index.d.ts +1 -1
  45. package/lib/services/bulk-export-workspaces.d.ts +25 -0
  46. package/lib/services/bulk-export-workspaces.js +272 -0
  47. package/lib/services/bulk-export-workspaces.js.map +1 -0
  48. package/lib/services/export-references.d.ts +21 -0
  49. package/lib/services/export-references.js +150 -0
  50. package/lib/services/export-references.js.map +1 -0
  51. package/lib/services/export-workspace.d.ts +12 -22
  52. package/lib/services/export-workspace.js +91 -2
  53. package/lib/services/export-workspace.js.map +1 -1
  54. package/lib/services/import-workspace.d.ts +7 -3
  55. package/lib/services/import-workspace.js +224 -96
  56. package/lib/services/import-workspace.js.map +1 -1
  57. package/lib/services/resolve-workspace.d.ts +20 -0
  58. package/lib/services/resolve-workspace.js +86 -0
  59. package/lib/services/resolve-workspace.js.map +1 -0
  60. package/messages/cms.export.workspace.md +31 -5
  61. package/messages/cms.import.workspace.md +17 -7
  62. package/messages/cms.info.md +21 -0
  63. package/package.json +3 -2
  64. package/lib/commands/cms/command-base.js.map +0 -1
@@ -0,0 +1,20 @@
1
+ import type { Connection } from '@salesforce/core';
2
+ import type { JsonRequestOptions } from '../transport/json-request.js';
3
+ import { type CmsRecord } from './read.js';
4
+ type RequestConnection = Pick<Connection, 'request'>;
5
+ export type WorkspaceSelector = {
6
+ readonly workspaceId?: string;
7
+ readonly workspaceName?: string;
8
+ };
9
+ export type ResolvedWorkspace = {
10
+ readonly id: string;
11
+ readonly workspace: CmsRecord;
12
+ };
13
+ export type WorkspaceSummary = {
14
+ readonly id: string;
15
+ readonly name?: string;
16
+ };
17
+ export declare function enumerateWorkspaces(connection: RequestConnection, options?: JsonRequestOptions, query?: Readonly<Record<string, string | number>>): Promise<WorkspaceSummary[]>;
18
+ export declare function assertWorkspaceSelector(selector: WorkspaceSelector): void;
19
+ export declare function resolveWorkspace(connection: RequestConnection, selector: WorkspaceSelector, options?: JsonRequestOptions): Promise<ResolvedWorkspace>;
20
+ export {};
@@ -0,0 +1,86 @@
1
+ import { getWorkspace, listWorkspaces } from './read.js';
2
+ const WORKSPACE_PAGE_SIZE = 250;
3
+ const WORKSPACE_PAGE_CAP = 1000;
4
+ function nonemptyString(value) {
5
+ return typeof value === 'string' && value.length > 0;
6
+ }
7
+ function folded(value) {
8
+ return value.normalize('NFKC').toLocaleLowerCase('en-US');
9
+ }
10
+ function workspaceSummary(value, page) {
11
+ if (!nonemptyString(value.id)) {
12
+ throw new Error(`Workspace listing page ${page} contains an item with a missing or malformed ID.`);
13
+ }
14
+ return {
15
+ id: value.id,
16
+ ...(nonemptyString(value.name) ? { name: value.name } : {}),
17
+ };
18
+ }
19
+ export async function enumerateWorkspaces(connection, options = {}, query = {}) {
20
+ const workspaces = new Map();
21
+ const foldedIds = new Map();
22
+ const pageFingerprints = new Set();
23
+ for (let page = 0; page < WORKSPACE_PAGE_CAP; page += 1) {
24
+ const response = await listWorkspaces(connection, { ...query, page, pageSize: WORKSPACE_PAGE_SIZE }, options);
25
+ if (response.items.length === 0)
26
+ return [...workspaces.values()];
27
+ const summaries = response.items.map((item) => workspaceSummary(item, page));
28
+ const fingerprint = JSON.stringify(summaries.map(({ id, name }) => [id, name ?? '']));
29
+ if (pageFingerprints.has(fingerprint)) {
30
+ throw new Error(`Workspace listing repeated page content at page ${page}.`);
31
+ }
32
+ pageFingerprints.add(fingerprint);
33
+ let additions = 0;
34
+ for (const summary of summaries) {
35
+ const foldedId = folded(summary.id);
36
+ const existingCasing = foldedIds.get(foldedId);
37
+ if (existingCasing !== undefined && existingCasing !== summary.id) {
38
+ throw new Error(`Workspace IDs ${existingCasing} and ${summary.id} differ only by case or Unicode normalization and are ambiguous.`);
39
+ }
40
+ foldedIds.set(foldedId, summary.id);
41
+ if (!workspaces.has(summary.id)) {
42
+ workspaces.set(summary.id, summary);
43
+ additions += 1;
44
+ }
45
+ }
46
+ if (additions === 0) {
47
+ throw new Error(`Workspace listing made no progress at page ${page}.`);
48
+ }
49
+ }
50
+ throw new Error(`Workspace listing exceeded the ${WORKSPACE_PAGE_CAP}-page safety limit.`);
51
+ }
52
+ async function validatedWorkspace(connection, workspaceId, options) {
53
+ const workspace = await getWorkspace(connection, workspaceId, options);
54
+ if (workspace.id !== workspaceId) {
55
+ throw new Error(`Workspace validation returned ID ${String(workspace.id)} instead of selected ID ${workspaceId}.`);
56
+ }
57
+ return { id: workspaceId, workspace };
58
+ }
59
+ export function assertWorkspaceSelector(selector) {
60
+ const hasId = nonemptyString(selector.workspaceId);
61
+ const hasName = nonemptyString(selector.workspaceName);
62
+ if (hasId === hasName) {
63
+ throw new Error('Specify exactly one of --workspace-id or --workspace-name.');
64
+ }
65
+ }
66
+ export async function resolveWorkspace(connection, selector, options = {}) {
67
+ assertWorkspaceSelector(selector);
68
+ if (nonemptyString(selector.workspaceId)) {
69
+ return validatedWorkspace(connection, selector.workspaceId, options);
70
+ }
71
+ const requestedName = selector.workspaceName;
72
+ const requestedFoldedName = folded(requestedName);
73
+ const listed = await enumerateWorkspaces(connection, options, { nameFragment: requestedName });
74
+ const matches = listed.filter(({ name }) => name !== undefined && folded(name) === requestedFoldedName);
75
+ if (matches.length === 0) {
76
+ throw new Error(`No workspace has the exact case-insensitive name ${requestedName}.`);
77
+ }
78
+ if (matches.length > 1) {
79
+ throw new Error(`Workspace name ${requestedName} is ambiguous across IDs: ${matches
80
+ .map(({ id }) => id)
81
+ .toSorted()
82
+ .join(', ')}. Use --workspace-id.`);
83
+ }
84
+ return validatedWorkspace(connection, matches[0].id, options);
85
+ }
86
+ //# sourceMappingURL=resolve-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-workspace.js","sourceRoot":"","sources":["../../src/services/resolve-workspace.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,27 @@
1
1
  # summary
2
2
 
3
- Experimentally export a CMS workspace using a read-only, best-effort process.
3
+ Experimentally export one or all CMS workspaces using a read-only, best-effort process.
4
4
 
5
5
  # description
6
6
 
7
- Reads a Marketing Cloud CMS workspace and writes the variants observed by an experimental, best-effort search. This is not a complete or guaranteed backup and does not mutate org data.
7
+ Exports one Marketing Cloud CMS workspace selected by exact ID or case-insensitive exact name, or preflights and exports all workspaces under a parent directory. Canonical fetched names and casing are preserved. Bulk preflight is global and strict; execution then continues across individual failures and returns a complete aggregate. This is not a complete or guaranteed backup and does not mutate org data.
8
8
 
9
9
  # examples
10
10
 
11
- - Export the variants observed for one workspace into a new directory:
11
+ - Export by exact workspace name to ./cms/Main Site:
12
+
13
+ <%= config.bin %> <%= command.id %> --target-org my-org --workspace-name "Main Site"
14
+
15
+ - Export by workspace ID to an exact explicit directory:
12
16
 
13
17
  <%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --output-dir ./cms-export
14
18
 
19
+ - Export all Marketing workspaces beneath ./cms with the v1 JSON aggregate:
20
+
21
+ <%= config.bin %> <%= command.id %> --target-org my-org --all --workspace-type Marketing --output-dir ./cms --contract-version 1 --json
22
+
23
+ Bulk JSON uses `sf-cms-workspace-export-set@1`. Exit 0 means success, 2 means partial with a usable aggregate, and 1 means failed or blocked. Unsupported contract majors block before org access.
24
+
15
25
  # flags.target-org.summary
16
26
 
17
27
  Username or alias of the target Salesforce org.
@@ -20,10 +30,26 @@ Username or alias of the target Salesforce org.
20
30
 
21
31
  Salesforce API version used for CMS requests.
22
32
 
33
+ # flags.contract-version.summary
34
+
35
+ Machine contract major version (supported: 1). Unsupported majors return a blocked contract envelope before org access.
36
+
37
+ # flags.all.summary
38
+
39
+ Export every CMS workspace after a strict global preflight.
40
+
23
41
  # flags.workspace-id.summary
24
42
 
25
- CMS workspace content-space ID.
43
+ Exact CMS workspace content-space ID.
44
+
45
+ # flags.workspace-name.summary
46
+
47
+ Exact case-insensitive CMS workspace name.
48
+
49
+ # flags.workspace-type.summary
50
+
51
+ Bulk-only workspace type filter: Marketing or Content (case-insensitive).
26
52
 
27
53
  # flags.output-dir.summary
28
54
 
29
- New directory to receive the experimental best-effort export.
55
+ Single: exact new destination. Bulk: parent directory. Defaults to ./cms/<name> or ./cms.
@@ -4,33 +4,43 @@ Safely plan or apply a create-only import into a CMS workspace.
4
4
 
5
5
  # description
6
6
 
7
- Validates an exported workspace package locally, checks every content key for destination conflicts, and defaults to a non-mutating dry run. Pass --apply with a new --report-dir to create content.
7
+ Validates the source workspace export locally before any org request, selects one destination workspace by exact ID or exact case-sensitive name, checks every content key for conflicts, and defaults to a non-mutating dry run. Pass --apply with a new --report-dir to create content.
8
8
 
9
9
  # examples
10
10
 
11
- - Validate and preflight an import without creating content:
11
+ - Validate a source export and preflight an exact destination workspace name:
12
12
 
13
- <%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --source-dir ./cms-export
13
+ <%= config.bin %> <%= command.id %> --target-org my-org --workspace-name "Destination" --source-dir ./cms/Source
14
14
 
15
- - Apply a conflict-free plan and write a durable run report:
15
+ - Apply to an exact destination workspace ID, select result major 1, and write a durable run report:
16
16
 
17
- <%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --source-dir ./cms-export --apply --report-dir ./cms-import-report
17
+ <%= config.bin %> <%= command.id %> --target-org my-org --workspace-id 0Zu... --source-dir ./cms/Source --apply --report-dir ./cms-import-report --contract-version 1 --json
18
+
19
+ JSON uses `sf-cms-workspace-import@1`. Package integrity and the independently declared manifest major are validated before org access. Exit 0 means success, 2 means partial with a usable result, and 1 means failed or blocked.
18
20
 
19
21
  # flags.target-org.summary
20
22
 
21
23
  Username or alias of the target Salesforce org.
22
24
 
25
+ # flags.contract-version.summary
26
+
27
+ Machine contract major version (supported: 1). Unsupported majors return a blocked contract envelope before package or org access.
28
+
23
29
  # flags.api-version.summary
24
30
 
25
31
  Salesforce API version used for CMS requests.
26
32
 
27
33
  # flags.workspace-id.summary
28
34
 
29
- Destination CMS workspace ID.
35
+ Exact destination CMS workspace ID.
36
+
37
+ # flags.workspace-name.summary
38
+
39
+ Exact case-sensitive destination CMS workspace name.
30
40
 
31
41
  # flags.source-dir.summary
32
42
 
33
- Workspace export directory containing manifest.json and items/.
43
+ Source workspace export containing manifest.json and items/.
34
44
 
35
45
  # flags.apply.summary
36
46
 
@@ -0,0 +1,21 @@
1
+ # summary
2
+
3
+ Show offline CMS contract and capability information.
4
+
5
+ # description
6
+
7
+ Reports the versioned CLI JSON contracts, package compatibility, tested API baseline, and truthfully evidenced CMS capabilities without contacting an org.
8
+
9
+ # examples
10
+
11
+ - Show the installed plugin's offline capability envelope:
12
+
13
+ <%= config.bin %> <%= command.id %> --json
14
+
15
+ - Explicitly select supported command-result major 1:
16
+
17
+ <%= config.bin %> <%= command.id %> --contract-version 1 --json
18
+
19
+ # flags.contract-version.summary
20
+
21
+ Machine contract major version (supported: 1).
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sf-plugin-cms",
3
- "version": "0.1.0",
4
- "description": "Salesforce CLI plugin scaffold for Marketing Cloud CMS",
3
+ "version": "0.3.0",
4
+ "description": "Salesforce CLI plugin for Marketing Cloud CMS workspace export and create-only import",
5
5
  "author": {
6
6
  "name": "Jörn Berkefeld",
7
7
  "email": "joern.berkefeld@gmail.com"
@@ -72,6 +72,7 @@
72
72
  "devDependencies": {
73
73
  "@eslint/js": "9.39.4",
74
74
  "@oclif/plugin-command-snapshot": "5.3.33",
75
+ "@salesforce/cli": "2.150.6",
75
76
  "@salesforce/cli-plugins-testkit": "5.3.64",
76
77
  "@salesforce/dev-config": "4.3.3",
77
78
  "@types/chai": "4.3.20",
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-base.js","sourceRoot":"","sources":["../../../src/commands/cms/command-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAG/D,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,GAAG;IACT,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,iDAAiD;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAC;IAChD,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,+CAA+C;CACzD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;AACtF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;AAEpG,MAAM,OAAgB,UAAc,SAAQ,SAAY;IAC5C,KAAK,CAAC,aAAa,CAC3B,SAAiB,EACjB,UAAkB;QAElB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAChE,OAAO,OAAO,CAAC,UAAU,CAAC;IAC5B,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,SAAiB,EACjB,UAAkB;QAElB,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7D,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC9E,CAAC;IAES,QAAQ,CAAC,KAAa,EAAE,IAAa;QAC7C,IAAI,CAAC,KAAK,CAAC;YACT,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9B,EAAE,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;gBAC3B,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC7D,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAES,UAAU,CAAC,MAAiB;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;CACF;AAED,SAAS,WAAW,CAAC,MAAiB,EAAE,GAAW;IACjD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC"}