@pnp/cli-microsoft365 5.3.0-beta.ebb13d0 → 5.4.0-beta.0f3627d

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 (131) hide show
  1. package/.devcontainer/Dockerfile +1 -1
  2. package/.eslintrc.js +1 -0
  3. package/dist/m365/aad/commands/app/app-set.js +4 -1
  4. package/dist/m365/aad/commands/o365group/o365group-conversation-post-list.js +4 -19
  5. package/dist/m365/aad/commands/o365group/o365group-get.js +3 -9
  6. package/dist/m365/base/PlannerCommand.js +10 -0
  7. package/dist/m365/flow/commands/flow-export.js +3 -3
  8. package/dist/m365/planner/commands/bucket/bucket-add.js +4 -16
  9. package/dist/m365/planner/commands/bucket/bucket-get.js +5 -19
  10. package/dist/m365/planner/commands/bucket/bucket-list.js +4 -17
  11. package/dist/m365/planner/commands/bucket/bucket-remove.js +6 -20
  12. package/dist/m365/planner/commands/bucket/bucket-set.js +5 -19
  13. package/dist/m365/planner/commands/plan/plan-add.js +4 -16
  14. package/dist/m365/planner/commands/plan/plan-details-get.js +4 -19
  15. package/dist/m365/planner/commands/plan/plan-get.js +4 -17
  16. package/dist/m365/planner/commands/plan/plan-list.js +4 -17
  17. package/dist/m365/planner/commands/task/task-add.js +4 -16
  18. package/dist/m365/planner/commands/task/task-checklistitem-add.js +89 -0
  19. package/dist/m365/planner/commands/task/{task-details-get.js → task-checklistitem-list.js} +21 -13
  20. package/dist/m365/planner/commands/task/task-checklistitem-remove.js +85 -0
  21. package/dist/m365/planner/commands/task/task-get.js +61 -34
  22. package/dist/m365/planner/commands/task/task-list.js +4 -16
  23. package/dist/m365/planner/commands/task/task-reference-remove.js +125 -0
  24. package/dist/m365/planner/commands/task/task-remove.js +201 -0
  25. package/dist/m365/planner/commands/task/task-set.js +4 -16
  26. package/dist/m365/planner/commands/tenant/tenant-settings-list.js +33 -0
  27. package/dist/m365/planner/commands.js +8 -2
  28. package/dist/m365/search/commands/externalconnection/externalconnection-list.js +26 -0
  29. package/dist/m365/search/commands.js +2 -1
  30. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002009_DEVDEP_microsoft_sp_tslint_rules.js +2 -2
  31. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002018_DEVDEP_microsoft_rush_stack_compiler_3_9.js +2 -2
  32. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002020_DEVDEP_microsoft_rush_stack_compiler_4_5.js +17 -0
  33. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002021_DEVDEP_rushstack_eslint_config.js +14 -0
  34. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002022_DEVDEP_microsoft_eslint_plugin_spfx.js +14 -0
  35. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002023_DEVDEP_microsoft_eslint_config_spfx.js +14 -0
  36. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002024_DEVDEP_eslint.js +14 -0
  37. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN002025_DEVDEP_eslint_plugin_react_hooks.js +18 -0
  38. package/dist/m365/spfx/commands/project/project-upgrade/rules/FN015008_FILE_eslintrc_js.js +14 -0
  39. package/dist/m365/spfx/commands/project/project-upgrade/{upgrade-1.15.0-beta.6.js → upgrade-1.15.0-rc.0.js} +49 -25
  40. package/dist/m365/spfx/commands/project/project-upgrade.js +1 -1
  41. package/dist/m365/spo/commands/contenttype/contenttype-add.js +1 -1
  42. package/dist/m365/spo/commands/contenttype/contenttype-field-remove.js +1 -1
  43. package/dist/m365/spo/commands/contenttype/contenttype-get.js +1 -1
  44. package/dist/m365/spo/commands/eventreceiver/eventreceiver-get.js +119 -0
  45. package/dist/m365/spo/commands/eventreceiver/eventreceiver-list.js +102 -0
  46. package/dist/m365/spo/commands/field/field-add.js +1 -1
  47. package/dist/m365/spo/commands/field/field-get.js +5 -5
  48. package/dist/m365/spo/commands/field/field-list.js +3 -3
  49. package/dist/m365/spo/commands/field/field-remove.js +5 -5
  50. package/dist/m365/spo/commands/file/file-sharinginfo-get.js +1 -1
  51. package/dist/m365/spo/commands/list/list-contenttype-add.js +3 -3
  52. package/dist/m365/spo/commands/list/list-contenttype-default-set.js +2 -2
  53. package/dist/m365/spo/commands/list/list-contenttype-list.js +3 -3
  54. package/dist/m365/spo/commands/list/list-contenttype-remove.js +3 -3
  55. package/dist/m365/spo/commands/list/list-get.js +2 -2
  56. package/dist/m365/spo/commands/list/list-label-get.js +3 -3
  57. package/dist/m365/spo/commands/list/list-label-set.js +2 -2
  58. package/dist/m365/spo/commands/list/list-list.js +10 -1
  59. package/dist/m365/spo/commands/list/list-remove.js +2 -2
  60. package/dist/m365/spo/commands/list/list-roleinheritance-break.js +2 -2
  61. package/dist/m365/spo/commands/list/list-roleinheritance-reset.js +2 -2
  62. package/dist/m365/spo/commands/list/list-sitescript-get.js +3 -3
  63. package/dist/m365/spo/commands/list/list-view-add.js +116 -0
  64. package/dist/m365/spo/commands/list/list-view-field-add.js +2 -2
  65. package/dist/m365/spo/commands/list/list-view-field-remove.js +2 -2
  66. package/dist/m365/spo/commands/list/list-view-field-set.js +2 -2
  67. package/dist/m365/spo/commands/list/list-view-get.js +4 -4
  68. package/dist/m365/spo/commands/list/list-view-list.js +3 -3
  69. package/dist/m365/spo/commands/list/list-view-remove.js +3 -3
  70. package/dist/m365/spo/commands/list/list-view-set.js +3 -3
  71. package/dist/m365/spo/commands/list/list-webhook-add.js +3 -3
  72. package/dist/m365/spo/commands/list/list-webhook-get.js +3 -3
  73. package/dist/m365/spo/commands/list/list-webhook-list.js +5 -5
  74. package/dist/m365/spo/commands/list/list-webhook-remove.js +4 -4
  75. package/dist/m365/spo/commands/list/list-webhook-set.js +3 -3
  76. package/dist/m365/spo/commands/listitem/listitem-add.js +2 -2
  77. package/dist/m365/spo/commands/listitem/listitem-attachment-list.js +2 -2
  78. package/dist/m365/spo/commands/listitem/listitem-get.js +2 -2
  79. package/dist/m365/spo/commands/listitem/listitem-isrecord.js +2 -2
  80. package/dist/m365/spo/commands/listitem/listitem-list.js +31 -11
  81. package/dist/m365/spo/commands/listitem/listitem-record-declare.js +2 -2
  82. package/dist/m365/spo/commands/listitem/listitem-record-undeclare.js +2 -2
  83. package/dist/m365/spo/commands/listitem/listitem-remove.js +2 -2
  84. package/dist/m365/spo/commands/listitem/listitem-roleinheritance-break.js +2 -2
  85. package/dist/m365/spo/commands/listitem/listitem-roleinheritance-reset.js +2 -2
  86. package/dist/m365/spo/commands/listitem/listitem-set.js +2 -2
  87. package/dist/m365/spo/commands/roledefinition/roledefinition-remove.js +82 -0
  88. package/dist/m365/spo/commands/site/site-remove.js +23 -37
  89. package/dist/m365/spo/commands.js +4 -0
  90. package/dist/m365/teams/commands/app/app-list.js +6 -20
  91. package/dist/m365/teams/commands/channel/channel-get.js +6 -19
  92. package/dist/m365/teams/commands/channel/channel-list.js +6 -18
  93. package/dist/m365/teams/commands/channel/channel-member-add.js +7 -18
  94. package/dist/m365/teams/commands/channel/channel-member-list.js +6 -19
  95. package/dist/m365/teams/commands/channel/channel-member-remove.js +6 -19
  96. package/dist/m365/teams/commands/channel/channel-member-set.js +6 -19
  97. package/dist/m365/teams/commands/tab/tab-get.js +6 -19
  98. package/dist/m365/teams/commands/team/team-add.js +2 -7
  99. package/dist/m365/teams/commands/team/team-get.js +6 -19
  100. package/dist/utils/aadGroup.js +57 -0
  101. package/dist/utils/index.js +2 -0
  102. package/dist/utils/validation.js +12 -2
  103. package/docs/docs/cmd/aad/app/app-set.md +1 -1
  104. package/docs/docs/cmd/file/file-list.md +4 -4
  105. package/docs/docs/cmd/planner/bucket/bucket-get.md +1 -1
  106. package/docs/docs/cmd/planner/bucket/bucket-remove.md +2 -2
  107. package/docs/docs/cmd/planner/bucket/bucket-set.md +5 -5
  108. package/docs/docs/cmd/planner/plan/plan-details-get.md +2 -2
  109. package/docs/docs/cmd/planner/plan/plan-get.md +4 -4
  110. package/docs/docs/cmd/planner/task/task-checklistitem-add.md +36 -0
  111. package/docs/docs/cmd/planner/task/task-checklistitem-list.md +24 -0
  112. package/docs/docs/cmd/planner/task/task-checklistitem-remove.md +36 -0
  113. package/docs/docs/cmd/planner/task/task-get.md +7 -9
  114. package/docs/docs/cmd/planner/task/task-list.md +2 -2
  115. package/docs/docs/cmd/planner/task/task-reference-remove.md +39 -0
  116. package/docs/docs/cmd/planner/task/task-remove.md +78 -0
  117. package/docs/docs/cmd/planner/task/task-set.md +2 -2
  118. package/docs/docs/cmd/planner/tenant/tenant-settings-list.md +28 -0
  119. package/docs/docs/cmd/search/externalconnection/externalconnection-list.md +21 -0
  120. package/docs/docs/cmd/spfx/project/project-upgrade.md +1 -1
  121. package/docs/docs/cmd/spo/eventreceiver/eventreceiver-get.md +70 -0
  122. package/docs/docs/cmd/spo/eventreceiver/eventreceiver-list.md +64 -0
  123. package/docs/docs/cmd/spo/file/file-checkout.md +1 -1
  124. package/docs/docs/cmd/spo/list/list-list.md +3 -0
  125. package/docs/docs/cmd/spo/list/list-view-add.md +76 -0
  126. package/docs/docs/cmd/spo/listitem/listitem-list.md +16 -10
  127. package/docs/docs/cmd/spo/listitem/listitem-roleinheritance-break.md +2 -2
  128. package/docs/docs/cmd/spo/roledefinition/roledefinition-remove.md +36 -0
  129. package/npm-shrinkwrap.json +257 -1104
  130. package/package.json +25 -20
  131. package/docs/docs/cmd/planner/task/task-details-get.md +0 -24
@@ -31,21 +31,21 @@ class SpoListWebhookListCommand extends SpoCommand_1.default {
31
31
  logger.logToStderr(chalk.yellow(`Option 'id' is deprecated. Please use 'listId' instead`));
32
32
  }
33
33
  if (this.verbose) {
34
- const list = args.options.id ? encodeURIComponent(args.options.id) : (args.options.listId ? encodeURIComponent(args.options.listId) : (args.options.title ? encodeURIComponent(args.options.title) : encodeURIComponent(args.options.listTitle)));
34
+ const list = args.options.id ? utils_1.formatting.encodeQueryParameter(args.options.id) : (args.options.listId ? utils_1.formatting.encodeQueryParameter(args.options.listId) : (args.options.title ? utils_1.formatting.encodeQueryParameter(args.options.title) : utils_1.formatting.encodeQueryParameter(args.options.listTitle)));
35
35
  logger.logToStderr(`Retrieving webhook information for list ${list} in site at ${args.options.webUrl}...`);
36
36
  }
37
37
  let requestUrl = '';
38
38
  if (args.options.id) {
39
- requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(args.options.id)}')/Subscriptions`;
39
+ requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(args.options.id)}')/Subscriptions`;
40
40
  }
41
41
  else if (args.options.listId) {
42
- requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(args.options.listId)}')/Subscriptions`;
42
+ requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(args.options.listId)}')/Subscriptions`;
43
43
  }
44
44
  else if (args.options.listTitle) {
45
- requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${encodeURIComponent(args.options.listTitle)}')/Subscriptions`;
45
+ requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${utils_1.formatting.encodeQueryParameter(args.options.listTitle)}')/Subscriptions`;
46
46
  }
47
47
  else {
48
- requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${encodeURIComponent(args.options.title)}')/Subscriptions`;
48
+ requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${utils_1.formatting.encodeQueryParameter(args.options.title)}')/Subscriptions`;
49
49
  }
50
50
  const requestOptions = {
51
51
  url: requestUrl,
@@ -21,17 +21,17 @@ class SpoListWebhookRemoveCommand extends SpoCommand_1.default {
21
21
  return telemetryProps;
22
22
  }
23
23
  commandAction(logger, args, cb) {
24
- const list = args.options.listId ? encodeURIComponent(args.options.listId) : encodeURIComponent(args.options.listTitle);
25
24
  const removeWebhook = () => {
26
25
  if (this.verbose) {
26
+ const list = (args.options.listId ? args.options.listId : args.options.listTitle);
27
27
  logger.logToStderr(`Webhook ${args.options.id} is about to be removed from list ${list} located at site ${args.options.webUrl}...`);
28
28
  }
29
29
  let requestUrl = '';
30
30
  if (args.options.listId) {
31
- requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(args.options.listId)}')/Subscriptions('${encodeURIComponent(args.options.id)}')`;
31
+ requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(args.options.listId)}')/Subscriptions('${utils_1.formatting.encodeQueryParameter(args.options.id)}')`;
32
32
  }
33
33
  else {
34
- requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${encodeURIComponent(args.options.listTitle)}')/Subscriptions('${encodeURIComponent(args.options.id)}')`;
34
+ requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${utils_1.formatting.encodeQueryParameter(args.options.listTitle)}')/Subscriptions('${utils_1.formatting.encodeQueryParameter(args.options.id)}')`;
35
35
  }
36
36
  const requestOptions = {
37
37
  url: requestUrl,
@@ -58,7 +58,7 @@ class SpoListWebhookRemoveCommand extends SpoCommand_1.default {
58
58
  type: 'confirm',
59
59
  name: 'continue',
60
60
  default: false,
61
- message: `Are you sure you want to remove webhook ${args.options.id} from list ${list} located at site ${args.options.webUrl}?`
61
+ message: `Are you sure you want to remove webhook ${args.options.id} from list ${args.options.listTitle || args.options.listId} located at site ${args.options.webUrl}?`
62
62
  }, (result) => {
63
63
  if (!result.continue) {
64
64
  cb();
@@ -22,14 +22,14 @@ class SpoListWebhookSetCommand extends SpoCommand_1.default {
22
22
  }
23
23
  commandAction(logger, args, cb) {
24
24
  if (this.verbose) {
25
- logger.logToStderr(`Updating webhook ${args.options.id} belonging to list ${args.options.listId ? encodeURIComponent(args.options.listId) : encodeURIComponent(args.options.listTitle)} located at site ${args.options.webUrl}...`);
25
+ logger.logToStderr(`Updating webhook ${args.options.id} belonging to list ${args.options.listId ? args.options.listId : args.options.listTitle} located at site ${args.options.webUrl}...`);
26
26
  }
27
27
  let requestUrl = '';
28
28
  if (args.options.listId) {
29
- requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(args.options.listId)}')/Subscriptions('${encodeURIComponent(args.options.id)}')`;
29
+ requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(args.options.listId)}')/Subscriptions('${utils_1.formatting.encodeQueryParameter(args.options.id)}')`;
30
30
  }
31
31
  else {
32
- requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${encodeURIComponent(args.options.listTitle)}')/Subscriptions('${encodeURIComponent(args.options.id)}')`;
32
+ requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${utils_1.formatting.encodeQueryParameter(args.options.listTitle)}')/Subscriptions('${utils_1.formatting.encodeQueryParameter(args.options.id)}')`;
33
33
  }
34
34
  const requestBody = {};
35
35
  if (args.options.notificationUrl) {
@@ -26,8 +26,8 @@ class SpoListItemAddCommand extends SpoCommand_1.default {
26
26
  const listIdArgument = args.options.listId || '';
27
27
  const listTitleArgument = args.options.listTitle || '';
28
28
  const listRestUrl = (args.options.listId ?
29
- `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(listIdArgument)}')`
30
- : `${args.options.webUrl}/_api/web/lists/getByTitle('${encodeURIComponent(listTitleArgument)}')`);
29
+ `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(listIdArgument)}')`
30
+ : `${args.options.webUrl}/_api/web/lists/getByTitle('${utils_1.formatting.encodeQueryParameter(listTitleArgument)}')`);
31
31
  let contentTypeName = '';
32
32
  let targetFolderServerRelativeUrl = '';
33
33
  if (this.verbose) {
@@ -24,8 +24,8 @@ class SpoListItemAttachmentListCommand extends SpoCommand_1.default {
24
24
  const listIdArgument = args.options.listId || '';
25
25
  const listTitleArgument = args.options.listTitle || '';
26
26
  const listRestUrl = (args.options.listId ?
27
- `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(listIdArgument)}')`
28
- : `${args.options.webUrl}/_api/web/lists/getByTitle('${encodeURIComponent(listTitleArgument)}')`);
27
+ `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(listIdArgument)}')`
28
+ : `${args.options.webUrl}/_api/web/lists/getByTitle('${utils_1.formatting.encodeQueryParameter(listTitleArgument)}')`);
29
29
  const requestOptions = {
30
30
  url: `${listRestUrl}/items(${args.options.itemId})?$select=AttachmentFiles&$expand=AttachmentFiles`,
31
31
  method: 'GET',
@@ -24,8 +24,8 @@ class SpoListItemGetCommand extends SpoCommand_1.default {
24
24
  const listIdArgument = args.options.listId || '';
25
25
  const listTitleArgument = args.options.listTitle || '';
26
26
  const listRestUrl = (args.options.listId ?
27
- `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(listIdArgument)}')`
28
- : `${args.options.webUrl}/_api/web/lists/getByTitle('${encodeURIComponent(listTitleArgument)}')`);
27
+ `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(listIdArgument)}')`
28
+ : `${args.options.webUrl}/_api/web/lists/getByTitle('${utils_1.formatting.encodeQueryParameter(listTitleArgument)}')`);
29
29
  const propertiesSelect = args.options.properties ?
30
30
  `?$select=${encodeURIComponent(args.options.properties)}` :
31
31
  ((!args.options.output || args.options.output === 'text') ?
@@ -25,8 +25,8 @@ class SpoListItemIsRecordCommand extends SpoCommand_1.default {
25
25
  const listIdArgument = args.options.listId || '';
26
26
  const listTitleArgument = args.options.listTitle || '';
27
27
  const listRestUrl = (args.options.listId ?
28
- `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(listIdArgument)}')`
29
- : `${args.options.webUrl}/_api/web/lists/getByTitle('${encodeURIComponent(listTitleArgument)}')`);
28
+ `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(listIdArgument)}')`
29
+ : `${args.options.webUrl}/_api/web/lists/getByTitle('${utils_1.formatting.encodeQueryParameter(listTitleArgument)}')`);
30
30
  let formDigestValue = '';
31
31
  let listId = '';
32
32
  if (this.debug) {
@@ -14,6 +14,8 @@ class SpoListItemListCommand extends SpoCommand_1.default {
14
14
  getTelemetryProperties(args) {
15
15
  const telemetryProps = super.getTelemetryProperties(args);
16
16
  telemetryProps.id = typeof args.options.id !== 'undefined';
17
+ telemetryProps.listId = typeof args.options.listId !== 'undefined';
18
+ telemetryProps.listTitle = typeof args.options.listTitle !== 'undefined';
17
19
  telemetryProps.title = typeof args.options.title !== 'undefined';
18
20
  telemetryProps.fields = typeof args.options.fields !== 'undefined';
19
21
  telemetryProps.filter = typeof args.options.filter !== 'undefined';
@@ -23,14 +25,20 @@ class SpoListItemListCommand extends SpoCommand_1.default {
23
25
  return telemetryProps;
24
26
  }
25
27
  commandAction(logger, args, cb) {
26
- const listIdArgument = args.options.id || '';
27
- const listTitleArgument = args.options.title || '';
28
+ if (args.options.id) {
29
+ this.warn(logger, `Option 'id' is deprecated. Please use 'listId' instead.`);
30
+ }
31
+ if (args.options.title) {
32
+ this.warn(logger, `Option 'title' is deprecated. Please use 'listTitle' instead.`);
33
+ }
34
+ const listIdArgument = args.options.listId || args.options.id || '';
35
+ const listTitleArgument = args.options.listTitle || args.options.title || '';
28
36
  let formDigestValue = '';
29
37
  const fieldsArray = args.options.fields ? args.options.fields.split(",")
30
38
  : (!args.options.output || args.options.output === "text") ? ["Title", "Id"] : [];
31
- const listRestUrl = (args.options.id ?
32
- `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(listIdArgument)}')`
33
- : `${args.options.webUrl}/_api/web/lists/getByTitle('${encodeURIComponent(listTitleArgument)}')`);
39
+ const listRestUrl = listIdArgument ?
40
+ `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(listIdArgument)}')`
41
+ : `${args.options.webUrl}/_api/web/lists/getByTitle('${utils_1.formatting.encodeQueryParameter(listTitleArgument)}')`;
34
42
  (() => {
35
43
  if (args.options.camlQuery) {
36
44
  if (this.debug) {
@@ -100,10 +108,16 @@ class SpoListItemListCommand extends SpoCommand_1.default {
100
108
  option: '-u, --webUrl <webUrl>'
101
109
  },
102
110
  {
103
- option: '-i, --id [listId]'
111
+ option: '--id [id]'
112
+ },
113
+ {
114
+ option: '--title [title]'
104
115
  },
105
116
  {
106
- option: '-t, --title [listTitle]'
117
+ option: '-i, --listId [listId]'
118
+ },
119
+ {
120
+ option: '-t, --listTitle [listTitle]'
107
121
  },
108
122
  {
109
123
  option: '-s, --pageSize [pageSize]'
@@ -143,12 +157,16 @@ class SpoListItemListCommand extends SpoCommand_1.default {
143
157
  if (isValidSharePointUrl !== true) {
144
158
  return isValidSharePointUrl;
145
159
  }
146
- if (!args.options.id && !args.options.title) {
147
- return `Specify list id or title`;
160
+ if (!args.options.id && !args.options.title && !args.options.listId && !args.options.listTitle) {
161
+ return `Specify listId or listTitle`;
148
162
  }
149
163
  if (args.options.id && args.options.title) {
150
164
  return `Specify list id or title but not both`;
151
165
  }
166
+ // Check if only one of the 4 options is specified
167
+ if ([args.options.id, args.options.title, args.options.listId, args.options.listTitle].filter(o => o).length > 1) {
168
+ return 'Specify listId or listTitle but not both';
169
+ }
152
170
  if (args.options.camlQuery && args.options.fields) {
153
171
  return `Specify camlQuery or fields but not both`;
154
172
  }
@@ -167,8 +185,10 @@ class SpoListItemListCommand extends SpoCommand_1.default {
167
185
  if (args.options.pageNumber && isNaN(Number(args.options.pageNumber))) {
168
186
  return `pageNumber must be numeric`;
169
187
  }
170
- if (args.options.id &&
171
- !utils_1.validation.isValidGuid(args.options.id)) {
188
+ if (args.options.listId && !utils_1.validation.isValidGuid(args.options.listId)) {
189
+ return `${args.options.listId} is not a valid GUID`;
190
+ }
191
+ if (args.options.id && !utils_1.validation.isValidGuid(args.options.id)) {
172
192
  return `${args.options.id} in option id is not a valid GUID`;
173
193
  }
174
194
  return true;
@@ -25,8 +25,8 @@ class SpoListItemRecordDeclareCommand extends SpoCommand_1.default {
25
25
  let webIdentity = '';
26
26
  let listId = '';
27
27
  const listRestUrl = args.options.listId
28
- ? `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(args.options.listId)}')`
29
- : `${args.options.webUrl}/_api/web/lists/getByTitle('${encodeURIComponent(args.options.listTitle)}')`;
28
+ ? `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(args.options.listId)}')`
29
+ : `${args.options.webUrl}/_api/web/lists/getByTitle('${utils_1.formatting.encodeQueryParameter(args.options.listTitle)}')`;
30
30
  utils_1.spo
31
31
  .getRequestDigest(args.options.webUrl)
32
32
  .then((contextResponse) => {
@@ -22,8 +22,8 @@ class SpoListItemRecordUndeclareCommand extends SpoCommand_1.default {
22
22
  const listIdArgument = args.options.listId || '';
23
23
  const listTitleArgument = args.options.listTitle || '';
24
24
  const listRestUrl = (args.options.listId ?
25
- `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(listIdArgument)}')`
26
- : `${args.options.webUrl}/_api/web/lists/getByTitle('${encodeURIComponent(listTitleArgument)}')`);
25
+ `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(listIdArgument)}')`
26
+ : `${args.options.webUrl}/_api/web/lists/getByTitle('${utils_1.formatting.encodeQueryParameter(listTitleArgument)}')`);
27
27
  let formDigestValue = '';
28
28
  let environmentListId = '';
29
29
  (() => {
@@ -27,10 +27,10 @@ class SpoListItemRemoveCommand extends SpoCommand_1.default {
27
27
  }
28
28
  let requestUrl = '';
29
29
  if (args.options.listId) {
30
- requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(args.options.listId)}')`;
30
+ requestUrl = `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(args.options.listId)}')`;
31
31
  }
32
32
  else {
33
- requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${encodeURIComponent(args.options.listTitle)}')`;
33
+ requestUrl = `${args.options.webUrl}/_api/web/lists/GetByTitle('${utils_1.formatting.encodeQueryParameter(args.options.listTitle)}')`;
34
34
  }
35
35
  requestUrl += `/items(${args.options.id})`;
36
36
  if (args.options.recycle) {
@@ -22,10 +22,10 @@ class SpoListItemRoleInheritanceBreakCommand extends SpoCommand_1.default {
22
22
  }
23
23
  let requestUrl = `${args.options.webUrl}/_api/web/lists`;
24
24
  if (args.options.listId) {
25
- requestUrl += `(guid'${encodeURIComponent(args.options.listId)}')`;
25
+ requestUrl += `(guid'${utils_1.formatting.encodeQueryParameter(args.options.listId)}')`;
26
26
  }
27
27
  else {
28
- requestUrl += `/getbytitle('${encodeURIComponent(args.options.listTitle)}')`;
28
+ requestUrl += `/getbytitle('${utils_1.formatting.encodeQueryParameter(args.options.listTitle)}')`;
29
29
  }
30
30
  let keepExistingPermissions = true;
31
31
  if (args.options.clearExistingPermissions) {
@@ -20,10 +20,10 @@ class SpoListItemRoleInheritanceResetCommand extends SpoCommand_1.default {
20
20
  commandAction(logger, args, cb) {
21
21
  let requestUrl = `${args.options.webUrl}/_api/web/lists`;
22
22
  if (args.options.listId) {
23
- requestUrl += `(guid'${encodeURIComponent(args.options.listId)}')`;
23
+ requestUrl += `(guid'${utils_1.formatting.encodeQueryParameter(args.options.listId)}')`;
24
24
  }
25
25
  else {
26
- requestUrl += `/getbytitle('${encodeURIComponent(args.options.listTitle)}')`;
26
+ requestUrl += `/getbytitle('${utils_1.formatting.encodeQueryParameter(args.options.listTitle)}')`;
27
27
  }
28
28
  const requestOptions = {
29
29
  url: `${requestUrl}/items(${args.options.listItemId})/resetroleinheritance`,
@@ -27,8 +27,8 @@ class SpoListItemSetCommand extends SpoCommand_1.default {
27
27
  const listIdArgument = args.options.listId || '';
28
28
  const listTitleArgument = args.options.listTitle || '';
29
29
  const listRestUrl = (args.options.listId ?
30
- `${args.options.webUrl}/_api/web/lists(guid'${encodeURIComponent(listIdArgument)}')`
31
- : `${args.options.webUrl}/_api/web/lists/getByTitle('${encodeURIComponent(listTitleArgument)}')`);
30
+ `${args.options.webUrl}/_api/web/lists(guid'${utils_1.formatting.encodeQueryParameter(listIdArgument)}')`
31
+ : `${args.options.webUrl}/_api/web/lists/getByTitle('${utils_1.formatting.encodeQueryParameter(listTitleArgument)}')`);
32
32
  let contentTypeName = '';
33
33
  let formDigestValue = '';
34
34
  let environmentListId = '';
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const cli_1 = require("../../../../cli");
4
+ const request_1 = require("../../../../request");
5
+ const utils_1 = require("../../../../utils");
6
+ const SpoCommand_1 = require("../../../base/SpoCommand");
7
+ const commands_1 = require("../../commands");
8
+ class SpoRoleDefinitionRemoveCommand extends SpoCommand_1.default {
9
+ get name() {
10
+ return commands_1.default.ROLEDEFINITION_REMOVE;
11
+ }
12
+ get description() {
13
+ return 'Removes the role definition from the specified site';
14
+ }
15
+ getTelemetryProperties(args) {
16
+ const telemetryProps = super.getTelemetryProperties(args);
17
+ telemetryProps.confirm = (!(!args.options.confirm)).toString();
18
+ return telemetryProps;
19
+ }
20
+ commandAction(logger, args, cb) {
21
+ const removeRoleDefinition = () => {
22
+ if (this.verbose) {
23
+ logger.logToStderr(`Removing role definition from site ${args.options.webUrl}...`);
24
+ }
25
+ const requestOptions = {
26
+ url: `${args.options.webUrl}/_api/web/roledefinitions(${args.options.id})`,
27
+ method: 'delete',
28
+ headers: {
29
+ 'X-HTTP-Method': 'DELETE',
30
+ 'If-Match': '*',
31
+ 'accept': 'application/json;odata=nometadata'
32
+ },
33
+ responseType: 'json'
34
+ };
35
+ request_1.default
36
+ .delete(requestOptions)
37
+ .then(() => cb(), (err) => this.handleRejectedODataJsonPromise(err, logger, cb));
38
+ };
39
+ if (args.options.confirm) {
40
+ removeRoleDefinition();
41
+ }
42
+ else {
43
+ cli_1.Cli.prompt({
44
+ type: 'confirm',
45
+ name: 'continue',
46
+ default: false,
47
+ message: `Are you sure you want to remove the role definition with id ${args.options.id} from site ${args.options.webUrl}?`
48
+ }, (result) => {
49
+ if (!result.continue) {
50
+ cb();
51
+ }
52
+ else {
53
+ removeRoleDefinition();
54
+ }
55
+ });
56
+ }
57
+ }
58
+ options() {
59
+ const options = [
60
+ {
61
+ option: '-u, --webUrl <webUrl>'
62
+ },
63
+ {
64
+ option: '-i, --id <id>'
65
+ },
66
+ {
67
+ option: '--confirm'
68
+ }
69
+ ];
70
+ const parentOptions = super.options();
71
+ return options.concat(parentOptions);
72
+ }
73
+ validate(args) {
74
+ const id = parseInt(args.options.id);
75
+ if (isNaN(id)) {
76
+ return `${args.options.id} is not a valid role definition ID`;
77
+ }
78
+ return utils_1.validation.isValidSharePointUrl(args.options.webUrl);
79
+ }
80
+ }
81
+ module.exports = new SpoRoleDefinitionRemoveCommand();
82
+ //# sourceMappingURL=roledefinition-remove.js.map
@@ -5,6 +5,7 @@ const cli_1 = require("../../../../cli");
5
5
  const config_1 = require("../../../../config");
6
6
  const request_1 = require("../../../../request");
7
7
  const utils_1 = require("../../../../utils");
8
+ const aadGroup_1 = require("../../../../utils/aadGroup");
8
9
  const SpoCommand_1 = require("../../../base/SpoCommand");
9
10
  const commands_1 = require("../../commands");
10
11
  class SpoSiteRemoveCommand extends SpoCommand_1.default {
@@ -44,41 +45,36 @@ class SpoSiteRemoveCommand extends SpoCommand_1.default {
44
45
  if (this.debug) {
45
46
  logger.logToStderr(`Site attached to group ${groupId}. Initiating group delete operation via Graph API`);
46
47
  }
47
- return this
48
- .getSiteGroup(groupId)
48
+ return aadGroup_1.aadGroup
49
+ .getGroupById(groupId)
49
50
  .then((group) => {
50
51
  if (args.options.skipRecycleBin || args.options.wait) {
51
52
  logger.logToStderr(chalk.yellow(`Entered site is a groupified site. Hence, the parameters 'skipRecycleBin' and 'wait' will not be applicable.`));
52
53
  }
53
54
  return this.deleteGroup(group.id, logger);
54
55
  })
55
- .catch((err) => {
56
- if (err.response.status === 404) {
57
- if (this.verbose) {
58
- logger.logToStderr(`Site group doesn't exist. Searching in the Microsoft 365 deleted groups.`);
59
- }
60
- return this
61
- .isSiteGroupDeleted(groupId)
62
- .then((deletedGroups) => {
63
- if (deletedGroups.value.length === 0) {
64
- if (this.verbose) {
65
- logger.logToStderr("Site group doesn't exist anymore. Deleting the site.");
66
- }
67
- if (args.options.wait) {
68
- logger.logToStderr(chalk.yellow(`Entered site is a groupified site. Hence, the parameter 'wait' will not be applicable.`));
69
- }
70
- return Promise.resolve();
56
+ .catch(() => {
57
+ if (this.verbose) {
58
+ logger.logToStderr(`Site group doesn't exist. Searching in the Microsoft 365 deleted groups.`);
59
+ }
60
+ return this
61
+ .isSiteGroupDeleted(groupId)
62
+ .then((deletedGroups) => {
63
+ if (deletedGroups.value.length === 0) {
64
+ if (this.verbose) {
65
+ logger.logToStderr("Site group doesn't exist anymore. Deleting the site.");
71
66
  }
72
- else {
73
- return Promise.reject(`Site group still exists in the deleted groups. The site won't be removed.`);
67
+ if (args.options.wait) {
68
+ logger.logToStderr(chalk.yellow(`Entered site is a groupified site. Hence, the parameter 'wait' will not be applicable.`));
74
69
  }
75
- })
76
- .then(_ => this.deleteOrphanedSite(logger, args.options.url))
77
- .catch((err) => Promise.reject(err));
78
- }
79
- else {
80
- return Promise.reject(err);
81
- }
70
+ return Promise.resolve();
71
+ }
72
+ else {
73
+ return Promise.reject(`Site group still exists in the deleted groups. The site won't be removed.`);
74
+ }
75
+ })
76
+ .then(_ => this.deleteOrphanedSite(logger, args.options.url))
77
+ .catch((err) => Promise.reject(err));
82
78
  })
83
79
  .then(_ => this.deleteSite(args.options.url, args.options.wait, logger));
84
80
  }
@@ -105,16 +101,6 @@ class SpoSiteRemoveCommand extends SpoCommand_1.default {
105
101
  });
106
102
  }
107
103
  }
108
- getSiteGroup(groupId) {
109
- const requestOptions = {
110
- url: `https://graph.microsoft.com/v1.0/groups/${groupId}`,
111
- headers: {
112
- accept: 'application/json;odata.metadata=none'
113
- },
114
- responseType: 'json'
115
- };
116
- return request_1.default.get(requestOptions);
117
- }
118
104
  isSiteGroupDeleted(groupId) {
119
105
  const requestOptions = {
120
106
  url: `https://graph.microsoft.com/v1.0/directory/deletedItems/Microsoft.Graph.Group?$select=id&$filter=groupTypes/any(c:c+eq+'Unified') and startswith(id, '${groupId}')`,
@@ -35,6 +35,8 @@ exports.default = {
35
35
  CUSTOMACTION_SET: `${prefix} customaction set`,
36
36
  CUSTOMACTION_LIST: `${prefix} customaction list`,
37
37
  CUSTOMACTION_REMOVE: `${prefix} customaction remove`,
38
+ EVENTRECEIVER_GET: `${prefix} eventreceiver get`,
39
+ EVENTRECEIVER_LIST: `${prefix} eventreceiver list`,
38
40
  EXTERNALUSER_LIST: `${prefix} externaluser list`,
39
41
  FEATURE_DISABLE: `${prefix} feature disable`,
40
42
  FEATURE_ENABLE: `${prefix} feature enable`,
@@ -100,6 +102,7 @@ exports.default = {
100
102
  LIST_ROLEINHERITANCE_RESET: `${prefix} list roleinheritance reset`,
101
103
  LIST_SET: `${prefix} list set`,
102
104
  LIST_SITESCRIPT_GET: `${prefix} list sitescript get`,
105
+ LIST_VIEW_ADD: `${prefix} list view add`,
103
106
  LIST_VIEW_GET: `${prefix} list view get`,
104
107
  LIST_VIEW_LIST: `${prefix} list view list`,
105
108
  LIST_VIEW_REMOVE: `${prefix} list view remove`,
@@ -165,6 +168,7 @@ exports.default = {
165
168
  REPORT_SITEUSAGESITECOUNTS: `${prefix} report siteusagesitecounts`,
166
169
  REPORT_SITEUSAGESTORAGE: `${prefix} report siteusagestorage`,
167
170
  ROLEDEFINITION_LIST: `${prefix} roledefinition list`,
171
+ ROLEDEFINITION_REMOVE: `${prefix} roledefinition remove`,
168
172
  SEARCH: `${prefix} search`,
169
173
  SERVICEPRINCIPAL_GRANT_ADD: `${prefix} serviceprincipal grant add`,
170
174
  SERVICEPRINCIPAL_GRANT_LIST: `${prefix} serviceprincipal grant list`,
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const request_1 = require("../../../../request");
4
3
  const utils_1 = require("../../../../utils");
4
+ const aadGroup_1 = require("../../../../utils/aadGroup");
5
5
  const GraphCommand_1 = require("../../../base/GraphCommand");
6
6
  const commands_1 = require("../../commands");
7
7
  class TeamsAppListCommand extends GraphCommand_1.default {
@@ -25,27 +25,13 @@ class TeamsAppListCommand extends GraphCommand_1.default {
25
25
  if (args.options.teamId) {
26
26
  return Promise.resolve(args.options.teamId);
27
27
  }
28
- const requestOptions = {
29
- url: `${this.resource}/v1.0/groups?$filter=displayName eq '${encodeURIComponent(args.options.teamName)}'`,
30
- headers: {
31
- accept: 'application/json;odata.metadata=none'
32
- },
33
- responseType: 'json'
34
- };
35
- return request_1.default
36
- .get(requestOptions)
37
- .then(response => {
38
- const groupItem = response.value[0];
39
- if (!groupItem) {
40
- return Promise.reject(`The specified team does not exist in the Microsoft Teams`);
41
- }
42
- if (groupItem.resourceProvisioningOptions.indexOf('Team') === -1) {
28
+ return aadGroup_1.aadGroup
29
+ .getGroupByDisplayName(args.options.teamName)
30
+ .then(group => {
31
+ if (group.resourceProvisioningOptions.indexOf('Team') === -1) {
43
32
  return Promise.reject(`The specified team does not exist in the Microsoft Teams`);
44
33
  }
45
- if (response.value.length > 1) {
46
- return Promise.reject(`Multiple Microsoft Teams teams with name ${args.options.teamName} found: ${response.value.map(x => x.id)}`);
47
- }
48
- return Promise.resolve(groupItem.id);
34
+ return group.id;
49
35
  });
50
36
  }
51
37
  getEndpointUrl(args) {
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const request_1 = require("../../../../request");
4
4
  const utils_1 = require("../../../../utils");
5
+ const aadGroup_1 = require("../../../../utils/aadGroup");
5
6
  const GraphCommand_1 = require("../../../base/GraphCommand");
6
7
  const commands_1 = require("../../commands");
7
8
  class TeamsChannelGetCommand extends GraphCommand_1.default {
@@ -28,27 +29,13 @@ class TeamsChannelGetCommand extends GraphCommand_1.default {
28
29
  if (args.options.teamId) {
29
30
  return Promise.resolve(args.options.teamId);
30
31
  }
31
- const requestOptions = {
32
- url: `${this.resource}/v1.0/groups?$filter=displayName eq '${encodeURIComponent(args.options.teamName)}'`,
33
- headers: {
34
- accept: 'application/json;odata.metadata=none'
35
- },
36
- responseType: 'json'
37
- };
38
- return request_1.default
39
- .get(requestOptions)
40
- .then(response => {
41
- const groupItem = response.value[0];
42
- if (!groupItem) {
32
+ return aadGroup_1.aadGroup
33
+ .getGroupByDisplayName(args.options.teamName)
34
+ .then(group => {
35
+ if (group.resourceProvisioningOptions.indexOf('Team') === -1) {
43
36
  return Promise.reject(`The specified team does not exist in the Microsoft Teams`);
44
37
  }
45
- if (groupItem.resourceProvisioningOptions.indexOf('Team') === -1) {
46
- return Promise.reject(`The specified team does not exist in the Microsoft Teams`);
47
- }
48
- if (response.value.length > 1) {
49
- return Promise.reject(`Multiple Microsoft Teams teams with name ${args.options.teamName} found: ${response.value.map(x => x.id)}`);
50
- }
51
- return Promise.resolve(groupItem.id);
38
+ return group.id;
52
39
  });
53
40
  }
54
41
  getChannelId(args) {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const request_1 = require("../../../../request");
4
3
  const utils_1 = require("../../../../utils");
4
+ const aadGroup_1 = require("../../../../utils/aadGroup");
5
5
  const GraphCommand_1 = require("../../../base/GraphCommand");
6
6
  const commands_1 = require("../../commands");
7
7
  class TeamsChannelListCommand extends GraphCommand_1.default {
@@ -24,25 +24,13 @@ class TeamsChannelListCommand extends GraphCommand_1.default {
24
24
  if (args.options.teamId) {
25
25
  return Promise.resolve(args.options.teamId);
26
26
  }
27
- const requestOptions = {
28
- url: `${this.resource}/v1.0/groups?$filter=displayName eq '${encodeURIComponent(args.options.teamName)}'`,
29
- headers: {
30
- accept: 'application/json;odata.metadata=none'
31
- },
32
- responseType: 'json'
33
- };
34
- return request_1.default
35
- .get(requestOptions)
36
- .then(response => {
37
- const filteredResponseByTeam = response.value.filter(t => t.resourceProvisioningOptions.includes('Team'));
38
- const groupItem = filteredResponseByTeam[0];
39
- if (!groupItem) {
27
+ return aadGroup_1.aadGroup
28
+ .getGroupByDisplayName(args.options.teamName)
29
+ .then(group => {
30
+ if (group.resourceProvisioningOptions.indexOf('Team') === -1) {
40
31
  return Promise.reject(`The specified team does not exist in the Microsoft Teams`);
41
32
  }
42
- if (filteredResponseByTeam.length > 1) {
43
- return Promise.reject(`Multiple Microsoft Teams teams with name ${args.options.teamName} found: ${filteredResponseByTeam.map(x => x.id)}`);
44
- }
45
- return Promise.resolve(groupItem.id);
33
+ return group.id;
46
34
  });
47
35
  }
48
36
  commandAction(logger, args, cb) {