@pnp/cli-microsoft365 6.2.0 → 6.3.0-beta.37c6261

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 (127) hide show
  1. package/.eslintrc.js +6 -0
  2. package/dist/Auth.js +0 -18
  3. package/dist/Command.js +12 -1
  4. package/dist/cli/Cli.js +4 -1
  5. package/dist/m365/aad/commands/group/group-list.js +2 -1
  6. package/dist/m365/base/O365MgmtCommand.js +10 -0
  7. package/dist/m365/file/commands/convert/convert-pdf.js +7 -6
  8. package/dist/m365/flow/commands/run/run-list.js +55 -3
  9. package/dist/m365/graph/commands/changelog/changelog-list.js +3 -2
  10. package/dist/m365/onenote/commands/notebook/notebook-list.js +50 -53
  11. package/dist/m365/onenote/commands/page/page-list.js +2 -16
  12. package/dist/m365/outlook/commands/mail/mail-send.js +3 -2
  13. package/dist/m365/outlook/commands/message/message-get.js +4 -3
  14. package/dist/m365/planner/commands/plan/plan-add.js +20 -6
  15. package/dist/m365/planner/commands/plan/plan-get.js +34 -27
  16. package/dist/m365/planner/commands/plan/plan-list.js +24 -14
  17. package/dist/m365/planner/commands/plan/plan-remove.js +1 -1
  18. package/dist/m365/planner/commands/roster/roster-add.js +47 -0
  19. package/dist/m365/planner/commands/roster/roster-member-add.js +113 -0
  20. package/dist/m365/planner/commands/roster/roster-member-list.js +54 -0
  21. package/dist/m365/planner/commands/roster/roster-remove.js +88 -0
  22. package/dist/m365/planner/commands/task/task-checklistitem-add.js +2 -1
  23. package/dist/m365/planner/commands/task/task-checklistitem-list.js +2 -1
  24. package/dist/m365/planner/commands.js +4 -0
  25. package/dist/m365/pp/commands/solution/solution-get.js +2 -1
  26. package/dist/m365/pp/commands/solution/solution-list.js +2 -1
  27. package/dist/m365/purview/commands/auditlog/auditlog-list.js +205 -0
  28. package/dist/m365/purview/commands/retentioneventtype/retentioneventtype-get.js +70 -0
  29. package/dist/m365/purview/commands.js +2 -0
  30. package/dist/m365/spfx/commands/project/WebApiPermissionRequests.js +3 -0
  31. package/dist/m365/spfx/commands/project/project-permissions-grant.js +81 -0
  32. package/dist/m365/spfx/commands.js +3 -2
  33. package/dist/m365/spo/commands/app/app-add.js +2 -1
  34. package/dist/m365/spo/commands/applicationcustomizer/applicationcustomizer-add.js +95 -0
  35. package/dist/m365/spo/commands/file/GraphFileDetails.js +0 -1
  36. package/dist/m365/spo/commands/file/file-sharinginfo-get.js +2 -1
  37. package/dist/m365/spo/commands/file/file-sharinglink-add.js +2 -22
  38. package/dist/m365/spo/commands/file/file-sharinglink-clear.js +137 -0
  39. package/dist/m365/spo/commands/file/file-sharinglink-get.js +2 -25
  40. package/dist/m365/spo/commands/file/file-sharinglink-list.js +9 -29
  41. package/dist/m365/spo/commands/file/file-sharinglink-remove.js +2 -25
  42. package/dist/m365/spo/commands/file/file-sharinglink-set.js +104 -0
  43. package/dist/m365/spo/commands/group/group-list.js +2 -1
  44. package/dist/m365/spo/commands/hubsite/hubsite-get.js +1 -1
  45. package/dist/m365/spo/commands/listitem/listitem-list.js +2 -1
  46. package/dist/m365/spo/commands/navigation/navigation-node-add.js +17 -3
  47. package/dist/m365/spo/commands/navigation/navigation-node-list.js +4 -7
  48. package/dist/m365/spo/commands/navigation/navigation-node-set.js +118 -0
  49. package/dist/m365/spo/commands/page/page-column-get.js +2 -1
  50. package/dist/m365/spo/commands/page/page-column-list.js +2 -1
  51. package/dist/m365/spo/commands/page/page-section-get.js +2 -1
  52. package/dist/m365/spo/commands/page/page-section-list.js +2 -1
  53. package/dist/m365/spo/commands/site/site-apppermission-add.js +2 -14
  54. package/dist/m365/spo/commands/site/site-apppermission-get.js +2 -14
  55. package/dist/m365/spo/commands/site/site-apppermission-list.js +2 -14
  56. package/dist/m365/spo/commands/site/site-apppermission-remove.js +2 -14
  57. package/dist/m365/spo/commands/site/site-apppermission-set.js +2 -14
  58. package/dist/m365/spo/commands/spo-search.js +2 -1
  59. package/dist/m365/spo/commands/term/term-list.js +2 -1
  60. package/dist/m365/spo/commands/userprofile/userprofile-get.js +2 -2
  61. package/dist/m365/spo/commands/web/web-set.js +11 -4
  62. package/dist/m365/spo/commands.js +4 -0
  63. package/dist/m365/teams/commands/chat/chat-list.js +4 -4
  64. package/dist/m365/teams/commands/meeting/meeting-attendancereport-list.js +5 -5
  65. package/dist/m365/teams/commands/meeting/meeting-get.js +5 -5
  66. package/dist/m365/teams/commands/meeting/meeting-list.js +5 -4
  67. package/dist/m365/teams/commands/team/team-app-list.js +1 -1
  68. package/dist/m365/teams/commands/user/user-app-list.js +2 -1
  69. package/dist/m365/todo/commands/task/task-get.js +2 -1
  70. package/dist/m365/todo/commands/task/task-list.js +2 -1
  71. package/dist/m365/yammer/commands/yammer-search.js +2 -1
  72. package/dist/utils/accessToken.js +1 -1
  73. package/dist/utils/planner.js +19 -5
  74. package/dist/utils/spo.js +55 -0
  75. package/docs/docs/cmd/aad/app/app-list.md +3 -0
  76. package/docs/docs/cmd/aad/user/user-set.md +1 -1
  77. package/docs/docs/cmd/flow/run/run-list.md +21 -0
  78. package/docs/docs/cmd/pa/app/app-get.md +24 -0
  79. package/docs/docs/cmd/pa/app/app-list.md +21 -0
  80. package/docs/docs/cmd/pa/connector/connector-list.md +17 -0
  81. package/docs/docs/cmd/pa/environment/environment-get.md +18 -0
  82. package/docs/docs/cmd/pa/environment/environment-list.md +19 -0
  83. package/docs/docs/cmd/planner/plan/plan-add.md +17 -6
  84. package/docs/docs/cmd/planner/plan/plan-get.md +16 -2
  85. package/docs/docs/cmd/planner/plan/plan-list.md +16 -2
  86. package/docs/docs/cmd/planner/plan/plan-remove.md +4 -0
  87. package/docs/docs/cmd/planner/roster/roster-add.md +60 -0
  88. package/docs/docs/cmd/planner/roster/roster-member-add.md +87 -0
  89. package/docs/docs/cmd/planner/roster/roster-member-list.md +76 -0
  90. package/docs/docs/cmd/planner/roster/roster-remove.md +48 -0
  91. package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-get.md +43 -0
  92. package/docs/docs/cmd/pp/aibuildermodel/aibuildermodel-list.md +43 -0
  93. package/docs/docs/cmd/pp/card/card-clone.md +12 -0
  94. package/docs/docs/cmd/pp/card/card-get.md +49 -0
  95. package/docs/docs/cmd/pp/card/card-list.md +49 -0
  96. package/docs/docs/cmd/pp/chatbot/chatbot-get.md +55 -0
  97. package/docs/docs/cmd/pp/chatbot/chatbot-list.md +36 -0
  98. package/docs/docs/cmd/pp/dataverse/dataverse-table-get.md +30 -0
  99. package/docs/docs/cmd/pp/dataverse/dataverse-table-list.md +30 -0
  100. package/docs/docs/cmd/pp/dataverse/dataverse-table-row-list.md +30 -0
  101. package/docs/docs/cmd/pp/environment/environment-get.md +19 -0
  102. package/docs/docs/cmd/pp/environment/environment-list.md +19 -0
  103. package/docs/docs/cmd/pp/gateway/gateway-get.md +19 -0
  104. package/docs/docs/cmd/pp/gateway/gateway-list.md +19 -0
  105. package/docs/docs/cmd/pp/managementapp/managementapp-add.md +12 -0
  106. package/docs/docs/cmd/pp/managementapp/managementapp-list.md +12 -0
  107. package/docs/docs/cmd/pp/solution/solution-get.md +14 -0
  108. package/docs/docs/cmd/pp/solution/solution-list.md +14 -0
  109. package/docs/docs/cmd/pp/solution/solution-publisher-get.md +20 -1
  110. package/docs/docs/cmd/pp/solution/solution-publisher-list.md +18 -0
  111. package/docs/docs/cmd/pp/tenant/tenant-settings-list.md +21 -0
  112. package/docs/docs/cmd/purview/auditlog/auditlog-list.md +123 -0
  113. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-get.md +100 -0
  114. package/docs/docs/cmd/spfx/project/project-permissions-grant.md +65 -0
  115. package/docs/docs/cmd/spo/applicationcustomizer/applicationcustomizer-add.md +56 -0
  116. package/docs/docs/cmd/spo/file/file-sharinglink-clear.md +46 -0
  117. package/docs/docs/cmd/spo/file/file-sharinglink-list.md +1 -1
  118. package/docs/docs/cmd/spo/file/file-sharinglink-set.md +104 -0
  119. package/docs/docs/cmd/spo/listitem/listitem-attachment-list.md +2 -2
  120. package/docs/docs/cmd/spo/listitem/listitem-isrecord.md +2 -2
  121. package/docs/docs/cmd/spo/navigation/navigation-node-add.md +18 -3
  122. package/docs/docs/cmd/spo/navigation/navigation-node-list.md +30 -0
  123. package/docs/docs/cmd/spo/navigation/navigation-node-remove.md +1 -1
  124. package/docs/docs/cmd/spo/navigation/navigation-node-set.md +59 -0
  125. package/docs/docs/cmd/spo/web/web-set.md +9 -0
  126. package/npm-shrinkwrap.json +2 -2
  127. package/package.json +2 -2
@@ -0,0 +1,205 @@
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 _PurviewAuditLogListCommand_instances, _PurviewAuditLogListCommand_initTelemetry, _PurviewAuditLogListCommand_initOptions, _PurviewAuditLogListCommand_initValidators;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const Auth_1 = require("../../../../Auth");
19
+ const request_1 = require("../../../../request");
20
+ const accessToken_1 = require("../../../../utils/accessToken");
21
+ const validation_1 = require("../../../../utils/validation");
22
+ const O365MgmtCommand_1 = require("../../../base/O365MgmtCommand");
23
+ const commands_1 = require("../../commands");
24
+ class PurviewAuditLogListCommand extends O365MgmtCommand_1.default {
25
+ get name() {
26
+ return commands_1.default.AUDITLOG_LIST;
27
+ }
28
+ get description() {
29
+ return 'List audit logs within your tenant';
30
+ }
31
+ defaultProperties() {
32
+ return ['CreationTime', 'UserId', 'Operation', 'ObjectId'];
33
+ }
34
+ constructor() {
35
+ super();
36
+ _PurviewAuditLogListCommand_instances.add(this);
37
+ this.contentTypeOptions = ['AzureActiveDirectory', 'Exchange', 'SharePoint', 'General', 'DLP'];
38
+ __classPrivateFieldGet(this, _PurviewAuditLogListCommand_instances, "m", _PurviewAuditLogListCommand_initTelemetry).call(this);
39
+ __classPrivateFieldGet(this, _PurviewAuditLogListCommand_instances, "m", _PurviewAuditLogListCommand_initOptions).call(this);
40
+ __classPrivateFieldGet(this, _PurviewAuditLogListCommand_instances, "m", _PurviewAuditLogListCommand_initValidators).call(this);
41
+ }
42
+ commandAction(logger, args) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ // If we don't create a now object, start and end date can be an few extra ms apart due to execution time between code lines
45
+ const now = new Date();
46
+ try {
47
+ let startTime;
48
+ if (args.options.startTime) {
49
+ startTime = new Date(args.options.startTime);
50
+ }
51
+ else {
52
+ startTime = new Date(now);
53
+ startTime.setDate(startTime.getDate() - 1);
54
+ }
55
+ const endTime = args.options.endTime ? new Date(args.options.endTime) : new Date(now);
56
+ if (this.verbose) {
57
+ logger.logToStderr(`Getting audit logs for content type '${args.options.contentType}' within a time frame from '${startTime.toISOString()}' to '${endTime.toISOString()}'.`);
58
+ }
59
+ const tenantId = accessToken_1.accessToken.getTenantIdFromAccessToken(Auth_1.default.service.accessTokens[Auth_1.default.defaultResource].accessToken);
60
+ const contentTypeValue = args.options.contentType === 'DLP' ? 'DLP.All' : 'Audit.' + args.options.contentType;
61
+ yield this.ensureSubscription(tenantId, contentTypeValue);
62
+ if (this.verbose) {
63
+ logger.logToStderr(`'${args.options.contentType}' subscription is active.`);
64
+ }
65
+ const contentUris = [];
66
+ for (const time = startTime; time < endTime; time.setDate(time.getDate() + 1)) {
67
+ const differenceInMs = endTime.getTime() - time.getTime();
68
+ const endTimeBatch = new Date(time.getTime() + Math.min(differenceInMs, 1000 * 60 * 60 * 24)); // ms difference cannot be greater than 1 day
69
+ if (this.verbose) {
70
+ logger.logToStderr(`Get content URIs for date range from '${time.toISOString()}' to '${endTimeBatch.toISOString()}'.`);
71
+ }
72
+ const contentUrisBatch = yield this.getContentUris(tenantId, contentTypeValue, time, endTimeBatch);
73
+ contentUris.push(...contentUrisBatch);
74
+ }
75
+ if (this.verbose) {
76
+ logger.logToStderr(`Get content from ${contentUris.length} content URIs.`);
77
+ }
78
+ const logs = yield this.getContent(logger, contentUris);
79
+ const sortedLogs = logs.sort(this.auditLogsCompare);
80
+ logger.log(sortedLogs);
81
+ }
82
+ catch (err) {
83
+ this.handleRejectedODataJsonPromise(err);
84
+ }
85
+ });
86
+ }
87
+ ensureSubscription(tenantId, contentType) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ const requestOptions = {
90
+ url: `${this.resource}/api/v1.0/${tenantId}/activity/feed/subscriptions/list`,
91
+ headers: {
92
+ accept: 'application/json'
93
+ },
94
+ responseType: 'json'
95
+ };
96
+ const subscriptions = yield request_1.default.get(requestOptions);
97
+ if (subscriptions.some(s => s.contentType === contentType && s.status === 'enabled')) {
98
+ return;
99
+ }
100
+ requestOptions.url = `${this.resource}/api/v1.0/${tenantId}/activity/feed/subscriptions/start?contentType=${contentType}`;
101
+ const subscription = yield request_1.default.post(requestOptions);
102
+ if (subscription.status !== 'enabled') {
103
+ throw `Unable to start subscription '${contentType}'`;
104
+ }
105
+ });
106
+ }
107
+ getContentUris(tenantId, contentType, startTime, endTime) {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ const contentUris = [];
110
+ const requestOptions = {
111
+ url: `${this.resource}/api/v1.0/${tenantId}/activity/feed/subscriptions/content?contentType=${contentType}&startTime=${startTime.toISOString()}&endTime=${endTime.toISOString()}`,
112
+ headers: {
113
+ accept: 'application/json'
114
+ },
115
+ responseType: 'json',
116
+ fullResponse: true
117
+ };
118
+ do {
119
+ const response = yield request_1.default.get(requestOptions);
120
+ const uris = response.data.map(d => d.contentUri);
121
+ contentUris.push(...uris);
122
+ requestOptions.url = response.headers.nextpageuri;
123
+ } while (requestOptions.url);
124
+ return contentUris;
125
+ });
126
+ }
127
+ getContent(logger, contentUris) {
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ const logs = [];
130
+ const batchSize = 30;
131
+ for (let i = 0; i < contentUris.length; i += batchSize) {
132
+ const contentUrisBatch = contentUris.slice(i, i + batchSize);
133
+ if (this.verbose) {
134
+ logger.logToStderr(`Retrieving content from next ${contentUrisBatch.length} content URIs. Progress: ${Math.round(i / contentUris.length * 100)}%`);
135
+ }
136
+ const batchResult = yield Promise.all(contentUrisBatch.map(uri => request_1.default.get({
137
+ url: uri,
138
+ headers: {
139
+ accept: 'application/json'
140
+ },
141
+ responseType: 'json'
142
+ })));
143
+ batchResult.forEach(res => logs.push(...res));
144
+ }
145
+ return logs;
146
+ });
147
+ }
148
+ auditLogsCompare(a, b) {
149
+ if (a.CreationTime < b.CreationTime) {
150
+ return -1;
151
+ }
152
+ if (a.CreationTime > b.CreationTime) {
153
+ return 1;
154
+ }
155
+ return 0;
156
+ }
157
+ }
158
+ _PurviewAuditLogListCommand_instances = new WeakSet(), _PurviewAuditLogListCommand_initTelemetry = function _PurviewAuditLogListCommand_initTelemetry() {
159
+ this.telemetry.push((args) => {
160
+ Object.assign(this.telemetryProperties, {
161
+ startTime: typeof args.options.startTime !== 'undefined',
162
+ endTime: typeof args.options.endTime !== 'undefined'
163
+ });
164
+ });
165
+ }, _PurviewAuditLogListCommand_initOptions = function _PurviewAuditLogListCommand_initOptions() {
166
+ this.options.unshift({
167
+ option: '--contentType <contentType>',
168
+ autocomplete: this.contentTypeOptions
169
+ }, {
170
+ option: '--startTime [startTime]'
171
+ }, {
172
+ option: '--endTime [endTime]'
173
+ });
174
+ }, _PurviewAuditLogListCommand_initValidators = function _PurviewAuditLogListCommand_initValidators() {
175
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
176
+ if (this.contentTypeOptions.indexOf(args.options.contentType) === -1) {
177
+ return `'${args.options.contentType}' is not a valid contentType value. Allowed values: ${this.contentTypeOptions}.`;
178
+ }
179
+ if (args.options.startTime) {
180
+ if (!validation_1.validation.isValidISODateTime(args.options.startTime)) {
181
+ return `'${args.options.startTime}' is not a valid ISO date time string.`;
182
+ }
183
+ const lowerDateLimit = new Date();
184
+ lowerDateLimit.setDate(lowerDateLimit.getDate() - 7);
185
+ lowerDateLimit.setHours(lowerDateLimit.getHours() - 1); // Min date is 7 days ago, however there seems to be an 1h margin
186
+ if (new Date(args.options.startTime) < lowerDateLimit) {
187
+ return 'startTime value cannot be more than 7 days in the past.';
188
+ }
189
+ }
190
+ if (args.options.endTime) {
191
+ if (!validation_1.validation.isValidISODateTime(args.options.endTime)) {
192
+ return `'${args.options.endTime}' is not a valid ISO date time string.`;
193
+ }
194
+ if (new Date(args.options.endTime) > new Date()) {
195
+ return 'endTime value cannot be in the future.';
196
+ }
197
+ }
198
+ if (args.options.startTime && args.options.endTime && new Date(args.options.startTime) >= new Date(args.options.endTime)) {
199
+ return 'startTime value must be before endTime.';
200
+ }
201
+ return true;
202
+ }));
203
+ };
204
+ module.exports = new PurviewAuditLogListCommand();
205
+ //# sourceMappingURL=auditlog-list.js.map
@@ -0,0 +1,70 @@
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 _PurviewRetentionEventtypeGetCommand_instances, _PurviewRetentionEventtypeGetCommand_initOptions, _PurviewRetentionEventtypeGetCommand_initValidators;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const GraphCommand_1 = require("../../../base/GraphCommand");
19
+ const commands_1 = require("../../commands");
20
+ const request_1 = require("../../../../request");
21
+ const validation_1 = require("../../../../utils/validation");
22
+ class PurviewRetentionEventtypeGetCommand extends GraphCommand_1.default {
23
+ get name() {
24
+ return commands_1.default.RETENTIONEVENTTYPE_GET;
25
+ }
26
+ get description() {
27
+ return 'Retrieve the specified retention event type';
28
+ }
29
+ constructor() {
30
+ super();
31
+ _PurviewRetentionEventtypeGetCommand_instances.add(this);
32
+ __classPrivateFieldGet(this, _PurviewRetentionEventtypeGetCommand_instances, "m", _PurviewRetentionEventtypeGetCommand_initOptions).call(this);
33
+ __classPrivateFieldGet(this, _PurviewRetentionEventtypeGetCommand_instances, "m", _PurviewRetentionEventtypeGetCommand_initValidators).call(this);
34
+ }
35
+ commandAction(logger, args) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ try {
38
+ if (this.verbose) {
39
+ logger.logToStderr(`Retrieving retention event type with id ${args.options.id}`);
40
+ }
41
+ const requestOptions = {
42
+ url: `${this.resource}/beta/security/triggerTypes/retentionEventTypes/${args.options.id}`,
43
+ headers: {
44
+ accept: 'application/json;odata.metadata=none'
45
+ },
46
+ responseType: 'json'
47
+ };
48
+ const res = yield request_1.default.get(requestOptions);
49
+ logger.log(res);
50
+ }
51
+ catch (err) {
52
+ this.handleRejectedODataJsonPromise(err);
53
+ }
54
+ });
55
+ }
56
+ }
57
+ _PurviewRetentionEventtypeGetCommand_instances = new WeakSet(), _PurviewRetentionEventtypeGetCommand_initOptions = function _PurviewRetentionEventtypeGetCommand_initOptions() {
58
+ this.options.unshift({
59
+ option: '-i, --id <id>'
60
+ });
61
+ }, _PurviewRetentionEventtypeGetCommand_initValidators = function _PurviewRetentionEventtypeGetCommand_initValidators() {
62
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
63
+ if (!validation_1.validation.isValidGuid(args.options.id)) {
64
+ return `'${args.options.id}' is not a valid GUID.`;
65
+ }
66
+ return true;
67
+ }));
68
+ };
69
+ module.exports = new PurviewRetentionEventtypeGetCommand();
70
+ //# sourceMappingURL=retentioneventtype-get.js.map
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const prefix = 'purview';
4
4
  exports.default = {
5
+ RETENTIONEVENTTYPE_GET: `${prefix} retentioneventtype get`,
6
+ AUDITLOG_LIST: `${prefix} auditlog list`,
5
7
  RETENTIONLABEL_ADD: `${prefix} retentionlabel add`,
6
8
  RETENTIONLABEL_GET: `${prefix} retentionlabel get`,
7
9
  RETENTIONLABEL_LIST: `${prefix} retentionlabel list`,
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=WebApiPermissionRequests.js.map
@@ -0,0 +1,81 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const path = require("path");
13
+ const fs = require("fs");
14
+ const Command_1 = require("../../../../Command");
15
+ const commands_1 = require("../../commands");
16
+ const base_project_command_1 = require("./base-project-command");
17
+ const SpoServicePrincipalGrantAddCommand = require("../../../spo/commands/serviceprincipal/serviceprincipal-grant-add");
18
+ const Cli_1 = require("../../../../cli/Cli");
19
+ class SpfxProjectPermissionSGrantCommand extends base_project_command_1.BaseProjectCommand {
20
+ get name() {
21
+ return commands_1.default.PROJECT_PERMISSIONS_GRANT;
22
+ }
23
+ get description() {
24
+ return 'Grant API permissions defined in the current SPFx project';
25
+ }
26
+ constructor() {
27
+ super();
28
+ }
29
+ commandAction(logger) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ this.projectRootPath = this.getProjectRoot(process.cwd());
32
+ if (this.projectRootPath === null) {
33
+ throw new Command_1.CommandError(`Couldn't find project root folder`, SpfxProjectPermissionSGrantCommand.ERROR_NO_PROJECT_ROOT_FOLDER);
34
+ }
35
+ if (this.debug) {
36
+ logger.logToStderr(`Granting API permissions defined in the current SPFx project`);
37
+ }
38
+ try {
39
+ const webApiPermissionsRequest = this.getWebApiPermissionRequest(path.join(this.projectRootPath, 'config', 'package-solution.json'));
40
+ for (const permission of webApiPermissionsRequest) {
41
+ const options = {
42
+ resource: permission.resource,
43
+ scope: permission.scope,
44
+ output: 'json',
45
+ debug: this.debug,
46
+ verbose: this.verbose
47
+ };
48
+ let output = null;
49
+ try {
50
+ output = yield Cli_1.Cli.executeCommandWithOutput(SpoServicePrincipalGrantAddCommand, { options: Object.assign(Object.assign({}, options), { _: [] }) });
51
+ }
52
+ catch (err) {
53
+ if (err.error && err.error.message.indexOf('already exists') > -1) {
54
+ this.warn(logger, err.error.message);
55
+ continue;
56
+ }
57
+ else {
58
+ throw err;
59
+ }
60
+ }
61
+ const getGrantOutput = JSON.parse(output.stdout);
62
+ logger.log(getGrantOutput);
63
+ }
64
+ }
65
+ catch (error) {
66
+ throw new Command_1.CommandError(error);
67
+ }
68
+ });
69
+ }
70
+ getWebApiPermissionRequest(filePath) {
71
+ if (!fs.existsSync(filePath)) {
72
+ throw (`The package-solution.json file could not be found`);
73
+ }
74
+ const existingContent = fs.readFileSync(filePath, 'utf-8');
75
+ const solutionContent = JSON.parse(existingContent);
76
+ return solutionContent.solution.webApiPermissionRequests;
77
+ }
78
+ }
79
+ SpfxProjectPermissionSGrantCommand.ERROR_NO_PROJECT_ROOT_FOLDER = 1;
80
+ module.exports = new SpfxProjectPermissionSGrantCommand();
81
+ //# sourceMappingURL=project-permissions-grant.js.map
@@ -5,8 +5,9 @@ exports.default = {
5
5
  DOCTOR: `${prefix} doctor`,
6
6
  PACKAGE_GENERATE: `${prefix} package generate`,
7
7
  PROJECT_DOCTOR: `${prefix} project doctor`,
8
- PROJECT_UPGRADE: `${prefix} project upgrade`,
9
8
  PROJECT_EXTERNALIZE: `${prefix} project externalize`,
10
- PROJECT_RENAME: `${prefix} project rename`
9
+ PROJECT_PERMISSIONS_GRANT: `${prefix} project permissions grant`,
10
+ PROJECT_RENAME: `${prefix} project rename`,
11
+ PROJECT_UPGRADE: `${prefix} project upgrade`
11
12
  };
12
13
  //# sourceMappingURL=commands.js.map
@@ -17,6 +17,7 @@ var _SpoAppAddCommand_instances, _SpoAppAddCommand_initTelemetry, _SpoAppAddComm
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  const fs = require("fs");
19
19
  const path = require("path");
20
+ const Cli_1 = require("../../../../cli/Cli");
20
21
  const request_1 = require("../../../../request");
21
22
  const spo_1 = require("../../../../utils/spo");
22
23
  const validation_1 = require("../../../../utils/validation");
@@ -58,7 +59,7 @@ class SpoAppAddCommand extends SpoAppBaseCommand_1.SpoAppBaseCommand {
58
59
  };
59
60
  const res = yield request_1.default.post(requestOptions);
60
61
  const json = JSON.parse(res);
61
- if (args.options.output === 'json') {
62
+ if (!Cli_1.Cli.shouldTrimOutput(args.options.output)) {
62
63
  logger.log(json);
63
64
  }
64
65
  else {
@@ -0,0 +1,95 @@
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 _SpoApplicationCustomizerAddCommand_instances, _SpoApplicationCustomizerAddCommand_initOptions, _SpoApplicationCustomizerAddCommand_initTelemetry, _SpoApplicationCustomizerAddCommand_initValidators;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const Cli_1 = require("../../../../cli/Cli");
19
+ const validation_1 = require("../../../../utils/validation");
20
+ const SpoCommand_1 = require("../../../base/SpoCommand");
21
+ const commands_1 = require("../../commands");
22
+ const spoCustomActionAddCommand = require("../customaction/customaction-add");
23
+ class SpoApplicationCustomizerAddCommand extends SpoCommand_1.default {
24
+ get name() {
25
+ return commands_1.default.APPLICATIONCUSTOMIZER_ADD;
26
+ }
27
+ get description() {
28
+ return 'Add an application customizer to a site.';
29
+ }
30
+ constructor() {
31
+ super();
32
+ _SpoApplicationCustomizerAddCommand_instances.add(this);
33
+ __classPrivateFieldGet(this, _SpoApplicationCustomizerAddCommand_instances, "m", _SpoApplicationCustomizerAddCommand_initTelemetry).call(this);
34
+ __classPrivateFieldGet(this, _SpoApplicationCustomizerAddCommand_instances, "m", _SpoApplicationCustomizerAddCommand_initOptions).call(this);
35
+ __classPrivateFieldGet(this, _SpoApplicationCustomizerAddCommand_instances, "m", _SpoApplicationCustomizerAddCommand_initValidators).call(this);
36
+ }
37
+ commandAction(logger, args) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ if (this.verbose) {
40
+ logger.logToStderr(`Adding application customizer with title '${args.options.title}' and clientSideComponentId '${args.options.clientSideComponentId}' to the site`);
41
+ }
42
+ const options = {
43
+ webUrl: args.options.webUrl,
44
+ name: args.options.title,
45
+ title: args.options.title,
46
+ clientSideComponentId: args.options.clientSideComponentId,
47
+ clientSideComponentProperties: args.options.clientSideComponentProperties || '',
48
+ location: 'ClientSideExtension.ApplicationCustomizer',
49
+ debug: this.debug,
50
+ verbose: this.verbose
51
+ };
52
+ yield Cli_1.Cli.executeCommand(spoCustomActionAddCommand, { options: Object.assign(Object.assign({}, options), { _: [] }) });
53
+ });
54
+ }
55
+ }
56
+ _SpoApplicationCustomizerAddCommand_instances = new WeakSet(), _SpoApplicationCustomizerAddCommand_initOptions = function _SpoApplicationCustomizerAddCommand_initOptions() {
57
+ this.options.unshift({
58
+ option: '-t, --title <title>'
59
+ }, {
60
+ option: '-u, --webUrl <webUrl>'
61
+ }, {
62
+ option: '-i, --clientSideComponentId <clientSideComponentId>'
63
+ }, {
64
+ option: '--clientSideComponentProperties [clientSideComponentProperties]'
65
+ });
66
+ }, _SpoApplicationCustomizerAddCommand_initTelemetry = function _SpoApplicationCustomizerAddCommand_initTelemetry() {
67
+ this.telemetry.push((args) => {
68
+ Object.assign(this.telemetryProperties, {
69
+ clientSideComponentProperties: typeof args.options.clientSideComponentProperties !== 'undefined'
70
+ });
71
+ });
72
+ }, _SpoApplicationCustomizerAddCommand_initValidators = function _SpoApplicationCustomizerAddCommand_initValidators() {
73
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
74
+ if (args.options.webUrl) {
75
+ const isValidSharePointUrl = validation_1.validation.isValidSharePointUrl(args.options.webUrl);
76
+ if (isValidSharePointUrl !== true) {
77
+ return isValidSharePointUrl;
78
+ }
79
+ }
80
+ if (!validation_1.validation.isValidGuid(args.options.clientSideComponentId)) {
81
+ return `${args.options.clientSideComponentId} is not a valid GUID`;
82
+ }
83
+ if (args.options.clientSideComponentProperties) {
84
+ try {
85
+ JSON.parse(args.options.clientSideComponentProperties);
86
+ }
87
+ catch (e) {
88
+ return `An error has occurred while parsing clientSideComponentProperties: ${e}`;
89
+ }
90
+ }
91
+ return true;
92
+ }));
93
+ };
94
+ module.exports = new SpoApplicationCustomizerAddCommand();
95
+ //# sourceMappingURL=applicationcustomizer-add.js.map
@@ -1,3 +1,2 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
2
  //# sourceMappingURL=GraphFileDetails.js.map
@@ -15,6 +15,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
15
15
  };
16
16
  var _SpoFileSharingInfoGetCommand_instances, _SpoFileSharingInfoGetCommand_initTelemetry, _SpoFileSharingInfoGetCommand_initOptions, _SpoFileSharingInfoGetCommand_initValidators, _SpoFileSharingInfoGetCommand_initOptionSets;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
+ const Cli_1 = require("../../../../cli/Cli");
18
19
  const request_1 = require("../../../../request");
19
20
  const formatting_1 = require("../../../../utils/formatting");
20
21
  const validation_1 = require("../../../../utils/validation");
@@ -60,7 +61,7 @@ class SpoFileSharingInfoGetCommand extends SpoCommand_1.default {
60
61
  // typically, we don't do this, but in this case, we need to due to
61
62
  // the complexity of the retrieved object and the fact that we can't
62
63
  // use the generic way of simplifying the output
63
- if (args.options.output === 'json') {
64
+ if (!Cli_1.Cli.shouldTrimOutput(args.options.output)) {
64
65
  logger.log(res);
65
66
  }
66
67
  else {
@@ -16,7 +16,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
16
16
  var _SpoFileSharingLinkAddCommand_instances, _SpoFileSharingLinkAddCommand_initTelemetry, _SpoFileSharingLinkAddCommand_initOptions, _SpoFileSharingLinkAddCommand_initValidators, _SpoFileSharingLinkAddCommand_initOptionSets;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  const request_1 = require("../../../../request");
19
- const formatting_1 = require("../../../../utils/formatting");
19
+ const spo_1 = require("../../../../utils/spo");
20
20
  const validation_1 = require("../../../../utils/validation");
21
21
  const SpoCommand_1 = require("../../../base/SpoCommand");
22
22
  const commands_1 = require("../../commands");
@@ -41,7 +41,7 @@ class SpoFileSharingLinkAddCommand extends SpoCommand_1.default {
41
41
  logger.logToStderr(`Creating a sharing link for file ${args.options.fileId || args.options.fileUrl}...`);
42
42
  }
43
43
  try {
44
- const fileDetails = yield this.getFileDetails(args.options.webUrl, args.options.fileId, args.options.fileUrl);
44
+ const fileDetails = yield spo_1.spo.getVroomFileDetails(args.options.webUrl, args.options.fileId, args.options.fileUrl);
45
45
  const requestOptions = {
46
46
  url: `https://graph.microsoft.com/v1.0/sites/${fileDetails.SiteId}/drives/${fileDetails.VroomDriveID}/items/${fileDetails.VroomItemID}/createLink`,
47
47
  headers: {
@@ -62,26 +62,6 @@ class SpoFileSharingLinkAddCommand extends SpoCommand_1.default {
62
62
  }
63
63
  });
64
64
  }
65
- getFileDetails(webUrl, fileId, fileUrl) {
66
- return __awaiter(this, void 0, void 0, function* () {
67
- let requestUrl = `${webUrl}/_api/web/`;
68
- if (fileId) {
69
- requestUrl += `GetFileById('${fileId}')`;
70
- }
71
- else if (fileUrl) {
72
- requestUrl += `GetFileByServerRelativePath(decodedUrl='${formatting_1.formatting.encodeQueryParameter(fileUrl)}')`;
73
- }
74
- const requestOptions = {
75
- url: requestUrl += '?$select=SiteId,VroomItemId,VroomDriveId',
76
- headers: {
77
- accept: 'application/json;odata=nometadata'
78
- },
79
- responseType: 'json'
80
- };
81
- const res = yield request_1.default.get(requestOptions);
82
- return res;
83
- });
84
- }
85
65
  }
86
66
  _SpoFileSharingLinkAddCommand_instances = new WeakSet(), _SpoFileSharingLinkAddCommand_initTelemetry = function _SpoFileSharingLinkAddCommand_initTelemetry() {
87
67
  this.telemetry.push((args) => {