@pnp/cli-microsoft365 7.5.0-beta.cae14d0 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/.eslintrc.cjs +6 -2
  2. package/.mocharc.json +3 -5
  3. package/Dockerfile +0 -3
  4. package/README.md +2 -2
  5. package/allCommands.json +1 -1
  6. package/allCommandsFull.json +1 -1
  7. package/dist/Auth.js +171 -69
  8. package/dist/AuthServer.js +3 -3
  9. package/dist/Command.js +8 -5
  10. package/dist/auth/FileTokenStorage.js +4 -1
  11. package/dist/m365/base/AppCommand.js +2 -2
  12. package/dist/m365/base/PowerAppsCommand.js +2 -2
  13. package/dist/m365/base/PowerAutomateCommand.js +2 -2
  14. package/dist/m365/base/PowerPlatformCommand.js +2 -2
  15. package/dist/m365/base/SpoCommand.js +3 -3
  16. package/dist/m365/base/{YammerCommand.js → VivaEngageCommand.js} +2 -2
  17. package/dist/m365/cli/commands/cli-consent.js +5 -3
  18. package/dist/m365/cli/commands/cli-doctor.js +5 -5
  19. package/dist/m365/commands/ConnectionDetails.js +2 -0
  20. package/dist/m365/commands/login.js +26 -48
  21. package/dist/m365/commands/logout.js +2 -2
  22. package/dist/m365/commands/request.js +2 -2
  23. package/dist/m365/commands/status.js +15 -23
  24. package/dist/m365/connection/commands/connection-list.js +47 -0
  25. package/dist/m365/connection/commands/connection-remove.js +67 -0
  26. package/dist/m365/connection/commands/connection-set.js +56 -0
  27. package/dist/m365/connection/commands/connection-use.js +51 -0
  28. package/dist/m365/connection/commands.js +8 -0
  29. package/dist/m365/entra/aadCommands.js +3 -0
  30. package/dist/m365/entra/commands/administrativeunit/administrativeunit-member-remove.js +153 -0
  31. package/dist/m365/entra/commands/app/app-add.js +2 -2
  32. package/dist/m365/entra/commands/app/app-get.js +1 -1
  33. package/dist/m365/entra/commands/app/app-list.js +1 -1
  34. package/dist/m365/entra/commands/app/app-permission-add.js +1 -1
  35. package/dist/m365/entra/commands/app/app-permission-list.js +182 -0
  36. package/dist/m365/entra/commands/app/app-remove.js +1 -1
  37. package/dist/m365/entra/commands/app/app-role-add.js +1 -1
  38. package/dist/m365/entra/commands/app/app-role-list.js +1 -1
  39. package/dist/m365/entra/commands/app/app-role-remove.js +1 -1
  40. package/dist/m365/entra/commands/app/app-set.js +1 -1
  41. package/dist/m365/entra/commands/{sp/sp-add.js → enterpriseapp/enterpriseapp-add.js} +18 -18
  42. package/dist/m365/entra/commands/{sp/sp-get.js → enterpriseapp/enterpriseapp-get.js} +19 -19
  43. package/dist/m365/entra/commands/{sp/sp-list.js → enterpriseapp/enterpriseapp-list.js} +13 -13
  44. package/dist/m365/entra/commands/group/group-add.js +224 -0
  45. package/dist/m365/entra/commands/m365group/m365group-report-activitygroupcounts.js +1 -1
  46. package/dist/m365/entra/commands/user/user-get.js +38 -38
  47. package/dist/m365/entra/commands/user/user-license-list.js +1 -1
  48. package/dist/m365/entra/commands/user/user-registrationdetails-list.js +224 -0
  49. package/dist/m365/entra/commands/user/user-set.js +2 -2
  50. package/dist/m365/entra/commands.js +16 -0
  51. package/dist/m365/file/commands/convert/convert-pdf.js +1 -1
  52. package/dist/m365/file/commands/file-copy.js +151 -0
  53. package/dist/m365/file/commands.js +1 -0
  54. package/dist/m365/outlook/commands/mail/mail-send.js +1 -1
  55. package/dist/m365/outlook/commands/message/message-get.js +1 -1
  56. package/dist/m365/pa/commands/app/app-permission-ensure.js +1 -1
  57. package/dist/m365/pa/commands/app/app-permission-remove.js +1 -1
  58. package/dist/m365/planner/commands/roster/roster-plan-list.js +1 -1
  59. package/dist/m365/purview/commands/auditlog/auditlog-list.js +1 -1
  60. package/dist/m365/purview/commands/sensitivitylabel/sensitivitylabel-get.js +1 -1
  61. package/dist/m365/purview/commands/sensitivitylabel/sensitivitylabel-list.js +1 -1
  62. package/dist/m365/purview/commands/sensitivitylabel/sensitivitylabel-policysettings-list.js +1 -1
  63. package/dist/m365/spfx/commands/project/DeployWorkflow.js +4 -3
  64. package/dist/m365/spo/commands/spo-get.js +1 -1
  65. package/dist/m365/spo/commands/spo-search.js +52 -22
  66. package/dist/m365/spo/commands/spo-set.js +1 -1
  67. package/dist/m365/teams/commands/chat/chat-get.js +1 -1
  68. package/dist/m365/teams/commands/chat/chat-list.js +1 -1
  69. package/dist/m365/teams/commands/chat/chat-message-send.js +1 -1
  70. package/dist/m365/teams/commands/meeting/meeting-add.js +1 -1
  71. package/dist/m365/teams/commands/meeting/meeting-attendancereport-list.js +1 -1
  72. package/dist/m365/teams/commands/meeting/meeting-get.js +1 -1
  73. package/dist/m365/teams/commands/meeting/meeting-list.js +2 -2
  74. package/dist/m365/teams/commands/meeting/meeting-transcript-list.js +1 -1
  75. package/dist/m365/tenant/commands/id/id-get.js +1 -1
  76. package/dist/m365/tenant/commands/info/info-get.js +1 -1
  77. package/dist/m365/util/commands/accesstoken/accesstoken-get.js +3 -3
  78. package/dist/m365/{yammer/commands/group/group-list.js → viva/commands/engage/engage-group-list.js} +19 -14
  79. package/dist/m365/{yammer/commands/group/group-user-add.js → viva/commands/engage/engage-group-user-add.js} +19 -14
  80. package/dist/m365/{yammer/commands/group/group-user-remove.js → viva/commands/engage/engage-group-user-remove.js} +19 -14
  81. package/dist/m365/{yammer/commands/message/message-add.js → viva/commands/engage/engage-message-add.js} +19 -14
  82. package/dist/m365/{yammer/commands/message/message-get.js → viva/commands/engage/engage-message-get.js} +17 -12
  83. package/dist/m365/{yammer/commands/message/message-like-set.js → viva/commands/engage/engage-message-like-set.js} +21 -16
  84. package/dist/m365/{yammer/commands/message/message-list.js → viva/commands/engage/engage-message-list.js} +21 -16
  85. package/dist/m365/{yammer/commands/message/message-remove.js → viva/commands/engage/engage-message-remove.js} +20 -15
  86. package/dist/m365/{yammer/commands/network/network-list.js → viva/commands/engage/engage-network-list.js} +16 -11
  87. package/dist/m365/viva/commands/engage/engage-report-activitycounts.js +23 -0
  88. package/dist/m365/viva/commands/engage/engage-report-activityusercounts.js +23 -0
  89. package/dist/m365/viva/commands/engage/engage-report-activityuserdetail.js +23 -0
  90. package/dist/m365/viva/commands/engage/engage-report-deviceusagedistributionusercounts.js +23 -0
  91. package/dist/m365/viva/commands/engage/engage-report-deviceusageusercounts.js +23 -0
  92. package/dist/m365/viva/commands/engage/engage-report-deviceusageuserdetail.js +23 -0
  93. package/dist/m365/viva/commands/engage/engage-report-groupsactivitycounts.js +23 -0
  94. package/dist/m365/viva/commands/engage/engage-report-groupsactivitydetail.js +23 -0
  95. package/dist/m365/viva/commands/engage/engage-report-groupsactivitygroupcounts.js +23 -0
  96. package/dist/m365/{yammer/commands/yammer-search.js → viva/commands/engage/engage-search.js} +23 -18
  97. package/dist/m365/{yammer/commands/user/user-get.js → viva/commands/engage/engage-user-get.js} +18 -13
  98. package/dist/m365/{yammer/commands/user/user-list.js → viva/commands/engage/engage-user-list.js} +18 -13
  99. package/dist/m365/{yammer/commands.js → viva/commands/engage/yammerCommands.js} +1 -1
  100. package/dist/m365/viva/commands.js +22 -1
  101. package/dist/request.js +1 -1
  102. package/dist/utils/spo.js +36 -14
  103. package/dist/utils/urlUtil.js +31 -0
  104. package/dist/utils/validation.js +4 -0
  105. package/docs/docs/cmd/cli/cli-consent.mdx +9 -9
  106. package/docs/docs/cmd/connection/connection-list.mdx +100 -0
  107. package/docs/docs/cmd/connection/connection-remove.mdx +45 -0
  108. package/docs/docs/cmd/connection/connection-set.mdx +39 -0
  109. package/docs/docs/cmd/connection/connection-use.mdx +98 -0
  110. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-add.mdx +5 -3
  111. package/docs/docs/cmd/entra/administrativeunit/administrativeunit-member-remove.mdx +107 -0
  112. package/docs/docs/cmd/entra/app/app-add.mdx +2 -1
  113. package/docs/docs/cmd/entra/app/app-get.mdx +1 -0
  114. package/docs/docs/cmd/entra/app/app-list.mdx +1 -0
  115. package/docs/docs/cmd/entra/app/app-permission-add.mdx +1 -0
  116. package/docs/docs/cmd/entra/app/app-permission-list.mdx +105 -0
  117. package/docs/docs/cmd/entra/app/app-remove.mdx +1 -0
  118. package/docs/docs/cmd/entra/app/app-role-add.mdx +1 -0
  119. package/docs/docs/cmd/entra/app/app-role-list.mdx +1 -0
  120. package/docs/docs/cmd/entra/app/app-role-remove.mdx +1 -0
  121. package/docs/docs/cmd/entra/app/app-set.mdx +1 -0
  122. package/docs/docs/cmd/entra/{sp/sp-add.mdx → enterpriseapp/enterpriseapp-add.mdx} +16 -15
  123. package/docs/docs/cmd/entra/{sp/sp-get.mdx → enterpriseapp/enterpriseapp-get.mdx} +15 -14
  124. package/docs/docs/cmd/entra/{sp/sp-list.mdx → enterpriseapp/enterpriseapp-list.mdx} +22 -21
  125. package/docs/docs/cmd/entra/group/group-add.mdx +231 -0
  126. package/docs/docs/cmd/entra/m365group/m365group-report-activitygroupcounts.mdx +1 -1
  127. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-add.mdx +3 -3
  128. package/docs/docs/cmd/entra/oauth2grant/oauth2grant-list.mdx +1 -1
  129. package/docs/docs/cmd/entra/user/user-registrationdetails-list.mdx +246 -0
  130. package/docs/docs/cmd/external/item/item-add.mdx +1 -1
  131. package/docs/docs/cmd/file/convert/convert-pdf.mdx +4 -0
  132. package/docs/docs/cmd/file/file-add.mdx +4 -0
  133. package/docs/docs/cmd/file/file-copy.mdx +68 -0
  134. package/docs/docs/cmd/file/file-list.mdx +100 -0
  135. package/docs/docs/cmd/login.mdx +15 -0
  136. package/docs/docs/cmd/setup.mdx +4 -0
  137. package/docs/docs/cmd/spo/list/list-webhook-set.mdx +1 -1
  138. package/docs/docs/cmd/spo/spo-search.mdx +6 -2
  139. package/docs/docs/cmd/spo/theme/theme-set.mdx +14 -2
  140. package/docs/docs/cmd/{yammer/group/group-list.mdx → viva/engage/engage-group-list.mdx} +13 -13
  141. package/docs/docs/cmd/{yammer/group/group-user-add.mdx → viva/engage/engage-group-user-add.mdx} +7 -7
  142. package/docs/docs/cmd/{yammer/group/group-user-remove.mdx → viva/engage/engage-group-user-remove.mdx} +10 -10
  143. package/docs/docs/cmd/{yammer/message/message-add.mdx → viva/engage/engage-message-add.mdx} +12 -13
  144. package/docs/docs/cmd/{yammer/message/message-get.mdx → viva/engage/engage-message-get.mdx} +10 -10
  145. package/docs/docs/cmd/{yammer/message/message-like-set.mdx → viva/engage/engage-message-like-set.mdx} +10 -10
  146. package/docs/docs/cmd/{yammer/message/message-list.mdx → viva/engage/engage-message-list.mdx} +21 -21
  147. package/docs/docs/cmd/{yammer/message/message-remove.mdx → viva/engage/engage-message-remove.mdx} +10 -10
  148. package/docs/docs/cmd/{yammer/network/network-list.mdx → viva/engage/engage-network-list.mdx} +6 -6
  149. package/docs/docs/cmd/{yammer/report/report-activitycounts.mdx → viva/engage/engage-report-activitycounts.mdx} +9 -9
  150. package/docs/docs/cmd/{yammer/report/report-activityusercounts.mdx → viva/engage/engage-report-activityusercounts.mdx} +9 -9
  151. package/docs/docs/cmd/{yammer/report/report-activityuserdetail.mdx → viva/engage/engage-report-activityuserdetail.mdx} +11 -12
  152. package/docs/docs/cmd/{yammer/report/report-deviceusagedistributionusercounts.mdx → viva/engage/engage-report-deviceusagedistributionusercounts.mdx} +5 -5
  153. package/docs/docs/cmd/{yammer/report/report-deviceusageusercounts.mdx → viva/engage/engage-report-deviceusageusercounts.mdx} +5 -5
  154. package/docs/docs/cmd/{yammer/report/report-deviceusageuserdetail.mdx → viva/engage/engage-report-deviceusageuserdetail.mdx} +11 -11
  155. package/docs/docs/cmd/{yammer/report/report-groupsactivitycounts.mdx → viva/engage/engage-report-groupsactivitycounts.mdx} +9 -9
  156. package/docs/docs/cmd/{yammer/report/report-groupsactivitydetail.mdx → viva/engage/engage-report-groupsactivitydetail.mdx} +11 -11
  157. package/docs/docs/cmd/{yammer/report/report-groupsactivitygroupcounts.mdx → viva/engage/engage-report-groupsactivitygroupcounts.mdx} +5 -5
  158. package/docs/docs/cmd/{yammer/yammer-search.mdx → viva/engage/engage-search.mdx} +10 -10
  159. package/docs/docs/cmd/{yammer/user/user-get.mdx → viva/engage/engage-user-get.mdx} +8 -8
  160. package/docs/docs/cmd/{yammer/user/user-list.mdx → viva/engage/engage-user-list.mdx} +11 -11
  161. package/npm-shrinkwrap.json +60 -0
  162. package/package.json +4 -3
  163. package/dist/m365/base/AzmgmtCommand.js +0 -18
  164. package/dist/m365/base/AzmgmtItemsListCommand.js +0 -41
  165. package/dist/m365/yammer/commands/report/report-activitycounts.js +0 -15
  166. package/dist/m365/yammer/commands/report/report-activityusercounts.js +0 -15
  167. package/dist/m365/yammer/commands/report/report-activityuserdetail.js +0 -15
  168. package/dist/m365/yammer/commands/report/report-deviceusagedistributionusercounts.js +0 -15
  169. package/dist/m365/yammer/commands/report/report-deviceusageusercounts.js +0 -15
  170. package/dist/m365/yammer/commands/report/report-deviceusageuserdetail.js +0 -15
  171. package/dist/m365/yammer/commands/report/report-groupsactivitycounts.js +0 -15
  172. package/dist/m365/yammer/commands/report/report-groupsactivitydetail.js +0 -15
  173. package/dist/m365/yammer/commands/report/report-groupsactivitygroupcounts.js +0 -15
@@ -7,6 +7,7 @@ export default {
7
7
  ADMINISTRATIVEUNIT_MEMBER_ADD: `${prefix} administrativeunit member add`,
8
8
  ADMINISTRATIVEUNIT_MEMBER_GET: `${prefix} administrativeunit member get`,
9
9
  ADMINISTRATIVEUNIT_MEMBER_LIST: `${prefix} administrativeunit member list`,
10
+ ADMINISTRATIVEUNIT_MEMBER_REMOVE: `${prefix} administrativeunit member remove`,
10
11
  ADMINISTRATIVEUNIT_ROLEASSIGNMENT_ADD: `${prefix} administrativeunit roleassignment add`,
11
12
  APP_ADD: `${prefix} app add`,
12
13
  APP_GET: `${prefix} app get`,
@@ -14,12 +15,26 @@ export default {
14
15
  APP_REMOVE: `${prefix} app remove`,
15
16
  APP_SET: `${prefix} app set`,
16
17
  APP_PERMISSION_ADD: `${prefix} app permission add`,
18
+ APP_PERMISSION_LIST: `${prefix} app permission list`,
17
19
  APP_ROLE_ADD: `${prefix} app role add`,
18
20
  APP_ROLE_LIST: `${prefix} app role list`,
19
21
  APP_ROLE_REMOVE: `${prefix} app role remove`,
22
+ APPREGISTRATION_ADD: `${prefix} appregistration add`,
23
+ APPREGISTRATION_GET: `${prefix} appregistration get`,
24
+ APPREGISTRATION_LIST: `${prefix} appregistration list`,
25
+ APPREGISTRATION_REMOVE: `${prefix} appregistration remove`,
26
+ APPREGISTRATION_SET: `${prefix} appregistration set`,
27
+ APPREGISTRATION_PERMISSION_ADD: `${prefix} appregistration permission add`,
28
+ APPREGISTRATION_ROLE_ADD: `${prefix} appregistration role add`,
29
+ APPREGISTRATION_ROLE_LIST: `${prefix} appregistration role list`,
30
+ APPREGISTRATION_ROLE_REMOVE: `${prefix} appregistration role remove`,
20
31
  APPROLEASSIGNMENT_ADD: `${prefix} approleassignment add`,
21
32
  APPROLEASSIGNMENT_LIST: `${prefix} approleassignment list`,
22
33
  APPROLEASSIGNMENT_REMOVE: `${prefix} approleassignment remove`,
34
+ ENTERPRISEAPP_ADD: `${prefix} enterpriseapp add`,
35
+ ENTERPRISEAPP_GET: `${prefix} enterpriseapp get`,
36
+ ENTERPRISEAPP_LIST: `${prefix} enterpriseapp list`,
37
+ GROUP_ADD: `${prefix} group add`,
23
38
  GROUP_GET: `${prefix} group get`,
24
39
  GROUP_LIST: `${prefix} group list`,
25
40
  GROUP_REMOVE: `${prefix} group remove`,
@@ -79,6 +94,7 @@ export default {
79
94
  USER_RECYCLEBINITEM_CLEAR: `${prefix} user recyclebinitem clear`,
80
95
  USER_RECYCLEBINITEM_LIST: `${prefix} user recyclebinitem list`,
81
96
  USER_RECYCLEBINITEM_REMOVE: `${prefix} user recyclebinitem remove`,
97
+ USER_REGISTRATIONDETAILS_LIST: `${prefix} user registrationdetails list`,
82
98
  USER_REMOVE: `${prefix} user remove`,
83
99
  USER_RECYCLEBINITEM_RESTORE: `${prefix} user recyclebinitem restore`,
84
100
  USER_SET: `${prefix} user set`,
@@ -35,7 +35,7 @@ class FileConvertPdfCommand extends GraphCommand {
35
35
  let sourceIsLocalFile = true;
36
36
  let targetIsLocalFile = true;
37
37
  let error;
38
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[auth.defaultResource].accessToken);
38
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[auth.defaultResource].accessToken);
39
39
  if (typeof isAppOnlyAccessToken === 'undefined') {
40
40
  throw 'Unable to determine authentication type';
41
41
  }
@@ -0,0 +1,151 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
+ 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");
4
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _FileCopyCommand_instances, _FileCopyCommand_initTelemetry, _FileCopyCommand_initOptions, _FileCopyCommand_initValidators;
7
+ import request from '../../../request.js';
8
+ import { urlUtil } from '../../../utils/urlUtil.js';
9
+ import { spo } from '../../../utils/spo.js';
10
+ import { validation } from '../../../utils/validation.js';
11
+ import GraphCommand from '../../base/GraphCommand.js';
12
+ import commands from '../commands.js';
13
+ class FileCopyCommand extends GraphCommand {
14
+ get name() {
15
+ return commands.COPY;
16
+ }
17
+ get description() {
18
+ return 'Copies a file to another location using the Microsoft Graph';
19
+ }
20
+ constructor() {
21
+ super();
22
+ _FileCopyCommand_instances.add(this);
23
+ this.nameConflictBehaviorOptions = ['fail', 'replace', 'rename'];
24
+ __classPrivateFieldGet(this, _FileCopyCommand_instances, "m", _FileCopyCommand_initTelemetry).call(this);
25
+ __classPrivateFieldGet(this, _FileCopyCommand_instances, "m", _FileCopyCommand_initOptions).call(this);
26
+ __classPrivateFieldGet(this, _FileCopyCommand_instances, "m", _FileCopyCommand_initValidators).call(this);
27
+ }
28
+ async commandAction(logger, args) {
29
+ try {
30
+ const { webUrl, sourceUrl, targetUrl, newName, verbose } = args.options;
31
+ const sourcePath = this.getAbsoluteUrl(webUrl, sourceUrl);
32
+ const destinationPath = this.getAbsoluteUrl(webUrl, targetUrl);
33
+ if (this.verbose) {
34
+ logger.logToStderr(`Copying file '${sourcePath}' to '${destinationPath}'...`);
35
+ }
36
+ const copyUrl = await this.getCopyUrl(args.options, sourcePath, logger);
37
+ const { targetDriveId, targetItemId } = await this.getTargetDriveAndItemId(webUrl, targetUrl, logger, verbose);
38
+ const requestOptions = {
39
+ url: copyUrl,
40
+ headers: {
41
+ accept: 'application/json;odata.metadata=none'
42
+ },
43
+ responseType: 'json',
44
+ data: {
45
+ parentReference: {
46
+ driveId: targetDriveId,
47
+ id: targetItemId
48
+ }
49
+ }
50
+ };
51
+ if (newName) {
52
+ const sourceFileName = sourcePath.substring(sourcePath.lastIndexOf('/') + 1);
53
+ const sourceFileExtension = sourceFileName.includes('.') ? sourceFileName.substring(sourceFileName.lastIndexOf('.')) : '';
54
+ const newNameExtension = newName.includes('.') ? newName.substring(newName.lastIndexOf('.')) : '';
55
+ requestOptions.data.name = newNameExtension ? `${newName.replace(newNameExtension, "")}${sourceFileExtension}` : `${newName}${sourceFileExtension}`;
56
+ }
57
+ await request.post(requestOptions);
58
+ }
59
+ catch (err) {
60
+ this.handleRejectedODataJsonPromise(err);
61
+ }
62
+ }
63
+ async getCopyUrl(options, sourcePath, logger) {
64
+ const { webUrl, sourceUrl, verbose, nameConflictBehavior } = options;
65
+ const folderUrl = new URL(sourcePath);
66
+ const siteId = await spo.getSiteId(webUrl, logger, verbose);
67
+ const drive = await this.getDocumentLibrary(siteId, folderUrl, sourceUrl, logger);
68
+ const itemId = await this.getStartingFolderId(drive, folderUrl, logger);
69
+ const queryParameters = nameConflictBehavior && nameConflictBehavior !== 'fail'
70
+ ? `@microsoft.graph.conflictBehavior=${nameConflictBehavior}`
71
+ : '';
72
+ const copyUrl = `${this.resource}/v1.0/sites/${siteId}/drives/${drive.id}/items/${itemId}/copy${queryParameters ? `?${queryParameters}` : ''}`;
73
+ return copyUrl;
74
+ }
75
+ async getTargetDriveAndItemId(webUrl, targetUrl, logger, verbose) {
76
+ const targetSiteUrl = urlUtil.getTargetSiteAbsoluteUrl(webUrl, targetUrl);
77
+ const targetSiteId = await spo.getSiteId(targetSiteUrl, logger, verbose);
78
+ const targetFolderUrl = new URL(this.getAbsoluteUrl(targetSiteUrl, targetUrl));
79
+ const targetDrive = await this.getDocumentLibrary(targetSiteId, targetFolderUrl, targetUrl, logger);
80
+ const targetDriveId = targetDrive.id;
81
+ const targetItemId = await this.getStartingFolderId(targetDrive, targetFolderUrl, logger);
82
+ return { targetDriveId, targetItemId };
83
+ }
84
+ async getDocumentLibrary(siteId, folderUrl, folderUrlFromUser, logger) {
85
+ if (this.verbose) {
86
+ logger.logToStderr(`Getting document library...`);
87
+ }
88
+ const requestOptions = {
89
+ url: `${this.resource}/v1.0/sites/${siteId}/drives?$select=webUrl,id`,
90
+ headers: {
91
+ accept: 'application/json;odata.metadata=none'
92
+ },
93
+ responseType: 'json'
94
+ };
95
+ const drives = await request.get(requestOptions);
96
+ const lowerCaseFolderUrl = folderUrl.href.toLowerCase();
97
+ const drive = drives.value
98
+ .sort((a, b) => b.webUrl.localeCompare(a.webUrl))
99
+ .find((d) => {
100
+ const driveUrl = d.webUrl.toLowerCase();
101
+ // ensure that the drive url is a prefix of the folder url
102
+ return lowerCaseFolderUrl.startsWith(driveUrl) &&
103
+ (driveUrl.length === lowerCaseFolderUrl.length ||
104
+ lowerCaseFolderUrl[driveUrl.length] === '/');
105
+ });
106
+ if (!drive) {
107
+ throw `Document library '${folderUrlFromUser}' not found`;
108
+ }
109
+ return drive;
110
+ }
111
+ async getStartingFolderId(documentLibrary, folderUrl, logger) {
112
+ if (this.verbose) {
113
+ logger.logToStderr(`Getting starting folder id...`);
114
+ }
115
+ const documentLibraryRelativeFolderUrl = folderUrl.href.replace(new RegExp(`${documentLibrary.webUrl}`, 'i'), '').replace(/\/+$/, '');
116
+ const requestOptions = {
117
+ url: `${this.resource}/v1.0/drives/${documentLibrary.id}/root${documentLibraryRelativeFolderUrl ? `:${documentLibraryRelativeFolderUrl}` : ''}?$select=id`,
118
+ headers: {
119
+ accept: 'application/json;odata.metadata=none'
120
+ },
121
+ responseType: 'json'
122
+ };
123
+ const folder = await request.get(requestOptions);
124
+ return folder?.id;
125
+ }
126
+ getAbsoluteUrl(webUrl, url) {
127
+ return url.startsWith('https://') ? url : urlUtil.getAbsoluteUrl(webUrl, url);
128
+ }
129
+ }
130
+ _FileCopyCommand_instances = new WeakSet(), _FileCopyCommand_initTelemetry = function _FileCopyCommand_initTelemetry() {
131
+ this.telemetry.push((args) => {
132
+ Object.assign(this.telemetryProperties, {
133
+ webUrl: typeof args.options.webUrl !== 'undefined',
134
+ sourceUrl: typeof args.options.sourceUrl !== 'undefined',
135
+ targetUrl: typeof args.options.targetUrl !== 'undefined',
136
+ newName: typeof args.options.newName !== 'undefined',
137
+ nameConflictBehavior: typeof args.options.nameConflictBehavior !== 'undefined'
138
+ });
139
+ });
140
+ }, _FileCopyCommand_initOptions = function _FileCopyCommand_initOptions() {
141
+ this.options.unshift({ option: '-u, --webUrl <webUrl>' }, { option: '-s, --sourceUrl <sourceUrl>' }, { option: '-t, --targetUrl <targetUrl>' }, { option: '--newName [newName]' }, { option: '--nameConflictBehavior [nameConflictBehavior]', autocomplete: this.nameConflictBehaviorOptions });
142
+ }, _FileCopyCommand_initValidators = function _FileCopyCommand_initValidators() {
143
+ this.validators.push(async (args) => {
144
+ if (args.options.nameConflictBehavior && this.nameConflictBehaviorOptions.indexOf(args.options.nameConflictBehavior) === -1) {
145
+ return `${args.options.nameConflictBehavior} is not a valid nameConflictBehavior value. Allowed values: ${this.nameConflictBehaviorOptions.join(', ')}.`;
146
+ }
147
+ return validation.isValidSharePointUrl(args.options.webUrl);
148
+ });
149
+ };
150
+ export default new FileCopyCommand();
151
+ //# sourceMappingURL=file-copy.js.map
@@ -2,6 +2,7 @@ const prefix = 'file';
2
2
  export default {
3
3
  ADD: `${prefix} add`,
4
4
  CONVERT_PDF: `${prefix} convert pdf`,
5
+ COPY: `${prefix} copy`,
5
6
  LIST: `${prefix} list`
6
7
  };
7
8
  //# sourceMappingURL=commands.js.map
@@ -29,7 +29,7 @@ class OutlookMailSendCommand extends GraphCommand {
29
29
  }
30
30
  async commandAction(logger, args) {
31
31
  try {
32
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
32
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
33
33
  if (isAppOnlyAccessToken === true && !args.options.sender) {
34
34
  throw `Specify a upn or user id in the 'sender' option when using app only authentication.`;
35
35
  }
@@ -24,7 +24,7 @@ class OutlookMessageGetCommand extends GraphCommand {
24
24
  }
25
25
  async commandAction(logger, args) {
26
26
  try {
27
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
27
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
28
28
  if (this.verbose) {
29
29
  await logger.logToStderr(`Retrieving message with id ${args.options.id} using ${isAppOnlyAccessToken ? 'app only permissions' : 'delegated permissions'}`);
30
30
  }
@@ -85,7 +85,7 @@ class PaAppPermissionEnsureCommand extends PowerAppsCommand {
85
85
  const userId = await entraUser.getUserIdByUpn(options.userName);
86
86
  return userId;
87
87
  }
88
- return accessToken.getTenantIdFromAccessToken(Auth.service.accessTokens[Auth.defaultResource].accessToken);
88
+ return accessToken.getTenantIdFromAccessToken(Auth.connection.accessTokens[Auth.defaultResource].accessToken);
89
89
  }
90
90
  }
91
91
  _a = PaAppPermissionEnsureCommand, _PaAppPermissionEnsureCommand_instances = new WeakSet(), _PaAppPermissionEnsureCommand_initTelemetry = function _PaAppPermissionEnsureCommand_initTelemetry() {
@@ -81,7 +81,7 @@ class PaAppPermissionRemoveCommand extends PowerAppsCommand {
81
81
  const userId = await entraUser.getUserIdByUpn(options.userName);
82
82
  return userId;
83
83
  }
84
- return `tenant-${accessToken.getTenantIdFromAccessToken(Auth.service.accessTokens[Auth.defaultResource].accessToken)}`;
84
+ return `tenant-${accessToken.getTenantIdFromAccessToken(Auth.connection.accessTokens[Auth.defaultResource].accessToken)}`;
85
85
  }
86
86
  }
87
87
  _PaAppPermissionRemoveCommand_instances = new WeakSet(), _PaAppPermissionRemoveCommand_initTelemetry = function _PaAppPermissionRemoveCommand_initTelemetry() {
@@ -30,7 +30,7 @@ class PlannerRosterPlanListCommand extends GraphCommand {
30
30
  return ['id', 'title', 'createdDateTime', 'owner'];
31
31
  }
32
32
  async commandAction(logger, args) {
33
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
33
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
34
34
  if (isAppOnlyAccessToken && !args.options.userId && !args.options.userName) {
35
35
  this.handleError(`Specify at least 'userId' or 'userName' when using application permissions.`);
36
36
  }
@@ -44,7 +44,7 @@ class PurviewAuditLogListCommand extends O365MgmtCommand {
44
44
  if (this.verbose) {
45
45
  await logger.logToStderr(`Getting audit logs for content type '${args.options.contentType}' within a time frame from '${startTime.toISOString()}' to '${endTime.toISOString()}'.`);
46
46
  }
47
- const tenantId = accessToken.getTenantIdFromAccessToken(Auth.service.accessTokens[Auth.defaultResource].accessToken);
47
+ const tenantId = accessToken.getTenantIdFromAccessToken(Auth.connection.accessTokens[Auth.defaultResource].accessToken);
48
48
  const contentTypeValue = args.options.contentType === 'DLP' ? 'DLP.All' : 'Audit.' + args.options.contentType;
49
49
  await this.ensureSubscription(tenantId, contentTypeValue);
50
50
  if (this.verbose) {
@@ -25,7 +25,7 @@ class PurviewSensitivityLabelGetCommand extends GraphCommand {
25
25
  __classPrivateFieldGet(this, _PurviewSensitivityLabelGetCommand_instances, "m", _PurviewSensitivityLabelGetCommand_initValidators).call(this);
26
26
  }
27
27
  async commandAction(logger, args) {
28
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
28
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
29
29
  if (isAppOnlyAccessToken && !args.options.userId && !args.options.userName) {
30
30
  this.handleError(`Specify at least 'userId' or 'userName' when using application permissions.`);
31
31
  }
@@ -28,7 +28,7 @@ class PurviewSensitivityLabelListCommand extends GraphCommand {
28
28
  return ['id', 'name', 'isActive'];
29
29
  }
30
30
  async commandAction(logger, args) {
31
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
31
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
32
32
  if (isAppOnlyAccessToken && !args.options.userId && !args.options.userName) {
33
33
  this.handleError(`Specify at least 'userId' or 'userName' when using application permissions.`);
34
34
  }
@@ -25,7 +25,7 @@ class PurviewSensitivityLabelPolicySettingsListCommand extends GraphCommand {
25
25
  __classPrivateFieldGet(this, _PurviewSensitivityLabelPolicySettingsListCommand_instances, "m", _PurviewSensitivityLabelPolicySettingsListCommand_initValidators).call(this);
26
26
  }
27
27
  async commandAction(logger, args) {
28
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
28
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
29
29
  if (isAppOnlyAccessToken && !args.options.userId && !args.options.userName) {
30
30
  this.handleError(`Specify at least 'userId' or 'userName' when using application permissions.`);
31
31
  }
@@ -13,11 +13,11 @@ export const workflow = {
13
13
  steps: [
14
14
  {
15
15
  name: "Checkout",
16
- uses: "actions/checkout@v3.5.3"
16
+ uses: "actions/checkout@v4"
17
17
  },
18
18
  {
19
19
  name: "Use Node.js",
20
- uses: "actions/setup-node@v3.7.0",
20
+ uses: "actions/setup-node@v4",
21
21
  with: {
22
22
  "node-version": "18.x"
23
23
  }
@@ -36,7 +36,8 @@ export const workflow = {
36
36
  with: {
37
37
  "CERTIFICATE_ENCODED": "${{ secrets.CERTIFICATE_ENCODED }}",
38
38
  "CERTIFICATE_PASSWORD": "${{ secrets.CERTIFICATE_PASSWORD }}",
39
- "APP_ID": "${{ secrets.APP_ID }}"
39
+ "APP_ID": "${{ secrets.APP_ID }}",
40
+ "TENANT": "${{ secrets.TENANT_ID }}"
40
41
  }
41
42
  },
42
43
  {
@@ -10,7 +10,7 @@ class SpoGetCommand extends SpoCommand {
10
10
  }
11
11
  async commandAction(logger) {
12
12
  const spoContext = {
13
- SpoUrl: auth.service.spoUrl ? auth.service.spoUrl : ''
13
+ SpoUrl: auth.connection.spoUrl ? auth.connection.spoUrl : ''
14
14
  };
15
15
  await logger.log(spoContext);
16
16
  }
@@ -38,16 +38,15 @@ class SpoSearchCommand extends SpoCommand {
38
38
  if (this.verbose) {
39
39
  await logger.logToStderr(`Executing search query '${args.options.queryText}' on site at ${webUrl}...`);
40
40
  }
41
- const startRow = args.options.startRow ? args.options.startRow : 0;
42
- const results = await this.executeSearchQuery(logger, args, webUrl, [], startRow);
41
+ const results = await this.executeSearchQuery(logger, args, webUrl, []);
43
42
  this.printResults(logger, args, results);
44
43
  }
45
44
  catch (err) {
46
45
  this.handleRejectedODataJsonPromise(err);
47
46
  }
48
47
  }
49
- async executeSearchQuery(logger, args, webUrl, resultSet, startRow) {
50
- const requestUrl = await this.getRequestUrl(webUrl, logger, args, startRow);
48
+ async executeSearchQuery(logger, args, webUrl, resultSet, lastDocId = '0') {
49
+ const requestUrl = await this.getRequestUrl(webUrl, logger, args, lastDocId);
51
50
  const requestOptions = {
52
51
  url: requestUrl,
53
52
  headers: {
@@ -57,26 +56,36 @@ class SpoSearchCommand extends SpoCommand {
57
56
  };
58
57
  const searchResult = await request.get(requestOptions);
59
58
  resultSet.push(searchResult);
60
- if (args.options.allResults && startRow + searchResult.PrimaryQueryResult.RelevantResults.RowCount < searchResult.PrimaryQueryResult.RelevantResults.TotalRows) {
61
- const nextStartRow = startRow + searchResult.PrimaryQueryResult.RelevantResults.RowCount;
62
- return this.executeSearchQuery(logger, args, webUrl, resultSet, nextStartRow);
59
+ const rowLimit = args.options.rowLimit ? args.options.rowLimit : 500;
60
+ if (args.options.allResults && searchResult.PrimaryQueryResult.RelevantResults.RowCount === rowLimit) {
61
+ if (this.verbose) {
62
+ await logger.logToStderr(`Processing search query, retrieved ${resultSet.length * searchResult.PrimaryQueryResult.RelevantResults.RowCount} of ${resultSet[0].PrimaryQueryResult.RelevantResults.TotalRows} items...`);
63
+ }
64
+ // When running in allResults mode, paging is done using the DocId property
65
+ // This is a more stable way than using the StartRow property.
66
+ // Explanation: https://learn.microsoft.com/sharepoint/dev/general-development/pagination-for-large-result-sets
67
+ const lastRow = searchResult.PrimaryQueryResult.RelevantResults.Table.Rows[searchResult.PrimaryQueryResult.RelevantResults.RowCount - 1];
68
+ const newLastDocId = lastRow.Cells.filter(cell => cell.Key === 'DocId')[0].Value;
69
+ return this.executeSearchQuery(logger, args, webUrl, resultSet, newLastDocId);
63
70
  }
64
71
  return resultSet;
65
72
  }
66
- async getRequestUrl(webUrl, logger, args, startRow) {
73
+ async getRequestUrl(webUrl, logger, args, lastDocId) {
67
74
  // get the list of selected properties
68
75
  const selectPropertiesArray = this.getSelectPropertiesArray(args);
76
+ // get the sort list
77
+ const sortList = this.getSortList(args);
69
78
  // transform arg data to query string parameters
70
- const propertySelectRequestString = `&selectproperties='${formatting.encodeQueryParameter(selectPropertiesArray.join(","))}'`;
71
- const startRowRequestString = `&startrow=${startRow ? startRow : 0}`;
72
- const rowLimitRequestString = args.options.rowLimit ? `&rowlimit=${args.options.rowLimit}` : ``;
79
+ const propertySelectRequestString = `&selectproperties='${formatting.encodeQueryParameter(selectPropertiesArray.join(','))}'`;
80
+ const startRowRequestString = `&startrow=${args.options.startRow ? args.options.startRow : 0}`;
81
+ const rowLimitRequestString = args.options.rowLimit ? `&rowlimit=${args.options.rowLimit}` : (args.options.allResults ? `&rowlimit=500` : '');
73
82
  const sourceIdRequestString = args.options.sourceId ? `&sourceid='${args.options.sourceId}'` : ``;
74
- const trimDuplicatesRequestString = `&trimduplicates=${args.options.trimDuplicates ? args.options.trimDuplicates : "false"}`;
75
- const enableStemmingRequestString = `&enablestemming=${typeof (args.options.enableStemming) === 'undefined' ? "true" : args.options.enableStemming}`;
83
+ const trimDuplicatesRequestString = `&trimduplicates=${args.options.trimDuplicates ? args.options.trimDuplicates : 'false'}`;
84
+ const enableStemmingRequestString = `&enablestemming=${typeof (args.options.enableStemming) === 'undefined' ? 'true' : args.options.enableStemming}`;
76
85
  const cultureRequestString = args.options.culture ? `&culture=${args.options.culture}` : ``;
77
86
  const refinementFiltersRequestString = args.options.refinementFilters ? `&refinementfilters='${args.options.refinementFilters}'` : ``;
78
87
  const queryTemplateRequestString = args.options.queryTemplate ? `&querytemplate='${args.options.queryTemplate}'` : ``;
79
- const sortListRequestString = args.options.sortList ? `&sortList='${formatting.encodeQueryParameter(args.options.sortList)}'` : ``;
88
+ const sortListRequestString = sortList ? `&sortList='${sortList}'` : ``;
80
89
  const rankingModelIdRequestString = args.options.rankingModelId ? `&rankingmodelid='${args.options.rankingModelId}'` : ``;
81
90
  const propertiesRequestString = this.getPropertiesRequestString(args);
82
91
  const refinersRequestString = args.options.refiners ? `&refiners='${args.options.refiners}'` : ``;
@@ -86,8 +95,9 @@ class SpoSearchCommand extends SpoCommand {
86
95
  const processBestBetsRequestString = typeof (args.options.processBestBets) === 'undefined' ? `` : `&processbestbets=${args.options.processBestBets}`;
87
96
  const enableQueryRulesRequestString = typeof (args.options.enableQueryRules) === 'undefined' ? `` : `&enablequeryrules=${args.options.enableQueryRules}`;
88
97
  const processPersonalFavoritesRequestString = typeof (args.options.processPersonalFavorites) === 'undefined' ? `` : `&processpersonalfavorites=${args.options.processPersonalFavorites}`;
98
+ const indexDocIdQueryText = args.options.allResults ? ` IndexDocId>${lastDocId}` : '';
89
99
  // construct single requestUrl
90
- const requestUrl = `${webUrl}/_api/search/query?querytext='${args.options.queryText}'`.concat(propertySelectRequestString, startRowRequestString, rowLimitRequestString, sourceIdRequestString, trimDuplicatesRequestString, enableStemmingRequestString, cultureRequestString, refinementFiltersRequestString, queryTemplateRequestString, sortListRequestString, rankingModelIdRequestString, propertiesRequestString, refinersRequestString, hiddenConstraintsRequestString, clientTypeRequestString, enablePhoneticRequestString, processBestBetsRequestString, enableQueryRulesRequestString, processPersonalFavoritesRequestString);
100
+ const requestUrl = `${webUrl}/_api/search/query?querytext='${args.options.queryText}${indexDocIdQueryText}'`.concat(propertySelectRequestString, startRowRequestString, rowLimitRequestString, sourceIdRequestString, trimDuplicatesRequestString, enableStemmingRequestString, cultureRequestString, refinementFiltersRequestString, queryTemplateRequestString, sortListRequestString, rankingModelIdRequestString, propertiesRequestString, refinersRequestString, hiddenConstraintsRequestString, clientTypeRequestString, enablePhoneticRequestString, processBestBetsRequestString, enableQueryRulesRequestString, processPersonalFavoritesRequestString);
91
101
  if (this.debug) {
92
102
  await logger.logToStderr(`RequestURL: ${requestUrl}`);
93
103
  }
@@ -96,7 +106,7 @@ class SpoSearchCommand extends SpoCommand {
96
106
  getPropertiesRequestString(args) {
97
107
  let properties = args.options.properties ? args.options.properties : '';
98
108
  if (args.options.sourceName) {
99
- if (properties && !properties.endsWith(",")) {
109
+ if (properties && !properties.endsWith(',')) {
100
110
  properties += `,`;
101
111
  }
102
112
  properties += `SourceName:${args.options.sourceName},SourceLevel:SPSite`;
@@ -104,9 +114,26 @@ class SpoSearchCommand extends SpoCommand {
104
114
  return properties ? `&properties='${properties}'` : ``;
105
115
  }
106
116
  getSelectPropertiesArray(args) {
107
- return args.options.selectProperties
108
- ? args.options.selectProperties.split(",")
109
- : ["Title", "OriginalPath"];
117
+ const selectProperties = args.options.selectProperties
118
+ ? args.options.selectProperties.split(',')
119
+ : ['Title', 'OriginalPath'];
120
+ if (args.options.allResults) {
121
+ selectProperties.filter(p => p.toLowerCase() !== 'docid').push('DocId');
122
+ }
123
+ return selectProperties;
124
+ }
125
+ getSortList(args) {
126
+ const sortList = [];
127
+ if (args.options.allResults) {
128
+ sortList.push(formatting.encodeQueryParameter('[DocId]:ascending'));
129
+ }
130
+ if (args.options.sortList) {
131
+ const sortListArray = args.options.sortList.split(',');
132
+ sortListArray.forEach(sortItem => {
133
+ sortList.push(formatting.encodeQueryParameter(sortItem));
134
+ });
135
+ }
136
+ return sortList.join(',');
110
137
  }
111
138
  async printResults(logger, args, results) {
112
139
  if (args.options.rawOutput) {
@@ -116,9 +143,9 @@ class SpoSearchCommand extends SpoCommand {
116
143
  await logger.log(this.getParsedOutput(args, results));
117
144
  }
118
145
  if (!args.options.output || cli.shouldTrimOutput(args.options.output)) {
119
- await logger.log("# Rows: " + results[results.length - 1].PrimaryQueryResult.RelevantResults.TotalRows);
120
- await logger.log("# Rows (Including duplicates): " + results[results.length - 1].PrimaryQueryResult.RelevantResults.TotalRowsIncludingDuplicates);
121
- await logger.log("Elapsed Time: " + this.getElapsedTime(results));
146
+ await logger.log('# Rows: ' + results[results.length - 1].PrimaryQueryResult.RelevantResults.TotalRows);
147
+ await logger.log('# Rows (Including duplicates): ' + results[results.length - 1].PrimaryQueryResult.RelevantResults.TotalRowsIncludingDuplicates);
148
+ await logger.log('Elapsed Time: ' + this.getElapsedTime(results));
122
149
  }
123
150
  }
124
151
  getElapsedTime(results) {
@@ -245,6 +272,9 @@ _SpoSearchCommand_instances = new WeakSet(), _SpoSearchCommand_initTelemetry = f
245
272
  if (args.options.startRow && !isNumber(args.options.startRow)) {
246
273
  return `${args.options.startRow} is not a valid number`;
247
274
  }
275
+ if (args.options.startRow && args.options.allResults) {
276
+ return 'You cannot specify startRow when allResults is set';
277
+ }
248
278
  if (args.options.culture && !isNumber(args.options.culture)) {
249
279
  return `${args.options.culture} is not a valid number`;
250
280
  }
@@ -22,7 +22,7 @@ class SpoSetCommand extends SpoCommand {
22
22
  __classPrivateFieldGet(this, _SpoSetCommand_instances, "m", _SpoSetCommand_initValidators).call(this);
23
23
  }
24
24
  async commandAction(logger, args) {
25
- auth.service.spoUrl = args.options.url;
25
+ auth.connection.spoUrl = args.options.url;
26
26
  try {
27
27
  await auth.storeConnectionInfo();
28
28
  }
@@ -58,7 +58,7 @@ class TeamsChatGetCommand extends GraphCommand {
58
58
  }
59
59
  async getChatIdByParticipants(participantsString) {
60
60
  const participants = participantsString.trim().toLowerCase().split(',').filter(e => e && e !== '');
61
- const currentUserEmail = accessToken.getUserNameFromAccessToken(auth.service.accessTokens[this.resource].accessToken).toLowerCase();
61
+ const currentUserEmail = accessToken.getUserNameFromAccessToken(auth.connection.accessTokens[this.resource].accessToken).toLowerCase();
62
62
  const existingChats = await chatUtil.findExistingChatsByParticipants([currentUserEmail, ...participants]);
63
63
  if (!existingChats || existingChats.length === 0) {
64
64
  throw 'No chat conversation was found with these participants.';
@@ -29,7 +29,7 @@ class TeamsChatListCommand extends GraphCommand {
29
29
  __classPrivateFieldGet(this, _TeamsChatListCommand_instances, "m", _TeamsChatListCommand_initValidators).call(this);
30
30
  }
31
31
  async commandAction(logger, args) {
32
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
32
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
33
33
  if (isAppOnlyAccessToken && !args.options.userId && !args.options.userName) {
34
34
  throw `The option 'userId' or 'userName' is required when obtaining chats using app only permissions`;
35
35
  }
@@ -47,7 +47,7 @@ class TeamsChatMessageSendCommand extends GraphCommand {
47
47
  }
48
48
  async ensureChatIdByUserEmails(userEmailsOption) {
49
49
  const userEmails = userEmailsOption.trim().toLowerCase().split(',').filter(e => e && e !== '');
50
- const currentUserEmail = accessToken.getUserNameFromAccessToken(auth.service.accessTokens[this.resource].accessToken).toLowerCase();
50
+ const currentUserEmail = accessToken.getUserNameFromAccessToken(auth.connection.accessTokens[this.resource].accessToken).toLowerCase();
51
51
  const existingChats = await chatUtil.findExistingChatsByParticipants([currentUserEmail, ...userEmails]);
52
52
  if (!existingChats || existingChats.length === 0) {
53
53
  const chat = await this.createConversation([currentUserEmail, ...userEmails]);
@@ -27,7 +27,7 @@ class TeamsMeetingAddCommand extends GraphCommand {
27
27
  }
28
28
  async commandAction(logger, args) {
29
29
  try {
30
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
30
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
31
31
  if (isAppOnlyAccessToken && !args.options.organizerEmail) {
32
32
  throw `The option 'organizerEmail' is required when creating a meeting using app only permissions`;
33
33
  }
@@ -30,7 +30,7 @@ class TeamsMeetingAttendancereportListCommand extends GraphCommand {
30
30
  __classPrivateFieldGet(this, _TeamsMeetingAttendancereportListCommand_instances, "m", _TeamsMeetingAttendancereportListCommand_initValidators).call(this);
31
31
  }
32
32
  async commandAction(logger, args) {
33
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
33
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
34
34
  if (isAppOnlyAccessToken && !args.options.userId && !args.options.userName && !args.options.email) {
35
35
  this.handleError(`The option 'userId', 'userName' or 'email' is required when retrieving meeting attendance report using app only permissions`);
36
36
  }
@@ -27,7 +27,7 @@ class TeamsMeetingGetCommand extends GraphCommand {
27
27
  __classPrivateFieldGet(this, _TeamsMeetingGetCommand_instances, "m", _TeamsMeetingGetCommand_initValidators).call(this);
28
28
  }
29
29
  async commandAction(logger, args) {
30
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
30
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
31
31
  if (isAppOnlyAccessToken) {
32
32
  if (!args.options.userId && !args.options.userName && !args.options.email) {
33
33
  this.handleError(`The option 'userId', 'userName' or 'email' is required when retrieving meetings using app only permissions`);
@@ -32,7 +32,7 @@ class TeamsMeetingListCommand extends GraphCommand {
32
32
  }
33
33
  async commandAction(logger, args) {
34
34
  try {
35
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
35
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
36
36
  if (isAppOnlyAccessToken && !args.options.userId && !args.options.userName && !args.options.email) {
37
37
  throw `The option 'userId', 'userName' or 'email' is required when retrieving meetings using app only permissions`;
38
38
  }
@@ -40,7 +40,7 @@ class TeamsMeetingListCommand extends GraphCommand {
40
40
  throw `The options 'userId', 'userName' and 'email' cannot be used when retrieving meetings using delegated permissions`;
41
41
  }
42
42
  if (this.verbose) {
43
- await logger.logToStderr(`Retrieving meetings for user: ${args.options.userId || args.options.userName || args.options.email || accessToken.getUserNameFromAccessToken(auth.service.accessTokens[this.resource].accessToken)}...`);
43
+ await logger.logToStderr(`Retrieving meetings for user: ${args.options.userId || args.options.userName || args.options.email || accessToken.getUserNameFromAccessToken(auth.connection.accessTokens[this.resource].accessToken)}...`);
44
44
  }
45
45
  const graphBaseUrl = await this.getGraphBaseUrl(args.options);
46
46
  const meetingUrls = await this.getMeetingJoinUrls(graphBaseUrl, args.options);
@@ -31,7 +31,7 @@ class TeamsMeetingTranscriptListCommand extends GraphCommand {
31
31
  }
32
32
  async commandAction(logger, args) {
33
33
  try {
34
- const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.service.accessTokens[this.resource].accessToken);
34
+ const isAppOnlyAccessToken = accessToken.isAppOnlyAccessToken(auth.connection.accessTokens[this.resource].accessToken);
35
35
  if (this.verbose) {
36
36
  await logger.logToStderr(`Retrieving transcript list for the given meeting...`);
37
37
  }
@@ -25,7 +25,7 @@ class TenantIdGetCommand extends Command {
25
25
  async commandAction(logger, args) {
26
26
  let domainName = args.options.domainName;
27
27
  if (!domainName) {
28
- const userName = accessToken.getUserNameFromAccessToken(auth.service.accessTokens[auth.defaultResource].accessToken);
28
+ const userName = accessToken.getUserNameFromAccessToken(auth.connection.accessTokens[auth.defaultResource].accessToken);
29
29
  domainName = userName.split('@')[1];
30
30
  }
31
31
  const requestOptions = {
@@ -29,7 +29,7 @@ class TenantInfoGetCommand extends GraphCommand {
29
29
  let domainName = args.options.domainName;
30
30
  const tenantId = args.options.tenantId;
31
31
  if (!domainName && !tenantId) {
32
- const userName = accessToken.getUserNameFromAccessToken(auth.service.accessTokens[auth.defaultResource].accessToken);
32
+ const userName = accessToken.getUserNameFromAccessToken(auth.connection.accessTokens[auth.defaultResource].accessToken);
33
33
  domainName = userName.split('@')[1];
34
34
  }
35
35
  let requestUrl = `${this.resource}/v1.0/tenantRelationships/`;