@pnp/cli-microsoft365 6.3.0-beta.64eb7da → 6.3.0-beta.655c566

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 (78) hide show
  1. package/.eslintrc.js +4 -0
  2. package/dist/Command.js +4 -4
  3. package/dist/m365/context/commands/option/option-list.js +54 -0
  4. package/dist/m365/context/commands.js +1 -0
  5. package/dist/m365/planner/commands/plan/plan-remove.js +1 -1
  6. package/dist/m365/planner/commands/plan/plan-set.js +21 -10
  7. package/dist/m365/planner/commands/roster/roster-get.js +61 -0
  8. package/dist/m365/planner/commands/roster/roster-member-add.js +113 -0
  9. package/dist/m365/planner/commands/roster/roster-member-list.js +54 -0
  10. package/dist/m365/planner/commands/task/task-add.js +3 -0
  11. package/dist/m365/planner/commands.js +3 -0
  12. package/dist/m365/purview/commands/retentionevent/retentionevent-get.js +76 -0
  13. package/dist/m365/purview/commands/retentionevent/retentionevent-list.js +47 -0
  14. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-add.js +77 -0
  15. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-get.js +8 -8
  16. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-list.js +44 -0
  17. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-remove.js +97 -0
  18. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-set.js +90 -0
  19. package/dist/m365/purview/commands.js +7 -1
  20. package/dist/m365/spo/commands/applicationcustomizer/applicationcustomizer-add.js +95 -0
  21. package/dist/m365/spo/commands/file/GraphFileDetails.js +0 -1
  22. package/dist/m365/spo/commands/file/file-sharinglink-add.js +2 -22
  23. package/dist/m365/spo/commands/file/file-sharinglink-clear.js +137 -0
  24. package/dist/m365/spo/commands/file/file-sharinglink-get.js +2 -25
  25. package/dist/m365/spo/commands/file/file-sharinglink-list.js +7 -28
  26. package/dist/m365/spo/commands/file/file-sharinglink-remove.js +2 -25
  27. package/dist/m365/spo/commands/file/file-sharinglink-set.js +104 -0
  28. package/dist/m365/spo/commands/listitem/listitem-add.js +2 -1
  29. package/dist/m365/spo/commands/navigation/navigation-node-get.js +73 -0
  30. package/dist/m365/spo/commands/sitedesign/sitedesign-add.js +6 -0
  31. package/dist/m365/spo/commands/tenant/tenant-applicationcustomizer-add.js +179 -0
  32. package/dist/m365/spo/commands.js +5 -0
  33. package/dist/utils/spo.js +28 -0
  34. package/docs/docs/cmd/context/option/option-list.md +63 -0
  35. package/docs/docs/cmd/pa/app/app-get.md +24 -0
  36. package/docs/docs/cmd/pa/app/app-list.md +21 -0
  37. package/docs/docs/cmd/pa/connector/connector-list.md +17 -0
  38. package/docs/docs/cmd/pa/environment/environment-get.md +18 -0
  39. package/docs/docs/cmd/pa/environment/environment-list.md +19 -0
  40. package/docs/docs/cmd/planner/plan/plan-set.md +10 -4
  41. package/docs/docs/cmd/planner/roster/roster-get.md +73 -0
  42. package/docs/docs/cmd/planner/roster/roster-member-add.md +87 -0
  43. package/docs/docs/cmd/planner/roster/roster-member-list.md +76 -0
  44. package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-get.md +43 -0
  45. package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-list.md +43 -0
  46. package/docs/docs/cmd/pp/card/card-clone.md +12 -0
  47. package/docs/docs/cmd/pp/card/card-get.md +49 -0
  48. package/docs/docs/cmd/pp/card/card-list.md +49 -0
  49. package/docs/docs/cmd/pp/chatbot/chatbot-get.md +55 -0
  50. package/docs/docs/cmd/pp/chatbot/chatbot-list.md +36 -0
  51. package/docs/docs/cmd/pp/dataverse/dataverse-table-get.md +30 -0
  52. package/docs/docs/cmd/pp/dataverse/dataverse-table-list.md +30 -0
  53. package/docs/docs/cmd/pp/dataverse/dataverse-table-row-list.md +30 -0
  54. package/docs/docs/cmd/pp/environment/environment-get.md +19 -0
  55. package/docs/docs/cmd/pp/environment/environment-list.md +19 -0
  56. package/docs/docs/cmd/pp/gateway/gateway-get.md +19 -0
  57. package/docs/docs/cmd/pp/gateway/gateway-list.md +19 -0
  58. package/docs/docs/cmd/pp/managementapp/managementapp-add.md +12 -0
  59. package/docs/docs/cmd/pp/managementapp/managementapp-list.md +12 -0
  60. package/docs/docs/cmd/pp/solution/solution-get.md +14 -0
  61. package/docs/docs/cmd/pp/solution/solution-list.md +14 -0
  62. package/docs/docs/cmd/pp/solution/solution-publisher-get.md +20 -1
  63. package/docs/docs/cmd/pp/solution/solution-publisher-list.md +18 -0
  64. package/docs/docs/cmd/pp/tenant/tenant-settings-list.md +21 -0
  65. package/docs/docs/cmd/purview/retentionevent/retentionevent-get.md +132 -0
  66. package/docs/docs/cmd/purview/retentionevent/retentionevent-list.md +107 -0
  67. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-add.md +106 -0
  68. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-list.md +97 -0
  69. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-remove.md +43 -0
  70. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-set.md +43 -0
  71. package/docs/docs/cmd/spo/applicationcustomizer/applicationcustomizer-add.md +56 -0
  72. package/docs/docs/cmd/spo/file/file-sharinglink-clear.md +46 -0
  73. package/docs/docs/cmd/spo/file/file-sharinglink-list.md +1 -1
  74. package/docs/docs/cmd/spo/file/file-sharinglink-set.md +104 -0
  75. package/docs/docs/cmd/spo/navigation/navigation-node-get.md +91 -0
  76. package/docs/docs/cmd/spo/sitedesign/sitedesign-add.md +3 -0
  77. package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-add.md +59 -0
  78. package/package.json +1 -1
@@ -16,9 +16,8 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
16
16
  var _SpoFileSharingLinkListCommand_instances, _SpoFileSharingLinkListCommand_initTelemetry, _SpoFileSharingLinkListCommand_initOptions, _SpoFileSharingLinkListCommand_initValidators, _SpoFileSharingLinkListCommand_initOptionSets;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  const Cli_1 = require("../../../../cli/Cli");
19
- const request_1 = require("../../../../request");
20
- const formatting_1 = require("../../../../utils/formatting");
21
19
  const odata_1 = require("../../../../utils/odata");
20
+ const spo_1 = require("../../../../utils/spo");
22
21
  const validation_1 = require("../../../../utils/validation");
23
22
  const SpoCommand_1 = require("../../../base/SpoCommand");
24
23
  const commands_1 = require("../../commands");
@@ -46,7 +45,7 @@ class SpoFileSharingLinkListCommand extends SpoCommand_1.default {
46
45
  logger.logToStderr(`Retrieving sharing links for file ${args.options.fileId || args.options.fileUrl}...`);
47
46
  }
48
47
  try {
49
- const fileDetails = yield this.getFileDetails(args.options.webUrl, args.options.fileId, args.options.fileUrl);
48
+ const fileDetails = yield spo_1.spo.getVroomFileDetails(args.options.webUrl, args.options.fileId, args.options.fileUrl);
50
49
  let url = `https://graph.microsoft.com/v1.0/sites/${fileDetails.SiteId}/drives/${fileDetails.VroomDriveID}/items/${fileDetails.VroomItemID}/permissions?$filter=Link ne null`;
51
50
  if (args.options.scope) {
52
51
  url += ` and Link/Scope eq '${args.options.scope}'`;
@@ -72,26 +71,6 @@ class SpoFileSharingLinkListCommand extends SpoCommand_1.default {
72
71
  }
73
72
  });
74
73
  }
75
- getFileDetails(webUrl, fileId, fileUrl) {
76
- return __awaiter(this, void 0, void 0, function* () {
77
- let requestUrl = `${webUrl}/_api/web/`;
78
- if (fileId) {
79
- requestUrl += `GetFileById('${fileId}')`;
80
- }
81
- else if (fileUrl) {
82
- requestUrl += `GetFileByServerRelativePath(decodedUrl='${formatting_1.formatting.encodeQueryParameter(fileUrl)}')`;
83
- }
84
- const requestOptions = {
85
- url: requestUrl += '?$select=SiteId,VroomItemId,VroomDriveId',
86
- headers: {
87
- accept: 'application/json;odata=nometadata'
88
- },
89
- responseType: 'json'
90
- };
91
- const res = yield request_1.default.get(requestOptions);
92
- return res;
93
- });
94
- }
95
74
  }
96
75
  _SpoFileSharingLinkListCommand_instances = new WeakSet(), _SpoFileSharingLinkListCommand_initTelemetry = function _SpoFileSharingLinkListCommand_initTelemetry() {
97
76
  this.telemetry.push((args) => {
@@ -109,8 +88,8 @@ _SpoFileSharingLinkListCommand_instances = new WeakSet(), _SpoFileSharingLinkLis
109
88
  }, {
110
89
  option: '--fileUrl [fileUrl]'
111
90
  }, {
112
- option: '--scope [scope]',
113
- autocomplete: SpoFileSharingLinkListCommand.scope
91
+ option: '-s, --scope [scope]',
92
+ autocomplete: SpoFileSharingLinkListCommand.allowedScopes
114
93
  });
115
94
  }, _SpoFileSharingLinkListCommand_initValidators = function _SpoFileSharingLinkListCommand_initValidators() {
116
95
  this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
@@ -121,14 +100,14 @@ _SpoFileSharingLinkListCommand_instances = new WeakSet(), _SpoFileSharingLinkLis
121
100
  if (args.options.fileId && !validation_1.validation.isValidGuid(args.options.fileId)) {
122
101
  return `${args.options.fileId} is not a valid GUID`;
123
102
  }
124
- if (args.options.scope && SpoFileSharingLinkListCommand.scope.indexOf(args.options.scope) === -1) {
125
- return `'${args.options.scope}' is not a valid scope. Allowed values are: ${SpoFileSharingLinkListCommand.scope.join(',')}`;
103
+ if (args.options.scope && SpoFileSharingLinkListCommand.allowedScopes.indexOf(args.options.scope) === -1) {
104
+ return `'${args.options.scope}' is not a valid scope. Allowed values are: ${SpoFileSharingLinkListCommand.allowedScopes.join(',')}`;
126
105
  }
127
106
  return true;
128
107
  }));
129
108
  }, _SpoFileSharingLinkListCommand_initOptionSets = function _SpoFileSharingLinkListCommand_initOptionSets() {
130
109
  this.optionSets.push({ options: ['fileId', 'fileUrl'] });
131
110
  };
132
- SpoFileSharingLinkListCommand.scope = ['anonymous', 'users', 'organization'];
111
+ SpoFileSharingLinkListCommand.allowedScopes = ['anonymous', 'users', 'organization'];
133
112
  module.exports = new SpoFileSharingLinkListCommand();
134
113
  //# sourceMappingURL=file-sharinglink-list.js.map
@@ -17,8 +17,7 @@ var _SpoFileSharingLinkRemoveCommand_instances, _SpoFileSharingLinkRemoveCommand
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  const Cli_1 = require("../../../../cli/Cli");
19
19
  const request_1 = require("../../../../request");
20
- const formatting_1 = require("../../../../utils/formatting");
21
- const urlUtil_1 = require("../../../../utils/urlUtil");
20
+ const spo_1 = require("../../../../utils/spo");
22
21
  const validation_1 = require("../../../../utils/validation");
23
22
  const SpoCommand_1 = require("../../../base/SpoCommand");
24
23
  const commands_1 = require("../../commands");
@@ -44,7 +43,7 @@ class SpoFileSharingLinkRemoveCommand extends SpoCommand_1.default {
44
43
  if (this.verbose) {
45
44
  logger.logToStderr(`Removing sharing link of file ${args.options.fileUrl || args.options.fileId} with id ${args.options.id}...`);
46
45
  }
47
- const fileDetails = yield this.getNeededFileInformation(args);
46
+ const fileDetails = yield spo_1.spo.getVroomFileDetails(args.options.webUrl, args.options.fileId, args.options.fileUrl);
48
47
  const requestOptions = {
49
48
  url: `https://graph.microsoft.com/v1.0/sites/${fileDetails.SiteId}/drives/${fileDetails.VroomDriveID}/items/${fileDetails.VroomItemID}/permissions/${args.options.id}`,
50
49
  headers: {
@@ -74,28 +73,6 @@ class SpoFileSharingLinkRemoveCommand extends SpoCommand_1.default {
74
73
  }
75
74
  });
76
75
  }
77
- getNeededFileInformation(args) {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- let requestUrl = `${args.options.webUrl}/_api/web/`;
80
- if (args.options.fileUrl) {
81
- const fileServerRelativeUrl = urlUtil_1.urlUtil.getServerRelativePath(args.options.webUrl, args.options.fileUrl);
82
- requestUrl += `GetFileByServerRelativePath(decodedUrl='${formatting_1.formatting.encodeQueryParameter(fileServerRelativeUrl)}')`;
83
- }
84
- else {
85
- requestUrl += `GetFileById('${args.options.fileId}')`;
86
- }
87
- requestUrl += '?$select=SiteId,VroomItemId,VroomDriveId';
88
- const requestOptions = {
89
- url: requestUrl,
90
- headers: {
91
- accept: 'application/json;odata=nometadata'
92
- },
93
- responseType: 'json'
94
- };
95
- const res = yield request_1.default.get(requestOptions);
96
- return res;
97
- });
98
- }
99
76
  }
100
77
  _SpoFileSharingLinkRemoveCommand_instances = new WeakSet(), _SpoFileSharingLinkRemoveCommand_initTelemetry = function _SpoFileSharingLinkRemoveCommand_initTelemetry() {
101
78
  this.telemetry.push((args) => {
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
+ };
16
+ var _SpoFileSharingLinkSetCommand_instances, _SpoFileSharingLinkSetCommand_initTelemetry, _SpoFileSharingLinkSetCommand_initOptions, _SpoFileSharingLinkSetCommand_initValidators, _SpoFileSharingLinkSetCommand_initOptionSets;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const request_1 = require("../../../../request");
19
+ const validation_1 = require("../../../../utils/validation");
20
+ const SpoCommand_1 = require("../../../base/SpoCommand");
21
+ const commands_1 = require("../../commands");
22
+ const spo_1 = require("../../../../utils/spo");
23
+ class SpoFileSharingLinkSetCommand extends SpoCommand_1.default {
24
+ get name() {
25
+ return commands_1.default.FILE_SHARINGLINK_SET;
26
+ }
27
+ get description() {
28
+ return 'Updates a sharing link of a file';
29
+ }
30
+ constructor() {
31
+ super();
32
+ _SpoFileSharingLinkSetCommand_instances.add(this);
33
+ __classPrivateFieldGet(this, _SpoFileSharingLinkSetCommand_instances, "m", _SpoFileSharingLinkSetCommand_initTelemetry).call(this);
34
+ __classPrivateFieldGet(this, _SpoFileSharingLinkSetCommand_instances, "m", _SpoFileSharingLinkSetCommand_initOptions).call(this);
35
+ __classPrivateFieldGet(this, _SpoFileSharingLinkSetCommand_instances, "m", _SpoFileSharingLinkSetCommand_initValidators).call(this);
36
+ __classPrivateFieldGet(this, _SpoFileSharingLinkSetCommand_instances, "m", _SpoFileSharingLinkSetCommand_initOptionSets).call(this);
37
+ }
38
+ commandAction(logger, args) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ if (this.verbose) {
41
+ logger.logToStderr(`Updating sharing link of file ${args.options.fileId || args.options.fileUrl}...`);
42
+ }
43
+ try {
44
+ const fileDetails = yield spo_1.spo.getVroomFileDetails(args.options.webUrl, args.options.fileId, args.options.fileUrl);
45
+ const requestOptions = {
46
+ url: `https://graph.microsoft.com/v1.0/sites/${fileDetails.SiteId}/drives/${fileDetails.VroomDriveID}/items/${fileDetails.VroomItemID}/permissions/${args.options.id}`,
47
+ headers: {
48
+ accept: 'application/json;odata.metadata=none'
49
+ },
50
+ responseType: 'json',
51
+ data: {
52
+ expirationDateTime: args.options.expirationDateTime
53
+ }
54
+ };
55
+ const sharingLink = yield request_1.default.patch(requestOptions);
56
+ logger.log(sharingLink);
57
+ }
58
+ catch (err) {
59
+ this.handleRejectedODataJsonPromise(err);
60
+ }
61
+ });
62
+ }
63
+ }
64
+ _SpoFileSharingLinkSetCommand_instances = new WeakSet(), _SpoFileSharingLinkSetCommand_initTelemetry = function _SpoFileSharingLinkSetCommand_initTelemetry() {
65
+ this.telemetry.push((args) => {
66
+ Object.assign(this.telemetryProperties, {
67
+ fileId: typeof args.options.fileId !== 'undefined',
68
+ fileUrl: typeof args.options.fileUrl !== 'undefined'
69
+ });
70
+ });
71
+ }, _SpoFileSharingLinkSetCommand_initOptions = function _SpoFileSharingLinkSetCommand_initOptions() {
72
+ this.options.unshift({
73
+ option: '-u, --webUrl <webUrl>'
74
+ }, {
75
+ option: '--fileId [fileId]'
76
+ }, {
77
+ option: '--fileUrl [fileUrl]'
78
+ }, {
79
+ option: '--id <id>'
80
+ }, {
81
+ option: '--expirationDateTime <expirationDateTime>'
82
+ });
83
+ }, _SpoFileSharingLinkSetCommand_initValidators = function _SpoFileSharingLinkSetCommand_initValidators() {
84
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
85
+ const isValidSharePointUrl = validation_1.validation.isValidSharePointUrl(args.options.webUrl);
86
+ if (isValidSharePointUrl !== true) {
87
+ return isValidSharePointUrl;
88
+ }
89
+ if (args.options.fileId && !validation_1.validation.isValidGuid(args.options.fileId)) {
90
+ return `${args.options.fileId} is not a valid GUID`;
91
+ }
92
+ if (!validation_1.validation.isValidGuid(args.options.id)) {
93
+ return `${args.options.id} is not a valid GUID`;
94
+ }
95
+ if (!validation_1.validation.isValidISODateTime(args.options.expirationDateTime)) {
96
+ return `'${args.options.expirationDateTime}' is not a valid ISO date string`;
97
+ }
98
+ return true;
99
+ }));
100
+ }, _SpoFileSharingLinkSetCommand_initOptionSets = function _SpoFileSharingLinkSetCommand_initOptionSets() {
101
+ this.optionSets.push({ options: ['fileId', 'fileUrl'] });
102
+ };
103
+ module.exports = new SpoFileSharingLinkSetCommand();
104
+ //# sourceMappingURL=file-sharinglink-set.js.map
@@ -176,7 +176,8 @@ class SpoListItemAddCommand extends SpoCommand_1.default {
176
176
  'folder',
177
177
  'debug',
178
178
  'verbose',
179
- 'output'
179
+ 'output',
180
+ '_'
180
181
  ];
181
182
  Object.keys(options).forEach(key => {
182
183
  if (excludeOptions.indexOf(key) === -1) {
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
+ };
16
+ var _SpoNavigationNodeGetCommand_instances, _SpoNavigationNodeGetCommand_initOptions, _SpoNavigationNodeGetCommand_initValidators;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const request_1 = require("../../../../request");
19
+ const validation_1 = require("../../../../utils/validation");
20
+ const SpoCommand_1 = require("../../../base/SpoCommand");
21
+ const commands_1 = require("../../commands");
22
+ class SpoNavigationNodeGetCommand extends SpoCommand_1.default {
23
+ get name() {
24
+ return commands_1.default.NAVIGATION_NODE_GET;
25
+ }
26
+ get description() {
27
+ return 'Retrieve information about a specific navigation node';
28
+ }
29
+ constructor() {
30
+ super();
31
+ _SpoNavigationNodeGetCommand_instances.add(this);
32
+ __classPrivateFieldGet(this, _SpoNavigationNodeGetCommand_instances, "m", _SpoNavigationNodeGetCommand_initOptions).call(this);
33
+ __classPrivateFieldGet(this, _SpoNavigationNodeGetCommand_instances, "m", _SpoNavigationNodeGetCommand_initValidators).call(this);
34
+ }
35
+ commandAction(logger, args) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ if (this.verbose) {
38
+ logger.logToStderr(`Retrieving information about navigation node with id ${args.options.id}`);
39
+ }
40
+ const requestOptions = {
41
+ url: `${args.options.webUrl}/_api/web/navigation/GetNodeById(${args.options.id})`,
42
+ headers: {
43
+ 'accept': 'application/json;odata=nometadata'
44
+ },
45
+ responseType: 'json'
46
+ };
47
+ try {
48
+ const listInstance = yield request_1.default.get(requestOptions);
49
+ logger.log(listInstance);
50
+ }
51
+ catch (err) {
52
+ this.handleRejectedODataJsonPromise(err);
53
+ }
54
+ });
55
+ }
56
+ }
57
+ _SpoNavigationNodeGetCommand_instances = new WeakSet(), _SpoNavigationNodeGetCommand_initOptions = function _SpoNavigationNodeGetCommand_initOptions() {
58
+ this.options.unshift({
59
+ option: '-u, --webUrl <webUrl>'
60
+ }, {
61
+ option: '--id <id>'
62
+ });
63
+ }, _SpoNavigationNodeGetCommand_initValidators = function _SpoNavigationNodeGetCommand_initValidators() {
64
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
65
+ const id = parseInt(args.options.id);
66
+ if (isNaN(id)) {
67
+ return `${args.options.id} is not a valid number`;
68
+ }
69
+ return validation_1.validation.isValidSharePointUrl(args.options.webUrl);
70
+ }));
71
+ };
72
+ module.exports = new SpoNavigationNodeGetCommand();
73
+ //# sourceMappingURL=navigation-node-get.js.map
@@ -53,6 +53,9 @@ class SpoSiteDesignAddCommand extends SpoCommand_1.default {
53
53
  if (args.options.previewImageAltText) {
54
54
  info.PreviewImageAltText = args.options.previewImageAltText;
55
55
  }
56
+ if (args.options.thumbnailUrl) {
57
+ info.ThumbnailUrl = args.options.thumbnailUrl;
58
+ }
56
59
  if (args.options.isDefault) {
57
60
  info.IsDefault = true;
58
61
  }
@@ -83,6 +86,7 @@ _SpoSiteDesignAddCommand_instances = new WeakSet(), _SpoSiteDesignAddCommand_ini
83
86
  description: (!(!args.options.description)).toString(),
84
87
  previewImageUrl: (!(!args.options.previewImageUrl)).toString(),
85
88
  previewImageAltText: (!(!args.options.previewImageAltText)).toString(),
89
+ thumbnailUrl: (!(!args.options.thumbnailUrl)).toString(),
86
90
  isDefault: args.options.isDefault || false
87
91
  });
88
92
  });
@@ -100,6 +104,8 @@ _SpoSiteDesignAddCommand_instances = new WeakSet(), _SpoSiteDesignAddCommand_ini
100
104
  option: '-m, --previewImageUrl [previewImageUrl]'
101
105
  }, {
102
106
  option: '-a, --previewImageAltText [previewImageAltText]'
107
+ }, {
108
+ option: '--thumbnailUrl [thumbnailUrl]'
103
109
  }, {
104
110
  option: '--isDefault'
105
111
  });
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
+ };
16
+ var _SpoTenantApplicationCustomizerAddCommand_instances, _SpoTenantApplicationCustomizerAddCommand_initTelemetry, _SpoTenantApplicationCustomizerAddCommand_initOptions, _SpoTenantApplicationCustomizerAddCommand_initValidators;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const validation_1 = require("../../../../utils/validation");
19
+ const SpoCommand_1 = require("../../../base/SpoCommand");
20
+ const commands_1 = require("../../commands");
21
+ const Cli_1 = require("../../../../cli/Cli");
22
+ const spoTenantAppCatalogUrlGetCommand = require("../tenant/tenant-appcatalogurl-get");
23
+ const spoListItemAddCommand = require("../listitem/listitem-add");
24
+ const spoListItemListCommand = require("../listitem/listitem-list");
25
+ const urlUtil_1 = require("../../../../utils/urlUtil");
26
+ class SpoTenantApplicationCustomizerAddCommand extends SpoCommand_1.default {
27
+ get name() {
28
+ return commands_1.default.TENANT_APPLICATIONCUSTOMIZER_ADD;
29
+ }
30
+ get description() {
31
+ return 'Add an application customizer as a tenant wide extension.';
32
+ }
33
+ constructor() {
34
+ super();
35
+ _SpoTenantApplicationCustomizerAddCommand_instances.add(this);
36
+ __classPrivateFieldGet(this, _SpoTenantApplicationCustomizerAddCommand_instances, "m", _SpoTenantApplicationCustomizerAddCommand_initTelemetry).call(this);
37
+ __classPrivateFieldGet(this, _SpoTenantApplicationCustomizerAddCommand_instances, "m", _SpoTenantApplicationCustomizerAddCommand_initOptions).call(this);
38
+ __classPrivateFieldGet(this, _SpoTenantApplicationCustomizerAddCommand_instances, "m", _SpoTenantApplicationCustomizerAddCommand_initValidators).call(this);
39
+ }
40
+ commandAction(logger, args) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ try {
43
+ const appCatalogUrl = yield this.getAppCatalogUrl(logger);
44
+ const componentManifest = yield this.getComponentManifest(appCatalogUrl, args.options.clientSideComponentId, logger);
45
+ const clientComponentManifest = JSON.parse(componentManifest.ClientComponentManifest);
46
+ if (clientComponentManifest.extensionType !== "ApplicationCustomizer") {
47
+ throw `The extension type of this component is not of type 'ApplicationCustomizer' but of type '${clientComponentManifest.extensionType}'`;
48
+ }
49
+ const solution = yield this.getSolutionFromAppCatalog(appCatalogUrl, componentManifest.SolutionId, logger);
50
+ if (!solution.ContainsTenantWideExtension) {
51
+ throw `The solution does not contain an extension that can be deployed to all sites. Make sure that you've entered the correct component Id.`;
52
+ }
53
+ else if (!solution.SkipFeatureDeployment) {
54
+ throw 'The solution has not been deployed to all sites. Make sure to deploy this solution to all sites.';
55
+ }
56
+ yield this.addTenantWideExtension(appCatalogUrl, args.options, logger);
57
+ }
58
+ catch (err) {
59
+ this.handleRejectedODataJsonPromise(err);
60
+ }
61
+ });
62
+ }
63
+ getAppCatalogUrl(logger) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const spoTenantAppCatalogUrlGetCommandOutput = yield Cli_1.Cli.executeCommandWithOutput(spoTenantAppCatalogUrlGetCommand, { options: { output: 'text', _: [] } });
66
+ if (this.verbose) {
67
+ logger.logToStderr(spoTenantAppCatalogUrlGetCommandOutput.stderr);
68
+ }
69
+ const appCatalogUrl = spoTenantAppCatalogUrlGetCommandOutput.stdout;
70
+ if (!appCatalogUrl) {
71
+ throw 'Cannot add tenant-wide application customizer as app catalog cannot be found';
72
+ }
73
+ if (this.verbose) {
74
+ logger.logToStderr(`Got tenant app catalog url: ${appCatalogUrl}`);
75
+ }
76
+ return appCatalogUrl;
77
+ });
78
+ }
79
+ getComponentManifest(appCatalogUrl, clientSideComponentId, logger) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ if (this.verbose) {
82
+ logger.logToStderr('Retrieving component manifest item from the ComponentManifests list on the app catalog site so that we get the solution id');
83
+ }
84
+ const camlQuery = `<View><ViewFields><FieldRef Name='ClientComponentId'></FieldRef><FieldRef Name='SolutionId'></FieldRef><FieldRef Name='ClientComponentManifest'></FieldRef></ViewFields><Query><Where><Eq><FieldRef Name='ClientComponentId' /><Value Type='Guid'>${clientSideComponentId}</Value></Eq></Where></Query></View>`;
85
+ const commandOptions = {
86
+ webUrl: appCatalogUrl,
87
+ listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/ComponentManifests`,
88
+ camlQuery: camlQuery,
89
+ verbose: this.verbose,
90
+ debug: this.debug,
91
+ output: 'json'
92
+ };
93
+ const output = yield Cli_1.Cli.executeCommandWithOutput(spoListItemListCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
94
+ if (this.verbose) {
95
+ logger.logToStderr(output.stderr);
96
+ }
97
+ const outputParsed = JSON.parse(output.stdout);
98
+ if (outputParsed.length === 0) {
99
+ throw 'No component found with the specified clientSideComponentId found in the component manifest list. Make sure that the application is added to the application catalog';
100
+ }
101
+ return outputParsed[0];
102
+ });
103
+ }
104
+ getSolutionFromAppCatalog(appCatalogUrl, solutionId, logger) {
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ if (this.verbose) {
107
+ logger.logToStderr(`Retrieving solution with id ${solutionId} from the application catalog`);
108
+ }
109
+ const camlQuery = `<View><ViewFields><FieldRef Name='SkipFeatureDeployment'></FieldRef><FieldRef Name='ContainsTenantWideExtension'></FieldRef></ViewFields><Query><Where><Eq><FieldRef Name='AppProductID' /><Value Type='Guid'>${solutionId}</Value></Eq></Where></Query></View>`;
110
+ const commandOptions = {
111
+ webUrl: appCatalogUrl,
112
+ listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/AppCatalog`,
113
+ camlQuery: camlQuery,
114
+ verbose: this.verbose,
115
+ debug: this.debug,
116
+ output: 'json'
117
+ };
118
+ const output = yield Cli_1.Cli.executeCommandWithOutput(spoListItemListCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
119
+ if (this.verbose) {
120
+ logger.logToStderr(output.stderr);
121
+ }
122
+ const outputParsed = JSON.parse(output.stdout);
123
+ if (outputParsed.length === 0) {
124
+ throw `No component found with the solution id ${solutionId}. Make sure that the solution is available in the app catalog`;
125
+ }
126
+ return outputParsed[0];
127
+ });
128
+ }
129
+ addTenantWideExtension(appCatalogUrl, options, logger) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ if (this.verbose) {
132
+ logger.logToStderr('Pre-checks finished. Adding tenant wide extension to the TenantWideExtensions list');
133
+ }
134
+ const commandOptions = {
135
+ webUrl: appCatalogUrl,
136
+ listUrl: `${urlUtil_1.urlUtil.getServerRelativeSiteUrl(appCatalogUrl)}/Lists/TenantWideExtensions`,
137
+ Title: options.title,
138
+ TenantWideExtensionComponentId: options.clientSideComponentId,
139
+ TenantWideExtensionLocation: 'ClientSideExtension.ApplicationCustomizer',
140
+ TenantWideExtensionSequence: 0,
141
+ TenantWideExtensionListTemplate: 0,
142
+ TenantWideExtensionComponentProperties: options.clientSideComponentProperties || '',
143
+ TenantWideExtensionWebTemplate: options.webTemplate || '',
144
+ TenantWideExtensionDisabled: false,
145
+ verbose: this.verbose,
146
+ debug: this.debug,
147
+ output: options.output
148
+ };
149
+ yield Cli_1.Cli.executeCommand(spoListItemAddCommand, { options: Object.assign(Object.assign({}, commandOptions), { _: [] }) });
150
+ });
151
+ }
152
+ }
153
+ _SpoTenantApplicationCustomizerAddCommand_instances = new WeakSet(), _SpoTenantApplicationCustomizerAddCommand_initTelemetry = function _SpoTenantApplicationCustomizerAddCommand_initTelemetry() {
154
+ this.telemetry.push((args) => {
155
+ Object.assign(this.telemetryProperties, {
156
+ clientSideComponentProperties: typeof args.options.clientSideComponentProperties !== 'undefined',
157
+ webTemplate: typeof args.options.webTemplate !== 'undefined'
158
+ });
159
+ });
160
+ }, _SpoTenantApplicationCustomizerAddCommand_initOptions = function _SpoTenantApplicationCustomizerAddCommand_initOptions() {
161
+ this.options.unshift({
162
+ option: '-t, --title <title>'
163
+ }, {
164
+ option: '-i, --clientSideComponentId <clientSideComponentId>'
165
+ }, {
166
+ option: '-p, --clientSideComponentProperties [clientSideComponentProperties]'
167
+ }, {
168
+ option: '-w, --webTemplate [webTemplate]'
169
+ });
170
+ }, _SpoTenantApplicationCustomizerAddCommand_initValidators = function _SpoTenantApplicationCustomizerAddCommand_initValidators() {
171
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
172
+ if (!validation_1.validation.isValidGuid(args.options.clientSideComponentId)) {
173
+ return `${args.options.clientSideComponentId} is not a valid GUID`;
174
+ }
175
+ return true;
176
+ }));
177
+ };
178
+ module.exports = new SpoTenantApplicationCustomizerAddCommand();
179
+ //# sourceMappingURL=tenant-applicationcustomizer-add.js.map
@@ -13,6 +13,7 @@ exports.default = {
13
13
  APP_TEAMSPACKAGE_DOWNLOAD: `${prefix} app teamspackage download`,
14
14
  APP_UNINSTALL: `${prefix} app uninstall`,
15
15
  APP_UPGRADE: `${prefix} app upgrade`,
16
+ APPLICATIONCUSTOMIZER_ADD: `${prefix} applicationcustomizer add`,
16
17
  APPPAGE_ADD: `${prefix} apppage add`,
17
18
  APPPAGE_SET: `${prefix} apppage set`,
18
19
  CDN_GET: `${prefix} cdn get`,
@@ -65,9 +66,11 @@ exports.default = {
65
66
  FILE_ROLEINHERITANCE_RESET: `${prefix} file roleinheritance reset`,
66
67
  FILE_SHARINGINFO_GET: `${prefix} file sharinginfo get`,
67
68
  FILE_SHARINGLINK_ADD: `${prefix} file sharinglink add`,
69
+ FILE_SHARINGLINK_CLEAR: `${prefix} file sharinglink clear`,
68
70
  FILE_SHARINGLINK_GET: `${prefix} file sharinglink get`,
69
71
  FILE_SHARINGLINK_LIST: `${prefix} file sharinglink list`,
70
72
  FILE_SHARINGLINK_REMOVE: `${prefix} file sharinglink remove`,
73
+ FILE_SHARINGLINK_SET: `${prefix} file sharinglink set`,
71
74
  FILE_VERSION_CLEAR: `${prefix} file version clear`,
72
75
  FILE_VERSION_GET: `${prefix} file version get`,
73
76
  FILE_VERSION_LIST: `${prefix} file version list`,
@@ -165,6 +168,7 @@ exports.default = {
165
168
  LISTITEM_SET: `${prefix} listitem set`,
166
169
  MAIL_SEND: `${prefix} mail send`,
167
170
  NAVIGATION_NODE_ADD: `${prefix} navigation node add`,
171
+ NAVIGATION_NODE_GET: `${prefix} navigation node get`,
168
172
  NAVIGATION_NODE_LIST: `${prefix} navigation node list`,
169
173
  NAVIGATION_NODE_REMOVE: `${prefix} navigation node remove`,
170
174
  NAVIGATION_NODE_SET: `${prefix} navigation node set`,
@@ -274,6 +278,7 @@ exports.default = {
274
278
  STORAGEENTITY_REMOVE: `${prefix} storageentity remove`,
275
279
  TENANT_APPCATALOG_ADD: `${prefix} tenant appcatalog add`,
276
280
  TENANT_APPCATALOGURL_GET: `${prefix} tenant appcatalogurl get`,
281
+ TENANT_APPLICATIONCUSTOMIZER_ADD: `${prefix} tenant applicationcustomizer add`,
277
282
  TENANT_RECYCLEBINITEM_LIST: `${prefix} tenant recyclebinitem list`,
278
283
  TENANT_RECYCLEBINITEM_REMOVE: `${prefix} tenant recyclebinitem remove`,
279
284
  TENANT_RECYCLEBINITEM_RESTORE: `${prefix} tenant recyclebinitem restore`,
package/dist/utils/spo.js CHANGED
@@ -456,6 +456,34 @@ exports.spo = {
456
456
  reject('Cannot proceed. Folder _ObjectIdentity_ not found'); // this is not suppose to happen
457
457
  }, (err) => { reject(err); });
458
458
  });
459
+ },
460
+ /**
461
+ * Retrieves the SiteId, VroomItemId and VroomDriveId from a specific file.
462
+ * @param webUrl Web url
463
+ * @param fileId GUID ID of the file
464
+ * @param fileUrl Decoded URL of the file
465
+ */
466
+ getVroomFileDetails(webUrl, fileId, fileUrl) {
467
+ return __awaiter(this, void 0, void 0, function* () {
468
+ let requestUrl = `${webUrl}/_api/web/`;
469
+ if (fileUrl) {
470
+ const fileServerRelativeUrl = urlUtil_1.urlUtil.getServerRelativePath(webUrl, fileUrl);
471
+ requestUrl += `GetFileByServerRelativePath(decodedUrl='${formatting_1.formatting.encodeQueryParameter(fileServerRelativeUrl)}')`;
472
+ }
473
+ else {
474
+ requestUrl += `GetFileById('${fileId}')`;
475
+ }
476
+ requestUrl += '?$select=SiteId,VroomItemId,VroomDriveId';
477
+ const requestOptions = {
478
+ url: requestUrl,
479
+ headers: {
480
+ accept: 'application/json;odata=nometadata'
481
+ },
482
+ responseType: 'json'
483
+ };
484
+ const res = yield request_1.default.get(requestOptions);
485
+ return res;
486
+ });
459
487
  }
460
488
  };
461
489
  //# sourceMappingURL=spo.js.map
@@ -0,0 +1,63 @@
1
+ # context option list
2
+
3
+ List all options added to the context
4
+
5
+ ## Usage
6
+
7
+ ```sh
8
+ m365 context option list [options]
9
+ ```
10
+
11
+ ## Options
12
+
13
+ --8<-- "docs/cmd/_global.md"
14
+
15
+ ## Examples
16
+
17
+ List all options added to the context
18
+
19
+ ```sh
20
+ m365 context option list
21
+ ```
22
+
23
+ ## Response
24
+
25
+ The responses below are an example. The output may differ based on the contents of the context file
26
+
27
+ === "JSON"
28
+
29
+ ```json
30
+ {
31
+ "url": "https://contoso.sharepoint.com",
32
+ "list": "list name"
33
+ }
34
+ ```
35
+
36
+ === "Text"
37
+
38
+ ```text
39
+ list: list name
40
+ url : https://contoso.sharepoint.com
41
+ ```
42
+
43
+ === "CSV"
44
+
45
+ ```csv
46
+ url,list
47
+ https://contoso.sharepoint.com,list name
48
+ ```
49
+
50
+ === "Markdown"
51
+
52
+ ```md
53
+ # context option list
54
+
55
+ Date: 7/2/2023
56
+
57
+ ## https://contoso.sharepoint.com
58
+
59
+ Property | Value
60
+ ---------|-------
61
+ url | https://contoso.sharepoint.com
62
+ list | list name
63
+ ```