@salesforce/b2c-cli 0.0.0-nightly.20260119053920

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 (169) hide show
  1. package/README.md +222 -0
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +17 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +17 -0
  6. package/dist/commands/_test/index.d.ts +6 -0
  7. package/dist/commands/_test/index.js +39 -0
  8. package/dist/commands/_test/index.js.map +1 -0
  9. package/dist/commands/auth/token.d.ts +16 -0
  10. package/dist/commands/auth/token.js +35 -0
  11. package/dist/commands/auth/token.js.map +1 -0
  12. package/dist/commands/code/activate.d.ts +33 -0
  13. package/dist/commands/code/activate.js +83 -0
  14. package/dist/commands/code/activate.js.map +1 -0
  15. package/dist/commands/code/delete.d.ts +33 -0
  16. package/dist/commands/code/delete.js +67 -0
  17. package/dist/commands/code/delete.js.map +1 -0
  18. package/dist/commands/code/deploy.d.ts +38 -0
  19. package/dist/commands/code/deploy.js +141 -0
  20. package/dist/commands/code/deploy.js.map +1 -0
  21. package/dist/commands/code/list.d.ts +8 -0
  22. package/dist/commands/code/list.js +64 -0
  23. package/dist/commands/code/list.js.map +1 -0
  24. package/dist/commands/code/watch.d.ts +34 -0
  25. package/dist/commands/code/watch.js +70 -0
  26. package/dist/commands/code/watch.js.map +1 -0
  27. package/dist/commands/docs/download.d.ts +35 -0
  28. package/dist/commands/docs/download.js +58 -0
  29. package/dist/commands/docs/download.js.map +1 -0
  30. package/dist/commands/docs/read.d.ts +29 -0
  31. package/dist/commands/docs/read.js +70 -0
  32. package/dist/commands/docs/read.js.map +1 -0
  33. package/dist/commands/docs/schema.d.ts +32 -0
  34. package/dist/commands/docs/schema.js +68 -0
  35. package/dist/commands/docs/schema.js.map +1 -0
  36. package/dist/commands/docs/search.d.ts +33 -0
  37. package/dist/commands/docs/search.js +102 -0
  38. package/dist/commands/docs/search.js.map +1 -0
  39. package/dist/commands/job/export.d.ts +50 -0
  40. package/dist/commands/job/export.js +270 -0
  41. package/dist/commands/job/export.js.map +1 -0
  42. package/dist/commands/job/import.d.ts +38 -0
  43. package/dist/commands/job/import.js +143 -0
  44. package/dist/commands/job/import.js.map +1 -0
  45. package/dist/commands/job/run.d.ts +45 -0
  46. package/dist/commands/job/run.js +205 -0
  47. package/dist/commands/job/run.js.map +1 -0
  48. package/dist/commands/job/search.d.ts +37 -0
  49. package/dist/commands/job/search.js +102 -0
  50. package/dist/commands/job/search.js.map +1 -0
  51. package/dist/commands/job/wait.d.ts +38 -0
  52. package/dist/commands/job/wait.js +85 -0
  53. package/dist/commands/job/wait.js.map +1 -0
  54. package/dist/commands/mrt/env/create.d.ts +41 -0
  55. package/dist/commands/mrt/env/create.js +226 -0
  56. package/dist/commands/mrt/env/create.js.map +1 -0
  57. package/dist/commands/mrt/env/delete.d.ts +34 -0
  58. package/dist/commands/mrt/env/delete.js +94 -0
  59. package/dist/commands/mrt/env/delete.js.map +1 -0
  60. package/dist/commands/mrt/env/var/delete.d.ts +34 -0
  61. package/dist/commands/mrt/env/var/delete.js +53 -0
  62. package/dist/commands/mrt/env/var/delete.js.map +1 -0
  63. package/dist/commands/mrt/env/var/list.d.ts +28 -0
  64. package/dist/commands/mrt/env/var/list.js +71 -0
  65. package/dist/commands/mrt/env/var/list.js.map +1 -0
  66. package/dist/commands/mrt/env/var/set.d.ts +35 -0
  67. package/dist/commands/mrt/env/var/set.js +84 -0
  68. package/dist/commands/mrt/env/var/set.js.map +1 -0
  69. package/dist/commands/mrt/push.d.ts +37 -0
  70. package/dist/commands/mrt/push.js +122 -0
  71. package/dist/commands/mrt/push.js.map +1 -0
  72. package/dist/commands/ods/create.d.ts +42 -0
  73. package/dist/commands/ods/create.js +255 -0
  74. package/dist/commands/ods/create.js.map +1 -0
  75. package/dist/commands/ods/delete.d.ts +15 -0
  76. package/dist/commands/ods/delete.js +86 -0
  77. package/dist/commands/ods/delete.js.map +1 -0
  78. package/dist/commands/ods/get.d.ts +17 -0
  79. package/dist/commands/ods/get.js +99 -0
  80. package/dist/commands/ods/get.js.map +1 -0
  81. package/dist/commands/ods/info.d.ts +27 -0
  82. package/dist/commands/ods/info.js +109 -0
  83. package/dist/commands/ods/info.js.map +1 -0
  84. package/dist/commands/ods/list.d.ts +31 -0
  85. package/dist/commands/ods/list.js +166 -0
  86. package/dist/commands/ods/list.js.map +1 -0
  87. package/dist/commands/ods/restart.d.ts +16 -0
  88. package/dist/commands/ods/restart.js +51 -0
  89. package/dist/commands/ods/restart.js.map +1 -0
  90. package/dist/commands/ods/start.d.ts +16 -0
  91. package/dist/commands/ods/start.js +51 -0
  92. package/dist/commands/ods/start.js.map +1 -0
  93. package/dist/commands/ods/stop.d.ts +16 -0
  94. package/dist/commands/ods/stop.js +51 -0
  95. package/dist/commands/ods/stop.js.map +1 -0
  96. package/dist/commands/scapi/custom/status.d.ts +81 -0
  97. package/dist/commands/scapi/custom/status.js +321 -0
  98. package/dist/commands/scapi/custom/status.js.map +1 -0
  99. package/dist/commands/scapi/schemas/get.d.ts +86 -0
  100. package/dist/commands/scapi/schemas/get.js +317 -0
  101. package/dist/commands/scapi/schemas/get.js.map +1 -0
  102. package/dist/commands/scapi/schemas/list.d.ts +48 -0
  103. package/dist/commands/scapi/schemas/list.js +148 -0
  104. package/dist/commands/scapi/schemas/list.js.map +1 -0
  105. package/dist/commands/sites/list.d.ts +10 -0
  106. package/dist/commands/sites/list.js +56 -0
  107. package/dist/commands/sites/list.js.map +1 -0
  108. package/dist/commands/slas/client/create.d.ts +38 -0
  109. package/dist/commands/slas/client/create.js +168 -0
  110. package/dist/commands/slas/client/create.js.map +1 -0
  111. package/dist/commands/slas/client/delete.d.ts +34 -0
  112. package/dist/commands/slas/client/delete.js +54 -0
  113. package/dist/commands/slas/client/delete.js.map +1 -0
  114. package/dist/commands/slas/client/get.d.ts +29 -0
  115. package/dist/commands/slas/client/get.js +51 -0
  116. package/dist/commands/slas/client/get.js.map +1 -0
  117. package/dist/commands/slas/client/list.d.ts +30 -0
  118. package/dist/commands/slas/client/list.js +64 -0
  119. package/dist/commands/slas/client/list.js.map +1 -0
  120. package/dist/commands/slas/client/open.d.ts +25 -0
  121. package/dist/commands/slas/client/open.js +56 -0
  122. package/dist/commands/slas/client/open.js.map +1 -0
  123. package/dist/commands/slas/client/update.d.ts +60 -0
  124. package/dist/commands/slas/client/update.js +183 -0
  125. package/dist/commands/slas/client/update.js.map +1 -0
  126. package/dist/commands/webdav/get.d.ts +41 -0
  127. package/dist/commands/webdav/get.js +61 -0
  128. package/dist/commands/webdav/get.js.map +1 -0
  129. package/dist/commands/webdav/ls.d.ts +17 -0
  130. package/dist/commands/webdav/ls.js +101 -0
  131. package/dist/commands/webdav/ls.js.map +1 -0
  132. package/dist/commands/webdav/mkdir.d.ts +19 -0
  133. package/dist/commands/webdav/mkdir.js +48 -0
  134. package/dist/commands/webdav/mkdir.js.map +1 -0
  135. package/dist/commands/webdav/put.d.ts +23 -0
  136. package/dist/commands/webdav/put.js +107 -0
  137. package/dist/commands/webdav/put.js.map +1 -0
  138. package/dist/commands/webdav/rm.d.ts +40 -0
  139. package/dist/commands/webdav/rm.js +67 -0
  140. package/dist/commands/webdav/rm.js.map +1 -0
  141. package/dist/commands/webdav/unzip.d.ts +15 -0
  142. package/dist/commands/webdav/unzip.js +48 -0
  143. package/dist/commands/webdav/unzip.js.map +1 -0
  144. package/dist/commands/webdav/zip.d.ts +15 -0
  145. package/dist/commands/webdav/zip.js +47 -0
  146. package/dist/commands/webdav/zip.js.map +1 -0
  147. package/dist/i18n/index.d.ts +29 -0
  148. package/dist/i18n/index.js +43 -0
  149. package/dist/i18n/index.js.map +1 -0
  150. package/dist/i18n/locales/de.d.ts +51 -0
  151. package/dist/i18n/locales/de.js +57 -0
  152. package/dist/i18n/locales/de.js.map +1 -0
  153. package/dist/i18n/locales/en.d.ts +118 -0
  154. package/dist/i18n/locales/en.js +124 -0
  155. package/dist/i18n/locales/en.js.map +1 -0
  156. package/dist/i18n/locales/index.d.ts +177 -0
  157. package/dist/i18n/locales/index.js +26 -0
  158. package/dist/i18n/locales/index.js.map +1 -0
  159. package/dist/index.d.ts +3 -0
  160. package/dist/index.js +13 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/utils/scapi/schemas.d.ts +40 -0
  163. package/dist/utils/scapi/schemas.js +49 -0
  164. package/dist/utils/scapi/schemas.js.map +1 -0
  165. package/dist/utils/slas/client.d.ts +65 -0
  166. package/dist/utils/slas/client.js +146 -0
  167. package/dist/utils/slas/client.js.map +1 -0
  168. package/oclif.manifest.json +10942 -0
  169. package/package.json +154 -0
@@ -0,0 +1,38 @@
1
+ import { SlasClientCommand, type ClientOutput } from '../../../utils/slas/client.js';
2
+ export default class SlasClientCreate extends SlasClientCommand<typeof SlasClientCreate> {
3
+ static args: {
4
+ clientId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static enableJsonFlag: boolean;
8
+ static examples: string[];
9
+ static flags: {
10
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ channels: import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
12
+ scopes: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'default-scopes': import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ 'redirect-uri': import("@oclif/core/interfaces").OptionFlag<string[], import("@oclif/core/interfaces").CustomOptions>;
15
+ 'callback-uri': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ secret: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ public: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
+ 'create-tenant': import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ 'tenant-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
20
+ 'client-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ 'client-secret': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ scope: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ 'short-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ 'auth-methods': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ 'account-manager-host': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
28
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
29
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
30
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
31
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
32
+ 'working-directory': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
33
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
34
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
35
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
36
+ };
37
+ run(): Promise<ClientOutput>;
38
+ }
@@ -0,0 +1,168 @@
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 { Args, Flags } from '@oclif/core';
7
+ import { randomUUID } from 'node:crypto';
8
+ import { SlasClientCommand, normalizeClientResponse, printClientDetails, formatApiError, } from '../../../utils/slas/client.js';
9
+ import { t } from '../../../i18n/index.js';
10
+ const DEFAULT_SCOPES = [
11
+ 'sfcc.shopper-baskets-orders.rw',
12
+ 'sfcc.shopper-categories',
13
+ 'sfcc.shopper-customers.login',
14
+ 'sfcc.shopper-customers.register',
15
+ 'sfcc.shopper-discovery-search',
16
+ 'sfcc.shopper-gift-certificates',
17
+ 'sfcc.shopper-myaccount.addresses.rw',
18
+ 'sfcc.shopper-myaccount.baskets',
19
+ 'sfcc.shopper-myaccount.orders',
20
+ 'sfcc.shopper-myaccount.paymentinstruments.rw',
21
+ 'sfcc.shopper-myaccount.productlists.rw',
22
+ 'sfcc.shopper-myaccount.rw',
23
+ 'sfcc.shopper-configurations',
24
+ 'sfcc.shopper-product-search',
25
+ 'sfcc.shopper-productlists',
26
+ 'sfcc.shopper-products',
27
+ 'sfcc.shopper-promotions',
28
+ 'sfcc.shopper-stores',
29
+ ];
30
+ export default class SlasClientCreate extends SlasClientCommand {
31
+ static args = {
32
+ clientId: Args.string({
33
+ description: 'SLAS client ID to create or update (generates UUID if omitted)',
34
+ required: false,
35
+ }),
36
+ };
37
+ static description = t('commands.slas.client.create.description', 'Create or update a SLAS client');
38
+ static enableJsonFlag = true;
39
+ static examples = [
40
+ '<%= config.bin %> <%= command.id %> --tenant-id abcd_123 --channels RefArch --scopes sfcc.shopper-products,sfcc.shopper-search --redirect-uri http://localhost:3000/callback',
41
+ '<%= config.bin %> <%= command.id %> my-client-id --tenant-id abcd_123 --name "My Client" --channels RefArch --scopes sfcc.shopper-products --redirect-uri http://localhost:3000/callback --public',
42
+ '<%= config.bin %> <%= command.id %> my-client-id --tenant-id abcd_123 --name "My Client" --channels RefArch --scopes sfcc.shopper-products --redirect-uri http://localhost:3000/callback --json',
43
+ '<%= config.bin %> <%= command.id %> --tenant-id abcd_123 --channels RefArch --default-scopes --redirect-uri http://localhost:3000/callback',
44
+ ];
45
+ static flags = {
46
+ ...SlasClientCommand.baseFlags,
47
+ name: Flags.string({
48
+ description: 'Display name for the client (generates timestamped name if omitted)',
49
+ }),
50
+ channels: Flags.string({
51
+ description: 'Site IDs/channels (comma-separated)',
52
+ required: true,
53
+ multiple: true,
54
+ multipleNonGreedy: true,
55
+ delimiter: ',',
56
+ }),
57
+ scopes: Flags.string({
58
+ description: 'OAuth scopes for the client (comma-separated)',
59
+ required: false,
60
+ multiple: true,
61
+ multipleNonGreedy: true,
62
+ delimiter: ',',
63
+ }),
64
+ 'default-scopes': Flags.boolean({
65
+ description: 'Use default shopper scopes (alternative to --scopes)',
66
+ default: false,
67
+ }),
68
+ 'redirect-uri': Flags.string({
69
+ description: 'Redirect URIs (comma-separated)',
70
+ required: true,
71
+ multiple: true,
72
+ multipleNonGreedy: true,
73
+ delimiter: ',',
74
+ }),
75
+ 'callback-uri': Flags.string({
76
+ description: 'Callback URIs for passwordless login (comma-separated)',
77
+ multiple: true,
78
+ multipleNonGreedy: true,
79
+ delimiter: ',',
80
+ }),
81
+ secret: Flags.string({
82
+ description: 'Client secret for private clients (if omitted, one will be generated)',
83
+ }),
84
+ public: Flags.boolean({
85
+ description: 'Create a public client (default is private)',
86
+ default: false,
87
+ }),
88
+ 'create-tenant': Flags.boolean({
89
+ description: 'Automatically create tenant if it does not exist',
90
+ default: true,
91
+ allowNo: true,
92
+ }),
93
+ };
94
+ async run() {
95
+ this.requireOAuthCredentials();
96
+ const { 'tenant-id': tenantId, name, channels, scopes, 'default-scopes': useDefaultScopes, 'redirect-uri': redirectUri, 'callback-uri': callbackUri, secret, public: isPublic, 'create-tenant': createTenant, } = this.flags;
97
+ // Validate that either --scopes or --default-scopes is provided
98
+ if (!scopes && !useDefaultScopes) {
99
+ this.error(t('commands.slas.client.create.scopesRequired', 'Either --scopes or --default-scopes must be provided'));
100
+ }
101
+ // Use provided client ID or generate a UUID
102
+ const clientId = this.args.clientId ?? randomUUID().toLowerCase();
103
+ // Use provided name or generate a timestamped name
104
+ const clientName = name ?? `b2c-cli client ${new Date().toISOString()}`;
105
+ // oclif handles comma-separation via delimiter option
106
+ const parsedChannels = channels;
107
+ const parsedScopes = useDefaultScopes ? DEFAULT_SCOPES : scopes;
108
+ const parsedRedirectUri = redirectUri;
109
+ const parsedCallbackUri = callbackUri;
110
+ if (!this.jsonEnabled()) {
111
+ this.log(t('commands.slas.client.create.creating', 'Creating/updating SLAS client {{clientId}}...', { clientId }));
112
+ }
113
+ const slasClient = this.getSlasClient();
114
+ // Ensure tenant exists before creating client (if enabled)
115
+ if (createTenant) {
116
+ await this.ensureTenantExists(slasClient, tenantId);
117
+ }
118
+ // Build body - secret should only be included for private clients
119
+ const body = {
120
+ clientId,
121
+ name: clientName,
122
+ channels: parsedChannels,
123
+ scopes: parsedScopes,
124
+ redirectUri: parsedRedirectUri,
125
+ callbackUri: parsedCallbackUri,
126
+ isPrivateClient: !isPublic,
127
+ };
128
+ // Only include secret for private clients
129
+ if (!isPublic) {
130
+ body.secret = secret ?? `sk_${randomUUID().replaceAll('-', '')}`;
131
+ }
132
+ const { data, error, response } = await slasClient.PUT('/tenants/{tenantId}/clients/{clientId}', {
133
+ params: {
134
+ path: { tenantId, clientId },
135
+ },
136
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
137
+ body: body,
138
+ });
139
+ if (error) {
140
+ this.error(t('commands.slas.client.create.error', 'Failed to create/update SLAS client: {{message}}', {
141
+ message: formatApiError(error),
142
+ }));
143
+ }
144
+ const client = data;
145
+ const wasCreated = response.status === 201;
146
+ const output = normalizeClientResponse(client);
147
+ // Use our parsed values as fallback if API doesn't return them
148
+ if (output.scopes.length === 0)
149
+ output.scopes = parsedScopes;
150
+ if (output.channels.length === 0)
151
+ output.channels = parsedChannels;
152
+ if (!output.redirectUri)
153
+ output.redirectUri = parsedRedirectUri.join(', ');
154
+ if (this.jsonEnabled()) {
155
+ return output;
156
+ }
157
+ // Human-readable output
158
+ if (wasCreated) {
159
+ this.log(t('commands.slas.client.create.created', 'SLAS client created successfully.'));
160
+ }
161
+ else {
162
+ this.log(t('commands.slas.client.create.updated', 'SLAS client updated successfully.'));
163
+ }
164
+ printClientDetails(output);
165
+ return output;
166
+ }
167
+ }
168
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/slas/client/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { SlasClientCommand } from '../../../utils/slas/client.js';
2
+ interface DeleteOutput {
3
+ clientId: string;
4
+ deleted: boolean;
5
+ }
6
+ export default class SlasClientDelete extends SlasClientCommand<typeof SlasClientDelete> {
7
+ static args: {
8
+ clientId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
9
+ };
10
+ static description: string;
11
+ static enableJsonFlag: boolean;
12
+ static examples: string[];
13
+ static flags: {
14
+ 'tenant-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'client-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'client-secret': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ scope: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ 'short-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ 'auth-methods': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ 'account-manager-host': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
23
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
24
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ 'working-directory': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
28
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
29
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
30
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
31
+ };
32
+ run(): Promise<DeleteOutput>;
33
+ }
34
+ export {};
@@ -0,0 +1,54 @@
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 { Args } from '@oclif/core';
7
+ import { SlasClientCommand, formatApiError } from '../../../utils/slas/client.js';
8
+ import { t } from '../../../i18n/index.js';
9
+ export default class SlasClientDelete extends SlasClientCommand {
10
+ static args = {
11
+ clientId: Args.string({
12
+ description: 'SLAS client ID to delete',
13
+ required: true,
14
+ }),
15
+ };
16
+ static description = t('commands.slas.client.delete.description', 'Delete a SLAS client');
17
+ static enableJsonFlag = true;
18
+ static examples = [
19
+ '<%= config.bin %> <%= command.id %> my-client-id --tenant-id abcd_123',
20
+ '<%= config.bin %> <%= command.id %> my-client-id --tenant-id abcd_123 --json',
21
+ ];
22
+ static flags = {
23
+ ...SlasClientCommand.baseFlags,
24
+ };
25
+ async run() {
26
+ this.requireOAuthCredentials();
27
+ const { 'tenant-id': tenantId } = this.flags;
28
+ const { clientId } = this.args;
29
+ if (!this.jsonEnabled()) {
30
+ this.log(t('commands.slas.client.delete.deleting', 'Deleting SLAS client {{clientId}}...', { clientId }));
31
+ }
32
+ const slasClient = this.getSlasClient();
33
+ const { error } = await slasClient.DELETE('/tenants/{tenantId}/clients/{clientId}', {
34
+ params: {
35
+ path: { tenantId, clientId },
36
+ },
37
+ });
38
+ if (error) {
39
+ this.error(t('commands.slas.client.delete.error', 'Failed to delete SLAS client: {{message}}', {
40
+ message: formatApiError(error),
41
+ }));
42
+ }
43
+ const output = {
44
+ clientId,
45
+ deleted: true,
46
+ };
47
+ if (this.jsonEnabled()) {
48
+ return output;
49
+ }
50
+ this.log(t('commands.slas.client.delete.success', 'SLAS client {{clientId}} deleted successfully.', { clientId }));
51
+ return output;
52
+ }
53
+ }
54
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../src/commands/slas/client/delete.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EAAC,iBAAiB,EAAE,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAC,CAAC,EAAC,MAAM,wBAAwB,CAAC;AAOzC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,iBAA0C;IACtF,MAAM,CAAC,IAAI,GAAG;QACZ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,0BAA0B;YACvC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,yCAAyC,EAAE,sBAAsB,CAAC,CAAC;IAE1F,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,uEAAuE;QACvE,8EAA8E;KAC/E,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,iBAAiB,CAAC,SAAS;KAC/B,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,EAAC,WAAW,EAAE,QAAQ,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3C,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,sCAAsC,EAAE,sCAAsC,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAExC,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,wCAAwC,EAAE;YAChF,MAAM,EAAE;gBACN,IAAI,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAC;aAC3B;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,CACR,CAAC,CAAC,mCAAmC,EAAE,2CAA2C,EAAE;gBAClF,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;aAC/B,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAiB;YAC3B,QAAQ;YACR,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,qCAAqC,EAAE,gDAAgD,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QAEjH,OAAO,MAAM,CAAC;IAChB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { SlasClientCommand, type ClientOutput } from '../../../utils/slas/client.js';
2
+ export default class SlasClientGet extends SlasClientCommand<typeof SlasClientGet> {
3
+ static args: {
4
+ clientId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static enableJsonFlag: boolean;
8
+ static examples: string[];
9
+ static flags: {
10
+ 'tenant-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'client-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'client-secret': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ scope: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'short-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'auth-methods': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'account-manager-host': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ 'working-directory': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ };
28
+ run(): Promise<ClientOutput>;
29
+ }
@@ -0,0 +1,51 @@
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 { Args } from '@oclif/core';
7
+ import { SlasClientCommand, normalizeClientResponse, printClientDetails, formatApiError, } from '../../../utils/slas/client.js';
8
+ import { t } from '../../../i18n/index.js';
9
+ export default class SlasClientGet extends SlasClientCommand {
10
+ static args = {
11
+ clientId: Args.string({
12
+ description: 'SLAS client ID to retrieve',
13
+ required: true,
14
+ }),
15
+ };
16
+ static description = t('commands.slas.client.get.description', 'Get a SLAS client');
17
+ static enableJsonFlag = true;
18
+ static examples = [
19
+ '<%= config.bin %> <%= command.id %> my-client-id --tenant-id abcd_123',
20
+ '<%= config.bin %> <%= command.id %> my-client-id --tenant-id abcd_123 --json',
21
+ ];
22
+ static flags = {
23
+ ...SlasClientCommand.baseFlags,
24
+ };
25
+ async run() {
26
+ this.requireOAuthCredentials();
27
+ const { 'tenant-id': tenantId } = this.flags;
28
+ const { clientId } = this.args;
29
+ if (!this.jsonEnabled()) {
30
+ this.log(t('commands.slas.client.get.fetching', 'Fetching SLAS client {{clientId}}...', { clientId }));
31
+ }
32
+ const slasClient = this.getSlasClient();
33
+ const { data, error } = await slasClient.GET('/tenants/{tenantId}/clients/{clientId}', {
34
+ params: {
35
+ path: { tenantId, clientId },
36
+ },
37
+ });
38
+ if (error) {
39
+ this.error(t('commands.slas.client.get.error', 'Failed to get SLAS client: {{message}}', {
40
+ message: formatApiError(error),
41
+ }));
42
+ }
43
+ const output = normalizeClientResponse(data);
44
+ if (this.jsonEnabled()) {
45
+ return output;
46
+ }
47
+ printClientDetails(output, false);
48
+ return output;
49
+ }
50
+ }
51
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/slas/client/get.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EACL,iBAAiB,EAGjB,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,CAAC,EAAC,MAAM,wBAAwB,CAAC;AAEzC,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,iBAAuC;IAChF,MAAM,CAAC,IAAI,GAAG;QACZ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,4BAA4B;YACzC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,sCAAsC,EAAE,mBAAmB,CAAC,CAAC;IAEpF,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,uEAAuE;QACvE,8EAA8E;KAC/E,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,iBAAiB,CAAC,SAAS;KAC/B,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,EAAC,WAAW,EAAE,QAAQ,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3C,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC,EAAE,sCAAsC,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QACvG,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAExC,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,wCAAwC,EAAE;YACnF,MAAM,EAAE;gBACN,IAAI,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAC;aAC3B;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,CACR,CAAC,CAAC,gCAAgC,EAAE,wCAAwC,EAAE;gBAC5E,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;aAC/B,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAc,CAAC,CAAC;QAEvD,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAElC,OAAO,MAAM,CAAC;IAChB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { SlasClientCommand, type ClientOutput } from '../../../utils/slas/client.js';
2
+ interface ClientListOutput {
3
+ clients: ClientOutput[];
4
+ }
5
+ export default class SlasClientList extends SlasClientCommand<typeof SlasClientList> {
6
+ static description: string;
7
+ static enableJsonFlag: boolean;
8
+ static examples: string[];
9
+ static flags: {
10
+ 'tenant-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'client-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ 'client-secret': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ scope: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ 'short-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ 'auth-methods': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ 'account-manager-host': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ 'working-directory': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ };
28
+ run(): Promise<ClientListOutput>;
29
+ }
30
+ export {};
@@ -0,0 +1,64 @@
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 { createTable } from '@salesforce/b2c-tooling-sdk/cli';
7
+ import { SlasClientCommand, normalizeClientResponse, formatApiError, } from '../../../utils/slas/client.js';
8
+ import { t } from '../../../i18n/index.js';
9
+ const COLUMNS = {
10
+ clientId: {
11
+ header: 'Client ID',
12
+ get: (c) => c.clientId,
13
+ },
14
+ name: {
15
+ header: 'Name',
16
+ get: (c) => c.name,
17
+ },
18
+ isPrivate: {
19
+ header: 'Private',
20
+ get: (c) => String(c.isPrivateClient),
21
+ },
22
+ };
23
+ const DEFAULT_COLUMNS = ['clientId', 'name', 'isPrivate'];
24
+ export default class SlasClientList extends SlasClientCommand {
25
+ static description = t('commands.slas.client.list.description', 'List SLAS clients for a tenant');
26
+ static enableJsonFlag = true;
27
+ static examples = [
28
+ '<%= config.bin %> <%= command.id %> --tenant-id abcd_123',
29
+ '<%= config.bin %> <%= command.id %> --tenant-id abcd_123 --json',
30
+ ];
31
+ static flags = {
32
+ ...SlasClientCommand.baseFlags,
33
+ };
34
+ async run() {
35
+ this.requireOAuthCredentials();
36
+ const { 'tenant-id': tenantId } = this.flags;
37
+ if (!this.jsonEnabled()) {
38
+ this.log(t('commands.slas.client.list.fetching', 'Fetching SLAS clients for tenant {{tenantId}}...', { tenantId }));
39
+ }
40
+ const slasClient = this.getSlasClient();
41
+ const { data, error } = await slasClient.GET('/tenants/{tenantId}/clients', {
42
+ params: {
43
+ path: { tenantId },
44
+ },
45
+ });
46
+ if (error) {
47
+ this.error(t('commands.slas.client.list.error', 'Failed to list SLAS clients: {{message}}', {
48
+ message: formatApiError(error),
49
+ }));
50
+ }
51
+ const clients = (data?.data ?? []).map((client) => normalizeClientResponse(client));
52
+ const output = { clients };
53
+ if (this.jsonEnabled()) {
54
+ return output;
55
+ }
56
+ if (clients.length === 0) {
57
+ this.log(t('commands.slas.client.list.noClients', 'No SLAS clients found.'));
58
+ return output;
59
+ }
60
+ createTable(COLUMNS).render(clients, DEFAULT_COLUMNS);
61
+ return output;
62
+ }
63
+ }
64
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/slas/client/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,WAAW,EAAiB,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EACL,iBAAiB,EAGjB,uBAAuB,EACvB,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAC,CAAC,EAAC,MAAM,wBAAwB,CAAC;AAMzC,MAAM,OAAO,GAA4C;IACvD,QAAQ,EAAE;QACR,MAAM,EAAE,WAAW;QACnB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ;KACvB;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;KACnB;IACD,SAAS,EAAE;QACT,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC;KACtC;CACF,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAE1D,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,iBAAwC;IAClF,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,uCAAuC,EAAE,gCAAgC,CAAC,CAAC;IAElG,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,QAAQ,GAAG;QAChB,0DAA0D;QAC1D,iEAAiE;KAClE,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,iBAAiB,CAAC,SAAS;KAC/B,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,MAAM,EAAC,WAAW,EAAE,QAAQ,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,oCAAoC,EAAE,kDAAkD,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC;QACpH,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAExC,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,6BAA6B,EAAE;YACxE,MAAM,EAAE;gBACN,IAAI,EAAE,EAAC,QAAQ,EAAC;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,CACR,CAAC,CAAC,iCAAiC,EAAE,0CAA0C,EAAE;gBAC/E,OAAO,EAAE,cAAc,CAAC,KAAK,CAAC;aAC/B,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,CAAE,IAA0B,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3G,MAAM,MAAM,GAAqB,EAAC,OAAO,EAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,qCAAqC,EAAE,wBAAwB,CAAC,CAAC,CAAC;YAC7E,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAEtD,OAAO,MAAM,CAAC;IAChB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
2
+ export default class SlasClientOpen extends BaseCommand<typeof SlasClientOpen> {
3
+ static args: {
4
+ clientId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ 'tenant-id': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
+ 'short-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'log-level': import("@oclif/core/interfaces").OptionFlag<"trace" | "debug" | "info" | "warn" | "error" | "silent" | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ lang: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ instance: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'working-directory': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ 'extra-query': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ 'extra-body': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ 'extra-headers': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ };
22
+ run(): Promise<{
23
+ url: string;
24
+ }>;
25
+ }
@@ -0,0 +1,56 @@
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 { Args, Flags } from '@oclif/core';
7
+ import { BaseCommand } from '@salesforce/b2c-tooling-sdk/cli';
8
+ import { t } from '../../../i18n/index.js';
9
+ async function openBrowser(url) {
10
+ try {
11
+ const open = await import('open');
12
+ await open.default(url);
13
+ }
14
+ catch {
15
+ // If open fails, the URL will still be printed to console
16
+ }
17
+ }
18
+ export default class SlasClientOpen extends BaseCommand {
19
+ static args = {
20
+ clientId: Args.string({
21
+ description: 'SLAS client ID to open in the admin UI',
22
+ required: true,
23
+ }),
24
+ };
25
+ static description = t('commands.slas.client.open.description', 'Open the SLAS Admin UI for a client');
26
+ static examples = [
27
+ '<%= config.bin %> <%= command.id %> my-client-id --tenant-id abcd_123',
28
+ '<%= config.bin %> <%= command.id %> my-client-id --tenant-id abcd_123 --short-code kv7kzm78',
29
+ ];
30
+ static flags = {
31
+ ...BaseCommand.baseFlags,
32
+ 'tenant-id': Flags.string({
33
+ description: 'SLAS tenant ID (organization ID)',
34
+ env: 'SFCC_TENANT_ID',
35
+ required: true,
36
+ }),
37
+ 'short-code': Flags.string({
38
+ description: 'SCAPI short code',
39
+ env: 'SFCC_SHORTCODE',
40
+ }),
41
+ };
42
+ async run() {
43
+ const { 'tenant-id': tenantId, 'short-code': shortCodeFlag } = this.flags;
44
+ const { clientId } = this.args;
45
+ const shortCode = shortCodeFlag ?? this.resolvedConfig.values.shortCode;
46
+ if (!shortCode) {
47
+ this.error(t('error.shortCodeRequired', 'SCAPI short code required. Provide --short-code, set SFCC_SHORTCODE, or configure short-code in dw.json.'));
48
+ }
49
+ const url = `https://${shortCode}.api.commercecloud.salesforce.com/shopper/auth-admin/v1/ui/client?clientId=${encodeURIComponent(clientId)}&tenantId=${encodeURIComponent(tenantId)}`;
50
+ this.log(t('commands.slas.client.open.opening', 'Opening SLAS Admin UI...'));
51
+ this.log(url);
52
+ await openBrowser(url);
53
+ return { url };
54
+ }
55
+ }
56
+ //# sourceMappingURL=open.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../../../../src/commands/slas/client/open.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAC,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAC,WAAW,EAAC,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAC,CAAC,EAAC,MAAM,wBAAwB,CAAC;AAEzC,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,0DAA0D;IAC5D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAkC;IAC5E,MAAM,CAAC,IAAI,GAAG;QACZ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,uCAAuC,EAAE,qCAAqC,CAAC,CAAC;IAEvG,MAAM,CAAC,QAAQ,GAAG;QAChB,uEAAuE;QACvE,6FAA6F;KAC9F,CAAC;IAEF,MAAM,CAAC,KAAK,GAAG;QACb,GAAG,WAAW,CAAC,SAAS;QACxB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;YACxB,WAAW,EAAE,kCAAkC;YAC/C,GAAG,EAAE,gBAAgB;YACrB,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;YACzB,WAAW,EAAE,kBAAkB;YAC/B,GAAG,EAAE,gBAAgB;SACtB,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACxE,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7B,MAAM,SAAS,GAAG,aAAa,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC;QAExE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CACR,CAAC,CACC,yBAAyB,EACzB,0GAA0G,CAC3G,CACF,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,WAAW,SAAS,8EAA8E,kBAAkB,CAAC,QAAQ,CAAC,aAAa,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAEtL,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,mCAAmC,EAAE,0BAA0B,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEd,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QAEvB,OAAO,EAAC,GAAG,EAAC,CAAC;IACf,CAAC"}