@pnp/cli-microsoft365 6.4.0-beta.e3b0f5c → 6.4.0-beta.f8f3553

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 (174) hide show
  1. package/.eslintrc.js +3 -0
  2. package/README.md +12 -1
  3. package/dist/m365/aad/commands/user/user-get.js +3 -0
  4. package/dist/m365/aad/commands/user/user-set.js +3 -0
  5. package/dist/m365/aad/commands/user/user-signin-list.js +3 -0
  6. package/dist/m365/planner/commands/roster/roster-member-add.js +3 -0
  7. package/dist/m365/purview/commands/retentionevent/retentionevent-add.js +138 -0
  8. package/dist/m365/purview/commands/retentionlabel/retentionlabel-add.js +48 -14
  9. package/dist/m365/purview/commands.js +1 -0
  10. package/dist/m365/spfx/commands/spfx-doctor.js +43 -29
  11. package/dist/m365/spo/commands/commandset/commandset-add.js +138 -0
  12. package/dist/m365/spo/commands/commandset/commandset-get.js +128 -0
  13. package/dist/m365/spo/commands/commandset/commandset-list.js +77 -0
  14. package/dist/m365/spo/commands/commandset/commandset-remove.js +146 -0
  15. package/dist/m365/spo/commands/commandset/commandset-set.js +182 -0
  16. package/dist/m365/spo/commands/file/file-move.js +1 -1
  17. package/dist/m365/spo/commands/group/group-member-add.js +54 -95
  18. package/dist/m365/spo/commands/list/list-add.js +11 -8
  19. package/dist/m365/spo/commands/list/list-set.js +3 -3
  20. package/dist/m365/spo/commands/navigation/navigation-node-add.js +5 -4
  21. package/dist/m365/spo/commands/navigation/navigation-node-set.js +5 -1
  22. package/dist/m365/spo/commands/tenant/tenant-applicationcustomizer-get.js +118 -0
  23. package/dist/m365/spo/commands/user/user-ensure.js +105 -0
  24. package/dist/m365/spo/commands.js +7 -0
  25. package/dist/utils/aadUser.js +37 -0
  26. package/dist/utils/md.js +7 -0
  27. package/dist/utils/spo.js +32 -0
  28. package/docs/docs/cmd/cli/completion/completion-clink-update.md +4 -4
  29. package/docs/docs/cmd/onenote/page/page-list.md +1 -1
  30. package/docs/docs/cmd/outlook/mail/mail-send.md +7 -3
  31. package/docs/docs/cmd/outlook/message/message-get.md +143 -0
  32. package/docs/docs/cmd/outlook/message/message-list.md +119 -0
  33. package/docs/docs/cmd/outlook/message/message-move.md +4 -0
  34. package/docs/docs/cmd/outlook/report/report-mailactivitycounts.md +40 -0
  35. package/docs/docs/cmd/outlook/report/report-mailactivityusercounts.md +40 -0
  36. package/docs/docs/cmd/outlook/report/report-mailactivityuserdetail.md +45 -0
  37. package/docs/docs/cmd/outlook/report/report-mailappusageappsusercounts.md +43 -0
  38. package/docs/docs/cmd/outlook/report/report-mailappusageusercounts.md +44 -0
  39. package/docs/docs/cmd/outlook/report/report-mailappusageuserdetail.md +48 -0
  40. package/docs/docs/cmd/outlook/report/report-mailappusageversionsusercounts.md +41 -0
  41. package/docs/docs/cmd/outlook/report/report-mailboxusagedetail.md +49 -0
  42. package/docs/docs/cmd/outlook/report/report-mailboxusagemailboxcount.md +37 -0
  43. package/docs/docs/cmd/outlook/report/report-mailboxusagequotastatusmailboxcounts.md +40 -0
  44. package/docs/docs/cmd/outlook/report/report-mailboxusagestorage.md +36 -0
  45. package/docs/docs/cmd/outlook/room/room-list.md +81 -0
  46. package/docs/docs/cmd/outlook/roomlist/roomlist-list.md +58 -0
  47. package/docs/docs/cmd/planner/plan/plan-add.md +3 -3
  48. package/docs/docs/cmd/planner/plan/plan-set.md +73 -7
  49. package/docs/docs/cmd/planner/roster/roster-add.md +16 -1
  50. package/docs/docs/cmd/planner/task/task-add.md +230 -0
  51. package/docs/docs/cmd/planner/task/task-checklistitem-add.md +55 -0
  52. package/docs/docs/cmd/planner/task/task-checklistitem-list.md +55 -0
  53. package/docs/docs/cmd/planner/task/task-checklistitem-remove.md +4 -0
  54. package/docs/docs/cmd/planner/task/task-get.md +131 -0
  55. package/docs/docs/cmd/planner/task/task-list.md +92 -0
  56. package/docs/docs/cmd/planner/task/task-reference-add.md +46 -0
  57. package/docs/docs/cmd/planner/task/task-reference-list.md +46 -0
  58. package/docs/docs/cmd/planner/task/task-reference-remove.md +4 -0
  59. package/docs/docs/cmd/planner/task/task-remove.md +4 -0
  60. package/docs/docs/cmd/planner/task/task-set.md +230 -0
  61. package/docs/docs/cmd/planner/tenant/tenant-settings-list.md +55 -0
  62. package/docs/docs/cmd/planner/tenant/tenant-settings-set.md +55 -0
  63. package/docs/docs/cmd/pp/card/card-get.md +2 -2
  64. package/docs/docs/cmd/pp/card/card-list.md +2 -2
  65. package/docs/docs/cmd/purview/retentionevent/retentionevent-add.md +149 -0
  66. package/docs/docs/cmd/purview/retentioneventtype/retentioneventtype-add.md +7 -7
  67. package/docs/docs/cmd/purview/retentionlabel/retentionlabel-add.md +12 -0
  68. package/docs/docs/cmd/skype/report/report-activitycounts.md +38 -0
  69. package/docs/docs/cmd/skype/report/report-activityusercounts.md +38 -0
  70. package/docs/docs/cmd/skype/report/report-activityuserdetail.md +67 -0
  71. package/docs/docs/cmd/spfx/project/project-doctor.md +3 -3
  72. package/docs/docs/cmd/spfx/project/project-externalize.md +3 -3
  73. package/docs/docs/cmd/spfx/project/project-permissions-grant.md +21 -0
  74. package/docs/docs/cmd/spfx/project/project-upgrade.md +3 -3
  75. package/docs/docs/cmd/spfx/spfx-doctor.md +3 -3
  76. package/docs/docs/cmd/spo/cdn/cdn-get.md +6 -6
  77. package/docs/docs/cmd/spo/cdn/cdn-origin-add.md +3 -3
  78. package/docs/docs/cmd/spo/cdn/cdn-origin-list.md +3 -3
  79. package/docs/docs/cmd/spo/cdn/cdn-origin-remove.md +3 -3
  80. package/docs/docs/cmd/spo/cdn/cdn-policy-list.md +3 -3
  81. package/docs/docs/cmd/spo/cdn/cdn-policy-set.md +3 -3
  82. package/docs/docs/cmd/spo/cdn/cdn-set.md +3 -3
  83. package/docs/docs/cmd/spo/commandset/commandset-add.md +159 -0
  84. package/docs/docs/cmd/spo/commandset/commandset-get.md +149 -0
  85. package/docs/docs/cmd/spo/commandset/commandset-list.md +109 -0
  86. package/docs/docs/cmd/spo/commandset/commandset-remove.md +55 -0
  87. package/docs/docs/cmd/spo/commandset/commandset-set.md +71 -0
  88. package/docs/docs/cmd/spo/externaluser/externaluser-list.md +2 -0
  89. package/docs/docs/cmd/spo/group/group-member-add.md +22 -0
  90. package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-get.md +2 -0
  91. package/docs/docs/cmd/spo/hidedefaultthemes/hidedefaultthemes-set.md +2 -0
  92. package/docs/docs/cmd/spo/homesite/homesite-remove.md +2 -0
  93. package/docs/docs/cmd/spo/homesite/homesite-set.md +2 -0
  94. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-get.md +2 -0
  95. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-remove.md +2 -0
  96. package/docs/docs/cmd/spo/knowledgehub/knowledgehub-set.md +3 -3
  97. package/docs/docs/cmd/spo/list/list-add.md +2 -2
  98. package/docs/docs/cmd/spo/list/list-set.md +2 -2
  99. package/docs/docs/cmd/spo/listitem/listitem-add.md +1 -1
  100. package/docs/docs/cmd/spo/listitem/listitem-batch-add.md +1 -1
  101. package/docs/docs/cmd/spo/listitem/listitem-set.md +1 -1
  102. package/docs/docs/cmd/spo/navigation/navigation-node-add.md +2 -2
  103. package/docs/docs/cmd/spo/navigation/navigation-node-set.md +1 -1
  104. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-add.md +2 -0
  105. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-list.md +2 -0
  106. package/docs/docs/cmd/spo/orgassetslibrary/orgassetslibrary-remove.md +2 -0
  107. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-list.md +2 -0
  108. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-remove.md +2 -0
  109. package/docs/docs/cmd/spo/orgnewssite/orgnewssite-set.md +3 -3
  110. package/docs/docs/cmd/spo/site/site-appcatalog-add.md +2 -0
  111. package/docs/docs/cmd/spo/site/site-appcatalog-remove.md +3 -3
  112. package/docs/docs/cmd/spo/site/site-commsite-enable.md +2 -0
  113. package/docs/docs/cmd/spo/site/site-list.md +3 -3
  114. package/docs/docs/cmd/spo/site/site-remove.md +3 -3
  115. package/docs/docs/cmd/spo/site/site-rename.md +3 -3
  116. package/docs/docs/cmd/spo/site/site-set.md +5 -5
  117. package/docs/docs/cmd/spo/storageentity/storageentity-remove.md +3 -3
  118. package/docs/docs/cmd/spo/storageentity/storageentity-set.md +3 -3
  119. package/docs/docs/cmd/spo/tenant/tenant-appcatalog-add.md +3 -3
  120. package/docs/docs/cmd/spo/tenant/tenant-appcatalogurl-get.md +2 -0
  121. package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-add.md +3 -3
  122. package/docs/docs/cmd/spo/tenant/tenant-applicationcustomizer-get.md +142 -0
  123. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-list.md +2 -0
  124. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-remove.md +3 -3
  125. package/docs/docs/cmd/spo/tenant/tenant-recyclebinitem-restore.md +3 -3
  126. package/docs/docs/cmd/spo/tenant/tenant-settings-list.md +2 -0
  127. package/docs/docs/cmd/spo/tenant/tenant-settings-set.md +2 -0
  128. package/docs/docs/cmd/spo/term/term-add.md +3 -3
  129. package/docs/docs/cmd/spo/term/term-get.md +3 -3
  130. package/docs/docs/cmd/spo/term/term-group-add.md +2 -0
  131. package/docs/docs/cmd/spo/term/term-group-get.md +2 -0
  132. package/docs/docs/cmd/spo/term/term-group-list.md +2 -0
  133. package/docs/docs/cmd/spo/term/term-list.md +3 -1
  134. package/docs/docs/cmd/spo/term/term-set-add.md +3 -3
  135. package/docs/docs/cmd/spo/term/term-set-get.md +2 -0
  136. package/docs/docs/cmd/spo/term/term-set-list.md +2 -0
  137. package/docs/docs/cmd/spo/theme/theme-apply.md +3 -3
  138. package/docs/docs/cmd/spo/theme/theme-get.md +2 -0
  139. package/docs/docs/cmd/spo/theme/theme-list.md +2 -0
  140. package/docs/docs/cmd/spo/theme/theme-remove.md +2 -0
  141. package/docs/docs/cmd/spo/theme/theme-set.md +3 -3
  142. package/docs/docs/cmd/spo/user/user-ensure.md +109 -0
  143. package/docs/docs/cmd/teams/channel/channel-get.md +1 -1
  144. package/docs/docs/cmd/teams/message/message-get.md +39 -4
  145. package/docs/docs/cmd/teams/message/message-list.md +41 -6
  146. package/docs/docs/cmd/teams/message/message-reply-list.md +39 -4
  147. package/docs/docs/cmd/teams/messagingsettings/messagingsettings-list.md +20 -2
  148. package/docs/docs/cmd/teams/messagingsettings/messagingsettings-set.md +8 -8
  149. package/docs/docs/cmd/teams/report/report-deviceusagedistributionusercounts.md +12 -5
  150. package/docs/docs/cmd/teams/report/report-deviceusageusercounts.md +13 -6
  151. package/docs/docs/cmd/teams/report/report-deviceusageuserdetail.md +14 -7
  152. package/docs/docs/cmd/teams/report/report-directroutingcalls.md +13 -6
  153. package/docs/docs/cmd/teams/report/report-pstncalls.md +13 -6
  154. package/docs/docs/cmd/teams/report/report-useractivitycounts.md +13 -6
  155. package/docs/docs/cmd/teams/report/report-useractivityusercounts.md +13 -6
  156. package/docs/docs/cmd/teams/report/report-useractivityuserdetail.md +13 -6
  157. package/docs/docs/cmd/teams/tab/tab-add.md +16 -0
  158. package/docs/docs/cmd/teams/tab/tab-get.md +17 -0
  159. package/docs/docs/cmd/teams/tab/tab-list.md +19 -0
  160. package/docs/docs/cmd/teams/team/team-add.md +77 -8
  161. package/docs/docs/cmd/teams/team/team-app-list.md +18 -2
  162. package/docs/docs/cmd/teams/team/team-archive.md +2 -2
  163. package/docs/docs/cmd/teams/team/team-clone.md +8 -8
  164. package/docs/docs/cmd/teams/team/team-get.md +34 -4
  165. package/docs/docs/cmd/teams/team/team-list.md +34 -3
  166. package/docs/docs/cmd/teams/team/team-remove.md +3 -3
  167. package/docs/docs/cmd/teams/team/team-set.md +8 -8
  168. package/docs/docs/cmd/teams/team/team-unarchive.md +3 -2
  169. package/docs/docs/cmd/teams/user/user-app-add.md +3 -3
  170. package/docs/docs/cmd/teams/user/user-app-list.md +18 -2
  171. package/docs/docs/cmd/teams/user/user-app-remove.md +4 -4
  172. package/docs/docs/cmd/teams/user/user-list.md +21 -4
  173. package/npm-shrinkwrap.json +277 -192
  174. package/package.json +13 -13
@@ -15,15 +15,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
15
15
  };
16
16
  var _SpoGroupMemberAddCommand_instances, _SpoGroupMemberAddCommand_initTelemetry, _SpoGroupMemberAddCommand_initOptions, _SpoGroupMemberAddCommand_initValidators, _SpoGroupMemberAddCommand_initOptionSets;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- const Cli_1 = require("../../../../cli/Cli");
19
18
  const request_1 = require("../../../../request");
20
19
  const formatting_1 = require("../../../../utils/formatting");
21
20
  const validation_1 = require("../../../../utils/validation");
22
- const AadUserGetCommand = require("../../../aad/commands/user/user-get");
23
- const AadGroupGetCommand = require("../../../aad/commands/group/group-get");
24
- const SpoUserGetCommand = require("../user/user-get");
25
21
  const SpoCommand_1 = require("../../../base/SpoCommand");
26
22
  const commands_1 = require("../../commands");
23
+ const aadUser_1 = require("../../../../utils/aadUser");
24
+ const aadGroup_1 = require("../../../../utils/aadGroup");
25
+ const spo_1 = require("../../../../utils/spo");
27
26
  class SpoGroupMemberAddCommand extends SpoCommand_1.default {
28
27
  get name() {
29
28
  return commands_1.default.GROUP_MEMBER_ADD;
@@ -48,21 +47,20 @@ class SpoGroupMemberAddCommand extends SpoCommand_1.default {
48
47
  const groupId = yield this.getGroupId(args, logger);
49
48
  const resolvedUsernameList = yield this.getValidUsers(args, logger);
50
49
  if (this.verbose) {
51
- logger.logToStderr(`Adding user(s) to SharePoint Group ${args.options.groupId || args.options.groupName}`);
50
+ logger.logToStderr(`Adding resource(s) to SharePoint Group ${args.options.groupId || args.options.groupName}`);
52
51
  }
53
- const data = {
54
- url: args.options.webUrl,
55
- peoplePickerInput: this.getFormattedUserList(resolvedUsernameList),
56
- roleValue: `group:${groupId}`
57
- };
58
52
  const requestOptions = {
59
53
  url: `${args.options.webUrl}/_api/SP.Web.ShareObject`,
60
54
  headers: {
61
- 'Accept': 'application/json;odata=nometadata',
62
- 'Content-type': 'application/json;odata=verbose'
55
+ accept: 'application/json;odata=nometadata',
56
+ 'content-type': 'application/json;odata=nometadata'
63
57
  },
64
- data: data,
65
- responseType: 'json'
58
+ responseType: 'json',
59
+ data: {
60
+ url: args.options.webUrl,
61
+ peoplePickerInput: this.getFormattedUserList(resolvedUsernameList),
62
+ roleValue: `group:${groupId}`
63
+ }
66
64
  };
67
65
  const sharingResult = yield request_1.default.post(requestOptions);
68
66
  if (sharingResult.ErrorMessage !== null) {
@@ -83,7 +81,7 @@ class SpoGroupMemberAddCommand extends SpoCommand_1.default {
83
81
  `GetByName('${formatting_1.formatting.encodeQueryParameter(args.options.groupName)}')` :
84
82
  `GetById('${args.options.groupId}')`;
85
83
  const requestOptions = {
86
- url: `${args.options.webUrl}/_api/web/sitegroups/${getGroupMethod}`,
84
+ url: `${args.options.webUrl}/_api/web/sitegroups/${getGroupMethod}?$select=Id`,
87
85
  headers: {
88
86
  'accept': 'application/json;odata=nometadata'
89
87
  },
@@ -91,91 +89,52 @@ class SpoGroupMemberAddCommand extends SpoCommand_1.default {
91
89
  };
92
90
  return request_1.default
93
91
  .get(requestOptions)
94
- .then(response => {
95
- const groupId = response.Id;
96
- if (!groupId) {
97
- return Promise.reject(`The specified group does not exist in the SharePoint site`);
98
- }
99
- return groupId;
100
- });
92
+ .then(response => response.Id);
101
93
  }
102
94
  getValidUsers(args, logger) {
103
- if (this.verbose) {
104
- logger.logToStderr(`Checking if the specified users exist`);
105
- }
106
- const validUserNames = [];
107
- const invalidUserNames = [];
108
- const userIdentifiers = args.options.userName || args.options.email || args.options.aadGroupId || args.options.aadGroupName || args.options.userId.toString();
109
- return Promise
110
- .all(userIdentifiers.split(',').map((userIdentifier) => __awaiter(this, void 0, void 0, function* () {
111
- const user = userIdentifier.trim();
112
- try {
113
- if (args.options.userId) {
114
- yield this.spoUserGet(args.options, user, logger, validUserNames);
115
- }
116
- else if (args.options.aadGroupId || args.options.aadGroupName) {
117
- yield this.aadGroupGet(args.options, user, logger, validUserNames);
118
- }
119
- else {
120
- yield this.aadUserGet(args.options, user, logger, validUserNames);
121
- }
122
- }
123
- catch (err) {
124
- logger.logToStderr(err.stderr);
125
- invalidUserNames.push(userIdentifier);
126
- return err;
127
- }
128
- })))
129
- .then(() => {
130
- if (invalidUserNames.length > 0) {
131
- return Promise.reject(`Users not added to the group because the following users don't exist: ${invalidUserNames.join(', ')}`);
132
- }
133
- return Promise.resolve(validUserNames);
134
- });
135
- }
136
- aadUserGet(options, userIdentifier, logger, validUserNames) {
95
+ var _a, _b, _c, _d;
137
96
  return __awaiter(this, void 0, void 0, function* () {
138
97
  if (this.verbose) {
139
- logger.logToStderr(`Get UPN from Azure AD for user ${userIdentifier}`);
98
+ logger.logToStderr('Checking if the specified users and groups exist');
140
99
  }
141
- const aadUserGetCommandoptions = Object.assign(Object.assign(Object.assign({}, (options.userName && { userName: userIdentifier })), (options.email && { email: userIdentifier })), { output: 'json', debug: options.debug, verbose: options.verbose });
142
- const aadUserGetOutput = yield Cli_1.Cli.executeCommandWithOutput(AadUserGetCommand, { options: Object.assign(Object.assign({}, aadUserGetCommandoptions), { _: [] }) });
143
- if (this.debug) {
144
- logger.logToStderr(aadUserGetOutput.stderr);
145
- }
146
- validUserNames.push(JSON.parse(aadUserGetOutput.stdout).userPrincipalName);
147
- });
148
- }
149
- aadGroupGet(options, userIdentifier, logger, validUserNames) {
150
- return __awaiter(this, void 0, void 0, function* () {
151
- if (this.verbose) {
152
- logger.logToStderr(`Get UPN from Azure AD for group ${userIdentifier}`);
153
- }
154
- const aadUserGetCommandoptions = Object.assign(Object.assign(Object.assign({}, (options.aadGroupId && { id: userIdentifier })), (options.aadGroupName && { title: userIdentifier })), { output: 'json', debug: options.debug, verbose: options.verbose });
155
- const aadGroupGetOutput = yield Cli_1.Cli.executeCommandWithOutput(AadGroupGetCommand, { options: Object.assign(Object.assign({}, aadUserGetCommandoptions), { _: [] }) });
156
- if (this.debug) {
157
- logger.logToStderr(aadGroupGetOutput.stderr);
158
- }
159
- validUserNames.push(JSON.parse(aadGroupGetOutput.stdout).mail);
160
- });
161
- }
162
- spoUserGet(options, userIdentifier, logger, validUserNames) {
163
- return __awaiter(this, void 0, void 0, function* () {
164
- if (this.verbose) {
165
- logger.logToStderr(`Get UPN from SharePoint for user ${userIdentifier}`);
166
- }
167
- const spoUserGetCommandoptions = {
168
- id: userIdentifier,
169
- webUrl: options.webUrl,
170
- output: 'json',
171
- debug: options.debug,
172
- verbose: options.verbose
173
- };
174
- const spoUserGetOutput = yield Cli_1.Cli.executeCommandWithOutput(SpoUserGetCommand, { options: Object.assign(Object.assign({}, spoUserGetCommandoptions), { _: [] }) });
175
- if (this.debug) {
176
- logger.logToStderr(spoUserGetOutput.stderr);
177
- }
178
- validUserNames.push(JSON.parse(spoUserGetOutput.stdout).UserPrincipalName);
100
+ const validUserNames = [];
101
+ const identifiers = (_d = (_c = (_b = (_a = args.options.userName) !== null && _a !== void 0 ? _a : args.options.email) !== null && _b !== void 0 ? _b : args.options.aadGroupId) !== null && _c !== void 0 ? _c : args.options.aadGroupName) !== null && _d !== void 0 ? _d : args.options.userId.toString();
102
+ yield Promise.all(identifiers.split(',').map((identifier) => __awaiter(this, void 0, void 0, function* () {
103
+ const trimmedIdentifier = identifier.trim();
104
+ try {
105
+ if (args.options.userId) {
106
+ if (this.verbose) {
107
+ logger.logToStderr(`Getting AAD ID of user with ID ${trimmedIdentifier}`);
108
+ }
109
+ const spoUserAzureId = yield spo_1.spo.getUserAzureIdBySpoId(args.options.webUrl, trimmedIdentifier);
110
+ validUserNames.push(spoUserAzureId);
111
+ }
112
+ else if (args.options.userName) {
113
+ validUserNames.push(trimmedIdentifier);
114
+ }
115
+ else if (args.options.aadGroupId) {
116
+ validUserNames.push(trimmedIdentifier);
117
+ }
118
+ else if (args.options.aadGroupName) {
119
+ if (this.verbose) {
120
+ logger.logToStderr(`Getting ID of Azure AD group ${trimmedIdentifier}`);
121
+ }
122
+ const groupId = yield aadGroup_1.aadGroup.getGroupIdByDisplayName(trimmedIdentifier);
123
+ validUserNames.push(groupId);
124
+ }
125
+ else {
126
+ if (this.verbose) {
127
+ logger.logToStderr(`Getting Azure AD ID for user ${trimmedIdentifier}`);
128
+ }
129
+ const upn = yield aadUser_1.aadUser.getUserIdByEmail(trimmedIdentifier);
130
+ validUserNames.push(upn);
131
+ }
132
+ }
133
+ catch (err) {
134
+ throw `Resource '${trimmedIdentifier}' does not exist.`;
135
+ }
136
+ })));
137
+ return validUserNames;
179
138
  });
180
139
  }
181
140
  getFormattedUserList(activeUserList) {
@@ -106,7 +106,7 @@ class SpoListAddCommand extends SpoCommand_1.default {
106
106
  mapRequestBody(options) {
107
107
  const requestBody = {
108
108
  Title: options.title,
109
- BaseTemplate: ListTemplateType_1.ListTemplateType[options.baseTemplate.trim()].valueOf()
109
+ BaseTemplate: options.baseTemplate ? ListTemplateType_1.ListTemplateType[options.baseTemplate.trim()].valueOf() : ListTemplateType_1.ListTemplateType.GenericList
110
110
  };
111
111
  if (options.description) {
112
112
  requestBody.Description = options.description;
@@ -148,7 +148,7 @@ class SpoListAddCommand extends SpoCommand_1.default {
148
148
  requestBody.DisableGridEditing = options.disableGridEditing;
149
149
  }
150
150
  if (options.draftVersionVisibility) {
151
- requestBody.DraftVersionVisibility = options.draftVersionVisibility;
151
+ requestBody.DraftVersionVisibility = DraftVisibilityType_1.DraftVisibilityType[options.draftVersionVisibility.trim()];
152
152
  }
153
153
  if (options.emailAlias) {
154
154
  requestBody.EmailAlias = options.emailAlias;
@@ -226,7 +226,7 @@ class SpoListAddCommand extends SpoCommand_1.default {
226
226
  requestBody.IsApplicationList = options.isApplicationList;
227
227
  }
228
228
  if (options.listExperienceOptions) {
229
- requestBody.ListExperienceOptions = options.listExperienceOptions;
229
+ requestBody.ListExperienceOptions = ListExperience_1.ListExperience[options.listExperienceOptions.trim()];
230
230
  }
231
231
  if (options.majorVersionLimit) {
232
232
  requestBody.MajorVersionLimit = options.majorVersionLimit;
@@ -296,6 +296,7 @@ _SpoListAddCommand_instances = new WeakSet(), _SpoListAddCommand_initTelemetry =
296
296
  const telemetryProps = {};
297
297
  // add properties with identifiable data
298
298
  [
299
+ 'baseTemplate',
299
300
  'description',
300
301
  'templateFeatureId',
301
302
  'schemaXml',
@@ -342,7 +343,7 @@ _SpoListAddCommand_instances = new WeakSet(), _SpoListAddCommand_initTelemetry =
342
343
  this.options.unshift({
343
344
  option: '-t, --title <title>'
344
345
  }, {
345
- option: '--baseTemplate <baseTemplate>',
346
+ option: '--baseTemplate [baseTemplate]',
346
347
  autocomplete: this.listTemplateTypeMap
347
348
  }, {
348
349
  option: '-u, --webUrl <webUrl>'
@@ -520,9 +521,11 @@ _SpoListAddCommand_instances = new WeakSet(), _SpoListAddCommand_initTelemetry =
520
521
  if (isValidSharePointUrl !== true) {
521
522
  return isValidSharePointUrl;
522
523
  }
523
- const template = ListTemplateType_1.ListTemplateType[args.options.baseTemplate.trim()];
524
- if (!template) {
525
- return `${args.options.baseTemplate} is not a valid baseTemplate value`;
524
+ if (args.options.baseTemplate) {
525
+ const template = ListTemplateType_1.ListTemplateType[args.options.baseTemplate.trim()];
526
+ if (!template) {
527
+ return `${args.options.baseTemplate} is not a valid baseTemplate value`;
528
+ }
526
529
  }
527
530
  if (args.options.templateFeatureId &&
528
531
  !validation_1.validation.isValidGuid(args.options.templateFeatureId)) {
@@ -538,7 +541,7 @@ _SpoListAddCommand_instances = new WeakSet(), _SpoListAddCommand_initTelemetry =
538
541
  }
539
542
  if (args.options.draftVersionVisibility) {
540
543
  const draftType = DraftVisibilityType_1.DraftVisibilityType[args.options.draftVersionVisibility.trim()];
541
- if (!draftType) {
544
+ if (draftType === undefined) {
542
545
  return `${args.options.draftVersionVisibility} is not a valid draftVisibilityType value`;
543
546
  }
544
547
  }
@@ -150,7 +150,7 @@ class SpoListSetCommand extends SpoCommand_1.default {
150
150
  requestBody.DisableGridEditing = options.disableGridEditing;
151
151
  }
152
152
  if (options.draftVersionVisibility) {
153
- requestBody.DraftVersionVisibility = options.draftVersionVisibility;
153
+ requestBody.DraftVersionVisibility = DraftVisibilityType_1.DraftVisibilityType[options.draftVersionVisibility.trim()];
154
154
  }
155
155
  if (options.emailAlias) {
156
156
  requestBody.EmailAlias = options.emailAlias;
@@ -228,7 +228,7 @@ class SpoListSetCommand extends SpoCommand_1.default {
228
228
  requestBody.IsApplicationList = options.isApplicationList;
229
229
  }
230
230
  if (options.listExperienceOptions) {
231
- requestBody.ListExperienceOptions = options.listExperienceOptions;
231
+ requestBody.ListExperienceOptions = ListExperience_1.ListExperience[options.listExperienceOptions.trim()];
232
232
  }
233
233
  if (options.majorVersionLimit) {
234
234
  requestBody.MajorVersionLimit = options.majorVersionLimit;
@@ -545,7 +545,7 @@ _SpoListSetCommand_instances = new WeakSet(), _SpoListSetCommand_initTelemetry =
545
545
  }
546
546
  if (args.options.draftVersionVisibility) {
547
547
  const draftType = DraftVisibilityType_1.DraftVisibilityType[args.options.draftVersionVisibility.trim()];
548
- if (!draftType) {
548
+ if (draftType === undefined) {
549
549
  return `${args.options.draftVersionVisibility} is not a valid draftVisibilityType value`;
550
550
  }
551
551
  }
@@ -38,7 +38,7 @@ class SpoNavigationNodeAddCommand extends SpoCommand_1.default {
38
38
  return ['url'];
39
39
  }
40
40
  commandAction(logger, args) {
41
- var _a;
41
+ var _a, _b;
42
42
  return __awaiter(this, void 0, void 0, function* () {
43
43
  if (this.verbose) {
44
44
  logger.logToStderr(`Adding navigation node...`);
@@ -56,7 +56,7 @@ class SpoNavigationNodeAddCommand extends SpoCommand_1.default {
56
56
  data: {
57
57
  AudienceIds: (_a = args.options.audienceIds) === null || _a === void 0 ? void 0 : _a.split(','),
58
58
  Title: args.options.title,
59
- Url: args.options.url,
59
+ Url: (_b = args.options.url) !== null && _b !== void 0 ? _b : 'http://linkless.header/',
60
60
  IsExternal: args.options.isExternal === true
61
61
  }
62
62
  };
@@ -76,7 +76,8 @@ _SpoNavigationNodeAddCommand_instances = new WeakSet(), _SpoNavigationNodeAddCom
76
76
  isExternal: args.options.isExternal,
77
77
  location: typeof args.options.location !== 'undefined',
78
78
  parentNodeId: typeof args.options.parentNodeId !== 'undefined',
79
- audienceIds: typeof args.options.audienceIds !== 'undefined'
79
+ audienceIds: typeof args.options.audienceIds !== 'undefined',
80
+ url: typeof args.options.url !== 'undefined'
80
81
  });
81
82
  });
82
83
  }, _SpoNavigationNodeAddCommand_initOptions = function _SpoNavigationNodeAddCommand_initOptions() {
@@ -88,7 +89,7 @@ _SpoNavigationNodeAddCommand_instances = new WeakSet(), _SpoNavigationNodeAddCom
88
89
  }, {
89
90
  option: '-t, --title <title>'
90
91
  }, {
91
- option: '--url <url>'
92
+ option: '--url [url]'
92
93
  }, {
93
94
  option: '--parentNodeId [parentNodeId]'
94
95
  }, {
@@ -40,10 +40,14 @@ class SpoNavigationNodeSetCommand extends SpoCommand_1.default {
40
40
  if (this.verbose) {
41
41
  logger.logToStderr(`Setting navigation node...`);
42
42
  }
43
+ let url = args.options.url;
44
+ if (url === '') {
45
+ url = 'http://linkless.header/';
46
+ }
43
47
  const requestBody = {
44
48
  Title: args.options.title,
45
49
  IsExternal: args.options.isExternal,
46
- Url: args.options.url
50
+ Url: url
47
51
  };
48
52
  if (args.options.audienceIds !== undefined) {
49
53
  requestBody.AudienceIds = args.options.audienceIds === '' ? [] : args.options.audienceIds.split(',');
@@ -0,0 +1,118 @@
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 _SpoTenantApplicationCustomizerGetCommand_instances, _SpoTenantApplicationCustomizerGetCommand_initTelemetry, _SpoTenantApplicationCustomizerGetCommand_initOptions, _SpoTenantApplicationCustomizerGetCommand_initValidators, _SpoTenantApplicationCustomizerGetCommand_initOptionSets;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const Command_1 = require("../../../../Command");
19
+ const request_1 = require("../../../../request");
20
+ const formatting_1 = require("../../../../utils/formatting");
21
+ const spo_1 = require("../../../../utils/spo");
22
+ const urlUtil_1 = require("../../../../utils/urlUtil");
23
+ const validation_1 = require("../../../../utils/validation");
24
+ const SpoCommand_1 = require("../../../base/SpoCommand");
25
+ const commands_1 = require("../../commands");
26
+ class SpoTenantApplicationCustomizerGetCommand extends SpoCommand_1.default {
27
+ get name() {
28
+ return commands_1.default.TENANT_APPLICATIONCUSTOMIZER_GET;
29
+ }
30
+ get description() {
31
+ return 'Get an application customizer that is installed tenant wide';
32
+ }
33
+ constructor() {
34
+ super();
35
+ _SpoTenantApplicationCustomizerGetCommand_instances.add(this);
36
+ __classPrivateFieldGet(this, _SpoTenantApplicationCustomizerGetCommand_instances, "m", _SpoTenantApplicationCustomizerGetCommand_initTelemetry).call(this);
37
+ __classPrivateFieldGet(this, _SpoTenantApplicationCustomizerGetCommand_instances, "m", _SpoTenantApplicationCustomizerGetCommand_initOptions).call(this);
38
+ __classPrivateFieldGet(this, _SpoTenantApplicationCustomizerGetCommand_instances, "m", _SpoTenantApplicationCustomizerGetCommand_initValidators).call(this);
39
+ __classPrivateFieldGet(this, _SpoTenantApplicationCustomizerGetCommand_instances, "m", _SpoTenantApplicationCustomizerGetCommand_initOptionSets).call(this);
40
+ }
41
+ commandAction(logger, args) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ const appCatalogUrl = yield spo_1.spo.getTenantAppCatalogUrl(logger, this.debug);
44
+ if (!appCatalogUrl) {
45
+ throw new Command_1.CommandError('No app catalog URL found');
46
+ }
47
+ let filter = '';
48
+ if (args.options.title) {
49
+ filter = `Title eq '${args.options.title}'`;
50
+ }
51
+ else if (args.options.id) {
52
+ filter = `GUID eq '${args.options.id}'`;
53
+ }
54
+ else if (args.options.clientSideComponentId) {
55
+ filter = `TenantWideExtensionComponentId eq '${args.options.clientSideComponentId}'`;
56
+ }
57
+ const listServerRelativeUrl = urlUtil_1.urlUtil.getServerRelativePath(appCatalogUrl, '/lists/TenantWideExtensions');
58
+ const reqOptions = {
59
+ url: `${appCatalogUrl}/_api/web/GetList('${formatting_1.formatting.encodeQueryParameter(listServerRelativeUrl)}')/items?$filter=${filter}`,
60
+ headers: {
61
+ 'accept': 'application/json;odata=nometadata'
62
+ },
63
+ responseType: 'json'
64
+ };
65
+ let listItemInstances;
66
+ try {
67
+ listItemInstances = yield request_1.default.get(reqOptions);
68
+ }
69
+ catch (err) {
70
+ return this.handleRejectedODataJsonPromise(err);
71
+ }
72
+ if (listItemInstances) {
73
+ if (listItemInstances.value.length === 0) {
74
+ throw new Command_1.CommandError('The specified application customizer was not found');
75
+ }
76
+ if (listItemInstances.value.length > 1) {
77
+ throw new Command_1.CommandError(`Multiple application customizers with ${args.options.title || args.options.clientSideComponentId} were found. Please disambiguate (IDs): ${listItemInstances.value.map(item => item.GUID).join(', ')}`);
78
+ }
79
+ listItemInstances.value.forEach(v => delete v['ID']);
80
+ logger.log(listItemInstances.value[0]);
81
+ }
82
+ else {
83
+ throw new Command_1.CommandError('The specified application customizer was not found');
84
+ }
85
+ });
86
+ }
87
+ }
88
+ _SpoTenantApplicationCustomizerGetCommand_instances = new WeakSet(), _SpoTenantApplicationCustomizerGetCommand_initTelemetry = function _SpoTenantApplicationCustomizerGetCommand_initTelemetry() {
89
+ this.telemetry.push((args) => {
90
+ Object.assign(this.telemetryProperties, {
91
+ title: typeof args.options.title !== 'undefined',
92
+ id: typeof args.options.id !== 'undefined',
93
+ clientSideComponentId: typeof args.options.clientSideComponentId !== 'undefined'
94
+ });
95
+ });
96
+ }, _SpoTenantApplicationCustomizerGetCommand_initOptions = function _SpoTenantApplicationCustomizerGetCommand_initOptions() {
97
+ this.options.unshift({
98
+ option: '-t, --title [title]'
99
+ }, {
100
+ option: '-i, --id [id]'
101
+ }, {
102
+ option: '-c, --clientSideComponentId [clientSideComponentId]'
103
+ });
104
+ }, _SpoTenantApplicationCustomizerGetCommand_initValidators = function _SpoTenantApplicationCustomizerGetCommand_initValidators() {
105
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
106
+ if (args.options.id && !validation_1.validation.isValidGuid(args.options.id)) {
107
+ return `${args.options.id} is not a valid GUID`;
108
+ }
109
+ if (args.options.clientSideComponentId && !validation_1.validation.isValidGuid(args.options.clientSideComponentId)) {
110
+ return `${args.options.clientSideComponentId} is not a valid GUID`;
111
+ }
112
+ return true;
113
+ }));
114
+ }, _SpoTenantApplicationCustomizerGetCommand_initOptionSets = function _SpoTenantApplicationCustomizerGetCommand_initOptionSets() {
115
+ this.optionSets.push({ options: ['title', 'id', 'clientSideComponentId'] });
116
+ };
117
+ module.exports = new SpoTenantApplicationCustomizerGetCommand();
118
+ //# sourceMappingURL=tenant-applicationcustomizer-get.js.map
@@ -0,0 +1,105 @@
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 _SpoUserEnsureCommand_instances, _SpoUserEnsureCommand_initTelemetry, _SpoUserEnsureCommand_initOptions, _SpoUserEnsureCommand_initValidators, _SpoUserEnsureCommand_initOptionSets;
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const request_1 = require("../../../../request");
19
+ const aadUser_1 = require("../../../../utils/aadUser");
20
+ const validation_1 = require("../../../../utils/validation");
21
+ const SpoCommand_1 = require("../../../base/SpoCommand");
22
+ const commands_1 = require("../../commands");
23
+ class SpoUserEnsureCommand extends SpoCommand_1.default {
24
+ get name() {
25
+ return commands_1.default.USER_ENSURE;
26
+ }
27
+ get description() {
28
+ return 'Ensures that a user is available on a specific site';
29
+ }
30
+ constructor() {
31
+ super();
32
+ _SpoUserEnsureCommand_instances.add(this);
33
+ __classPrivateFieldGet(this, _SpoUserEnsureCommand_instances, "m", _SpoUserEnsureCommand_initTelemetry).call(this);
34
+ __classPrivateFieldGet(this, _SpoUserEnsureCommand_instances, "m", _SpoUserEnsureCommand_initOptions).call(this);
35
+ __classPrivateFieldGet(this, _SpoUserEnsureCommand_instances, "m", _SpoUserEnsureCommand_initValidators).call(this);
36
+ __classPrivateFieldGet(this, _SpoUserEnsureCommand_instances, "m", _SpoUserEnsureCommand_initOptionSets).call(this);
37
+ }
38
+ commandAction(logger, args) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ if (this.verbose) {
41
+ logger.logToStderr(`Ensuring user ${args.options.aadId || args.options.userName} at site ${args.options.webUrl}`);
42
+ }
43
+ try {
44
+ const requestBody = {
45
+ logonName: args.options.userName || (yield this.getUpnByUserId(args.options.aadId, logger))
46
+ };
47
+ const requestOptions = {
48
+ url: `${args.options.webUrl}/_api/web/ensureuser`,
49
+ headers: {
50
+ accept: 'application/json;odata=nometadata'
51
+ },
52
+ data: requestBody,
53
+ responseType: 'json'
54
+ };
55
+ const response = yield request_1.default.post(requestOptions);
56
+ logger.log(response);
57
+ }
58
+ catch (err) {
59
+ this.handleRejectedODataJsonPromise(err);
60
+ }
61
+ });
62
+ }
63
+ getUpnByUserId(aadId, logger) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ if (this.verbose) {
66
+ logger.logToStderr(`Retrieving user principal name for user with id ${aadId}`);
67
+ }
68
+ return yield aadUser_1.aadUser.getUpnByUserId(aadId);
69
+ });
70
+ }
71
+ }
72
+ _SpoUserEnsureCommand_instances = new WeakSet(), _SpoUserEnsureCommand_initTelemetry = function _SpoUserEnsureCommand_initTelemetry() {
73
+ this.telemetry.push((args) => {
74
+ Object.assign(this.telemetryProperties, {
75
+ aadId: typeof args.options.aadId !== 'undefined',
76
+ userName: typeof args.options.userName !== 'undefined'
77
+ });
78
+ });
79
+ }, _SpoUserEnsureCommand_initOptions = function _SpoUserEnsureCommand_initOptions() {
80
+ this.options.unshift({
81
+ option: '-u, --webUrl <webUrl>'
82
+ }, {
83
+ option: '--aadId [aadId]'
84
+ }, {
85
+ option: '--userName [userName]'
86
+ });
87
+ }, _SpoUserEnsureCommand_initValidators = function _SpoUserEnsureCommand_initValidators() {
88
+ this.validators.push((args) => __awaiter(this, void 0, void 0, function* () {
89
+ const isValidSharePointUrl = validation_1.validation.isValidSharePointUrl(args.options.webUrl);
90
+ if (isValidSharePointUrl !== true) {
91
+ return isValidSharePointUrl;
92
+ }
93
+ if (args.options.aadId && !validation_1.validation.isValidGuid(args.options.aadId)) {
94
+ return `${args.options.aadId} is not a valid GUID.`;
95
+ }
96
+ if (args.options.userName && !validation_1.validation.isValidUserPrincipalName(args.options.userName)) {
97
+ return `${args.options.userName} is not a valid userName.`;
98
+ }
99
+ return true;
100
+ }));
101
+ }, _SpoUserEnsureCommand_initOptionSets = function _SpoUserEnsureCommand_initOptionSets() {
102
+ this.optionSets.push({ options: ['aadId', 'userName'] });
103
+ };
104
+ module.exports = new SpoUserEnsureCommand();
105
+ //# sourceMappingURL=user-ensure.js.map
@@ -23,6 +23,11 @@ exports.default = {
23
23
  CDN_POLICY_LIST: `${prefix} cdn policy list`,
24
24
  CDN_POLICY_SET: `${prefix} cdn policy set`,
25
25
  CDN_SET: `${prefix} cdn set`,
26
+ COMMANDSET_ADD: `${prefix} commandset add`,
27
+ COMMANDSET_GET: `${prefix} commandset get`,
28
+ COMMANDSET_LIST: `${prefix} commandset list`,
29
+ COMMANDSET_REMOVE: `${prefix} commandset remove`,
30
+ COMMANDSET_SET: `${prefix} commandset set`,
26
31
  CONTENTTYPE_ADD: `${prefix} contenttype add`,
27
32
  CONTENTTYPE_FIELD_REMOVE: `${prefix} contenttype field remove`,
28
33
  CONTENTTYPE_FIELD_SET: `${prefix} contenttype field set`,
@@ -279,6 +284,7 @@ exports.default = {
279
284
  TENANT_APPCATALOG_ADD: `${prefix} tenant appcatalog add`,
280
285
  TENANT_APPCATALOGURL_GET: `${prefix} tenant appcatalogurl get`,
281
286
  TENANT_APPLICATIONCUSTOMIZER_ADD: `${prefix} tenant applicationcustomizer add`,
287
+ TENANT_APPLICATIONCUSTOMIZER_GET: `${prefix} tenant applicationcustomizer get`,
282
288
  TENANT_RECYCLEBINITEM_LIST: `${prefix} tenant recyclebinitem list`,
283
289
  TENANT_RECYCLEBINITEM_REMOVE: `${prefix} tenant recyclebinitem remove`,
284
290
  TENANT_RECYCLEBINITEM_RESTORE: `${prefix} tenant recyclebinitem restore`,
@@ -298,6 +304,7 @@ exports.default = {
298
304
  THEME_LIST: `${prefix} theme list`,
299
305
  THEME_REMOVE: `${prefix} theme remove`,
300
306
  THEME_SET: `${prefix} theme set`,
307
+ USER_ENSURE: `${prefix} user ensure`,
301
308
  USER_GET: `${prefix} user get`,
302
309
  USER_LIST: `${prefix} user list`,
303
310
  USER_REMOVE: `${prefix} user remove`,
@@ -33,6 +33,43 @@ exports.aadUser = {
33
33
  }
34
34
  return res.value[0].id;
35
35
  });
36
+ },
37
+ /**
38
+ * Retrieve the ID of a user by its email.
39
+ * @param mail User email.
40
+ */
41
+ getUserIdByEmail(email) {
42
+ return __awaiter(this, void 0, void 0, function* () {
43
+ const requestOptions = {
44
+ url: `${graphResource}/v1.0/users?$filter=mail eq '${formatting_1.formatting.encodeQueryParameter(email)}'&$select=id`,
45
+ headers: {
46
+ accept: 'application/json;odata.metadata=none'
47
+ },
48
+ responseType: 'json'
49
+ };
50
+ const res = yield request_1.default.get(requestOptions);
51
+ if (res.value.length === 0) {
52
+ throw Error(`The specified user with email ${email} does not exist`);
53
+ }
54
+ return res.value[0].id;
55
+ });
56
+ },
57
+ /**
58
+ * Retrieve the UPN of a user by its ID.
59
+ * @param id User ID.
60
+ */
61
+ getUpnByUserId(id) {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ const requestOptions = {
64
+ url: `${graphResource}/v1.0/users/${id}?$select=userPrincipalName`,
65
+ headers: {
66
+ accept: 'application/json;odata.metadata=none'
67
+ },
68
+ responseType: 'json'
69
+ };
70
+ const res = yield request_1.default.get(requestOptions);
71
+ return res.userPrincipalName;
72
+ });
36
73
  }
37
74
  };
38
75
  //# sourceMappingURL=aadUser.js.map