@roomi-fields/notebooklm-mcp 1.5.7 → 1.5.9

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 (295) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +219 -219
  3. package/deployment/INDEX.md +0 -0
  4. package/deployment/PACKAGE-FILES.txt +180 -180
  5. package/deployment/QUICK-START.md +0 -0
  6. package/deployment/docs/01-INSTALL.md +21 -1
  7. package/deployment/docs/02-CONFIGURATION.md +0 -0
  8. package/deployment/docs/03-API.md +16 -10
  9. package/deployment/docs/04-N8N-INTEGRATION.md +0 -0
  10. package/deployment/docs/05-TROUBLESHOOTING.md +19 -1
  11. package/deployment/docs/06-NOTEBOOK-LIBRARY.md +9 -9
  12. package/deployment/docs/07-AUTO-DISCOVERY.md +6 -15
  13. package/deployment/docs/08-DOCKER.md +0 -0
  14. package/deployment/docs/08-WSL-USAGE.md +7 -7
  15. package/deployment/docs/09-MULTI-INTERFACE.md +6 -6
  16. package/deployment/docs/10-CONTENT-MANAGEMENT.md +15 -19
  17. package/deployment/docs/11-MULTI-ACCOUNT.md +1 -1
  18. package/deployment/docs/README.md +4 -50
  19. package/deployment/scripts/README.md +0 -0
  20. package/deployment/scripts/install.ps1 +114 -114
  21. package/deployment/scripts/setup-auth.ps1 +217 -217
  22. package/deployment/scripts/start-server.ps1 +72 -72
  23. package/deployment/scripts/stop-server.ps1 +51 -51
  24. package/deployment/scripts/test-api.ps1 +651 -651
  25. package/deployment/scripts/test-auth.ps1 +0 -0
  26. package/deployment/scripts/test-auto-discovery.ps1 +295 -295
  27. package/deployment/scripts/test-cors.ps1 +398 -398
  28. package/deployment/scripts/test-errors.ps1 +581 -581
  29. package/deployment/scripts/test-server.ps1 +140 -140
  30. package/deployment/scripts/test-sessions.ps1 +426 -426
  31. package/deployment/scripts/test-validation.ps1 +299 -299
  32. package/dist/accounts/account-manager.d.ts +0 -0
  33. package/dist/accounts/account-manager.d.ts.map +0 -0
  34. package/dist/accounts/account-manager.js +0 -0
  35. package/dist/accounts/account-manager.js.map +0 -0
  36. package/dist/accounts/auto-login-manager.d.ts +0 -0
  37. package/dist/accounts/auto-login-manager.d.ts.map +0 -0
  38. package/dist/accounts/auto-login-manager.js +0 -0
  39. package/dist/accounts/auto-login-manager.js.map +0 -0
  40. package/dist/accounts/crypto.d.ts +0 -0
  41. package/dist/accounts/crypto.d.ts.map +0 -0
  42. package/dist/accounts/crypto.js +0 -0
  43. package/dist/accounts/crypto.js.map +0 -0
  44. package/dist/accounts/index.d.ts +0 -0
  45. package/dist/accounts/index.d.ts.map +0 -0
  46. package/dist/accounts/index.js +0 -0
  47. package/dist/accounts/index.js.map +0 -0
  48. package/dist/accounts/types.d.ts +0 -0
  49. package/dist/accounts/types.d.ts.map +0 -0
  50. package/dist/accounts/types.js +0 -0
  51. package/dist/accounts/types.js.map +0 -0
  52. package/dist/auth/auth-manager.d.ts +0 -0
  53. package/dist/auth/auth-manager.d.ts.map +0 -0
  54. package/dist/auth/auth-manager.js +0 -0
  55. package/dist/auth/auth-manager.js.map +0 -0
  56. package/dist/auto-discovery/auto-discovery.d.ts +0 -0
  57. package/dist/auto-discovery/auto-discovery.d.ts.map +0 -0
  58. package/dist/auto-discovery/auto-discovery.js +0 -0
  59. package/dist/auto-discovery/auto-discovery.js.map +0 -0
  60. package/dist/cli/accounts.d.ts +0 -0
  61. package/dist/cli/accounts.d.ts.map +0 -0
  62. package/dist/cli/accounts.js +0 -0
  63. package/dist/cli/accounts.js.map +0 -0
  64. package/dist/cli/de-auth.d.ts +0 -0
  65. package/dist/cli/de-auth.d.ts.map +0 -0
  66. package/dist/cli/de-auth.js +0 -0
  67. package/dist/cli/de-auth.js.map +0 -0
  68. package/dist/cli/help.d.ts +0 -0
  69. package/dist/cli/help.d.ts.map +0 -0
  70. package/dist/cli/help.js +5 -0
  71. package/dist/cli/help.js.map +1 -1
  72. package/dist/cli/setup-auth.d.ts +0 -0
  73. package/dist/cli/setup-auth.d.ts.map +0 -0
  74. package/dist/cli/setup-auth.js +0 -0
  75. package/dist/cli/setup-auth.js.map +0 -0
  76. package/dist/config.d.ts +0 -0
  77. package/dist/config.d.ts.map +0 -0
  78. package/dist/config.js +0 -0
  79. package/dist/config.js.map +0 -0
  80. package/dist/content/content-generator.d.ts +0 -0
  81. package/dist/content/content-generator.d.ts.map +0 -0
  82. package/dist/content/content-generator.js +0 -0
  83. package/dist/content/content-generator.js.map +0 -0
  84. package/dist/content/content-manager.d.ts +8 -0
  85. package/dist/content/content-manager.d.ts.map +1 -1
  86. package/dist/content/content-manager.js +411 -67
  87. package/dist/content/content-manager.js.map +1 -1
  88. package/dist/content/content-templates.d.ts +0 -0
  89. package/dist/content/content-templates.d.ts.map +0 -0
  90. package/dist/content/content-templates.js +0 -0
  91. package/dist/content/content-templates.js.map +0 -0
  92. package/dist/content/index.d.ts +0 -0
  93. package/dist/content/index.d.ts.map +0 -0
  94. package/dist/content/index.js +0 -0
  95. package/dist/content/index.js.map +0 -0
  96. package/dist/content/types.d.ts +0 -0
  97. package/dist/content/types.d.ts.map +0 -0
  98. package/dist/content/types.js +0 -0
  99. package/dist/content/types.js.map +0 -0
  100. package/dist/errors.d.ts +0 -0
  101. package/dist/errors.d.ts.map +0 -0
  102. package/dist/errors.js +0 -0
  103. package/dist/errors.js.map +0 -0
  104. package/dist/http-wrapper.d.ts +0 -0
  105. package/dist/http-wrapper.d.ts.map +0 -0
  106. package/dist/http-wrapper.js +0 -0
  107. package/dist/http-wrapper.js.map +0 -0
  108. package/dist/i18n/en.json +0 -0
  109. package/dist/i18n/fr.json +0 -0
  110. package/dist/i18n/index.d.ts +0 -0
  111. package/dist/i18n/index.d.ts.map +0 -0
  112. package/dist/i18n/index.js +0 -0
  113. package/dist/i18n/index.js.map +0 -0
  114. package/dist/index.d.ts +0 -0
  115. package/dist/index.d.ts.map +0 -0
  116. package/dist/index.js +8 -3
  117. package/dist/index.js.map +1 -1
  118. package/dist/library/notebook-library.d.ts +0 -0
  119. package/dist/library/notebook-library.d.ts.map +0 -0
  120. package/dist/library/notebook-library.js +0 -0
  121. package/dist/library/notebook-library.js.map +0 -0
  122. package/dist/library/types.d.ts +0 -0
  123. package/dist/library/types.d.ts.map +0 -0
  124. package/dist/library/types.js +0 -0
  125. package/dist/library/types.js.map +0 -0
  126. package/dist/session/browser-session.d.ts +12 -0
  127. package/dist/session/browser-session.d.ts.map +1 -1
  128. package/dist/session/browser-session.js +156 -32
  129. package/dist/session/browser-session.js.map +1 -1
  130. package/dist/session/session-manager.d.ts +0 -0
  131. package/dist/session/session-manager.d.ts.map +0 -0
  132. package/dist/session/session-manager.js +0 -0
  133. package/dist/session/session-manager.js.map +0 -0
  134. package/dist/session/shared-context-manager.d.ts +0 -0
  135. package/dist/session/shared-context-manager.d.ts.map +0 -0
  136. package/dist/session/shared-context-manager.js +0 -0
  137. package/dist/session/shared-context-manager.js.map +0 -0
  138. package/dist/startup/startup-manager.d.ts +0 -0
  139. package/dist/startup/startup-manager.d.ts.map +0 -0
  140. package/dist/startup/startup-manager.js +0 -0
  141. package/dist/startup/startup-manager.js.map +0 -0
  142. package/dist/stdio-http-proxy.d.ts +0 -0
  143. package/dist/stdio-http-proxy.d.ts.map +0 -0
  144. package/dist/stdio-http-proxy.js +7 -2
  145. package/dist/stdio-http-proxy.js.map +1 -1
  146. package/dist/tools/index.d.ts +0 -0
  147. package/dist/tools/index.d.ts.map +0 -0
  148. package/dist/tools/index.js +0 -0
  149. package/dist/tools/index.js.map +0 -0
  150. package/dist/types.d.ts +0 -0
  151. package/dist/types.d.ts.map +0 -0
  152. package/dist/types.js +0 -0
  153. package/dist/types.js.map +0 -0
  154. package/dist/utils/citation-extractor.d.ts +0 -0
  155. package/dist/utils/citation-extractor.d.ts.map +0 -0
  156. package/dist/utils/citation-extractor.js +67 -67
  157. package/dist/utils/citation-extractor.js.map +0 -0
  158. package/dist/utils/cleanup-manager.d.ts +0 -0
  159. package/dist/utils/cleanup-manager.d.ts.map +0 -0
  160. package/dist/utils/cleanup-manager.js +0 -0
  161. package/dist/utils/cleanup-manager.js.map +0 -0
  162. package/dist/utils/logger.d.ts +0 -0
  163. package/dist/utils/logger.d.ts.map +0 -0
  164. package/dist/utils/logger.js +0 -0
  165. package/dist/utils/logger.js.map +0 -0
  166. package/dist/utils/page-utils.d.ts +5 -0
  167. package/dist/utils/page-utils.d.ts.map +1 -1
  168. package/dist/utils/page-utils.js +73 -15
  169. package/dist/utils/page-utils.js.map +1 -1
  170. package/dist/utils/stealth-utils.d.ts +0 -0
  171. package/dist/utils/stealth-utils.d.ts.map +0 -0
  172. package/dist/utils/stealth-utils.js +0 -0
  173. package/dist/utils/stealth-utils.js.map +0 -0
  174. package/docs/ADDING_A_LANGUAGE.md +0 -0
  175. package/docs/ARCHITECTURE_MIGRATION_STUDY.md +0 -0
  176. package/docs/CHROME_PROFILE_LIMITATION.md +0 -0
  177. package/docs/MULTI_ACCOUNT_SYSTEM.md +0 -0
  178. package/package.json +5 -2
  179. package/scripts/archive/add-and-activate-notebook.ps1 +4 -4
  180. package/scripts/archive/add-new-notebook.ps1 +4 -4
  181. package/scripts/archive/add-rom1pey.ps1 +2 -2
  182. package/scripts/archive/add-rpmonster.ps1 +2 -2
  183. package/scripts/archive/add-source-debug.ps1 +1 -1
  184. package/scripts/archive/add-source-e2e.ps1 +1 -1
  185. package/scripts/archive/add-source-visible.ps1 +1 -1
  186. package/scripts/archive/add-test-notebook.ps1 +1 -1
  187. package/scripts/archive/add-test-source.ps1 +1 -1
  188. package/scripts/archive/capture-screen.ps1 +1 -1
  189. package/scripts/archive/change-language.mjs +4 -3
  190. package/scripts/archive/change-language.ts +5 -3
  191. package/scripts/archive/check-account.ps1 +0 -0
  192. package/scripts/archive/check-notebook-2.ps1 +0 -0
  193. package/scripts/archive/check-test-notebook.ps1 +0 -0
  194. package/scripts/archive/create-notebook-auto.ps1 +0 -0
  195. package/scripts/archive/create-notebook.ps1 +2 -2
  196. package/scripts/archive/create-rom1pey-notebook.ps1 +2 -2
  197. package/scripts/archive/create-rom1pey.ps1 +2 -2
  198. package/scripts/archive/create-test-notebook-fresh.ps1 +0 -0
  199. package/scripts/archive/create-test-notebook.ps1 +0 -0
  200. package/scripts/archive/debug-add-source-auto.ps1 +0 -0
  201. package/scripts/archive/debug-add-source.ps1 +0 -0
  202. package/scripts/archive/debug-add-text-source.ps1 +4 -4
  203. package/scripts/archive/debug-home.ps1 +0 -0
  204. package/scripts/archive/debug-selectors.ps1 +1 -1
  205. package/scripts/archive/debug-sources-panel.ps1 +0 -0
  206. package/scripts/archive/debug-ui.ps1 +0 -0
  207. package/scripts/archive/discover-home.ps1 +2 -2
  208. package/scripts/archive/kill-automation-chrome.ps1 +0 -0
  209. package/scripts/archive/list-my-notebooks.ps1 +0 -0
  210. package/scripts/archive/navigate-home-visible.ps1 +1 -1
  211. package/scripts/archive/navigate-home.ps1 +1 -1
  212. package/scripts/archive/run-e2e-english.ps1 +3 -3
  213. package/scripts/archive/run-e2e-rom1pey-v2.ps1 +4 -4
  214. package/scripts/archive/run-e2e-rom1pey.ps1 +4 -4
  215. package/scripts/archive/setup-english-test.ps1 +6 -6
  216. package/scripts/archive/setup-test-notebook.ps1 +1 -1
  217. package/scripts/archive/simple-add-source.ps1 +1 -1
  218. package/scripts/archive/t10.ps1 +1 -1
  219. package/scripts/archive/t20.ps1 +1 -1
  220. package/scripts/archive/t30.ps1 +1 -1
  221. package/scripts/archive/t31.ps1 +1 -1
  222. package/scripts/archive/t32.ps1 +1 -1
  223. package/scripts/archive/t39.ps1 +0 -0
  224. package/scripts/archive/t40.ps1 +0 -0
  225. package/scripts/archive/t53.ps1 +1 -1
  226. package/scripts/archive/t54.ps1 +0 -0
  227. package/scripts/archive/t55.ps1 +0 -0
  228. package/scripts/archive/t9.ps1 +0 -0
  229. package/scripts/archive/test-access.ps1 +1 -1
  230. package/scripts/archive/test-add-delete-source.ps1 +4 -4
  231. package/scripts/archive/test-add-source-visible.ps1 +1 -1
  232. package/scripts/archive/test-add-source.ps1 +1 -1
  233. package/scripts/archive/test-add-text-debug.ps1 +2 -2
  234. package/scripts/archive/test-add-text-source.ps1 +0 -0
  235. package/scripts/archive/test-add-url-source.ps1 +0 -0
  236. package/scripts/archive/test-ask-ascii.ps1 +0 -0
  237. package/scripts/archive/test-ask-cnv.ps1 +0 -0
  238. package/scripts/archive/test-ask-headed.ps1 +1 -1
  239. package/scripts/archive/test-ask-ifs.ps1 +0 -0
  240. package/scripts/archive/test-ask-now.ps1 +0 -0
  241. package/scripts/archive/test-ask-real.ps1 +0 -0
  242. package/scripts/archive/test-ask-visible.ps1 +0 -0
  243. package/scripts/archive/test-create-notebook.ps1 +0 -0
  244. package/scripts/archive/test-create-then-add.ps1 +0 -0
  245. package/scripts/archive/test-delete-source.ps1 +4 -4
  246. package/scripts/archive/test-e2e-notebook.ps1 +2 -2
  247. package/scripts/archive/test-english-notebook.ps1 +4 -4
  248. package/scripts/archive/test-english.ps1 +1 -1
  249. package/scripts/archive/test-full-custom-instructions.ps1 +1 -1
  250. package/scripts/archive/test-full-infographic.ps1 +1 -1
  251. package/scripts/archive/test-full-language.ps1 +1 -1
  252. package/scripts/archive/test-full-presentation.ps1 +1 -1
  253. package/scripts/archive/test-full-report.ps1 +1 -1
  254. package/scripts/archive/test-full-source-selection.ps1 +1 -1
  255. package/scripts/archive/test-full-video-brief.ps1 +1 -1
  256. package/scripts/archive/test-full-video-explainer.ps1 +1 -1
  257. package/scripts/archive/test-full-video-styles.ps1 +1 -1
  258. package/scripts/archive/test-generate-report.ps1 +0 -0
  259. package/scripts/archive/test-generate-study-guide.ps1 +0 -0
  260. package/scripts/archive/test-headed-ask.ps1 +1 -1
  261. package/scripts/archive/test-headed-now.ps1 +2 -2
  262. package/scripts/archive/test-headed.ps1 +2 -2
  263. package/scripts/archive/test-hello.ps1 +1 -1
  264. package/scripts/archive/test-i18n-studio.ps1 +0 -0
  265. package/scripts/archive/test-i18n.ps1 +0 -0
  266. package/scripts/archive/test-manual-headed.ps1 +1 -1
  267. package/scripts/archive/test-mathieu-quota.ps1 +1 -1
  268. package/scripts/archive/test-notebook-1.ps1 +0 -0
  269. package/scripts/archive/test-notebook-2-sources.ps1 +0 -0
  270. package/scripts/archive/test-notebook1.ps1 +0 -0
  271. package/scripts/archive/test-personal-notebook.ps1 +1 -1
  272. package/scripts/archive/test-rate-limit.ps1 +1 -1
  273. package/scripts/archive/test-real-ask.ps1 +1 -1
  274. package/scripts/archive/test-real-ask2.ps1 +1 -1
  275. package/scripts/archive/test-rom1pey.ps1 +1 -1
  276. package/scripts/archive/test-rotation-complete.ps1 +1 -1
  277. package/scripts/archive/test-rotation.ps1 +2 -2
  278. package/scripts/archive/test-show-browser.ps1 +1 -1
  279. package/scripts/archive/test-update-notebook.ps1 +1 -1
  280. package/scripts/archive/verify-language-slow.ps1 +1 -1
  281. package/scripts/archive/verify-language.ps1 +1 -1
  282. package/scripts/check-server.ps1 +0 -0
  283. package/scripts/docker-entrypoint.sh +25 -25
  284. package/scripts/doctor.mjs +257 -0
  285. package/scripts/mcp-proxy-hidden.ps1 +0 -0
  286. package/scripts/mcp-wsl-helper.sh +146 -146
  287. package/scripts/start-server-hidden.vbs +13 -10
  288. package/scripts/start-server.ps1 +1 -1
  289. package/scripts/start-vnc.sh +0 -0
  290. package/scripts/stop-server.bat +0 -0
  291. package/scripts/stop-server.ps1 +0 -0
  292. package/scripts/switch-account-language.sh +87 -128
  293. package/scripts/test-account.ps1 +0 -0
  294. package/docs/archive/auto-discovery-complet.md +0 -906
  295. package/scripts/add-totp.ts +0 -110
@@ -1,299 +1,299 @@
1
- #!/usr/bin/env pwsh
2
- #Requires -Version 5.1
3
-
4
- <#
5
- .SYNOPSIS
6
- Zod schema validation testing script for NotebookLM MCP HTTP Server API
7
-
8
- .DESCRIPTION
9
- Tests all Zod validation schemas to ensure proper input validation:
10
- - AskQuestionSchema
11
- - AddNotebookSchema
12
- - UpdateNotebookSchema
13
- - AutoDiscoverSchema
14
- - CleanupDataSchema
15
- - ShowBrowserSchema
16
-
17
- .PARAMETER BaseUrl
18
- Base URL of the server (default: http://localhost:3000)
19
-
20
- .EXAMPLE
21
- .\test-validation.ps1
22
- Runs all validation tests
23
-
24
- .NOTES
25
- Prerequisite: The server must be started
26
- #>
27
-
28
- param(
29
- [string]$BaseUrl = "http://localhost:3000"
30
- )
31
-
32
- # Colors for logs
33
- function Write-TestHeader {
34
- param([string]$Message, [int]$Number, [int]$Total)
35
- Write-Host "`n" -NoNewline
36
- Write-Host "═══════════════════════════════════════════════════════" -ForegroundColor Magenta
37
- Write-Host " [$Number/$Total] $Message" -ForegroundColor Cyan
38
- Write-Host "═══════════════════════════════════════════════════════" -ForegroundColor Magenta
39
- }
40
-
41
- function Write-Success {
42
- param([string]$Message)
43
- Write-Host "✓ $Message" -ForegroundColor Green
44
- }
45
-
46
- function Write-Info {
47
- param([string]$Message)
48
- Write-Host "ℹ $Message" -ForegroundColor Yellow
49
- }
50
-
51
- function Write-ErrorExpected {
52
- param([string]$Message)
53
- Write-Host "✓ Expected error: $Message" -ForegroundColor Green
54
- }
55
-
56
- function Write-ErrorUnexpected {
57
- param([string]$Message)
58
- Write-Host "✗ Unexpected: $Message" -ForegroundColor Red
59
- }
60
-
61
- # Helper function to test validation
62
- function Test-ValidationError {
63
- param(
64
- [string]$Endpoint,
65
- [string]$Method,
66
- [hashtable]$Body,
67
- [string]$ExpectedPattern,
68
- [string]$Description
69
- )
70
-
71
- try {
72
- $jsonBody = $Body | ConvertTo-Json -Depth 5
73
- $result = Invoke-RestMethod -Uri "$BaseUrl$Endpoint" -Method $Method -Body $jsonBody -ContentType "application/json" -TimeoutSec 10
74
-
75
- # If no HTTP exception, check for success: false
76
- if ($result.success -eq $false -and $result.error -like $ExpectedPattern) {
77
- Write-ErrorExpected "$($result.error.Substring(0, [Math]::Min(80, $result.error.Length)))..."
78
- return $true
79
- }
80
- Write-ErrorUnexpected "Should have returned validation error for: $Description"
81
- return $false
82
- } catch {
83
- $statusCode = $_.Exception.Response.StatusCode
84
- if ($statusCode -eq 400 -or $statusCode -eq 'BadRequest') {
85
- $errorResponse = $_.ErrorDetails.Message | ConvertFrom-Json
86
- if ($errorResponse.error -like $ExpectedPattern) {
87
- Write-ErrorExpected "$($errorResponse.error.Substring(0, [Math]::Min(80, $errorResponse.error.Length)))..."
88
- return $true
89
- }
90
- Write-ErrorUnexpected "Error message doesn't match pattern: $($errorResponse.error)"
91
- return $false
92
- }
93
- Write-ErrorUnexpected "Unexpected HTTP status: $statusCode"
94
- return $false
95
- }
96
- }
97
-
98
- # Banner
99
- Clear-Host
100
- Write-Host "`n" -NoNewline
101
- Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Magenta
102
- Write-Host "║ ║" -ForegroundColor Magenta
103
- Write-Host "║ ZOD VALIDATION TESTS - HTTP API ║" -ForegroundColor Cyan
104
- Write-Host "║ ║" -ForegroundColor Magenta
105
- Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Magenta
106
- Write-Host ""
107
-
108
- # Check that the server is accessible
109
- Write-Host "Checking connection to server..." -ForegroundColor Yellow
110
- try {
111
- $null = Invoke-RestMethod -Uri "$BaseUrl/health" -TimeoutSec 5
112
- Write-Success "Server accessible at $BaseUrl"
113
- } catch {
114
- Write-ErrorUnexpected "Unable to connect to server at $BaseUrl"
115
- Write-Host "Make sure the server is started" -ForegroundColor Yellow
116
- exit 1
117
- }
118
-
119
- $TotalTests = 18
120
- $PassedTests = 0
121
- $FailedTests = 0
122
-
123
- # =============================================================================
124
- # ASK QUESTION SCHEMA TESTS
125
- # =============================================================================
126
-
127
- Write-TestHeader "POST /ask - Empty question string" 1 $TotalTests
128
- if (Test-ValidationError -Endpoint "/ask" -Method "Post" -Body @{ question = "" } -ExpectedPattern "*question*empty*" -Description "empty question") {
129
- $PassedTests++
130
- } else { $FailedTests++ }
131
-
132
- Write-TestHeader "POST /ask - Question wrong type (number)" 2 $TotalTests
133
- if (Test-ValidationError -Endpoint "/ask" -Method "Post" -Body @{ question = 123 } -ExpectedPattern "*question*" -Description "question as number") {
134
- $PassedTests++
135
- } else { $FailedTests++ }
136
-
137
- Write-TestHeader "POST /ask - Invalid notebook_url format" 3 $TotalTests
138
- if (Test-ValidationError -Endpoint "/ask" -Method "Post" -Body @{ question = "test"; notebook_url = "not-a-url" } -ExpectedPattern "*url*" -Description "invalid URL") {
139
- $PassedTests++
140
- } else { $FailedTests++ }
141
-
142
- Write-TestHeader "POST /ask - show_browser wrong type (string)" 4 $TotalTests
143
- if (Test-ValidationError -Endpoint "/ask" -Method "Post" -Body @{ question = "test"; show_browser = "yes" } -ExpectedPattern "*show_browser*" -Description "show_browser as string") {
144
- $PassedTests++
145
- } else { $FailedTests++ }
146
-
147
- # =============================================================================
148
- # ADD NOTEBOOK SCHEMA TESTS
149
- # =============================================================================
150
-
151
- Write-TestHeader "POST /notebooks - Empty name" 5 $TotalTests
152
- if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
153
- url = "https://notebooklm.google.com/notebook/test"
154
- name = ""
155
- description = "Test"
156
- topics = @("test")
157
- } -ExpectedPattern "*name*empty*" -Description "empty name") {
158
- $PassedTests++
159
- } else { $FailedTests++ }
160
-
161
- Write-TestHeader "POST /notebooks - Empty description" 6 $TotalTests
162
- if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
163
- url = "https://notebooklm.google.com/notebook/test"
164
- name = "Test"
165
- description = ""
166
- topics = @("test")
167
- } -ExpectedPattern "*description*empty*" -Description "empty description") {
168
- $PassedTests++
169
- } else { $FailedTests++ }
170
-
171
- Write-TestHeader "POST /notebooks - Empty topics array" 7 $TotalTests
172
- if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
173
- url = "https://notebooklm.google.com/notebook/test"
174
- name = "Test"
175
- description = "Test description"
176
- topics = @()
177
- } -ExpectedPattern "*topic*" -Description "empty topics array") {
178
- $PassedTests++
179
- } else { $FailedTests++ }
180
-
181
- Write-TestHeader "POST /notebooks - URL not NotebookLM domain" 8 $TotalTests
182
- if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
183
- url = "https://google.com/notebook/test"
184
- name = "Test"
185
- description = "Test description"
186
- topics = @("test")
187
- } -ExpectedPattern "*NotebookLM*" -Description "wrong domain") {
188
- $PassedTests++
189
- } else { $FailedTests++ }
190
-
191
- Write-TestHeader "POST /notebooks - Invalid URL format" 9 $TotalTests
192
- if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
193
- url = "not-a-valid-url"
194
- name = "Test"
195
- description = "Test description"
196
- topics = @("test")
197
- } -ExpectedPattern "*url*" -Description "invalid URL format") {
198
- $PassedTests++
199
- } else { $FailedTests++ }
200
-
201
- Write-TestHeader "POST /notebooks - topics wrong type (string)" 10 $TotalTests
202
- if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
203
- url = "https://notebooklm.google.com/notebook/test"
204
- name = "Test"
205
- description = "Test description"
206
- topics = "single-topic"
207
- } -ExpectedPattern "*topics*array*" -Description "topics as string") {
208
- $PassedTests++
209
- } else { $FailedTests++ }
210
-
211
- # =============================================================================
212
- # UPDATE NOTEBOOK SCHEMA TESTS
213
- # =============================================================================
214
-
215
- Write-TestHeader "PUT /notebooks/:id - Empty name (when provided)" 11 $TotalTests
216
- if (Test-ValidationError -Endpoint "/notebooks/test-id" -Method "Put" -Body @{ name = "" } -ExpectedPattern "*name*" -Description "empty name update") {
217
- $PassedTests++
218
- } else { $FailedTests++ }
219
-
220
- Write-TestHeader "PUT /notebooks/:id - Empty description (when provided)" 12 $TotalTests
221
- if (Test-ValidationError -Endpoint "/notebooks/test-id" -Method "Put" -Body @{ description = "" } -ExpectedPattern "*description*" -Description "empty description update") {
222
- $PassedTests++
223
- } else { $FailedTests++ }
224
-
225
- # =============================================================================
226
- # AUTO-DISCOVER SCHEMA TESTS
227
- # =============================================================================
228
-
229
- Write-TestHeader "POST /notebooks/auto-discover - Missing URL" 13 $TotalTests
230
- if (Test-ValidationError -Endpoint "/notebooks/auto-discover" -Method "Post" -Body @{} -ExpectedPattern "*url*" -Description "missing URL") {
231
- $PassedTests++
232
- } else { $FailedTests++ }
233
-
234
- Write-TestHeader "POST /notebooks/auto-discover - Invalid URL" 14 $TotalTests
235
- if (Test-ValidationError -Endpoint "/notebooks/auto-discover" -Method "Post" -Body @{ url = "not-a-url" } -ExpectedPattern "*url*" -Description "invalid URL") {
236
- $PassedTests++
237
- } else { $FailedTests++ }
238
-
239
- Write-TestHeader "POST /notebooks/auto-discover - Wrong domain" 15 $TotalTests
240
- if (Test-ValidationError -Endpoint "/notebooks/auto-discover" -Method "Post" -Body @{ url = "https://example.com/notebook" } -ExpectedPattern "*NotebookLM*" -Description "wrong domain") {
241
- $PassedTests++
242
- } else { $FailedTests++ }
243
-
244
- # =============================================================================
245
- # CLEANUP DATA SCHEMA TESTS
246
- # =============================================================================
247
-
248
- Write-TestHeader "POST /cleanup-data - Missing confirm" 16 $TotalTests
249
- if (Test-ValidationError -Endpoint "/cleanup-data" -Method "Post" -Body @{} -ExpectedPattern "*confirm*" -Description "missing confirm") {
250
- $PassedTests++
251
- } else { $FailedTests++ }
252
-
253
- Write-TestHeader "POST /cleanup-data - confirm wrong type (string)" 17 $TotalTests
254
- if (Test-ValidationError -Endpoint "/cleanup-data" -Method "Post" -Body @{ confirm = "yes" } -ExpectedPattern "*confirm*" -Description "confirm as string") {
255
- $PassedTests++
256
- } else { $FailedTests++ }
257
-
258
- Write-TestHeader "POST /cleanup-data - preserve_library wrong type" 18 $TotalTests
259
- if (Test-ValidationError -Endpoint "/cleanup-data" -Method "Post" -Body @{ confirm = $true; preserve_library = "yes" } -ExpectedPattern "*preserve_library*" -Description "preserve_library as string") {
260
- $PassedTests++
261
- } else { $FailedTests++ }
262
-
263
- # =============================================================================
264
- # FINAL SUMMARY
265
- # =============================================================================
266
- Write-Host "`n" -NoNewline
267
- Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Magenta
268
- Write-Host "║ ║" -ForegroundColor Magenta
269
- Write-Host "║ VALIDATION TEST SUMMARY ║" -ForegroundColor Cyan
270
- Write-Host "║ ║" -ForegroundColor Magenta
271
- Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Magenta
272
- Write-Host ""
273
-
274
- $TotalExecuted = $PassedTests + $FailedTests
275
- $SuccessRate = if ($TotalExecuted -gt 0) { [math]::Round(($PassedTests / $TotalExecuted) * 100, 1) } else { 0 }
276
-
277
- Write-Host "Total tests: $TotalTests" -ForegroundColor White
278
- Write-Host "Tests passed: " -NoNewline -ForegroundColor White
279
- Write-Host "$PassedTests" -ForegroundColor Green
280
- Write-Host "Tests failed: " -NoNewline -ForegroundColor White
281
- Write-Host "$FailedTests" -ForegroundColor $(if($FailedTests -gt 0){"Red"}else{"Green"})
282
- Write-Host "Success rate: " -NoNewline -ForegroundColor White
283
- Write-Host "$SuccessRate%" -ForegroundColor $(if($SuccessRate -eq 100){"Green"}elseif($SuccessRate -ge 80){"Yellow"}else{"Red"})
284
-
285
- Write-Host ""
286
-
287
- if ($FailedTests -eq 0) {
288
- Write-Host "════════════════════════════════════════════════════════" -ForegroundColor Green
289
- Write-Host " ✓ ALL VALIDATION SCHEMAS WORKING CORRECTLY!" -ForegroundColor Green
290
- Write-Host "════════════════════════════════════════════════════════" -ForegroundColor Green
291
- exit 0
292
- } else {
293
- Write-Host "════════════════════════════════════════════════════════" -ForegroundColor Yellow
294
- Write-Host " ⚠ SOME VALIDATION TESTS FAILED" -ForegroundColor Yellow
295
- Write-Host "════════════════════════════════════════════════════════" -ForegroundColor Yellow
296
- Write-Host ""
297
- Write-Host "See details above to identify the issues." -ForegroundColor Yellow
298
- exit 1
299
- }
1
+ #!/usr/bin/env pwsh
2
+ #Requires -Version 5.1
3
+
4
+ <#
5
+ .SYNOPSIS
6
+ Zod schema validation testing script for NotebookLM MCP HTTP Server API
7
+
8
+ .DESCRIPTION
9
+ Tests all Zod validation schemas to ensure proper input validation:
10
+ - AskQuestionSchema
11
+ - AddNotebookSchema
12
+ - UpdateNotebookSchema
13
+ - AutoDiscoverSchema
14
+ - CleanupDataSchema
15
+ - ShowBrowserSchema
16
+
17
+ .PARAMETER BaseUrl
18
+ Base URL of the server (default: http://localhost:3000)
19
+
20
+ .EXAMPLE
21
+ .\test-validation.ps1
22
+ Runs all validation tests
23
+
24
+ .NOTES
25
+ Prerequisite: The server must be started
26
+ #>
27
+
28
+ param(
29
+ [string]$BaseUrl = "http://localhost:3000"
30
+ )
31
+
32
+ # Colors for logs
33
+ function Write-TestHeader {
34
+ param([string]$Message, [int]$Number, [int]$Total)
35
+ Write-Host "`n" -NoNewline
36
+ Write-Host "═══════════════════════════════════════════════════════" -ForegroundColor Magenta
37
+ Write-Host " [$Number/$Total] $Message" -ForegroundColor Cyan
38
+ Write-Host "═══════════════════════════════════════════════════════" -ForegroundColor Magenta
39
+ }
40
+
41
+ function Write-Success {
42
+ param([string]$Message)
43
+ Write-Host "✓ $Message" -ForegroundColor Green
44
+ }
45
+
46
+ function Write-Info {
47
+ param([string]$Message)
48
+ Write-Host "ℹ $Message" -ForegroundColor Yellow
49
+ }
50
+
51
+ function Write-ErrorExpected {
52
+ param([string]$Message)
53
+ Write-Host "✓ Expected error: $Message" -ForegroundColor Green
54
+ }
55
+
56
+ function Write-ErrorUnexpected {
57
+ param([string]$Message)
58
+ Write-Host "✗ Unexpected: $Message" -ForegroundColor Red
59
+ }
60
+
61
+ # Helper function to test validation
62
+ function Test-ValidationError {
63
+ param(
64
+ [string]$Endpoint,
65
+ [string]$Method,
66
+ [hashtable]$Body,
67
+ [string]$ExpectedPattern,
68
+ [string]$Description
69
+ )
70
+
71
+ try {
72
+ $jsonBody = $Body | ConvertTo-Json -Depth 5
73
+ $result = Invoke-RestMethod -Uri "$BaseUrl$Endpoint" -Method $Method -Body $jsonBody -ContentType "application/json" -TimeoutSec 10
74
+
75
+ # If no HTTP exception, check for success: false
76
+ if ($result.success -eq $false -and $result.error -like $ExpectedPattern) {
77
+ Write-ErrorExpected "$($result.error.Substring(0, [Math]::Min(80, $result.error.Length)))..."
78
+ return $true
79
+ }
80
+ Write-ErrorUnexpected "Should have returned validation error for: $Description"
81
+ return $false
82
+ } catch {
83
+ $statusCode = $_.Exception.Response.StatusCode
84
+ if ($statusCode -eq 400 -or $statusCode -eq 'BadRequest') {
85
+ $errorResponse = $_.ErrorDetails.Message | ConvertFrom-Json
86
+ if ($errorResponse.error -like $ExpectedPattern) {
87
+ Write-ErrorExpected "$($errorResponse.error.Substring(0, [Math]::Min(80, $errorResponse.error.Length)))..."
88
+ return $true
89
+ }
90
+ Write-ErrorUnexpected "Error message doesn't match pattern: $($errorResponse.error)"
91
+ return $false
92
+ }
93
+ Write-ErrorUnexpected "Unexpected HTTP status: $statusCode"
94
+ return $false
95
+ }
96
+ }
97
+
98
+ # Banner
99
+ Clear-Host
100
+ Write-Host "`n" -NoNewline
101
+ Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Magenta
102
+ Write-Host "║ ║" -ForegroundColor Magenta
103
+ Write-Host "║ ZOD VALIDATION TESTS - HTTP API ║" -ForegroundColor Cyan
104
+ Write-Host "║ ║" -ForegroundColor Magenta
105
+ Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Magenta
106
+ Write-Host ""
107
+
108
+ # Check that the server is accessible
109
+ Write-Host "Checking connection to server..." -ForegroundColor Yellow
110
+ try {
111
+ $null = Invoke-RestMethod -Uri "$BaseUrl/health" -TimeoutSec 5
112
+ Write-Success "Server accessible at $BaseUrl"
113
+ } catch {
114
+ Write-ErrorUnexpected "Unable to connect to server at $BaseUrl"
115
+ Write-Host "Make sure the server is started" -ForegroundColor Yellow
116
+ exit 1
117
+ }
118
+
119
+ $TotalTests = 18
120
+ $PassedTests = 0
121
+ $FailedTests = 0
122
+
123
+ # =============================================================================
124
+ # ASK QUESTION SCHEMA TESTS
125
+ # =============================================================================
126
+
127
+ Write-TestHeader "POST /ask - Empty question string" 1 $TotalTests
128
+ if (Test-ValidationError -Endpoint "/ask" -Method "Post" -Body @{ question = "" } -ExpectedPattern "*question*empty*" -Description "empty question") {
129
+ $PassedTests++
130
+ } else { $FailedTests++ }
131
+
132
+ Write-TestHeader "POST /ask - Question wrong type (number)" 2 $TotalTests
133
+ if (Test-ValidationError -Endpoint "/ask" -Method "Post" -Body @{ question = 123 } -ExpectedPattern "*question*" -Description "question as number") {
134
+ $PassedTests++
135
+ } else { $FailedTests++ }
136
+
137
+ Write-TestHeader "POST /ask - Invalid notebook_url format" 3 $TotalTests
138
+ if (Test-ValidationError -Endpoint "/ask" -Method "Post" -Body @{ question = "test"; notebook_url = "not-a-url" } -ExpectedPattern "*url*" -Description "invalid URL") {
139
+ $PassedTests++
140
+ } else { $FailedTests++ }
141
+
142
+ Write-TestHeader "POST /ask - show_browser wrong type (string)" 4 $TotalTests
143
+ if (Test-ValidationError -Endpoint "/ask" -Method "Post" -Body @{ question = "test"; show_browser = "yes" } -ExpectedPattern "*show_browser*" -Description "show_browser as string") {
144
+ $PassedTests++
145
+ } else { $FailedTests++ }
146
+
147
+ # =============================================================================
148
+ # ADD NOTEBOOK SCHEMA TESTS
149
+ # =============================================================================
150
+
151
+ Write-TestHeader "POST /notebooks - Empty name" 5 $TotalTests
152
+ if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
153
+ url = "https://notebooklm.google.com/notebook/test"
154
+ name = ""
155
+ description = "Test"
156
+ topics = @("test")
157
+ } -ExpectedPattern "*name*empty*" -Description "empty name") {
158
+ $PassedTests++
159
+ } else { $FailedTests++ }
160
+
161
+ Write-TestHeader "POST /notebooks - Empty description" 6 $TotalTests
162
+ if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
163
+ url = "https://notebooklm.google.com/notebook/test"
164
+ name = "Test"
165
+ description = ""
166
+ topics = @("test")
167
+ } -ExpectedPattern "*description*empty*" -Description "empty description") {
168
+ $PassedTests++
169
+ } else { $FailedTests++ }
170
+
171
+ Write-TestHeader "POST /notebooks - Empty topics array" 7 $TotalTests
172
+ if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
173
+ url = "https://notebooklm.google.com/notebook/test"
174
+ name = "Test"
175
+ description = "Test description"
176
+ topics = @()
177
+ } -ExpectedPattern "*topic*" -Description "empty topics array") {
178
+ $PassedTests++
179
+ } else { $FailedTests++ }
180
+
181
+ Write-TestHeader "POST /notebooks - URL not NotebookLM domain" 8 $TotalTests
182
+ if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
183
+ url = "https://google.com/notebook/test"
184
+ name = "Test"
185
+ description = "Test description"
186
+ topics = @("test")
187
+ } -ExpectedPattern "*NotebookLM*" -Description "wrong domain") {
188
+ $PassedTests++
189
+ } else { $FailedTests++ }
190
+
191
+ Write-TestHeader "POST /notebooks - Invalid URL format" 9 $TotalTests
192
+ if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
193
+ url = "not-a-valid-url"
194
+ name = "Test"
195
+ description = "Test description"
196
+ topics = @("test")
197
+ } -ExpectedPattern "*url*" -Description "invalid URL format") {
198
+ $PassedTests++
199
+ } else { $FailedTests++ }
200
+
201
+ Write-TestHeader "POST /notebooks - topics wrong type (string)" 10 $TotalTests
202
+ if (Test-ValidationError -Endpoint "/notebooks" -Method "Post" -Body @{
203
+ url = "https://notebooklm.google.com/notebook/test"
204
+ name = "Test"
205
+ description = "Test description"
206
+ topics = "single-topic"
207
+ } -ExpectedPattern "*topics*array*" -Description "topics as string") {
208
+ $PassedTests++
209
+ } else { $FailedTests++ }
210
+
211
+ # =============================================================================
212
+ # UPDATE NOTEBOOK SCHEMA TESTS
213
+ # =============================================================================
214
+
215
+ Write-TestHeader "PUT /notebooks/:id - Empty name (when provided)" 11 $TotalTests
216
+ if (Test-ValidationError -Endpoint "/notebooks/test-id" -Method "Put" -Body @{ name = "" } -ExpectedPattern "*name*" -Description "empty name update") {
217
+ $PassedTests++
218
+ } else { $FailedTests++ }
219
+
220
+ Write-TestHeader "PUT /notebooks/:id - Empty description (when provided)" 12 $TotalTests
221
+ if (Test-ValidationError -Endpoint "/notebooks/test-id" -Method "Put" -Body @{ description = "" } -ExpectedPattern "*description*" -Description "empty description update") {
222
+ $PassedTests++
223
+ } else { $FailedTests++ }
224
+
225
+ # =============================================================================
226
+ # AUTO-DISCOVER SCHEMA TESTS
227
+ # =============================================================================
228
+
229
+ Write-TestHeader "POST /notebooks/auto-discover - Missing URL" 13 $TotalTests
230
+ if (Test-ValidationError -Endpoint "/notebooks/auto-discover" -Method "Post" -Body @{} -ExpectedPattern "*url*" -Description "missing URL") {
231
+ $PassedTests++
232
+ } else { $FailedTests++ }
233
+
234
+ Write-TestHeader "POST /notebooks/auto-discover - Invalid URL" 14 $TotalTests
235
+ if (Test-ValidationError -Endpoint "/notebooks/auto-discover" -Method "Post" -Body @{ url = "not-a-url" } -ExpectedPattern "*url*" -Description "invalid URL") {
236
+ $PassedTests++
237
+ } else { $FailedTests++ }
238
+
239
+ Write-TestHeader "POST /notebooks/auto-discover - Wrong domain" 15 $TotalTests
240
+ if (Test-ValidationError -Endpoint "/notebooks/auto-discover" -Method "Post" -Body @{ url = "https://example.com/notebook" } -ExpectedPattern "*NotebookLM*" -Description "wrong domain") {
241
+ $PassedTests++
242
+ } else { $FailedTests++ }
243
+
244
+ # =============================================================================
245
+ # CLEANUP DATA SCHEMA TESTS
246
+ # =============================================================================
247
+
248
+ Write-TestHeader "POST /cleanup-data - Missing confirm" 16 $TotalTests
249
+ if (Test-ValidationError -Endpoint "/cleanup-data" -Method "Post" -Body @{} -ExpectedPattern "*confirm*" -Description "missing confirm") {
250
+ $PassedTests++
251
+ } else { $FailedTests++ }
252
+
253
+ Write-TestHeader "POST /cleanup-data - confirm wrong type (string)" 17 $TotalTests
254
+ if (Test-ValidationError -Endpoint "/cleanup-data" -Method "Post" -Body @{ confirm = "yes" } -ExpectedPattern "*confirm*" -Description "confirm as string") {
255
+ $PassedTests++
256
+ } else { $FailedTests++ }
257
+
258
+ Write-TestHeader "POST /cleanup-data - preserve_library wrong type" 18 $TotalTests
259
+ if (Test-ValidationError -Endpoint "/cleanup-data" -Method "Post" -Body @{ confirm = $true; preserve_library = "yes" } -ExpectedPattern "*preserve_library*" -Description "preserve_library as string") {
260
+ $PassedTests++
261
+ } else { $FailedTests++ }
262
+
263
+ # =============================================================================
264
+ # FINAL SUMMARY
265
+ # =============================================================================
266
+ Write-Host "`n" -NoNewline
267
+ Write-Host "╔════════════════════════════════════════════════════════╗" -ForegroundColor Magenta
268
+ Write-Host "║ ║" -ForegroundColor Magenta
269
+ Write-Host "║ VALIDATION TEST SUMMARY ║" -ForegroundColor Cyan
270
+ Write-Host "║ ║" -ForegroundColor Magenta
271
+ Write-Host "╚════════════════════════════════════════════════════════╝" -ForegroundColor Magenta
272
+ Write-Host ""
273
+
274
+ $TotalExecuted = $PassedTests + $FailedTests
275
+ $SuccessRate = if ($TotalExecuted -gt 0) { [math]::Round(($PassedTests / $TotalExecuted) * 100, 1) } else { 0 }
276
+
277
+ Write-Host "Total tests: $TotalTests" -ForegroundColor White
278
+ Write-Host "Tests passed: " -NoNewline -ForegroundColor White
279
+ Write-Host "$PassedTests" -ForegroundColor Green
280
+ Write-Host "Tests failed: " -NoNewline -ForegroundColor White
281
+ Write-Host "$FailedTests" -ForegroundColor $(if($FailedTests -gt 0){"Red"}else{"Green"})
282
+ Write-Host "Success rate: " -NoNewline -ForegroundColor White
283
+ Write-Host "$SuccessRate%" -ForegroundColor $(if($SuccessRate -eq 100){"Green"}elseif($SuccessRate -ge 80){"Yellow"}else{"Red"})
284
+
285
+ Write-Host ""
286
+
287
+ if ($FailedTests -eq 0) {
288
+ Write-Host "════════════════════════════════════════════════════════" -ForegroundColor Green
289
+ Write-Host " ✓ ALL VALIDATION SCHEMAS WORKING CORRECTLY!" -ForegroundColor Green
290
+ Write-Host "════════════════════════════════════════════════════════" -ForegroundColor Green
291
+ exit 0
292
+ } else {
293
+ Write-Host "════════════════════════════════════════════════════════" -ForegroundColor Yellow
294
+ Write-Host " ⚠ SOME VALIDATION TESTS FAILED" -ForegroundColor Yellow
295
+ Write-Host "════════════════════════════════════════════════════════" -ForegroundColor Yellow
296
+ Write-Host ""
297
+ Write-Host "See details above to identify the issues." -ForegroundColor Yellow
298
+ exit 1
299
+ }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes