sharepoint-cli-rs 0.0.4__tar.gz → 0.0.7__tar.gz

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 (76) hide show
  1. sharepoint_cli_rs-0.0.7/CHANGELOG.md +103 -0
  2. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/Cargo.lock +349 -2
  3. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/Cargo.toml +4 -1
  4. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/PKG-INFO +7 -2
  5. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/README.md +6 -1
  6. sharepoint_cli_rs-0.0.7/docs/superpowers/.gitignore +2 -0
  7. sharepoint_cli_rs-0.0.7/src/auth/device_code.rs +547 -0
  8. sharepoint_cli_rs-0.0.7/src/auth/mod.rs +306 -0
  9. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/cli.rs +47 -10
  10. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/commands/auth.rs +62 -40
  11. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/commands/drives.rs +33 -8
  12. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/commands/files.rs +147 -39
  13. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/commands/init.rs +11 -0
  14. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/commands/mod.rs +7 -6
  15. sharepoint_cli_rs-0.0.7/src/commands/schema.rs +337 -0
  16. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/commands/sites.rs +64 -19
  17. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/config.rs +72 -6
  18. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/error.rs +44 -0
  19. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/graph/drives.rs +58 -81
  20. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/graph/mod.rs +133 -18
  21. sharepoint_cli_rs-0.0.7/src/graph/search.rs +160 -0
  22. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/graph/sites.rs +29 -43
  23. sharepoint_cli_rs-0.0.7/src/lib.rs +20 -0
  24. sharepoint_cli_rs-0.0.7/src/main.rs +326 -0
  25. sharepoint_cli_rs-0.0.7/src/output.rs +172 -0
  26. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/reference.rs +56 -18
  27. sharepoint_cli_rs-0.0.7/src/util.rs +67 -0
  28. sharepoint_cli_rs-0.0.7/tests/auth_concurrent_refresh.rs +97 -0
  29. sharepoint_cli_rs-0.0.7/tests/auth_token_retry.rs +216 -0
  30. sharepoint_cli_rs-0.0.7/tests/cmd_auth_env_refresh_token.rs +97 -0
  31. sharepoint_cli_rs-0.0.7/tests/cmd_auth_login_canonicalizes_tenant.rs +76 -0
  32. sharepoint_cli_rs-0.0.7/tests/cmd_auth_login_quiet_prompts.rs +116 -0
  33. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_auth_logout.rs +2 -2
  34. sharepoint_cli_rs-0.0.7/tests/cmd_auth_no_client_id.rs +42 -0
  35. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_auth_status.rs +1 -1
  36. sharepoint_cli_rs-0.0.7/tests/cmd_clap_error_is_json.rs +38 -0
  37. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_config.rs +1 -1
  38. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_drives_list.rs +3 -2
  39. sharepoint_cli_rs-0.0.7/tests/cmd_drives_list_pagination.rs +109 -0
  40. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_files_find.rs +7 -5
  41. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_files_ls.rs +2 -1
  42. sharepoint_cli_rs-0.0.7/tests/cmd_files_ls_pagination.rs +227 -0
  43. sharepoint_cli_rs-0.0.7/tests/cmd_files_ls_recursive_rejects_pagination_flags.rs +88 -0
  44. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_files_stat_download.rs +2 -1
  45. sharepoint_cli_rs-0.0.7/tests/cmd_schema.rs +173 -0
  46. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_sites_list.rs +1 -1
  47. sharepoint_cli_rs-0.0.7/tests/fixtures/clispec-v0.2.json +135 -0
  48. sharepoint_cli_rs-0.0.7/tests/graph_page_token_host_validation.rs +36 -0
  49. sharepoint_cli_rs-0.0.4/CHANGELOG.md +0 -62
  50. sharepoint_cli_rs-0.0.4/docs/superpowers/plans/2026-04-30-sharepoint-cli-foundation-and-reads.md +0 -5303
  51. sharepoint_cli_rs-0.0.4/docs/superpowers/specs/2026-04-30-sharepoint-cli-design.html +0 -398
  52. sharepoint_cli_rs-0.0.4/docs/superpowers/specs/2026-04-30-sharepoint-cli-design.md +0 -381
  53. sharepoint_cli_rs-0.0.4/src/auth/device_code.rs +0 -333
  54. sharepoint_cli_rs-0.0.4/src/auth/mod.rs +0 -218
  55. sharepoint_cli_rs-0.0.4/src/graph/search.rs +0 -107
  56. sharepoint_cli_rs-0.0.4/src/lib.rs +0 -10
  57. sharepoint_cli_rs-0.0.4/src/main.rs +0 -17
  58. sharepoint_cli_rs-0.0.4/src/output.rs +0 -134
  59. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/.github/workflows/ci.yml +0 -0
  60. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/.github/workflows/release.yml +0 -0
  61. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/.gitignore +0 -0
  62. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/Makefile +0 -0
  63. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/prek.toml +0 -0
  64. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/pyproject.toml +0 -0
  65. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/sharepoint_cli/__init__.py +0 -0
  66. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/sharepoint_cli/__main__.py +0 -0
  67. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/sharepoint_cli/py.typed +0 -0
  68. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/auth/token_cache.rs +0 -0
  69. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/commands/config.rs +0 -0
  70. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/src/graph/download.rs +0 -0
  71. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/auth_refresh.rs +0 -0
  72. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_init_quiet.rs +0 -0
  73. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/cmd_sites_use.rs +0 -0
  74. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/device_code_polling.rs +0 -0
  75. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/graph_download.rs +0 -0
  76. {sharepoint_cli_rs-0.0.4 → sharepoint_cli_rs-0.0.7}/tests/graph_retry.rs +0 -0
@@ -0,0 +1,103 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/).
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+ ## [0.0.7](https://github.com/rvben/sharepoint-cli/compare/v0.0.6...v0.0.7) - 2026-06-11
14
+
15
+ ### Added
16
+
17
+ - make sharepoint CLI fully compliant with clispec v0.2 (24/24) ([8cfc497](https://github.com/rvben/sharepoint-cli/commit/8cfc497b893abea59eb5d029ba7ac2655d966292))
18
+
19
+ ### Fixed
20
+
21
+ - remove no-op --yes from init; expose sites use --yes to schema bypass check ([0a2ea3e](https://github.com/rvben/sharepoint-cli/commit/0a2ea3e2b0a64d387d27472f42c134cf81c3699f))
22
+
23
+ ## [0.0.6](https://github.com/rvben/sharepoint-cli/compare/v0.0.5...v0.0.6) - 2026-05-06
24
+
25
+ ## [0.0.5](https://github.com/rvben/sharepoint-cli/compare/v0.0.4...v0.0.5) - 2026-05-06
26
+
27
+ ### Added
28
+
29
+ - **graph**: accept HTTP-date in Retry-After header ([d0083da](https://github.com/rvben/sharepoint-cli/commit/d0083da415e8c9d9e38e8e0de5851f8719615ee7))
30
+ - **auth**: require client_id and surface a friendly error when missing ([268085f](https://github.com/rvben/sharepoint-cli/commit/268085f2c9af7ed0e9470a3b8928d2d047582975))
31
+
32
+ ### Fixed
33
+
34
+ - **files**: use Option<usize> for --limit to detect explicit value ([ce4c14e](https://github.com/rvben/sharepoint-cli/commit/ce4c14e1b3cb2f24cf119d5d8f55382a99d577b9))
35
+ - **auth**: use SHAREPOINT_REFRESH_TOKEN to bootstrap auth ([a41e178](https://github.com/rvben/sharepoint-cli/commit/a41e178952a6e4ad94bd61c21f97ca354622060a))
36
+ - **auth**: apply redactor to OAuth2Error.error_description ([1230534](https://github.com/rvben/sharepoint-cli/commit/1230534cf6048f72955cf113089525804184ff0b))
37
+ - **auth**: release mutex across file I/O and network in access_token ([3f00c7a](https://github.com/rvben/sharepoint-cli/commit/3f00c7ab15a87ec2299a53a9e584620d8276eafd))
38
+ - **auth**: always emit device-code prompt under --quiet ([ad3ec75](https://github.com/rvben/sharepoint-cli/commit/ad3ec75a49a815b39e73cab80e1ff40dcd58407e))
39
+ - **auth**: retry transient errors on token endpoint ([1e9c5f5](https://github.com/rvben/sharepoint-cli/commit/1e9c5f58a847b347fe13d680289f0fcbb09b648a))
40
+ - **auth**: redact token-endpoint error bodies ([be11124](https://github.com/rvben/sharepoint-cli/commit/be11124c0d1bf9e039bf6b03145a26bf32c38a2e))
41
+ - **pagination**: cursor preserves mid-page progress ([88b9dab](https://github.com/rvben/sharepoint-cli/commit/88b9dabab8478bf2e3238c0afbb34999267565e0))
42
+ - **drives**: paginate drives list to fetch all pages ([7fd8a53](https://github.com/rvben/sharepoint-cli/commit/7fd8a53ec3816bdb22acc834eebc0a8e60866203))
43
+ - **files**: reject pagination flags when --recursive is set ([d6e7c2f](https://github.com/rvben/sharepoint-cli/commit/d6e7c2f3152e7f65cde51494e4e1f56496debd3e))
44
+ - **graph**: validate page-token host before attaching bearer ([ba954a6](https://github.com/rvben/sharepoint-cli/commit/ba954a6e78939bd47e1f3d8798e9fb501073db10))
45
+ - **graph**: percent-encode user query in search URL ([74b8b57](https://github.com/rvben/sharepoint-cli/commit/74b8b57829f9d3eacd8130f1b3a44e243528fc0b))
46
+ - **reference**: decode percent-escapes in colon-separated forms ([744736f](https://github.com/rvben/sharepoint-cli/commit/744736f0691e889dbbd4ce9cfc1529dc6478fd48))
47
+ - **reference**: stop double-decoding id= query values ([d2eb4e2](https://github.com/rvben/sharepoint-cli/commit/d2eb4e29730954ad7b31f5e7aca5fe62eb0da41c))
48
+ - **cli**: route clap parse errors through JSON-error-on-stdout contract ([a9e806e](https://github.com/rvben/sharepoint-cli/commit/a9e806e4bf4547e3852bddd49f786f3524e08d95))
49
+ - **auth**: canonicalize tenant to GUID after login ([20dae78](https://github.com/rvben/sharepoint-cli/commit/20dae7865c41d3e18a3f5b03253895aca9b78452))
50
+
51
+ ## [0.0.4](https://github.com/rvben/sharepoint-cli/compare/v0.0.3...v0.0.4) - 2026-05-04
52
+
53
+ ### Fixed
54
+
55
+ - **release**: rename PyPI distribution to sharepoint-cli-rs ([f51cd42](https://github.com/rvben/sharepoint-cli/commit/f51cd42520eea7f31e4dd1625b920fb828ba0e96))
56
+
57
+ ## [0.0.3](https://github.com/rvben/sharepoint-cli/compare/v0.0.2...v0.0.3) - 2026-05-04
58
+
59
+ ### Fixed
60
+
61
+ - **release**: use uv publish instead of twine for PyPI ([b262ca2](https://github.com/rvben/sharepoint-cli/commit/b262ca20f3effa0dba376d41d39ac73814e8d2b5))
62
+
63
+ ## [0.0.2](https://github.com/rvben/sharepoint-cli/compare/v0.0.1...v0.0.2) - 2026-05-04
64
+
65
+ ### Added
66
+
67
+ - **release**: add maturin/PyPI scaffolding and release workflow ([bae8c15](https://github.com/rvben/sharepoint-cli/commit/bae8c157df17866d2e222a325f8708d366ee809b))
68
+
69
+ ## [0.0.1] - 2026-05-04
70
+
71
+ ### Added
72
+
73
+ - **drives**: accept spo:// URI form in drives list site argument ([e94947d](https://github.com/rvben/sharepoint-cli/commit/e94947dde7d283ad21419a49ff99c4bb109b5289))
74
+ - implement config show/path with masked secrets ([c9ca3a7](https://github.com/rvben/sharepoint-cli/commit/c9ca3a70bf1a02723d6fdee1908da68d03272337))
75
+ - implement init with interactive setup and device-code login ([0776d2f](https://github.com/rvben/sharepoint-cli/commit/0776d2f413038ba68cead1db45ba54082623c166))
76
+ - **files**: implement ls/stat/download/find ([cae16c6](https://github.com/rvben/sharepoint-cli/commit/cae16c6ae67877b8530b613294db3585b173d498))
77
+ - **drives**: list libraries on a site ([d8254f7](https://github.com/rvben/sharepoint-cli/commit/d8254f74a4be0cdd3d9480b694f53b1299408693))
78
+ - **sites**: reject sites use in read-only mode ([eaddbab](https://github.com/rvben/sharepoint-cli/commit/eaddbabf9363285607b1ed940f5a335ea953e810))
79
+ - **sites**: implement list (followed/search) and use ([c2706e5](https://github.com/rvben/sharepoint-cli/commit/c2706e53cbe8504727ab278f2da798ba07ba6844))
80
+ - **auth**: implement login, logout, status commands ([8a4cdb1](https://github.com/rvben/sharepoint-cli/commit/8a4cdb19ced6e9c8f143798ef7e55b60365b6e4e))
81
+ - **cli**: add scaffold with clap derive subcommands and dispatcher ([9b9ac45](https://github.com/rvben/sharepoint-cli/commit/9b9ac45169f0b579fb887f38fbfc42dd8d5649c1))
82
+ - **graph**: add drive-scoped search with shell-glob matcher ([3966aa7](https://github.com/rvben/sharepoint-cli/commit/3966aa7e356fb804160c59617c46ee076e2bf7d9))
83
+ - **graph**: add streaming download ([873fc7a](https://github.com/rvben/sharepoint-cli/commit/873fc7a19100da101920bc3d6b46dce1e985f239))
84
+ - **graph**: add drive lookup, item listing, and canonical-shape mapper ([20eae65](https://github.com/rvben/sharepoint-cli/commit/20eae6512d4c17205dc330e705aa2a9bf2a632b1))
85
+ - **graph**: add site discovery with alias map and pagination ([b12b24c](https://github.com/rvben/sharepoint-cli/commit/b12b24c954af9afe27bfbba6cb4a21dace47182f))
86
+ - **graph**: add GraphClient with retry/backoff and paging ([3d7f22f](https://github.com/rvben/sharepoint-cli/commit/3d7f22f06a9933ceaf5afa13df1b2ebfa40f6707))
87
+ - **auth**: add AuthContext with auto-refresh and 60s margin ([1c8a536](https://github.com/rvben/sharepoint-cli/commit/1c8a536ef3500ecdf5ecdc12b2b19947993e07b4))
88
+ - **auth**: add device-code flow with polling state machine ([eb4ec4b](https://github.com/rvben/sharepoint-cli/commit/eb4ec4be0f253bdf3edc025c09530bf8e00f76c3))
89
+ - add token cache with atomic 0600 writes ([924ad00](https://github.com/rvben/sharepoint-cli/commit/924ad009ef0930327451327c59aefa12cf934c0d))
90
+ - add reference parser supporting all 5 input forms ([29f6452](https://github.com/rvben/sharepoint-cli/commit/29f64520c72c3f161e9590ff0193c2f209ba0d15))
91
+ - add config module with profiles, env overrides, and resolution order ([3965f93](https://github.com/rvben/sharepoint-cli/commit/3965f9337a98a6bc0a9cb51bf8ecf7a7f0e28cc6))
92
+ - add OutputConfig with JSON-error-on-stdout contract ([5c68729](https://github.com/rvben/sharepoint-cli/commit/5c687290bec2e33acda5c54f9be3407d73f47e0a))
93
+ - add CliError with structured exit codes ([39d719e](https://github.com/rvben/sharepoint-cli/commit/39d719ee8a6ebfde083622e257c113cc62877ffe))
94
+
95
+ ### Fixed
96
+
97
+ - **files**: paginate find to match plan spec ([6c591fa](https://github.com/rvben/sharepoint-cli/commit/6c591fa9ed226e079c98860655c7e069ea7b1806))
98
+ - **files**: align ls/download/find with plan spec ([c8661a7](https://github.com/rvben/sharepoint-cli/commit/c8661a769aed14501dcb7c12f1c2179ab768bed6))
99
+ - **tests**: write auth-status fixture cache to binary's actual path ([501c45b](https://github.com/rvben/sharepoint-cli/commit/501c45b095e4db71006a8255c02f1ccf1723f196))
100
+ - **graph**: percent-encode drive paths and drop unwrap in canonical mapper ([f91f4df](https://github.com/rvben/sharepoint-cli/commit/f91f4df5680071ad1db5c592d0229b114778af69))
101
+ - **graph**: derive list source from decoded page token path ([d70527a](https://github.com/rvben/sharepoint-cli/commit/d70527a006b070a41f3fe999a9c43bc4fde477fb))
102
+ - **graph**: cap Retry-After at 60s and drop dead pow guard ([66d7c9c](https://github.com/rvben/sharepoint-cli/commit/66d7c9c2a353847eeec52e1da364356b70aeac65))
103
+ - **auth**: make refresh_token and Account.name Option<String> ([d30e5f7](https://github.com/rvben/sharepoint-cli/commit/d30e5f7d32e6b0496794176bdfc8ba5ad88fd1d5))
@@ -2,6 +2,20 @@
2
2
  # It is not intended for manual editing.
3
3
  version = 4
4
4
 
5
+ [[package]]
6
+ name = "ahash"
7
+ version = "0.8.12"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
10
+ dependencies = [
11
+ "cfg-if",
12
+ "getrandom 0.3.4",
13
+ "once_cell",
14
+ "serde",
15
+ "version_check",
16
+ "zerocopy",
17
+ ]
18
+
5
19
  [[package]]
6
20
  name = "aho-corasick"
7
21
  version = "1.1.4"
@@ -11,6 +25,12 @@ dependencies = [
11
25
  "memchr",
12
26
  ]
13
27
 
28
+ [[package]]
29
+ name = "allocator-api2"
30
+ version = "0.2.21"
31
+ source = "registry+https://github.com/rust-lang/crates.io-index"
32
+ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
33
+
14
34
  [[package]]
15
35
  name = "android_system_properties"
16
36
  version = "0.1.5"
@@ -119,12 +139,33 @@ version = "0.22.1"
119
139
  source = "registry+https://github.com/rust-lang/crates.io-index"
120
140
  checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
121
141
 
142
+ [[package]]
143
+ name = "bit-set"
144
+ version = "0.8.0"
145
+ source = "registry+https://github.com/rust-lang/crates.io-index"
146
+ checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
147
+ dependencies = [
148
+ "bit-vec",
149
+ ]
150
+
151
+ [[package]]
152
+ name = "bit-vec"
153
+ version = "0.8.0"
154
+ source = "registry+https://github.com/rust-lang/crates.io-index"
155
+ checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
156
+
122
157
  [[package]]
123
158
  name = "bitflags"
124
159
  version = "2.11.1"
125
160
  source = "registry+https://github.com/rust-lang/crates.io-index"
126
161
  checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
127
162
 
163
+ [[package]]
164
+ name = "borrow-or-share"
165
+ version = "0.2.4"
166
+ source = "registry+https://github.com/rust-lang/crates.io-index"
167
+ checksum = "dc0b364ead1874514c8c2855ab558056ebfeb775653e7ae45ff72f28f8f3166c"
168
+
128
169
  [[package]]
129
170
  name = "bstr"
130
171
  version = "1.12.1"
@@ -142,6 +183,12 @@ version = "3.20.2"
142
183
  source = "registry+https://github.com/rust-lang/crates.io-index"
143
184
  checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
144
185
 
186
+ [[package]]
187
+ name = "bytecount"
188
+ version = "0.6.9"
189
+ source = "registry+https://github.com/rust-lang/crates.io-index"
190
+ checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
191
+
145
192
  [[package]]
146
193
  name = "bytes"
147
194
  version = "1.11.1"
@@ -234,6 +281,12 @@ version = "0.8.7"
234
281
  source = "registry+https://github.com/rust-lang/crates.io-index"
235
282
  checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
236
283
 
284
+ [[package]]
285
+ name = "data-encoding"
286
+ version = "2.11.0"
287
+ source = "registry+https://github.com/rust-lang/crates.io-index"
288
+ checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"
289
+
237
290
  [[package]]
238
291
  name = "deadpool"
239
292
  version = "0.12.3"
@@ -290,6 +343,15 @@ dependencies = [
290
343
  "syn",
291
344
  ]
292
345
 
346
+ [[package]]
347
+ name = "email_address"
348
+ version = "0.2.9"
349
+ source = "registry+https://github.com/rust-lang/crates.io-index"
350
+ checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449"
351
+ dependencies = [
352
+ "serde",
353
+ ]
354
+
293
355
  [[package]]
294
356
  name = "equivalent"
295
357
  version = "1.0.2"
@@ -306,6 +368,17 @@ dependencies = [
306
368
  "windows-sys 0.61.2",
307
369
  ]
308
370
 
371
+ [[package]]
372
+ name = "fancy-regex"
373
+ version = "0.18.0"
374
+ source = "registry+https://github.com/rust-lang/crates.io-index"
375
+ checksum = "e1e1dacd0d2082dfcf1351c4bdd566bbe89a2b263235a2b50058f1e130a47277"
376
+ dependencies = [
377
+ "bit-set",
378
+ "regex-automata",
379
+ "regex-syntax",
380
+ ]
381
+
309
382
  [[package]]
310
383
  name = "fastrand"
311
384
  version = "2.4.1"
@@ -327,6 +400,17 @@ dependencies = [
327
400
  "num-traits",
328
401
  ]
329
402
 
403
+ [[package]]
404
+ name = "fluent-uri"
405
+ version = "0.4.1"
406
+ source = "registry+https://github.com/rust-lang/crates.io-index"
407
+ checksum = "bc74ac4d8359ae70623506d512209619e5cf8f347124910440dbc221714b328e"
408
+ dependencies = [
409
+ "borrow-or-share",
410
+ "ref-cast",
411
+ "serde",
412
+ ]
413
+
330
414
  [[package]]
331
415
  name = "fnv"
332
416
  version = "1.0.7"
@@ -339,6 +423,12 @@ version = "0.1.5"
339
423
  source = "registry+https://github.com/rust-lang/crates.io-index"
340
424
  checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
341
425
 
426
+ [[package]]
427
+ name = "foldhash"
428
+ version = "0.2.0"
429
+ source = "registry+https://github.com/rust-lang/crates.io-index"
430
+ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
431
+
342
432
  [[package]]
343
433
  name = "form_urlencoded"
344
434
  version = "1.2.2"
@@ -348,6 +438,16 @@ dependencies = [
348
438
  "percent-encoding",
349
439
  ]
350
440
 
441
+ [[package]]
442
+ name = "fraction"
443
+ version = "0.15.4"
444
+ source = "registry+https://github.com/rust-lang/crates.io-index"
445
+ checksum = "e076045bb43dac435333ed5f04caf35c7463631d0dae2deb2638d94dd0a5b872"
446
+ dependencies = [
447
+ "lazy_static",
448
+ "num",
449
+ ]
450
+
351
451
  [[package]]
352
452
  name = "futures"
353
453
  version = "0.3.32"
@@ -501,7 +601,18 @@ version = "0.15.5"
501
601
  source = "registry+https://github.com/rust-lang/crates.io-index"
502
602
  checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
503
603
  dependencies = [
504
- "foldhash",
604
+ "foldhash 0.1.5",
605
+ ]
606
+
607
+ [[package]]
608
+ name = "hashbrown"
609
+ version = "0.16.1"
610
+ source = "registry+https://github.com/rust-lang/crates.io-index"
611
+ checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
612
+ dependencies = [
613
+ "allocator-api2",
614
+ "equivalent",
615
+ "foldhash 0.2.0",
505
616
  ]
506
617
 
507
618
  [[package]]
@@ -813,6 +924,33 @@ dependencies = [
813
924
  "wasm-bindgen",
814
925
  ]
815
926
 
927
+ [[package]]
928
+ name = "jsonschema"
929
+ version = "0.46.5"
930
+ source = "registry+https://github.com/rust-lang/crates.io-index"
931
+ checksum = "6a5fe5206f06e589caf25e79fc05ccdf91fca745685fe9fe1a13bbdfb479a631"
932
+ dependencies = [
933
+ "ahash",
934
+ "bytecount",
935
+ "data-encoding",
936
+ "email_address",
937
+ "fancy-regex",
938
+ "fraction",
939
+ "getrandom 0.3.4",
940
+ "idna",
941
+ "itoa",
942
+ "num-cmp",
943
+ "num-traits",
944
+ "percent-encoding",
945
+ "referencing",
946
+ "regex",
947
+ "regex-syntax",
948
+ "serde",
949
+ "serde_json",
950
+ "unicode-general-category",
951
+ "uuid-simd",
952
+ ]
953
+
816
954
  [[package]]
817
955
  name = "lazy_static"
818
956
  version = "1.5.0"
@@ -852,6 +990,15 @@ version = "0.8.2"
852
990
  source = "registry+https://github.com/rust-lang/crates.io-index"
853
991
  checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0"
854
992
 
993
+ [[package]]
994
+ name = "lock_api"
995
+ version = "0.4.14"
996
+ source = "registry+https://github.com/rust-lang/crates.io-index"
997
+ checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
998
+ dependencies = [
999
+ "scopeguard",
1000
+ ]
1001
+
855
1002
  [[package]]
856
1003
  name = "log"
857
1004
  version = "0.4.29"
@@ -870,6 +1017,12 @@ version = "2.8.0"
870
1017
  source = "registry+https://github.com/rust-lang/crates.io-index"
871
1018
  checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
872
1019
 
1020
+ [[package]]
1021
+ name = "micromap"
1022
+ version = "0.3.0"
1023
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1024
+ checksum = "c2a86d3146ed3995b5913c414f6664344b9617457320782e64f0bb44afd49d74"
1025
+
873
1026
  [[package]]
874
1027
  name = "mio"
875
1028
  version = "1.2.0"
@@ -887,6 +1040,76 @@ version = "0.3.0"
887
1040
  source = "registry+https://github.com/rust-lang/crates.io-index"
888
1041
  checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
889
1042
 
1043
+ [[package]]
1044
+ name = "num"
1045
+ version = "0.4.3"
1046
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1047
+ checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
1048
+ dependencies = [
1049
+ "num-bigint",
1050
+ "num-complex",
1051
+ "num-integer",
1052
+ "num-iter",
1053
+ "num-rational",
1054
+ "num-traits",
1055
+ ]
1056
+
1057
+ [[package]]
1058
+ name = "num-bigint"
1059
+ version = "0.4.6"
1060
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1061
+ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
1062
+ dependencies = [
1063
+ "num-integer",
1064
+ "num-traits",
1065
+ ]
1066
+
1067
+ [[package]]
1068
+ name = "num-cmp"
1069
+ version = "0.1.0"
1070
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1071
+ checksum = "63335b2e2c34fae2fb0aa2cecfd9f0832a1e24b3b32ecec612c3426d46dc8aaa"
1072
+
1073
+ [[package]]
1074
+ name = "num-complex"
1075
+ version = "0.4.6"
1076
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1077
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
1078
+ dependencies = [
1079
+ "num-traits",
1080
+ ]
1081
+
1082
+ [[package]]
1083
+ name = "num-integer"
1084
+ version = "0.1.46"
1085
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1086
+ checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
1087
+ dependencies = [
1088
+ "num-traits",
1089
+ ]
1090
+
1091
+ [[package]]
1092
+ name = "num-iter"
1093
+ version = "0.1.45"
1094
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1095
+ checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
1096
+ dependencies = [
1097
+ "autocfg",
1098
+ "num-integer",
1099
+ "num-traits",
1100
+ ]
1101
+
1102
+ [[package]]
1103
+ name = "num-rational"
1104
+ version = "0.4.2"
1105
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1106
+ checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
1107
+ dependencies = [
1108
+ "num-bigint",
1109
+ "num-integer",
1110
+ "num-traits",
1111
+ ]
1112
+
890
1113
  [[package]]
891
1114
  name = "num-traits"
892
1115
  version = "0.2.19"
@@ -924,6 +1147,35 @@ version = "0.2.0"
924
1147
  source = "registry+https://github.com/rust-lang/crates.io-index"
925
1148
  checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
926
1149
 
1150
+ [[package]]
1151
+ name = "outref"
1152
+ version = "0.5.2"
1153
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1154
+ checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
1155
+
1156
+ [[package]]
1157
+ name = "parking_lot"
1158
+ version = "0.12.5"
1159
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1160
+ checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
1161
+ dependencies = [
1162
+ "lock_api",
1163
+ "parking_lot_core",
1164
+ ]
1165
+
1166
+ [[package]]
1167
+ name = "parking_lot_core"
1168
+ version = "0.9.12"
1169
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1170
+ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
1171
+ dependencies = [
1172
+ "cfg-if",
1173
+ "libc",
1174
+ "redox_syscall",
1175
+ "smallvec",
1176
+ "windows-link",
1177
+ ]
1178
+
927
1179
  [[package]]
928
1180
  name = "percent-encoding"
929
1181
  version = "2.3.2"
@@ -1108,6 +1360,15 @@ dependencies = [
1108
1360
  "getrandom 0.3.4",
1109
1361
  ]
1110
1362
 
1363
+ [[package]]
1364
+ name = "redox_syscall"
1365
+ version = "0.5.18"
1366
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1367
+ checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
1368
+ dependencies = [
1369
+ "bitflags",
1370
+ ]
1371
+
1111
1372
  [[package]]
1112
1373
  name = "redox_users"
1113
1374
  version = "0.5.2"
@@ -1119,6 +1380,43 @@ dependencies = [
1119
1380
  "thiserror",
1120
1381
  ]
1121
1382
 
1383
+ [[package]]
1384
+ name = "ref-cast"
1385
+ version = "1.0.25"
1386
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1387
+ checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d"
1388
+ dependencies = [
1389
+ "ref-cast-impl",
1390
+ ]
1391
+
1392
+ [[package]]
1393
+ name = "ref-cast-impl"
1394
+ version = "1.0.25"
1395
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1396
+ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
1397
+ dependencies = [
1398
+ "proc-macro2",
1399
+ "quote",
1400
+ "syn",
1401
+ ]
1402
+
1403
+ [[package]]
1404
+ name = "referencing"
1405
+ version = "0.46.5"
1406
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1407
+ checksum = "69e4e17ef386c5383591d07623d3de49cbc601156e7582973e6db98d66a57de2"
1408
+ dependencies = [
1409
+ "ahash",
1410
+ "fluent-uri",
1411
+ "getrandom 0.3.4",
1412
+ "hashbrown 0.16.1",
1413
+ "itoa",
1414
+ "micromap",
1415
+ "parking_lot",
1416
+ "percent-encoding",
1417
+ "serde_json",
1418
+ ]
1419
+
1122
1420
  [[package]]
1123
1421
  name = "regex"
1124
1422
  version = "1.12.3"
@@ -1269,6 +1567,12 @@ version = "1.0.23"
1269
1567
  source = "registry+https://github.com/rust-lang/crates.io-index"
1270
1568
  checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
1271
1569
 
1570
+ [[package]]
1571
+ name = "scopeguard"
1572
+ version = "1.2.0"
1573
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1574
+ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1575
+
1272
1576
  [[package]]
1273
1577
  name = "semver"
1274
1578
  version = "1.0.28"
@@ -1341,7 +1645,7 @@ dependencies = [
1341
1645
 
1342
1646
  [[package]]
1343
1647
  name = "sharepoint-cli"
1344
- version = "0.0.4"
1648
+ version = "0.0.7"
1345
1649
  dependencies = [
1346
1650
  "assert_cmd",
1347
1651
  "base64",
@@ -1349,6 +1653,8 @@ dependencies = [
1349
1653
  "clap",
1350
1654
  "dirs",
1351
1655
  "futures-util",
1656
+ "httpdate",
1657
+ "jsonschema",
1352
1658
  "predicates",
1353
1659
  "reqwest",
1354
1660
  "serde",
@@ -1357,6 +1663,7 @@ dependencies = [
1357
1663
  "terminal_size",
1358
1664
  "tokio",
1359
1665
  "toml",
1666
+ "tracing",
1360
1667
  "url",
1361
1668
  "wiremock",
1362
1669
  ]
@@ -1654,9 +1961,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1654
1961
  checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
1655
1962
  dependencies = [
1656
1963
  "pin-project-lite",
1964
+ "tracing-attributes",
1657
1965
  "tracing-core",
1658
1966
  ]
1659
1967
 
1968
+ [[package]]
1969
+ name = "tracing-attributes"
1970
+ version = "0.1.31"
1971
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1972
+ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
1973
+ dependencies = [
1974
+ "proc-macro2",
1975
+ "quote",
1976
+ "syn",
1977
+ ]
1978
+
1660
1979
  [[package]]
1661
1980
  name = "tracing-core"
1662
1981
  version = "0.1.36"
@@ -1672,6 +1991,12 @@ version = "0.2.5"
1672
1991
  source = "registry+https://github.com/rust-lang/crates.io-index"
1673
1992
  checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
1674
1993
 
1994
+ [[package]]
1995
+ name = "unicode-general-category"
1996
+ version = "1.1.0"
1997
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1998
+ checksum = "0b993bddc193ae5bd0d623b49ec06ac3e9312875fdae725a975c51db1cc1677f"
1999
+
1675
2000
  [[package]]
1676
2001
  name = "unicode-ident"
1677
2002
  version = "1.0.24"
@@ -1714,6 +2039,28 @@ version = "0.2.2"
1714
2039
  source = "registry+https://github.com/rust-lang/crates.io-index"
1715
2040
  checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
1716
2041
 
2042
+ [[package]]
2043
+ name = "uuid-simd"
2044
+ version = "0.8.0"
2045
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2046
+ checksum = "23b082222b4f6619906941c17eb2297fff4c2fb96cb60164170522942a200bd8"
2047
+ dependencies = [
2048
+ "outref",
2049
+ "vsimd",
2050
+ ]
2051
+
2052
+ [[package]]
2053
+ name = "version_check"
2054
+ version = "0.9.5"
2055
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2056
+ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
2057
+
2058
+ [[package]]
2059
+ name = "vsimd"
2060
+ version = "0.8.0"
2061
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2062
+ checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
2063
+
1717
2064
  [[package]]
1718
2065
  name = "wait-timeout"
1719
2066
  version = "0.2.1"
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "sharepoint-cli"
3
- version = "0.0.4"
3
+ version = "0.0.7"
4
4
  edition = "2024"
5
5
  rust-version = "1.90"
6
6
  description = "Agent-friendly SharePoint Online CLI with JSON output, structured exit codes, and schema introspection"
@@ -28,11 +28,14 @@ terminal_size = "0.4"
28
28
  url = "2"
29
29
  futures-util = "0.3"
30
30
  chrono = { version = "0.4", default-features = false, features = ["serde", "clock"] }
31
+ httpdate = "1"
31
32
  tempfile = "3"
33
+ tracing = "0.1"
32
34
 
33
35
  [dev-dependencies]
34
36
  wiremock = "0.6"
35
37
  assert_cmd = "2"
36
38
  predicates = "3"
37
39
  serde_json = "1"
40
+ jsonschema = { version = "0.46", default-features = false }
38
41
  tokio = { version = "1", features = ["macros", "rt-multi-thread", "fs", "io-util", "time", "sync", "test-util"] }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sharepoint-cli-rs
3
- Version: 0.0.4
3
+ Version: 0.0.7
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: System Administrators
@@ -81,11 +81,16 @@ sharepoint files find <site>:<library>/ --name '*.pdf'
81
81
 
82
82
  Config lives at `$XDG_CONFIG_HOME/sharepoint/config.toml` (or `~/.config/sharepoint/config.toml`). Run `sharepoint config path` to print the resolved location.
83
83
 
84
+ You must supply two things before signing in:
85
+
86
+ - A **tenant** (your Microsoft 365 domain or tenant GUID).
87
+ - A **client_id** for an Entra public-client app you've registered. The app needs the device-code flow enabled and delegated `Files.Read.All`, `Sites.Read.All`, and `offline_access` scopes. `sharepoint init` walks you through saving both into the active profile.
88
+
84
89
  Environment overrides:
85
90
 
86
91
  - `SHAREPOINT_PROFILE` — active profile name
87
92
  - `SHAREPOINT_TENANT_ID` — tenant override
88
- - `SHAREPOINT_CLIENT_ID` — Azure AD application ID
93
+ - `SHAREPOINT_CLIENT_ID` — Entra application (client) ID — **required**
89
94
 
90
95
  ## License
91
96