@axway/axway-central-cli 3.9.0-rc.2 → 3.9.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.
@@ -12,8 +12,6 @@ var _resultsRenderers = require("../../common/resultsRenderers");
12
12
  var _TmpFile = _interopRequireDefault(require("../../common/TmpFile"));
13
13
  var _types = require("../../common/types");
14
14
  var _utils = require("../../common/utils");
15
- var _ApiServerClient = require("../../common/ApiServerClient");
16
- var _DefinitionsManager = require("../../common/DefinitionsManager");
17
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
16
  const {
19
17
  log
@@ -27,35 +25,19 @@ const action = async ({
27
25
  account,
28
26
  name,
29
27
  output,
30
- region,
31
- cache
28
+ region
32
29
  } = argv;
33
30
  log(`editing ${name} env`);
34
31
  let file;
35
32
  let commandIsSuccessful = true;
36
33
  const render = new _Renderer.default(console, output).startSpin(`Fetching details of "environment/${name}".`);
37
34
  try {
38
- var _defsManager$findDefs, _defsManager$findDefs2;
39
- const client = new _ApiServerClient.ApiServerClient({
40
- baseUrl,
41
- account,
42
- region,
43
- useCache: cache
44
- });
45
- const defsManager = new _DefinitionsManager.DefinitionsManager(client);
46
- await defsManager.init();
47
- const def = (_defsManager$findDefs = defsManager.findDefsByWord('env')) === null || _defsManager$findDefs === void 0 ? void 0 : (_defsManager$findDefs2 = _defsManager$findDefs.find(def => def)) === null || _defsManager$findDefs2 === void 0 ? void 0 : _defsManager$findDefs2.resource;
48
35
  const service = await (0, _dataService.dataService)({
49
36
  baseUrl,
50
37
  account,
51
38
  region
52
39
  });
53
- let response;
54
- let version = "v1alpha1";
55
- if (def) {
56
- version = (0, _utils.getLatestServedAPIVersion)(def);
57
- }
58
- response = await service.get(`/management/${version}/environments/${name}`);
40
+ let response = await service.get(`/management/v1alpha1/environments/${name}`);
59
41
  file = new _TmpFile.default(response);
60
42
  // stop spinner or it will interfere stdio of editor
61
43
  render.stopSpin();
@@ -67,7 +49,7 @@ const action = async ({
67
49
  const {
68
50
  docs
69
51
  } = await (0, _utils.loadAndVerifySpecs)(file.path, new Set([_types.Kind.Environment]));
70
- response = await service.put(`/management/${version}/environments/${name}`, docs[0]);
52
+ response = await service.put(`/management/v1alpha1/environments/${name}`, docs[0]);
71
53
  render.success((0, _cliKit.chalk)`{greenBright "environment/${name}" has successfully been edited.}`);
72
54
  // render result if output flag has been provided
73
55
  output && (0, _resultsRenderers.renderResponse)(console, response, output);
@@ -16,14 +16,15 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
16
16
  const {
17
17
  log
18
18
  } = (0, _snooplogg.default)('central: get');
19
- const getListOrByName = async (resourceDef, client, scopeName, resourceName, scopeDef, query, progressListener, expand, langDef) => {
19
+ const getListOrByName = async (resourceDef, client, scopeName, resourceName, scopeDef, query, progressListener, expand, langDef, fieldSet) => {
20
20
  return resourceName ? await client.getResourceByName({
21
21
  resourceDef,
22
22
  resourceName,
23
23
  scopeDef,
24
24
  scopeName,
25
25
  expand,
26
- langDef
26
+ langDef,
27
+ fieldSet
27
28
  }) : await client.getResourcesList({
28
29
  resourceDef,
29
30
  scopeDef,
@@ -31,7 +32,8 @@ const getListOrByName = async (resourceDef, client, scopeName, resourceName, sco
31
32
  query,
32
33
  progressListener,
33
34
  expand,
34
- langDef
35
+ langDef,
36
+ fieldSet
35
37
  });
36
38
  };
37
39
  const get = exports.get = {
@@ -159,7 +161,7 @@ ${defsManager.getDefsTableForHelpMsg()}`);
159
161
  */
160
162
  if (scope) {
161
163
  const results = await Promise.all(defs.filter(defs => !scope.kind || !defs.scope || defs.scope.spec.kind === scope.kind).map(async defs => ({
162
- response: await getListOrByName(defs.resource, client, scope.name, resourceName, defs.scope, query, progressListener, languageExpand, languageDefinition),
164
+ response: await getListOrByName(defs.resource, client, scope.name, resourceName, defs.scope, query, progressListener, languageExpand, languageDefinition, argv.output ? undefined : getFieldSetFromDefinitionColumns(defs)),
163
165
  cli: defs.cli
164
166
  })));
165
167
  results.forEach(({
@@ -179,7 +181,7 @@ ${defsManager.getDefsTableForHelpMsg()}`);
179
181
  }
180
182
  });
181
183
  const results = await Promise.all(Object.values(defsMatchingGroup).map(async defs => ({
182
- response: await getListOrByName(defs.resource, client, undefined, resourceName, undefined, query, progressListener, languageExpand, languageDefinition),
184
+ response: await getListOrByName(defs.resource, client, undefined, resourceName, undefined, query, progressListener, languageExpand, languageDefinition, argv.output ? undefined : getFieldSetFromDefinitionColumns(defs)),
183
185
  cli: defs.cli
184
186
  })));
185
187
  results.forEach(({
@@ -248,4 +250,23 @@ ${defsManager.getDefsTableForHelpMsg()}`);
248
250
  desc: `Show the language definition constraint of the returned object. One of: Comma Separated values of ${_types.LanguageTypes.French} | ${_types.LanguageTypes.US} | ${_types.LanguageTypes.German} | ${_types.LanguageTypes.Portugese}`
249
251
  }
250
252
  }
251
- };
253
+ };
254
+
255
+ /**
256
+ * Gets the resource field names to be shown when outputting the resource as a table.
257
+ * These names are to be assigned to the api-server HTTP GET request's "fields" query param.
258
+ * @param def The resource definition providing the columns to be shown in the outputed table.
259
+ * @returns Returns a set set of field names.
260
+ */
261
+ function getFieldSetFromDefinitionColumns(def) {
262
+ var _def$cli, _def$cli$spec, _def$cli$spec$columns;
263
+ const fieldSet = new Set();
264
+ (_def$cli = def.cli) === null || _def$cli === void 0 ? void 0 : (_def$cli$spec = _def$cli.spec) === null || _def$cli$spec === void 0 ? void 0 : (_def$cli$spec$columns = _def$cli$spec.columns) === null || _def$cli$spec$columns === void 0 ? void 0 : _def$cli$spec$columns.forEach(column => {
265
+ let fieldName = column.jsonPath;
266
+ if (fieldName.startsWith('.')) {
267
+ fieldName = fieldName.substring(1);
268
+ }
269
+ fieldSet.add(fieldName);
270
+ });
271
+ return fieldSet;
272
+ }
@@ -39,9 +39,9 @@ class AWSDataplaneConfig extends DataplaneConfig {
39
39
  class Sampling {
40
40
  constructor() {
41
41
  _defineProperty(this, "percentage", void 0);
42
- _defineProperty(this, "allErrors", void 0);
42
+ _defineProperty(this, "onlyErrors", void 0);
43
43
  this.percentage = 1;
44
- this.allErrors = true;
44
+ this.onlyErrors = true;
45
45
  }
46
46
  }
47
47
  class Sanitize {
@@ -156,7 +156,7 @@ const SaasPrompts = {
156
156
  TA_FREQUENCY: 'How often should the traffic collection run, leave blank for manual trigger only',
157
157
  QUEUE: 'Do you want to discover immediately after installation',
158
158
  SAMP_PERCENTAGE: 'Enter the percentage of transactions to sample',
159
- SAMP_ALL_ERRS: 'Do you want to see all errors regardless of sampling',
159
+ SAMP_ONLY_ERRS: 'Do you want to sample only the error transactions for Business and Consumer Insights',
160
160
  REDACT_SHOW: 'Enter a regular expression for {0}s that may be shown',
161
161
  ENTER_SANITIZE_RULE: 'Do you want to add sanitization rules for {0}s',
162
162
  SANITIZE_KEY: 'Enter a regular expression for {0} keys that values should be sanitized',
@@ -266,9 +266,10 @@ const askForSampling = async hostedAgentValues => {
266
266
  });
267
267
 
268
268
  // ask sampling all errorsSN
269
- hostedAgentValues.sampling.allErrors = (await (0, _basicPrompts.askList)({
270
- msg: SaasPrompts.SAMP_ALL_ERRS,
271
- choices: _types.YesNoChoices
269
+ hostedAgentValues.sampling.onlyErrors = (await (0, _basicPrompts.askList)({
270
+ msg: SaasPrompts.SAMP_ONLY_ERRS,
271
+ choices: _types.YesNoChoices,
272
+ default: _types.YesNo.No
272
273
  })) === _types.YesNo.Yes;
273
274
  return hostedAgentValues;
274
275
  };
@@ -54,9 +54,9 @@ class AzureDataplaneConfig extends DataplaneConfig {
54
54
  class Sampling {
55
55
  constructor() {
56
56
  _defineProperty(this, "percentage", void 0);
57
- _defineProperty(this, "allErrors", void 0);
57
+ _defineProperty(this, "onlyErrors", void 0);
58
58
  this.percentage = 1;
59
- this.allErrors = true;
59
+ this.onlyErrors = true;
60
60
  }
61
61
  }
62
62
  class Sanitize {
@@ -174,7 +174,7 @@ const SaasPrompts = {
174
174
  TA_FREQUENCY: 'How often should the traffic collection run, leave blank for manual trigger only',
175
175
  QUEUE: 'Do you want to discover immediately after installation',
176
176
  SAMP_PERCENTAGE: 'Enter the percentage of transactions to sample',
177
- SAMP_ALL_ERRS: 'Do you want to see all errors regardless of sampling',
177
+ SAMP_ONLY_ERRS: 'Do you want to sample only the error transactions for Business and Consumer Insights',
178
178
  REDACT_SHOW: 'Enter a regular expression for {0}s that may be shown',
179
179
  ENTER_SANITIZE_RULE: 'Do you want to add sanitization rules for {0}s',
180
180
  SANITIZE_KEY: 'Enter a regular expression for {0} keys that values should be sanitized',
@@ -288,9 +288,10 @@ const askForSampling = async hostedAgentValues => {
288
288
  });
289
289
 
290
290
  // ask sampling all errorsSN
291
- hostedAgentValues.sampling.allErrors = (await (0, _basicPrompts.askList)({
292
- msg: SaasPrompts.SAMP_ALL_ERRS,
293
- choices: _types.YesNoChoices
291
+ hostedAgentValues.sampling.onlyErrors = (await (0, _basicPrompts.askList)({
292
+ msg: SaasPrompts.SAMP_ONLY_ERRS,
293
+ choices: _types.YesNoChoices,
294
+ default: _types.YesNo.No
294
295
  })) === _types.YesNo.Yes;
295
296
  return hostedAgentValues;
296
297
  };
@@ -59,8 +59,9 @@ class ApiServerClient {
59
59
  /**
60
60
  * Build resource url based on its ResourceDefinition and passed scope def and name.
61
61
  * Note that for scope url part both name and def needed.
62
+ * The returned URL path is expected to be appended to the base URL.
62
63
  */
63
- buildResourceBaseUrl({
64
+ buildResourceUrlPath({
64
65
  resourceDef,
65
66
  resourceName,
66
67
  scopeDef,
@@ -68,60 +69,51 @@ class ApiServerClient {
68
69
  version = ApiServerVersions.v1alpha1,
69
70
  forceDelete = false,
70
71
  expand,
71
- langDef
72
+ langDef,
73
+ fieldSet
72
74
  }) {
73
75
  const groupUrl = `/${resourceDef.metadata.scope.name}/${version}`;
74
76
  const scopeUrl = scopeName && scopeDef ? `/${scopeDef.spec.plural}/${encodeURIComponent(scopeName)}` : '';
75
77
  const resourceUrl = `/${resourceDef.spec.plural}`;
76
78
  const nameUrl = resourceName ? `/${encodeURIComponent(resourceName)}` : '';
77
- const expandUrl = expand ? `?expand=${expand}` : '';
78
- const langDefUrl = langDef ? this.buildLanguageDefinitionUrl({
79
- langCode: langDef
80
- }) : '';
81
- const forceDeleteUrl = forceDelete ? `?forceDelete=${forceDelete}` : '';
82
- if (expand) {
83
- return `${groupUrl}${scopeUrl}${resourceUrl}${nameUrl}${expandUrl}`;
84
- } else if (langDef) {
85
- return `${groupUrl}${scopeUrl}${resourceUrl}${nameUrl}${langDefUrl}`;
86
- } else {
87
- return `${groupUrl}${scopeUrl}${resourceUrl}${nameUrl}${forceDeleteUrl}`;
88
- }
89
- }
90
-
91
- /**
92
- * Build language definition url based on the language code.
93
- */
94
- buildLanguageDefinitionUrl({
95
- langCode
96
- }) {
97
- let langDefUrl = '';
98
- let i = 0;
99
- let embed = '?embed=';
100
- let expand = '&expand=languages,';
101
- let fields = '&fields=languages,group,apiVersion,name,kind,metadata,';
102
- const langCodeArr = langCode.split(',');
103
- let languageTypesArr = [];
104
- Object.keys(_types.LanguageTypes).forEach(key => languageTypesArr.push((0, _utils.ValueFromKey)(_types.LanguageTypes, key)));
105
- langCodeArr.forEach(code => {
106
- if (code.trim() != '') {
107
- if (!languageTypesArr.includes(code)) {
79
+ const embedSet = new Set();
80
+ const expandSet = new Set(expand === null || expand === void 0 ? void 0 : expand.split(','));
81
+ if (langDef) {
82
+ var _fieldSet;
83
+ (_fieldSet = fieldSet) !== null && _fieldSet !== void 0 ? _fieldSet : fieldSet = new Set();
84
+ fieldSet.add('languages').add('group').add('apiVersion').add('name').add('kind').add('metadata');
85
+ expandSet.add('languages');
86
+ let languageTypesArr = [];
87
+ Object.keys(_types.LanguageTypes).forEach(key => languageTypesArr.push((0, _utils.ValueFromKey)(_types.LanguageTypes, key)));
88
+ langDef.split(',').forEach(code => {
89
+ if (languageTypesArr.includes(code)) {
90
+ embedSet.add(`languages-${code.trim()}.resource`);
91
+ expandSet.add(`languages-${code.trim()}`);
92
+ fieldSet.add(`languages-${code.trim()}.values`);
93
+ } else if (code.trim().length > 0) {
108
94
  console.log(_chalk.default.yellow(`\n\'${code}\' language code is not supported. Allowed language codes: ${_types.LanguageTypes.French} | ${_types.LanguageTypes.German} | ${_types.LanguageTypes.US} | ${_types.LanguageTypes.Portugese}.'`));
109
- } else {
110
- if (i < langCodeArr.length - 1) {
111
- embed = embed + `languages-${code.trim()}.resource` + ",";
112
- expand = expand + `languages-${code.trim()}` + ",";
113
- fields = fields + `languages-${code.trim()}.values` + ",";
114
- } else {
115
- embed = embed + `languages-${code.trim()}.resource`;
116
- expand = expand + `languages-${code.trim()}`;
117
- fields = fields + `languages-${code.trim()}.values`;
118
- }
119
95
  }
96
+ });
97
+ }
98
+ let url = `${groupUrl}${scopeUrl}${resourceUrl}${nameUrl}`;
99
+ if (forceDelete || embedSet.size || expandSet.size || fieldSet) {
100
+ const queryParams = [];
101
+ if (forceDelete) {
102
+ queryParams.push('forceDelete=true');
120
103
  }
121
- i++;
122
- });
123
- langDefUrl = `${embed}${expand}${fields}`;
124
- return langDefUrl;
104
+ if (embedSet.size) {
105
+ queryParams.push('embed=' + [...embedSet].join(','));
106
+ }
107
+ if (expandSet.size) {
108
+ queryParams.push('expand=' + [...expandSet].join(','));
109
+ }
110
+ if (fieldSet) {
111
+ // If field set is empty, then return no fields. This is intentional.
112
+ queryParams.push('fields=' + [...fieldSet].join(','));
113
+ }
114
+ url += '?' + queryParams.join('&');
115
+ }
116
+ return url;
125
117
  }
126
118
 
127
119
  /**
@@ -134,7 +126,7 @@ class ApiServerClient {
134
126
  * @param {ResourceDefinition} args.resourceDef resource definition
135
127
  * @param {string} [args.scopeName] scope name
136
128
  * @param {ResourceDefinition} [args.scopeDef] scope definition
137
- * @param {string} [args.version] api's version
129
+ * @param {ApiServerVersions} [args.version] api's version
138
130
  * @returns {Promise<Array<() => Promise<any> | null>} returns an array of "request creators" functions
139
131
  * that will be used in {@link resolveSubResourcesRequests} to create sub-resources when needed
140
132
  */
@@ -145,7 +137,7 @@ class ApiServerClient {
145
137
  resourceDef,
146
138
  scopeDef,
147
139
  scopeName,
148
- version,
140
+ version = ApiServerVersions.v1alpha1,
149
141
  createAction,
150
142
  language
151
143
  }) {
@@ -156,7 +148,7 @@ class ApiServerClient {
156
148
  account: this.account,
157
149
  team: this.team
158
150
  });
159
- const baseUrl = this.buildResourceBaseUrl({
151
+ const urlPath = this.buildResourceUrlPath({
160
152
  resourceDef,
161
153
  resourceName,
162
154
  scopeDef,
@@ -195,7 +187,7 @@ class ApiServerClient {
195
187
  return (0, _isEmpty.default)(foundSubResources) ? null : Object.keys(foundSubResources).map(key => {
196
188
  return {
197
189
  name: key,
198
- operation: () => service.put(`${baseUrl}/${key}?fields=${key}`, {
190
+ operation: () => service.put(`${urlPath}/${key}?fields=${key}`, {
199
191
  [key]: foundSubResources[key]
200
192
  }).catch(err => Promise.reject({
201
193
  name: key,
@@ -296,6 +288,7 @@ class ApiServerClient {
296
288
  resource,
297
289
  scopeDef,
298
290
  scopeName,
291
+ version = ApiServerVersions.v1alpha1,
299
292
  withSubResources = true,
300
293
  language
301
294
  }) {
@@ -313,14 +306,13 @@ class ApiServerClient {
313
306
  account: this.account,
314
307
  team: this.team
315
308
  });
316
- const version = resource.apiVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resource.apiVersion;
317
- const url = this.buildResourceBaseUrl({
309
+ const urlPath = this.buildResourceUrlPath({
318
310
  resourceDef,
319
311
  scopeDef,
320
312
  scopeName,
321
313
  version
322
314
  });
323
- const response = await service.post(url, (0, _utils.sanitizeMetadata)(resource));
315
+ const response = await service.post(urlPath, (0, _utils.sanitizeMetadata)(resource));
324
316
  if (!resource.name) {
325
317
  log('createResource, resource does not have a logical name');
326
318
  result.warning = true;
@@ -370,6 +362,7 @@ class ApiServerClient {
370
362
  resource,
371
363
  scopeDef,
372
364
  scopeName,
365
+ version = ApiServerVersions.v1alpha1,
373
366
  subResourceName,
374
367
  language
375
368
  }) {
@@ -380,7 +373,6 @@ class ApiServerClient {
380
373
  pending: null
381
374
  };
382
375
  const canUpdateMainResource = !language && !subResourceName;
383
- const version = resource.apiVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resource.apiVersion;
384
376
  if (canUpdateMainResource) {
385
377
  try {
386
378
  const service = await (0, _dataService.dataService)({
@@ -389,14 +381,14 @@ class ApiServerClient {
389
381
  account: this.account,
390
382
  team: this.team
391
383
  });
392
- const url = this.buildResourceBaseUrl({
384
+ const urlPath = this.buildResourceUrlPath({
393
385
  resourceDef,
394
386
  resourceName: resource.name,
395
387
  scopeDef,
396
388
  scopeName,
397
389
  version
398
390
  });
399
- result.data = await service.put(url, (0, _utils.sanitizeMetadata)(resource));
391
+ result.data = await service.put(urlPath, (0, _utils.sanitizeMetadata)(resource));
400
392
  } catch (e) {
401
393
  log('updateResource, error', e);
402
394
  // expecting only a valid ApiServer error response here
@@ -449,7 +441,8 @@ class ApiServerClient {
449
441
  resource,
450
442
  subResourceName,
451
443
  scopeDef,
452
- scopeName
444
+ scopeName,
445
+ version = ApiServerVersions.v1alpha1
453
446
  }) {
454
447
  log(`updateSubResource, spec.kind = ${resourceDef.spec.kind}, name = ${resource.name}`);
455
448
  const result = {
@@ -457,7 +450,6 @@ class ApiServerClient {
457
450
  error: null,
458
451
  pending: null
459
452
  };
460
- const version = (0, _utils.getLatestServedAPIVersion)(resourceDef);
461
453
  try {
462
454
  var _resourceDef$spec$sub3, _resourceDef$spec$sub4;
463
455
  const service = await (0, _dataService.dataService)({
@@ -469,14 +461,14 @@ class ApiServerClient {
469
461
  const knownSubResourcesNames = (_resourceDef$spec$sub3 = (_resourceDef$spec$sub4 = resourceDef.spec.subResources) === null || _resourceDef$spec$sub4 === void 0 ? void 0 : _resourceDef$spec$sub4.names) !== null && _resourceDef$spec$sub3 !== void 0 ? _resourceDef$spec$sub3 : [];
470
462
  const foundSubResources = (0, _pickBy.default)(resource, (_, key) => subResourceName == key && knownSubResourcesNames.includes(key));
471
463
  const resourceName = resource.name;
472
- const baseUrl = this.buildResourceBaseUrl({
464
+ const urlPath = this.buildResourceUrlPath({
473
465
  resourceDef,
474
466
  resourceName,
475
467
  scopeDef,
476
468
  scopeName,
477
469
  version
478
470
  });
479
- service.put(`${baseUrl}/${subResourceName}?fields=${subResourceName}`, {
471
+ service.put(`${urlPath}/${subResourceName}?fields=${subResourceName}`, {
480
472
  [subResourceName]: foundSubResources[subResourceName]
481
473
  });
482
474
  } catch (e) {
@@ -508,15 +500,14 @@ class ApiServerClient {
508
500
  scopeDef,
509
501
  scopeName,
510
502
  wait,
511
- forceDelete = false,
512
- resourceAPIVersion
503
+ version = ApiServerVersions.v1alpha1,
504
+ forceDelete = false
513
505
  }) {
514
506
  log(`deleteResourceByName, spec.kind = ${resourceDef.spec.kind}, name = ${resourceName}, scope.kind = ${scopeDef === null || scopeDef === void 0 ? void 0 : scopeDef.spec.kind}, scope.name = ${scopeName}`);
515
507
  const result = {
516
508
  data: null,
517
509
  error: null
518
510
  };
519
- const version = resourceAPIVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resourceAPIVersion;
520
511
  try {
521
512
  const service = await (0, _dataService.dataService)({
522
513
  baseUrl: this.baseUrl,
@@ -524,7 +515,7 @@ class ApiServerClient {
524
515
  account: this.account,
525
516
  team: this.team
526
517
  });
527
- const url = this.buildResourceBaseUrl({
518
+ const urlPath = this.buildResourceUrlPath({
528
519
  resourceDef,
529
520
  resourceName,
530
521
  scopeDef,
@@ -532,7 +523,7 @@ class ApiServerClient {
532
523
  version,
533
524
  forceDelete
534
525
  });
535
- const response = await service.delete(url);
526
+ const response = await service.delete(urlPath);
536
527
  // note: delete "response" value from api-server is translated to an empty string currently.
537
528
  // If its true, constructing a simple representation from provided data (definition, name, scope name)
538
529
  // and manually set it as the "data" key.
@@ -547,7 +538,8 @@ class ApiServerClient {
547
538
  resourceDef,
548
539
  resourceName,
549
540
  scopeDef,
550
- scopeName
541
+ scopeName,
542
+ version
551
543
  });
552
544
  if (!!res.data) {
553
545
  result.data = null;
@@ -585,13 +577,14 @@ class ApiServerClient {
585
577
  resourceDef,
586
578
  scopeDef,
587
579
  scopeName,
580
+ version = ApiServerVersions.v1alpha1,
588
581
  query,
589
582
  progressListener,
590
583
  expand,
591
- langDef
584
+ langDef,
585
+ fieldSet
592
586
  }) {
593
587
  log(`getResourcesList, spec.kind = ${resourceDef.spec.kind}`);
594
- const version = (0, _utils.getLatestServedAPIVersion)(resourceDef);
595
588
  const result = {
596
589
  data: null,
597
590
  error: null
@@ -603,15 +596,16 @@ class ApiServerClient {
603
596
  account: this.account,
604
597
  team: this.team
605
598
  });
606
- const url = this.buildResourceBaseUrl({
599
+ const urlPath = this.buildResourceUrlPath({
607
600
  resourceDef,
608
601
  scopeDef,
609
602
  scopeName,
610
603
  version,
611
604
  expand,
612
- langDef
605
+ langDef,
606
+ fieldSet
613
607
  });
614
- const response = await service.getWithPagination(url, query, 50, {}, progressListener);
608
+ const response = await service.getWithPagination(urlPath, query, 50, {}, progressListener);
615
609
  result.data = response;
616
610
  } catch (e) {
617
611
  log('getResourcesList, error: ', e);
@@ -639,12 +633,12 @@ class ApiServerClient {
639
633
  resourceName,
640
634
  scopeDef,
641
635
  scopeName,
636
+ version = ApiServerVersions.v1alpha1,
642
637
  expand,
643
638
  langDef,
644
- resourceVersion
639
+ fieldSet
645
640
  }) {
646
641
  log(`getResourceByName, spec.kind = ${resourceDef.spec.kind}, name = ${resourceName}`);
647
- const version = resourceVersion === undefined ? (0, _utils.getLatestServedAPIVersion)(resourceDef) : resourceVersion;
648
642
  const result = {
649
643
  data: null,
650
644
  error: null
@@ -656,16 +650,17 @@ class ApiServerClient {
656
650
  account: this.account,
657
651
  team: this.team
658
652
  });
659
- const url = this.buildResourceBaseUrl({
653
+ const urlPath = this.buildResourceUrlPath({
660
654
  resourceDef,
661
655
  resourceName,
662
656
  scopeDef,
663
657
  scopeName,
664
658
  version,
665
659
  expand,
666
- langDef
660
+ langDef,
661
+ fieldSet
667
662
  });
668
- const response = await service.get(url);
663
+ const response = await service.get(urlPath);
669
664
  result.data = response;
670
665
  } catch (e) {
671
666
  log('getResourceByName, error: ', e);
@@ -741,7 +736,7 @@ class ApiServerClient {
741
736
  * sorting of the array of resources with "compareResourcesByKindAsc".
742
737
  * @param resources array of resources to create
743
738
  */
744
- async bulkCreate(resources, sortedDefsMap) {
739
+ async bulkCreate(resources, sortedDefsMap, version) {
745
740
  log(`bulk create`);
746
741
  const sortedDefsArray = Array.from(sortedDefsMap.values());
747
742
  const pendingSubResources = [];
@@ -778,7 +773,8 @@ class ApiServerClient {
778
773
  resource,
779
774
  resourceDef,
780
775
  scopeDef,
781
- scopeName
776
+ scopeName,
777
+ version
782
778
  });
783
779
  if (res.data && !res.error) {
784
780
  // note: bulk operation requires creation of sub-resources after all main resources created
@@ -830,7 +826,7 @@ class ApiServerClient {
830
826
  * sorting of the array of resources with "compareResourcesByKindAsc".
831
827
  * @param resources array of resources to create
832
828
  */
833
- async bulkCreateOrUpdate(resources, sortedDefsMap, language, subResourceName) {
829
+ async bulkCreateOrUpdate(resources, sortedDefsMap, language, subResourceName, version) {
834
830
  log(`bulk create or update`);
835
831
  const sortedDefsArray = Array.from(sortedDefsMap.values());
836
832
  const applyResults = [];
@@ -868,8 +864,7 @@ class ApiServerClient {
868
864
  resourceDef,
869
865
  resourceName: resource.name,
870
866
  scopeDef,
871
- scopeName,
872
- resourceVersion: resource.apiVersion
867
+ scopeName
873
868
  }) : null;
874
869
 
875
870
  // Create new resources first
@@ -882,6 +877,7 @@ class ApiServerClient {
882
877
  resourceDef,
883
878
  scopeDef,
884
879
  scopeName,
880
+ version,
885
881
  language
886
882
  });
887
883
  } else if (getResult.data) {
@@ -891,6 +887,7 @@ class ApiServerClient {
891
887
  resourceDef,
892
888
  scopeDef,
893
889
  scopeName,
890
+ version,
894
891
  language,
895
892
  subResourceName
896
893
  });
@@ -956,7 +953,7 @@ class ApiServerClient {
956
953
  * Order of calls calculated by sorting of the array of resources with "compareResourcesByKindDesc".
957
954
  * @param resources array of resources to create
958
955
  */
959
- async bulkDelete(resources, sortedDefsMap, wait, forceDelete) {
956
+ async bulkDelete(resources, sortedDefsMap, wait, forceDelete, version) {
960
957
  log(`bulk delete`);
961
958
  const sortedDefsArray = Array.from(sortedDefsMap.values());
962
959
  const bulkResult = {
@@ -993,8 +990,8 @@ class ApiServerClient {
993
990
  resourceDef,
994
991
  scopeDef,
995
992
  scopeName,
996
- forceDelete,
997
- resourceAPIVersion: resource.apiVersion
993
+ version,
994
+ forceDelete
998
995
  });
999
996
  if (res.error) {
1000
997
  for (const nextError of res.error) {
@@ -126,7 +126,7 @@ const dataService = async ({
126
126
  clientId,
127
127
  team
128
128
  });
129
- const url = await getBaseUrl(baseUrl, basePath, region, orgRegion);
129
+ baseUrl = await getBaseUrl(baseUrl, basePath, region, orgRegion);
130
130
  const defaultHeaders = getDefaultHeaders({
131
131
  orgId,
132
132
  token
@@ -158,8 +158,8 @@ const dataService = async ({
158
158
  };
159
159
  return {
160
160
  postFormData: (route, body, headers = {}) => {
161
- log(`POST (from data): ${url + route}`);
162
- return fetch('post', url + route, {
161
+ log(`POST (from data): ${baseUrl + route}`);
162
+ return fetch('post', baseUrl + route, {
163
163
  headers: {
164
164
  ...defaultHeaders,
165
165
  ...body.getHeaders(),
@@ -169,9 +169,9 @@ const dataService = async ({
169
169
  }).then(handleResponse);
170
170
  },
171
171
  post: (route, data, headers = {}) => {
172
- log(`POST: ${url + route}`);
172
+ log(`POST: ${baseUrl + route}`);
173
173
  log(data);
174
- return fetch('post', url + route, {
174
+ return fetch('post', baseUrl + route, {
175
175
  headers: {
176
176
  ...defaultHeaders,
177
177
  ...headers
@@ -180,8 +180,8 @@ const dataService = async ({
180
180
  }).then(handleResponse);
181
181
  },
182
182
  put: (route, data, headers = {}) => {
183
- log(`PUT: ${url + route}`);
184
- return fetch('put', url + route, {
183
+ log(`PUT: ${baseUrl + route}`);
184
+ return fetch('put', baseUrl + route, {
185
185
  headers: {
186
186
  ...defaultHeaders,
187
187
  ...headers
@@ -194,8 +194,8 @@ const dataService = async ({
194
194
  ...defaultHeaders,
195
195
  ...headers
196
196
  };
197
- log(`GET: ${url + route}`, h);
198
- return fetch('get', url + route, {
197
+ log(`GET: ${baseUrl + route}`, h);
198
+ return fetch('get', baseUrl + route, {
199
199
  headers: h
200
200
  }).then(handleResponse);
201
201
  },
@@ -210,7 +210,10 @@ const dataService = async ({
210
210
  * @param progressListener invoked multiple times where argument is assigned progress value 0-100
211
211
  */
212
212
  getWithPagination: async function (route, queryParams = '', pageSize = 50, headers = {}, progressListener) {
213
- const fullUrl = queryParams ? new _url.URL(url + route + '?query=' + queryParams) : new _url.URL(url + route);
213
+ const fullUrl = new _url.URL(baseUrl + route);
214
+ if (queryParams) {
215
+ fullUrl.searchParams.set('query', queryParams);
216
+ }
214
217
  fullUrl.searchParams.set('pageSize', `${pageSize}`);
215
218
  log(`GET (with auto-pagination): ${fullUrl.href}`);
216
219
  const response = await fetch('get', fullUrl.toString(), {
@@ -241,9 +244,9 @@ const dataService = async ({
241
244
  for (let pageIndex = 1; pageIndex < totalPages; pageIndex++) {
242
245
  const thisPageIndex = pageIndex;
243
246
  fullUrl.searchParams.set('page', `${thisPageIndex + 1}`);
244
- const thisPageUrl = `${route}?${fullUrl.searchParams.toString()}`;
247
+ const nextRoute = fullUrl.href.substring(baseUrl.length);
245
248
  otherPagesCalls.push(limit(async () => {
246
- allPages[thisPageIndex] = await this.get(thisPageUrl, headers);
249
+ allPages[thisPageIndex] = await this.get(nextRoute, headers);
247
250
  pageDownloadCount++;
248
251
  updateProgress();
249
252
  }));
@@ -253,8 +256,8 @@ const dataService = async ({
253
256
  return (0, _flatten.default)(allPages);
254
257
  },
255
258
  delete: (route, headers = {}) => {
256
- log(`DELETE: ${url + route}`);
257
- return fetch('delete', url + route, {
259
+ log(`DELETE: ${baseUrl + route}`);
260
+ return fetch('delete', baseUrl + route, {
258
261
  headers: {
259
262
  ...defaultHeaders,
260
263
  ...headers
@@ -264,8 +267,8 @@ const dataService = async ({
264
267
  download: async route => {
265
268
  try {
266
269
  return await new Promise((resolve, reject) => {
267
- log(`DOWNLOAD: ${url + route}`);
268
- const stream = got.stream(url + route, {
270
+ log(`DOWNLOAD: ${baseUrl + route}`);
271
+ const stream = got.stream(baseUrl + route, {
269
272
  retry: 0,
270
273
  timeout: _types.ABORT_TIMEOUT
271
274
  });
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.FormatString = FormatString;
7
7
  exports.KeyValueMapToNameValueArray = KeyValueMapToNameValueArray;
8
8
  exports.ValueFromKey = ValueFromKey;
9
- exports.parseScopeParam = exports.loadAndVerifySpecs = exports.loadAndVerifyApigeeXCredentialFile = exports.isWindows = exports.isValidJson = exports.isApiServerErrorType = exports.isApiServerErrorResponseType = exports.hbsCompare = exports.getLatestServedAPIVersion = exports.getConfig = exports.createLanguageSubresourceNames = exports.configFile = exports.compareResourcesByKindDesc = exports.compareResourcesByKindAsc = exports.buildTemplate = exports.buildGenericResource = void 0;
9
+ exports.parseScopeParam = exports.loadAndVerifySpecs = exports.loadAndVerifyApigeeXCredentialFile = exports.isWindows = exports.isValidJson = exports.isApiServerErrorType = exports.isApiServerErrorResponseType = exports.hbsCompare = exports.getConfig = exports.createLanguageSubresourceNames = exports.configFile = exports.compareResourcesByKindDesc = exports.compareResourcesByKindAsc = exports.buildTemplate = exports.buildGenericResource = void 0;
10
10
  exports.sanitizeMetadata = sanitizeMetadata;
11
11
  exports.writeToFile = exports.writeTemplates = exports.verifyScopeParam = exports.verifyFile = exports.transformSimpleFilters = void 0;
12
12
  var _fsExtra = require("fs-extra");
@@ -14,7 +14,6 @@ var _handlebars = _interopRequireDefault(require("handlebars"));
14
14
  var _jsYaml = require("js-yaml");
15
15
  var _os = require("os");
16
16
  var _path = require("path");
17
- var _ApiServerClient = require("./ApiServerClient");
18
17
  var _CompositeError = require("./CompositeError");
19
18
  var _types = require("./types");
20
19
  var _chalk = _interopRequireDefault(require("chalk"));
@@ -415,18 +414,4 @@ function ValueFromKey(stringEnum, key) {
415
414
  if (k === stringEnum[key]) return k;
416
415
  }
417
416
  return undefined;
418
- }
419
- const getLatestServedAPIVersion = resourceDef => {
420
- let apiVersions = resourceDef.spec.apiVersions;
421
- if (apiVersions && apiVersions.length > 0) {
422
- for (const version of apiVersions) {
423
- if (version.served && !version.deprecated) {
424
- return version.name;
425
- }
426
- }
427
- return _ApiServerClient.ApiServerVersions.v1alpha1;
428
- }
429
- // if the apiVersions are not set on the resource definition, fallback to v1alpha1 version
430
- return _ApiServerClient.ApiServerVersions.v1alpha1;
431
- };
432
- exports.getLatestServedAPIVersion = getLatestServedAPIVersion;
417
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axway/axway-central-cli",
3
- "version": "3.9.0-rc.2",
3
+ "version": "3.9.0",
4
4
  "description": "Manage APIs, services and publish to the Amplify Marketplace",
5
5
  "homepage": "https://platform.axway.com",
6
6
  "author": {