@pan-sec/notebooklm-mcp 2026.2.10 → 2026.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -27
- package/SECURITY.md +31 -61
- package/dist/auth/auth-manager.d.ts +2 -1
- package/dist/auth/auth-manager.d.ts.map +1 -1
- package/dist/auth/auth-manager.js +97 -42
- package/dist/auth/auth-manager.js.map +1 -1
- package/dist/auth/mcp-auth.d.ts +22 -4
- package/dist/auth/mcp-auth.d.ts.map +1 -1
- package/dist/auth/mcp-auth.js +120 -19
- package/dist/auth/mcp-auth.js.map +1 -1
- package/dist/compliance/alert-manager.d.ts.map +1 -1
- package/dist/compliance/alert-manager.js +7 -4
- package/dist/compliance/alert-manager.js.map +1 -1
- package/dist/compliance/breach-detection.d.ts.map +1 -1
- package/dist/compliance/breach-detection.js +14 -7
- package/dist/compliance/breach-detection.js.map +1 -1
- package/dist/compliance/change-log.d.ts.map +1 -1
- package/dist/compliance/change-log.js +7 -4
- package/dist/compliance/change-log.js.map +1 -1
- package/dist/compliance/compliance-logger.d.ts.map +1 -1
- package/dist/compliance/compliance-logger.js +11 -6
- package/dist/compliance/compliance-logger.js.map +1 -1
- package/dist/compliance/consent-manager.d.ts.map +1 -1
- package/dist/compliance/consent-manager.js +5 -3
- package/dist/compliance/consent-manager.js.map +1 -1
- package/dist/compliance/data-erasure.d.ts +1 -1
- package/dist/compliance/data-erasure.d.ts.map +1 -1
- package/dist/compliance/data-erasure.js +142 -83
- package/dist/compliance/data-erasure.js.map +1 -1
- package/dist/compliance/data-export.d.ts.map +1 -1
- package/dist/compliance/data-export.js +23 -12
- package/dist/compliance/data-export.js.map +1 -1
- package/dist/compliance/data-inventory.d.ts.map +1 -1
- package/dist/compliance/data-inventory.js +7 -6
- package/dist/compliance/data-inventory.js.map +1 -1
- package/dist/compliance/dsar-handler.d.ts +7 -1
- package/dist/compliance/dsar-handler.d.ts.map +1 -1
- package/dist/compliance/dsar-handler.js +74 -61
- package/dist/compliance/dsar-handler.js.map +1 -1
- package/dist/compliance/evidence-collector.d.ts.map +1 -1
- package/dist/compliance/evidence-collector.js +10 -6
- package/dist/compliance/evidence-collector.js.map +1 -1
- package/dist/compliance/health-monitor.d.ts.map +1 -1
- package/dist/compliance/health-monitor.js +15 -9
- package/dist/compliance/health-monitor.js.map +1 -1
- package/dist/compliance/incident-manager.d.ts.map +1 -1
- package/dist/compliance/incident-manager.js +5 -3
- package/dist/compliance/incident-manager.js.map +1 -1
- package/dist/compliance/policy-docs.d.ts.map +1 -1
- package/dist/compliance/policy-docs.js +14 -11
- package/dist/compliance/policy-docs.js.map +1 -1
- package/dist/compliance/privacy-notice-text.d.ts.map +1 -1
- package/dist/compliance/privacy-notice-text.js +3 -4
- package/dist/compliance/privacy-notice-text.js.map +1 -1
- package/dist/compliance/privacy-notice.d.ts.map +1 -1
- package/dist/compliance/privacy-notice.js +5 -3
- package/dist/compliance/privacy-notice.js.map +1 -1
- package/dist/compliance/report-generator.d.ts.map +1 -1
- package/dist/compliance/report-generator.js +5 -3
- package/dist/compliance/report-generator.js.map +1 -1
- package/dist/compliance/retention-engine.d.ts.map +1 -1
- package/dist/compliance/retention-engine.js +18 -10
- package/dist/compliance/retention-engine.js.map +1 -1
- package/dist/compliance/siem-exporter.d.ts.map +1 -1
- package/dist/compliance/siem-exporter.js +40 -16
- package/dist/compliance/siem-exporter.js.map +1 -1
- package/dist/config.d.ts +4 -31
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -63
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +21 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +54 -1
- package/dist/errors.js.map +1 -1
- package/dist/gemini/gemini-client.d.ts +1 -0
- package/dist/gemini/gemini-client.d.ts.map +1 -1
- package/dist/gemini/gemini-client.js +50 -49
- package/dist/gemini/gemini-client.js.map +1 -1
- package/dist/gemini/types.d.ts +3 -1
- package/dist/gemini/types.d.ts.map +1 -1
- package/dist/gemini/types.js.map +1 -1
- package/dist/index.d.ts +52 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +399 -85
- package/dist/index.js.map +1 -1
- package/dist/library/notebook-library.d.ts.map +1 -1
- package/dist/library/notebook-library.js +2 -1
- package/dist/library/notebook-library.js.map +1 -1
- package/dist/logging/query-logger.d.ts +13 -1
- package/dist/logging/query-logger.d.ts.map +1 -1
- package/dist/logging/query-logger.js +62 -10
- package/dist/logging/query-logger.js.map +1 -1
- package/dist/notebook-creation/audio-manager.d.ts.map +1 -1
- package/dist/notebook-creation/audio-manager.js +19 -24
- package/dist/notebook-creation/audio-manager.js.map +1 -1
- package/dist/notebook-creation/browser-options.d.ts +28 -0
- package/dist/notebook-creation/browser-options.d.ts.map +1 -0
- package/dist/notebook-creation/browser-options.js +75 -0
- package/dist/notebook-creation/browser-options.js.map +1 -0
- package/dist/notebook-creation/data-table-manager.d.ts.map +1 -1
- package/dist/notebook-creation/data-table-manager.js +21 -22
- package/dist/notebook-creation/data-table-manager.js.map +1 -1
- package/dist/notebook-creation/discover-creation-flow.d.ts +0 -6
- package/dist/notebook-creation/discover-creation-flow.d.ts.map +1 -1
- package/dist/notebook-creation/discover-creation-flow.js +10 -10
- package/dist/notebook-creation/discover-creation-flow.js.map +1 -1
- package/dist/notebook-creation/discover-quota.d.ts +0 -6
- package/dist/notebook-creation/discover-quota.d.ts.map +1 -1
- package/dist/notebook-creation/discover-quota.js +12 -13
- package/dist/notebook-creation/discover-quota.js.map +1 -1
- package/dist/notebook-creation/discover-sources.js +15 -16
- package/dist/notebook-creation/discover-sources.js.map +1 -1
- package/dist/notebook-creation/dom-scripts.d.ts +10 -0
- package/dist/notebook-creation/dom-scripts.d.ts.map +1 -0
- package/dist/notebook-creation/dom-scripts.js +58 -0
- package/dist/notebook-creation/dom-scripts.js.map +1 -0
- package/dist/notebook-creation/errors.d.ts +18 -0
- package/dist/notebook-creation/errors.d.ts.map +1 -0
- package/dist/notebook-creation/errors.js +20 -0
- package/dist/notebook-creation/errors.js.map +1 -0
- package/dist/notebook-creation/index.d.ts +2 -0
- package/dist/notebook-creation/index.d.ts.map +1 -1
- package/dist/notebook-creation/index.js +2 -0
- package/dist/notebook-creation/index.js.map +1 -1
- package/dist/notebook-creation/notebook-creator.d.ts +6 -82
- package/dist/notebook-creation/notebook-creator.d.ts.map +1 -1
- package/dist/notebook-creation/notebook-creator.js +49 -835
- package/dist/notebook-creation/notebook-creator.js.map +1 -1
- package/dist/notebook-creation/notebook-nav.d.ts +19 -0
- package/dist/notebook-creation/notebook-nav.d.ts.map +1 -0
- package/dist/notebook-creation/notebook-nav.js +239 -0
- package/dist/notebook-creation/notebook-nav.js.map +1 -0
- package/dist/notebook-creation/notebook-sync.d.ts.map +1 -1
- package/dist/notebook-creation/notebook-sync.js +36 -38
- package/dist/notebook-creation/notebook-sync.js.map +1 -1
- package/dist/notebook-creation/selector-discovery.d.ts.map +1 -1
- package/dist/notebook-creation/selector-discovery.js +17 -24
- package/dist/notebook-creation/selector-discovery.js.map +1 -1
- package/dist/notebook-creation/selectors.d.ts +26 -21
- package/dist/notebook-creation/selectors.d.ts.map +1 -1
- package/dist/notebook-creation/selectors.js +79 -36
- package/dist/notebook-creation/selectors.js.map +1 -1
- package/dist/notebook-creation/source-manager.d.ts +22 -0
- package/dist/notebook-creation/source-manager.d.ts.map +1 -1
- package/dist/notebook-creation/source-manager.js +716 -50
- package/dist/notebook-creation/source-manager.js.map +1 -1
- package/dist/notebook-creation/types.d.ts +4 -0
- package/dist/notebook-creation/types.d.ts.map +1 -1
- package/dist/notebook-creation/video-manager.d.ts.map +1 -1
- package/dist/notebook-creation/video-manager.js +45 -35
- package/dist/notebook-creation/video-manager.js.map +1 -1
- package/dist/observability/metrics.d.ts +19 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +35 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/quota/quota-manager.d.ts +11 -3
- package/dist/quota/quota-manager.d.ts.map +1 -1
- package/dist/quota/quota-manager.js +139 -47
- package/dist/quota/quota-manager.js.map +1 -1
- package/dist/resources/resource-handlers.d.ts.map +1 -1
- package/dist/resources/resource-handlers.js +29 -12
- package/dist/resources/resource-handlers.js.map +1 -1
- package/dist/session/browser-session.d.ts.map +1 -1
- package/dist/session/browser-session.js +22 -22
- package/dist/session/browser-session.js.map +1 -1
- package/dist/session/session-timeout.d.ts.map +1 -1
- package/dist/session/session-timeout.js +4 -2
- package/dist/session/session-timeout.js.map +1 -1
- package/dist/session/shared-context-manager.d.ts.map +1 -1
- package/dist/session/shared-context-manager.js +31 -30
- package/dist/session/shared-context-manager.js.map +1 -1
- package/dist/tools/annotations.js +9 -9
- package/dist/tools/annotations.js.map +1 -1
- package/dist/tools/definitions/ask-question.d.ts.map +1 -1
- package/dist/tools/definitions/ask-question.js +35 -100
- package/dist/tools/definitions/ask-question.js.map +1 -1
- package/dist/tools/definitions/chat-history.d.ts +47 -1
- package/dist/tools/definitions/chat-history.d.ts.map +1 -1
- package/dist/tools/definitions/chat-history.js +10 -1
- package/dist/tools/definitions/chat-history.js.map +1 -1
- package/dist/tools/definitions/data-tables.d.ts.map +1 -1
- package/dist/tools/definitions/data-tables.js +2 -0
- package/dist/tools/definitions/data-tables.js.map +1 -1
- package/dist/tools/definitions/gemini.d.ts.map +1 -1
- package/dist/tools/definitions/gemini.js +40 -10
- package/dist/tools/definitions/gemini.js.map +1 -1
- package/dist/tools/definitions/notebook-management.d.ts.map +1 -1
- package/dist/tools/definitions/notebook-management.js +100 -70
- package/dist/tools/definitions/notebook-management.js.map +1 -1
- package/dist/tools/definitions/query-history.d.ts +47 -1
- package/dist/tools/definitions/query-history.d.ts.map +1 -1
- package/dist/tools/definitions/query-history.js +7 -0
- package/dist/tools/definitions/query-history.js.map +1 -1
- package/dist/tools/definitions/session-management.d.ts.map +1 -1
- package/dist/tools/definitions/session-management.js +5 -0
- package/dist/tools/definitions/session-management.js.map +1 -1
- package/dist/tools/definitions/system.d.ts.map +1 -1
- package/dist/tools/definitions/system.js +71 -100
- package/dist/tools/definitions/system.js.map +1 -1
- package/dist/tools/definitions/video.d.ts.map +1 -1
- package/dist/tools/definitions/video.js +3 -0
- package/dist/tools/definitions/video.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +4 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/handlers/ask-question.d.ts +1 -1
- package/dist/tools/handlers/ask-question.d.ts.map +1 -1
- package/dist/tools/handlers/ask-question.js +56 -12
- package/dist/tools/handlers/ask-question.js.map +1 -1
- package/dist/tools/handlers/audio-video.d.ts.map +1 -1
- package/dist/tools/handlers/audio-video.js +15 -7
- package/dist/tools/handlers/audio-video.js.map +1 -1
- package/dist/tools/handlers/auth.d.ts +14 -19
- package/dist/tools/handlers/auth.d.ts.map +1 -1
- package/dist/tools/handlers/auth.js +77 -121
- package/dist/tools/handlers/auth.js.map +1 -1
- package/dist/tools/handlers/error-utils.d.ts +7 -0
- package/dist/tools/handlers/error-utils.d.ts.map +1 -0
- package/dist/tools/handlers/error-utils.js +17 -0
- package/dist/tools/handlers/error-utils.js.map +1 -0
- package/dist/tools/handlers/gemini.d.ts +1 -0
- package/dist/tools/handlers/gemini.d.ts.map +1 -1
- package/dist/tools/handlers/gemini.js +81 -51
- package/dist/tools/handlers/gemini.js.map +1 -1
- package/dist/tools/handlers/index.d.ts +39 -47
- package/dist/tools/handlers/index.d.ts.map +1 -1
- package/dist/tools/handlers/index.js +13 -2
- package/dist/tools/handlers/index.js.map +1 -1
- package/dist/tools/handlers/notebook-creation.d.ts.map +1 -1
- package/dist/tools/handlers/notebook-creation.js +99 -20
- package/dist/tools/handlers/notebook-creation.js.map +1 -1
- package/dist/tools/handlers/notebook-management.d.ts +8 -8
- package/dist/tools/handlers/notebook-management.d.ts.map +1 -1
- package/dist/tools/handlers/notebook-management.js +34 -80
- package/dist/tools/handlers/notebook-management.js.map +1 -1
- package/dist/tools/handlers/session-management.d.ts.map +1 -1
- package/dist/tools/handlers/session-management.js +12 -5
- package/dist/tools/handlers/session-management.js.map +1 -1
- package/dist/tools/handlers/system.d.ts.map +1 -1
- package/dist/tools/handlers/system.js +45 -10
- package/dist/tools/handlers/system.js.map +1 -1
- package/dist/tools/handlers/types.d.ts +1 -1
- package/dist/tools/handlers/types.d.ts.map +1 -1
- package/dist/tools/handlers/webhooks.d.ts.map +1 -1
- package/dist/tools/handlers/webhooks.js +15 -13
- package/dist/tools/handlers/webhooks.js.map +1 -1
- package/dist/types.d.ts +7 -17
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/audit-logger.d.ts +19 -1
- package/dist/utils/audit-logger.d.ts.map +1 -1
- package/dist/utils/audit-logger.js +193 -27
- package/dist/utils/audit-logger.js.map +1 -1
- package/dist/utils/cleanup-manager.d.ts.map +1 -1
- package/dist/utils/cleanup-manager.js +6 -3
- package/dist/utils/cleanup-manager.js.map +1 -1
- package/dist/utils/crypto.d.ts +4 -1
- package/dist/utils/crypto.d.ts.map +1 -1
- package/dist/utils/crypto.js +32 -21
- package/dist/utils/crypto.js.map +1 -1
- package/dist/utils/file-lock.d.ts.map +1 -1
- package/dist/utils/file-lock.js +80 -16
- package/dist/utils/file-lock.js.map +1 -1
- package/dist/utils/file-permissions.d.ts +2 -0
- package/dist/utils/file-permissions.d.ts.map +1 -1
- package/dist/utils/file-permissions.js +2 -1
- package/dist/utils/file-permissions.js.map +1 -1
- package/dist/utils/logger.d.ts +4 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +16 -0
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/page-utils.d.ts.map +1 -1
- package/dist/utils/page-utils.js +22 -39
- package/dist/utils/page-utils.js.map +1 -1
- package/dist/utils/response-validator.d.ts.map +1 -1
- package/dist/utils/response-validator.js +27 -22
- package/dist/utils/response-validator.js.map +1 -1
- package/dist/utils/secrets-scanner.d.ts +11 -0
- package/dist/utils/secrets-scanner.d.ts.map +1 -1
- package/dist/utils/secrets-scanner.js +63 -15
- package/dist/utils/secrets-scanner.js.map +1 -1
- package/dist/utils/secure-memory.d.ts +9 -31
- package/dist/utils/secure-memory.d.ts.map +1 -1
- package/dist/utils/secure-memory.js +17 -102
- package/dist/utils/secure-memory.js.map +1 -1
- package/dist/utils/security.d.ts +4 -3
- package/dist/utils/security.d.ts.map +1 -1
- package/dist/utils/security.js +41 -11
- package/dist/utils/security.js.map +1 -1
- package/dist/utils/stealth-utils.d.ts.map +1 -1
- package/dist/utils/stealth-utils.js +4 -4
- package/dist/utils/stealth-utils.js.map +1 -1
- package/dist/webhooks/types.d.ts +2 -0
- package/dist/webhooks/types.d.ts.map +1 -1
- package/dist/webhooks/webhook-dispatcher.d.ts +80 -12
- package/dist/webhooks/webhook-dispatcher.d.ts.map +1 -1
- package/dist/webhooks/webhook-dispatcher.js +472 -72
- package/dist/webhooks/webhook-dispatcher.js.map +1 -1
- package/docs/archive/ISSUES-legacy-2026-04-24.md +644 -0
- package/docs/dependency-risk.md +25 -0
- package/docs/testing-runbook.md +166 -0
- package/docs/usage-guide.md +2 -1
- package/package.json +33 -16
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
**Zero-hallucination answers • Gemini Deep Research • 17 Security Layers • Enterprise Compliance**
|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/@pan-sec/notebooklm-mcp)
|
|
10
|
-
[](https://calver.org/)
|
|
11
11
|
[](https://www.typescriptlang.org/)
|
|
12
12
|
[](https://modelcontextprotocol.io/)
|
|
13
13
|
[](#cross-platform-support)
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
[](#-gemini-deep-research-v180)
|
|
17
17
|
[](#-document-api-v190)
|
|
18
18
|
[](#programmatic-notebook-creation-v170)
|
|
19
|
-
[](./docs/COMPLIANCE-SPEC.md)
|
|
20
|
-
[](./docs/COMPLIANCE-SPEC.md)
|
|
20
|
+
[](./tests/)
|
|
21
21
|
|
|
22
22
|
[**What's New 2026**](#-whats-new-in-2026) • [**Deep Research**](#-gemini-deep-research) • [**Document API**](#-document-api) • [**Create Notebooks**](#programmatic-notebook-creation) • [**Security**](#security-features) • [**Install**](#installation)
|
|
23
23
|
|
|
@@ -37,17 +37,19 @@
|
|
|
37
37
|
- 🔬 **Gemini 3 + Deep Research** — latest models with thinking control (optional API) **NEW**
|
|
38
38
|
- 📄 **Document API** — upload & query PDFs without browser (optional API)
|
|
39
39
|
- 🔐 **17 security layers** — post-quantum encryption, audit logs, secrets scanning
|
|
40
|
-
- ✅ **
|
|
40
|
+
- ✅ **Compliance-ready architecture** — built to GDPR, SOC2, and CSSF standards (controls implemented; formal certification requires third-party audit)
|
|
41
41
|
- 💡 **No API key required** — core features work with just browser auth
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
45
|
## 🚀 What's New in 2026
|
|
46
46
|
|
|
47
|
-
**Latest: v2026.
|
|
47
|
+
**Latest: v2026.3.0** — The Security Audit Release. 334-issue independent audit closed. 609 tests. Full MCP protocol compliance.
|
|
48
48
|
|
|
49
49
|
| Version | Highlights |
|
|
50
50
|
|---------|------------|
|
|
51
|
+
| **v2026.3.0** | **The Security Audit Release** — Four parallel AI code reviews (security, protocol, architecture, testing) against 334 issues. All highs and mediums resolved. Tests: 139 → 609 across 50 files (4.4×). Full MCP protocol compliance: structuredContent, isError, transport tags. Schema bounds on all 48 tools. Annotation correctness. Webhook SSRF fix. Audit log integrity (hash chain, concurrent write lock, rotation continuity). Per-page mutex. HandlerContext DI. Cert pinning retracted (claims aligned with implementation). |
|
|
52
|
+
| **v2026.2.10** | **The Hardening Release** — 3 new security layers (14→17): secure-by-default auth, exponential backoff lockout, credential isolation. Architecture overhaul: 3,611-line handler split into 9 domain modules, tool registry pattern. Gemini API retry with backoff. Multi-stage Docker build. Token CLI (`token show/rotate`). 168 tests. |
|
|
51
53
|
| **v2026.2.9** | `performSetup` no longer wipes credentials before Chrome opens — prevents auth destruction on failed launch |
|
|
52
54
|
| **v2026.2.8** | `cleanup_data` never deletes auth dirs (`browser_state/`, `chrome_profile/`) — auth survives all cleanup paths |
|
|
53
55
|
| **v2026.2.7** | Block headless `setup_auth` calls; robust `auth-now.mjs` standalone script with Chrome profile lock handling |
|
|
@@ -79,13 +81,50 @@ claude mcp add notebooklm -- npx @pan-sec/notebooklm-mcp@latest
|
|
|
79
81
|
| Create notebooks programmatically | ❌ | ✅ **UNIQUE** |
|
|
80
82
|
| Gemini Deep Research | ❌ | ✅ **EXCLUSIVE** |
|
|
81
83
|
| Document API (no browser) | ❌ | ✅ **EXCLUSIVE** |
|
|
82
|
-
| Post-quantum encryption | ❌ | ✅ **
|
|
83
|
-
| Enterprise compliance | ❌ | ✅ **GDPR/SOC2/CSSF** |
|
|
84
|
+
| Post-quantum encryption | ❌ | ✅ **Hybrid PQ at-rest** |
|
|
85
|
+
| Enterprise compliance | ❌ | ✅ **GDPR/SOC2/CSSF-ready** |
|
|
84
86
|
| Video Overview generation | ❌ | ✅ **NEW** |
|
|
85
87
|
| Data Table extraction | ❌ | ✅ **NEW** |
|
|
86
88
|
| Chat history extraction | ❌ | ✅ |
|
|
87
89
|
| Deep health verification | ❌ | ✅ |
|
|
88
90
|
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 🔬 Security Audit 2026 — What We Found and Fixed
|
|
94
|
+
|
|
95
|
+
In April 2026, we commissioned a parallel deep-audit of v2026.2.11 (`main @ 2973097`) using four specialised AI code reviewers, each focused on a different attack surface: **security vulnerabilities**, **protocol correctness**, **architecture quality**, and **testing gaps and edge cases**. The four reviewers operated independently so their findings wouldn't influence each other. Together they produced a **334-item master issue list** covering protocol correctness, security vulnerabilities, architecture flaws, test gaps, and documentation accuracy. All high and medium issues are now resolved in v2026.3.0.
|
|
96
|
+
|
|
97
|
+
### Audit by the Numbers
|
|
98
|
+
|
|
99
|
+
| Metric | Before (v2026.2.11) | After (v2026.3.0) |
|
|
100
|
+
|--------|---------------------|--------------------|
|
|
101
|
+
| Tests | 139 | **609 across 50 files** |
|
|
102
|
+
| Test suites | ~6 | **50** |
|
|
103
|
+
| TypeScript errors (`tsc --noEmit`) | 0 | **0 (maintained)** |
|
|
104
|
+
| npm audit vulnerabilities | 0 | **0 (maintained)** |
|
|
105
|
+
| MCP protocol compliance | Partial | **Full** (structuredContent, isError, transport tags) |
|
|
106
|
+
| Audit log integrity | Basic | **Hash-chain verified on read** |
|
|
107
|
+
| Concurrent write safety | ❌ | **✅ Write-locked** |
|
|
108
|
+
| Webhook SSRF | ❌ | **✅ Blocked** |
|
|
109
|
+
|
|
110
|
+
### What the Four Reviewers Found
|
|
111
|
+
|
|
112
|
+
**Security reviewer:** Identified the `forceAuth` bypass in `validateToken()` allowing unauthenticated access to filesystem tools; webhook SSRF via unvalidated delivery targets; audit log hash chain not verified on read; concurrent audit writes interleaving entries; auth token salt not persisted (tokens invalidated on restart).
|
|
113
|
+
|
|
114
|
+
**Protocol reviewer:** Found 38 tools returning incorrect response shapes (missing `structuredContent`, wrong `isError` semantics, transport tags leaking into content); all 48 tools had incorrect or missing `readOnlyHint`/`idempotentHint`/`destructiveHint` annotations; 9 tool schemas lacked numeric bounds, enabling out-of-range inputs.
|
|
115
|
+
|
|
116
|
+
**Architecture reviewer:** Flagged the 3,611-line `handlers.ts` as a maintenance liability; singleton imports throughout domain functions preventing unit testing; the 500-line `switch/case` dispatch adding O(n) overhead and making tool registration error-prone.
|
|
117
|
+
|
|
118
|
+
**Testing & edge-case reviewer:** Found test suite at 139 tests with minimal coverage of security-critical modules; `mcp-auth.ts` at near-zero coverage; no tests for prompt injection patterns, audit log tampering, or concurrent browser session state; the DSAR handler had an undetected race condition.
|
|
119
|
+
|
|
120
|
+
### Key Fixes
|
|
121
|
+
|
|
122
|
+
- **17 security vulnerabilities** addressed (auth bypass, SSRF, audit integrity, race conditions, selector injection vectors)
|
|
123
|
+
- **MCP protocol fully compliant** — all 48 tools return correct `structuredContent`/`isError` shapes; annotations accurate; schema bounds enforced
|
|
124
|
+
- **Architecture decomposed** — `handlers.ts` split into 9 domain modules with HandlerContext dependency injection; 100% unit-testable without process mocks
|
|
125
|
+
- **Test coverage** — 15 new security-critical test suites including browser session, auth, prompt injection, audit log, webhook, DSAR, and compliance
|
|
126
|
+
- **Claims aligned** — certificate pinning removed (implementation was retracted in Day 1 of the audit); PQ encryption scope documented accurately; compliance language uses "controls implemented" not "certified"
|
|
127
|
+
|
|
89
128
|
<details>
|
|
90
129
|
<summary><b>📋 Full Feature List (48 Tools)</b></summary>
|
|
91
130
|
|
|
@@ -207,7 +246,7 @@ Run deep research in the background and check progress:
|
|
|
207
246
|
|
|
208
247
|
```
|
|
209
248
|
┌──────────────────────────────────────────────────────────────────────────────┐
|
|
210
|
-
│ NotebookLM MCP Server v2026.
|
|
249
|
+
│ NotebookLM MCP Server v2026.3.x │
|
|
211
250
|
├──────────────────────────────────────────────────────────────────────────────┤
|
|
212
251
|
│ │
|
|
213
252
|
│ ┌────────────────────────────────┐ ┌──────────────────────────────────┐ │
|
|
@@ -236,8 +275,8 @@ Run deep research in the background and check progress:
|
|
|
236
275
|
│ ┌─────────────────────────────────┐ │
|
|
237
276
|
│ │ 17 SECURITY LAYERS │ │
|
|
238
277
|
│ │ Post-Quantum • Audit Logs │ │
|
|
239
|
-
│ │
|
|
240
|
-
│ │
|
|
278
|
+
│ │ Secrets Scan • Memory Wipe │ │
|
|
279
|
+
│ │ GDPR • SOC2 • CSSF Ready* │ │
|
|
241
280
|
│ └─────────────────────────────────┘ │
|
|
242
281
|
└──────────────────────────────────────────────────────────────────────────────┘
|
|
243
282
|
```
|
|
@@ -643,9 +682,8 @@ This fork adds **17 security hardening layers** to protect that data.
|
|
|
643
682
|
|
|
644
683
|
| Layer | Feature | Protection |
|
|
645
684
|
|-------|---------|------------|
|
|
646
|
-
| 🔐 | **Post-Quantum Encryption** | ML-KEM-768 + ChaCha20-Poly1305 hybrid |
|
|
685
|
+
| 🔐 | **Post-Quantum Encryption** | ML-KEM-768 + ChaCha20-Poly1305 hybrid (local at-rest) |
|
|
647
686
|
| 🔍 | **Secrets Scanning** | Detects 30+ credential patterns (AWS, GitHub, Slack...) |
|
|
648
|
-
| 📌 | **Certificate Pinning** | Blocks MITM attacks on Google connections |
|
|
649
687
|
| 🧹 | **Memory Scrubbing** | Zeros sensitive data after use |
|
|
650
688
|
| 📝 | **Audit Logging** | Tamper-evident logs with hash chains |
|
|
651
689
|
| ⏱️ | **Session Timeout** | 8h hard limit + 30m inactivity auto-logout |
|
|
@@ -660,9 +698,9 @@ This fork adds **17 security hardening layers** to protect that data.
|
|
|
660
698
|
| 📈 | **Exponential Backoff** | Lockout escalation: 5min → 15min → 45min → 4hr cap |
|
|
661
699
|
| 🗝️ | **Credential Isolation** | SecureCredential TTL + env var scrubbing from process.env |
|
|
662
700
|
|
|
663
|
-
### Post-Quantum
|
|
701
|
+
### Post-Quantum Primitives (Local At-Rest)
|
|
664
702
|
|
|
665
|
-
|
|
703
|
+
Encryption of secrets on disk uses hybrid post-quantum primitives:
|
|
666
704
|
|
|
667
705
|
```
|
|
668
706
|
ML-KEM-768 (Kyber) + ChaCha20-Poly1305
|
|
@@ -671,7 +709,12 @@ ML-KEM-768 (Kyber) + ChaCha20-Poly1305
|
|
|
671
709
|
- **ML-KEM-768**: NIST-standardized post-quantum key encapsulation
|
|
672
710
|
- **ChaCha20-Poly1305**: Modern stream cipher (immune to timing attacks)
|
|
673
711
|
|
|
674
|
-
|
|
712
|
+
**Scope, honestly:** this is **local at-rest** encryption. Both keys live
|
|
713
|
+
on the same machine — the PQ secret key is wrapped with a classical key
|
|
714
|
+
derived from a machine-bound secret, not held by a remote recipient.
|
|
715
|
+
This protects against offline theft of individual encrypted files, not
|
|
716
|
+
against Harvest-Now-Decrypt-Later attacks (those require a remote PQ
|
|
717
|
+
recipient holding the unwrap key).
|
|
675
718
|
|
|
676
719
|
### Cross-Platform Support
|
|
677
720
|
|
|
@@ -685,11 +728,11 @@ Full native support for all major operating systems:
|
|
|
685
728
|
|
|
686
729
|
All sensitive files (encryption keys, auth tokens, audit logs) are automatically protected with owner-only permissions on every platform.
|
|
687
730
|
|
|
688
|
-
### Enterprise Compliance (v1.6.0+)
|
|
731
|
+
### Enterprise Compliance-Ready Architecture (v1.6.0+)
|
|
689
732
|
|
|
690
|
-
|
|
733
|
+
Built to the standards required for regulated industries. All controls are implemented — formal certification (SOC2 Type II report, GDPR registration, CSSF submission) requires a third-party audit engagement.
|
|
691
734
|
|
|
692
|
-
| Regulation |
|
|
735
|
+
| Regulation | Controls Implemented |
|
|
693
736
|
|------------|----------|
|
|
694
737
|
| **GDPR** | Consent management, DSAR handling, right to erasure, data portability |
|
|
695
738
|
| **SOC2 Type II** | Hash-chained audit logs, incident response, availability monitoring |
|
|
@@ -732,6 +775,8 @@ All core NotebookLM features work immediately with just browser authentication:
|
|
|
732
775
|
|
|
733
776
|
**Optional:** Add `GEMINI_API_KEY` for bonus features like `deep_research`, `gemini_query`, and `upload_document`.
|
|
734
777
|
|
|
778
|
+
For repeatable authenticated validation, see the [Authenticated Testing Runbook](./docs/testing-runbook.md).
|
|
779
|
+
|
|
735
780
|
---
|
|
736
781
|
|
|
737
782
|
### Claude Code
|
|
@@ -988,7 +1033,7 @@ Go to [notebooklm.google.com](https://notebooklm.google.com) → Create notebook
|
|
|
988
1033
|
| Browser cookies | Post-quantum encrypted at rest |
|
|
989
1034
|
| Session tokens | Auto-expire + memory scrubbing |
|
|
990
1035
|
| Query history | Audit logged with tamper detection |
|
|
991
|
-
| Google connection |
|
|
1036
|
+
| Google connection | TLS with response validation |
|
|
992
1037
|
| Log output | Credentials auto-redacted |
|
|
993
1038
|
| API responses | Scanned for leaked secrets |
|
|
994
1039
|
| Gemini API key | Secure memory handling |
|
|
@@ -1028,9 +1073,6 @@ NLMCP_SECRETS_SCANNING=true
|
|
|
1028
1073
|
NLMCP_SECRETS_BLOCK=false # Block on detection
|
|
1029
1074
|
NLMCP_SECRETS_REDACT=true # Auto-redact
|
|
1030
1075
|
|
|
1031
|
-
# Certificate Pinning
|
|
1032
|
-
NLMCP_CERT_PINNING=true
|
|
1033
|
-
|
|
1034
1076
|
# Audit Logging
|
|
1035
1077
|
NLMCP_AUDIT_ENABLED=true
|
|
1036
1078
|
|
|
@@ -1110,16 +1152,17 @@ Or integrate in CI/CD:
|
|
|
1110
1152
|
| Feature | Others | @pan-sec/notebooklm-mcp |
|
|
1111
1153
|
|---------|--------|-------------------------|
|
|
1112
1154
|
| Cross-platform (Linux/macOS/Windows) | ⚠️ Partial | ✅ Full |
|
|
1113
|
-
| **Post-quantum encryption** | ❌ | ✅ ML-KEM-768 + ChaCha20 |
|
|
1155
|
+
| **Post-quantum encryption** | ❌ | ✅ ML-KEM-768 + ChaCha20 (local at-rest) |
|
|
1114
1156
|
| **Secrets scanning** | ❌ | ✅ 30+ patterns |
|
|
1115
|
-
| **Certificate pinning** | ❌ | ✅ Google MITM protection |
|
|
1116
1157
|
| **Memory scrubbing** | ❌ | ✅ Zero-on-free |
|
|
1117
1158
|
| **Audit logging** | ❌ | ✅ Hash-chained |
|
|
1118
1159
|
| **MCP authentication** | ❌ | ✅ Token + lockout |
|
|
1119
1160
|
| **Prompt injection detection** | ❌ | ✅ Response validation |
|
|
1120
|
-
| **GDPR Compliance** | ❌ | ✅
|
|
1121
|
-
| **SOC2 Type II** | ❌ | ✅
|
|
1122
|
-
| **CSSF (Luxembourg)** | ❌ | ✅
|
|
1161
|
+
| **GDPR Compliance** | ❌ | ✅ Controls implemented* |
|
|
1162
|
+
| **SOC2 Type II** | ❌ | ✅ Controls implemented* |
|
|
1163
|
+
| **CSSF (Luxembourg)** | ❌ | ✅ Controls implemented* |
|
|
1164
|
+
|
|
1165
|
+
> \* Compliance-ready: all required controls are implemented. Formal certification (SOC2 Type II report, GDPR registration, CSSF submission) requires a third-party audit engagement.
|
|
1123
1166
|
|
|
1124
1167
|
> **Bottom line**: If you need more than basic queries, or care about security, there's only one choice.
|
|
1125
1168
|
|
|
@@ -1129,6 +1172,7 @@ Or integrate in CI/CD:
|
|
|
1129
1172
|
|
|
1130
1173
|
| Version | Highlights |
|
|
1131
1174
|
|---------|------------|
|
|
1175
|
+
| **v2026.3.0** | 🔬 **Security Audit Release** — 334-issue independent audit. Tests 139→609 (50 files). Full MCP protocol compliance. Webhook SSRF fix. Audit log hash-chain verified on read. Per-page mutex. HandlerContext DI. Cert pinning retracted. |
|
|
1132
1176
|
| **v2026.2.9** | 🔐 `performSetup` no longer destroys credentials before Chrome opens — last root cause of auth loop fixed |
|
|
1133
1177
|
| **v2026.2.8** | 🛡️ `cleanup_data` excludes `browser_state/` and `chrome_profile/` from all deletion paths — auth survives cleanup |
|
|
1134
1178
|
| **v2026.2.7** | 🚫 Block headless `setup_auth`; `auth-now.mjs` standalone script handles Chrome profile locks and silent save failures |
|
package/SECURITY.md
CHANGED
|
@@ -2,27 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
This is a security-hardened fork of [PleasePrompto/notebooklm-mcp](https://github.com/PleasePrompto/notebooklm-mcp), maintained by [Pantheon Security](https://pantheonsecurity.io).
|
|
4
4
|
|
|
5
|
-
**Version**:
|
|
6
|
-
**Security Features**:
|
|
5
|
+
**Version**: 2026.3.0
|
|
6
|
+
**Security Features**: 17 hardening layers
|
|
7
7
|
**Platforms**: Linux, macOS, Windows
|
|
8
8
|
|
|
9
|
+
> **v2026.3.0 — Security Audit Release.** In April 2026 we ran a parallel deep-audit of this codebase using four specialised AI code reviewers, each independently focused on a different attack surface. They produced a 334-item master issue list. Every high and medium issue is resolved in this release. See [CHANGELOG.md](./CHANGELOG.md#20263.0---2026-04-25) for the full list.
|
|
10
|
+
|
|
9
11
|
## Security Features Overview
|
|
10
12
|
|
|
11
13
|
| Feature | Status | Description |
|
|
12
14
|
|---------|--------|-------------|
|
|
13
|
-
| Input Validation | ✅ | URL whitelisting,
|
|
15
|
+
| Input Validation | ✅ | URL whitelisting, Zod schemas, injection prevention |
|
|
14
16
|
| Rate Limiting | ✅ | Per-session request throttling |
|
|
15
|
-
| Log Sanitization | ✅ | Credential masking |
|
|
16
|
-
| Audit Logging | ✅ |
|
|
17
|
+
| Log Sanitization | ✅ | Credential masking, PII redaction |
|
|
18
|
+
| Audit Logging | ✅ | Hash-chained tamper-evident logs, verified on read |
|
|
17
19
|
| Session Timeout | ✅ | Hard lifetime + inactivity limits |
|
|
18
|
-
| MCP Authentication | ✅ | Token-based auth with lockout |
|
|
19
|
-
| Response Validation | ✅ | Prompt injection detection |
|
|
20
|
-
| **Post-Quantum Encryption** | ✅ | ML-KEM-768 + ChaCha20-Poly1305 |
|
|
21
|
-
| **Secrets Scanning** | ✅ | Detect
|
|
22
|
-
| **
|
|
23
|
-
| **
|
|
24
|
-
| **MEDUSA Integration** | ✅ | Automated security scanning |
|
|
20
|
+
| MCP Authentication | ✅ | Token-based auth with persistent salt + lockout |
|
|
21
|
+
| Response Validation | ✅ | Prompt injection detection, suspicious URL blocking |
|
|
22
|
+
| **Post-Quantum Encryption** | ✅ | ML-KEM-768 + ChaCha20-Poly1305 (local at-rest) |
|
|
23
|
+
| **Secrets Scanning** | ✅ | Detect 30+ credential patterns (AWS, GitHub, Slack…) |
|
|
24
|
+
| **Memory Scrubbing** | ✅ | Zero sensitive data after use, FinalizationRegistry cleanup |
|
|
25
|
+
| **MEDUSA Integration** | ✅ | Automated security scanning in CI |
|
|
25
26
|
| **Cross-Platform Permissions** | ✅ | Secure file permissions on all OSes |
|
|
27
|
+
| **Secure-by-Default Auth** | ✅ | Auth enabled without configuration; explicit opt-out via `NLMCP_AUTH_DISABLED=true` |
|
|
28
|
+
| **Exponential Backoff Lockout** | ✅ | Failed auth lockouts escalate 5min → 15min → 45min → 4hr; `lockoutCount` persists |
|
|
29
|
+
| **Credential Isolation** | ✅ | `LOGIN_PASSWORD` and `GEMINI_API_KEY` wrapped in `SecureCredential` with 30-min TTL; env vars scrubbed from `process.env` |
|
|
30
|
+
| **Webhook SSRF Protection** | ✅ | Delivery targets validated against SSRF blocklist; HMAC signing on all deliveries |
|
|
31
|
+
| **Per-Page Mutex** | ✅ | Browser page operations serialised per-page to prevent race conditions |
|
|
26
32
|
|
|
27
33
|
---
|
|
28
34
|
|
|
@@ -58,16 +64,23 @@ All sensitive files are automatically protected with owner-only permissions:
|
|
|
58
64
|
|
|
59
65
|
---
|
|
60
66
|
|
|
61
|
-
## Post-Quantum Encryption
|
|
62
|
-
|
|
63
|
-
### Why Post-Quantum?
|
|
67
|
+
## Post-Quantum Encryption (Local At-Rest)
|
|
64
68
|
|
|
65
|
-
|
|
69
|
+
### Scope
|
|
66
70
|
|
|
67
|
-
|
|
71
|
+
Secrets written to disk (cookies, session state, auth tokens, PQ key pair) are encrypted with hybrid post-quantum primitives:
|
|
68
72
|
- **ML-KEM-768 (Kyber)** - NIST-standardized post-quantum key encapsulation
|
|
69
73
|
- **ChaCha20-Poly1305** - Modern stream cipher (NOT AES-GCM)
|
|
70
74
|
|
|
75
|
+
### What this does and does not protect against
|
|
76
|
+
|
|
77
|
+
This is **local at-rest** encryption. Both keys live on the same machine: the PQ secret key is wrapped with a classical key derived from a machine-bound secret, not held by a remote recipient.
|
|
78
|
+
|
|
79
|
+
- ✅ Protects against **offline theft** of individual encrypted files (backup leak, misplaced disk)
|
|
80
|
+
- ✅ Defence-in-depth on top of the underlying filesystem permissions
|
|
81
|
+
- ❌ Does **NOT** protect against Harvest-Now-Decrypt-Later attacks — that threat model requires a remote PQ recipient holding the unwrap key, which this implementation does not have
|
|
82
|
+
- ❌ Does **NOT** protect against an attacker who compromises the host — they can read the machine-derived key and unwrap the PQ secret key in the same step
|
|
83
|
+
|
|
71
84
|
### Why ChaCha20-Poly1305 over AES-GCM?
|
|
72
85
|
|
|
73
86
|
| Property | ChaCha20-Poly1305 | AES-GCM |
|
|
@@ -158,41 +171,6 @@ NLMCP_SECRETS_IGNORE=pattern1,pattern2 # Ignore specific patterns
|
|
|
158
171
|
|
|
159
172
|
---
|
|
160
173
|
|
|
161
|
-
## Certificate Pinning
|
|
162
|
-
|
|
163
|
-
Protects HTTPS connections to Google by validating server certificate chains against known-good SPKI hashes.
|
|
164
|
-
|
|
165
|
-
### Why Certificate Pinning?
|
|
166
|
-
|
|
167
|
-
Prevents man-in-the-middle attacks even if:
|
|
168
|
-
- A rogue CA certificate is installed on the system
|
|
169
|
-
- Corporate proxies attempt SSL inspection
|
|
170
|
-
- DNS is compromised
|
|
171
|
-
|
|
172
|
-
### Pinned Certificates
|
|
173
|
-
|
|
174
|
-
- **GTS Root R1-R4** - Google Trust Services roots
|
|
175
|
-
- **GlobalSign Root CA R2** - Backup root
|
|
176
|
-
- **DigiCert Global Root G2** - Backup root
|
|
177
|
-
|
|
178
|
-
### Configuration
|
|
179
|
-
|
|
180
|
-
```bash
|
|
181
|
-
NLMCP_CERT_PINNING=true # Enable pinning (default: true)
|
|
182
|
-
NLMCP_CERT_FAIL_OPEN=false # Allow on failure (default: false)
|
|
183
|
-
NLMCP_CERT_REPORT_ONLY=false # Log but don't block (default: false)
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### Violation Response
|
|
187
|
-
|
|
188
|
-
```
|
|
189
|
-
🔒 Certificate pinning violation for notebooklm.google.com
|
|
190
|
-
Chain hashes: abc123...
|
|
191
|
-
Expected one of: hxqRlP..., Vfd95B...
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
174
|
## Memory Scrubbing
|
|
197
175
|
|
|
198
176
|
Sensitive data is securely wiped from memory after use to prevent:
|
|
@@ -431,7 +409,7 @@ This MCP uses browser automation (Patchright) which:
|
|
|
431
409
|
The Chrome profile directory itself is not fully encrypted:
|
|
432
410
|
- `~/.local/share/notebooklm-mcp/chrome_profile/`
|
|
433
411
|
|
|
434
|
-
The sensitive state files (cookies, session) ARE encrypted with post-quantum
|
|
412
|
+
The sensitive state files (cookies, session) ARE encrypted with hybrid post-quantum primitives for at-rest protection. See [Post-Quantum Encryption (Local At-Rest)](#post-quantum-encryption-local-at-rest) above for the exact threat model this covers.
|
|
435
413
|
|
|
436
414
|
---
|
|
437
415
|
|
|
@@ -493,18 +471,10 @@ import {
|
|
|
493
471
|
scanAndRedactSecrets,
|
|
494
472
|
} from './utils/secrets-scanner.js';
|
|
495
473
|
|
|
496
|
-
// Certificate pinning
|
|
497
|
-
import {
|
|
498
|
-
CertificatePinningManager,
|
|
499
|
-
getCertificatePinningManager,
|
|
500
|
-
validateCertificatePin,
|
|
501
|
-
} from './utils/cert-pinning.js';
|
|
502
|
-
|
|
503
474
|
// Memory security
|
|
504
475
|
import {
|
|
505
476
|
SecureString,
|
|
506
477
|
SecureCredential,
|
|
507
|
-
SecureObject,
|
|
508
478
|
zeroBuffer,
|
|
509
479
|
withSecureCredential,
|
|
510
480
|
secureCompare,
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Based on the Python implementation from auth.py
|
|
13
13
|
*/
|
|
14
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
14
15
|
import type { BrowserContext, Page } from "patchright";
|
|
15
16
|
import type { ProgressCallback } from "../types.js";
|
|
16
17
|
export declare class AuthManager {
|
|
@@ -94,7 +95,7 @@ export declare class AuthManager {
|
|
|
94
95
|
*
|
|
95
96
|
* SIMPLE & RELIABLE: Just wait for URL to change to notebooklm.google.com
|
|
96
97
|
*/
|
|
97
|
-
performLogin(page: Page, sendProgress?: ProgressCallback): Promise<boolean>;
|
|
98
|
+
performLogin(page: Page, sendProgress?: ProgressCallback, signal?: AbortSignal): Promise<boolean>;
|
|
98
99
|
/**
|
|
99
100
|
* Attempt to authenticate using configured credentials
|
|
100
101
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../../src/auth/auth-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG
|
|
1
|
+
{"version":3,"file":"auth-manager.d.ts","sourceRoot":"","sources":["../../src/auth/auth-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA6BpD,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;;IAa7B;;;;OAIG;IACG,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAoD9E;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAKvC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI;IAQ7B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAejD;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAyBlE;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAoC9D;;OAEG;IACG,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAiDtE;;;;;;;;;;;;;;;;OAgBG;IACG,iBAAiB,CACrB,OAAO,EAAE,cAAc,EACvB,UAAU,SAAI,GACb,OAAO,CAAC,OAAO,CAAC;IAmDnB;;;OAGG;YACW,mBAAmB;IAajC;;;;OAIG;YACW,cAAc;IAc5B;;;;OAIG;YACW,sBAAsB;IAmBpC;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAgCxC;;;;;OAKG;IACG,YAAY,CAChB,IAAI,EAAE,IAAI,EACV,YAAY,CAAC,EAAE,gBAAgB,EAC/B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC;IAmGnB;;OAEG;IACG,oBAAoB,CACxB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IAqJnB;;;;;OAKG;YACW,yBAAyB;IA6BvC;;;;;OAKG;YACW,eAAe;IAuB7B;;OAEG;YACW,oBAAoB;IAgClC;;OAEG;YACW,cAAc;IAiI5B;;OAEG;YACW,YAAY;IAkG1B;;OAEG;YACW,SAAS;IAwBvB;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiCjF;;;;;;;;;;;;;;;;OAgBG;IACG,YAAY,CAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA6FjG;;;;;;;;;;OAUG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoDvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAkBpC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;CAmDzC"}
|