@roomi-fields/notebooklm-mcp 1.3.5 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +93 -658
  2. package/dist/accounts/account-manager.d.ts +163 -0
  3. package/dist/accounts/account-manager.d.ts.map +1 -0
  4. package/dist/accounts/account-manager.js +614 -0
  5. package/dist/accounts/account-manager.js.map +1 -0
  6. package/dist/accounts/auto-login-manager.d.ts +62 -0
  7. package/dist/accounts/auto-login-manager.d.ts.map +1 -0
  8. package/dist/accounts/auto-login-manager.js +537 -0
  9. package/dist/accounts/auto-login-manager.js.map +1 -0
  10. package/dist/accounts/crypto.d.ts +45 -0
  11. package/dist/accounts/crypto.d.ts.map +1 -0
  12. package/dist/accounts/crypto.js +138 -0
  13. package/dist/accounts/crypto.js.map +1 -0
  14. package/dist/accounts/index.d.ts +14 -0
  15. package/dist/accounts/index.d.ts.map +1 -0
  16. package/dist/accounts/index.js +14 -0
  17. package/dist/accounts/index.js.map +1 -0
  18. package/dist/accounts/types.d.ts +103 -0
  19. package/dist/accounts/types.d.ts.map +1 -0
  20. package/dist/accounts/types.js +7 -0
  21. package/dist/accounts/types.js.map +1 -0
  22. package/dist/auth/auth-manager.d.ts +9 -2
  23. package/dist/auth/auth-manager.d.ts.map +1 -1
  24. package/dist/auth/auth-manager.js +60 -6
  25. package/dist/auth/auth-manager.js.map +1 -1
  26. package/dist/auto-discovery/auto-discovery.d.ts.map +1 -1
  27. package/dist/auto-discovery/auto-discovery.js +2 -1
  28. package/dist/auto-discovery/auto-discovery.js.map +1 -1
  29. package/dist/cli/accounts.d.ts +13 -0
  30. package/dist/cli/accounts.d.ts.map +1 -0
  31. package/dist/cli/accounts.js +195 -0
  32. package/dist/cli/accounts.js.map +1 -0
  33. package/dist/config.d.ts.map +1 -1
  34. package/dist/config.js +9 -0
  35. package/dist/config.js.map +1 -1
  36. package/dist/content/content-generator.d.ts +153 -0
  37. package/dist/content/content-generator.d.ts.map +1 -0
  38. package/dist/content/content-generator.js +637 -0
  39. package/dist/content/content-generator.js.map +1 -0
  40. package/dist/content/content-manager.d.ts +364 -0
  41. package/dist/content/content-manager.d.ts.map +1 -0
  42. package/dist/content/content-manager.js +3846 -0
  43. package/dist/content/content-manager.js.map +1 -0
  44. package/dist/content/content-templates.d.ts +183 -0
  45. package/dist/content/content-templates.d.ts.map +1 -0
  46. package/dist/content/content-templates.js +719 -0
  47. package/dist/content/content-templates.js.map +1 -0
  48. package/dist/content/index.d.ts +14 -0
  49. package/dist/content/index.d.ts.map +1 -0
  50. package/dist/content/index.js +14 -0
  51. package/dist/content/index.js.map +1 -0
  52. package/dist/content/types.d.ts +285 -0
  53. package/dist/content/types.d.ts.map +1 -0
  54. package/dist/content/types.js +10 -0
  55. package/dist/content/types.js.map +1 -0
  56. package/dist/errors.d.ts +1 -1
  57. package/dist/errors.d.ts.map +1 -1
  58. package/dist/errors.js.map +1 -1
  59. package/dist/http-wrapper.d.ts +7 -0
  60. package/dist/http-wrapper.d.ts.map +1 -1
  61. package/dist/http-wrapper.js +449 -29
  62. package/dist/http-wrapper.js.map +1 -1
  63. package/dist/index.js +26 -2
  64. package/dist/index.js.map +1 -1
  65. package/dist/library/notebook-library.d.ts +4 -0
  66. package/dist/library/notebook-library.d.ts.map +1 -1
  67. package/dist/library/notebook-library.js +20 -3
  68. package/dist/library/notebook-library.js.map +1 -1
  69. package/dist/session/browser-session.d.ts +35 -8
  70. package/dist/session/browser-session.d.ts.map +1 -1
  71. package/dist/session/browser-session.js +242 -28
  72. package/dist/session/browser-session.js.map +1 -1
  73. package/dist/session/session-manager.d.ts +6 -0
  74. package/dist/session/session-manager.d.ts.map +1 -1
  75. package/dist/session/session-manager.js +46 -14
  76. package/dist/session/session-manager.js.map +1 -1
  77. package/dist/session/shared-context-manager.d.ts +3 -3
  78. package/dist/session/shared-context-manager.d.ts.map +1 -1
  79. package/dist/session/shared-context-manager.js +8 -7
  80. package/dist/session/shared-context-manager.js.map +1 -1
  81. package/dist/stdio-http-proxy.d.ts +24 -0
  82. package/dist/stdio-http-proxy.d.ts.map +1 -0
  83. package/dist/stdio-http-proxy.js +592 -0
  84. package/dist/stdio-http-proxy.js.map +1 -0
  85. package/dist/tools/index.d.ts +106 -1
  86. package/dist/tools/index.d.ts.map +1 -1
  87. package/dist/tools/index.js +1028 -7
  88. package/dist/tools/index.js.map +1 -1
  89. package/dist/types.d.ts +81 -17
  90. package/dist/types.d.ts.map +1 -1
  91. package/dist/utils/citation-extractor.d.ts +66 -0
  92. package/dist/utils/citation-extractor.d.ts.map +1 -0
  93. package/dist/utils/citation-extractor.js +492 -0
  94. package/dist/utils/citation-extractor.js.map +1 -0
  95. package/dist/utils/page-utils.d.ts +8 -0
  96. package/dist/utils/page-utils.d.ts.map +1 -1
  97. package/dist/utils/page-utils.js +112 -8
  98. package/dist/utils/page-utils.js.map +1 -1
  99. package/docs/ARCHITECTURE_MIGRATION_STUDY.md +894 -0
  100. package/docs/CHROME_PROFILE_LIMITATION.md +15 -1
  101. package/docs/MULTI_ACCOUNT_SYSTEM.md +304 -0
  102. package/package.json +10 -10
  103. package/dist/__tests__/cleanup-manager.test.d.ts +0 -2
  104. package/dist/__tests__/cleanup-manager.test.d.ts.map +0 -1
  105. package/dist/__tests__/cleanup-manager.test.js +0 -341
  106. package/dist/__tests__/cleanup-manager.test.js.map +0 -1
  107. package/dist/__tests__/config-parsing.test.d.ts +0 -2
  108. package/dist/__tests__/config-parsing.test.d.ts.map +0 -1
  109. package/dist/__tests__/config-parsing.test.js +0 -338
  110. package/dist/__tests__/config-parsing.test.js.map +0 -1
  111. package/dist/__tests__/config.test.d.ts +0 -2
  112. package/dist/__tests__/config.test.d.ts.map +0 -1
  113. package/dist/__tests__/config.test.js +0 -267
  114. package/dist/__tests__/config.test.js.map +0 -1
  115. package/dist/__tests__/errors.test.d.ts +0 -2
  116. package/dist/__tests__/errors.test.d.ts.map +0 -1
  117. package/dist/__tests__/errors.test.js +0 -166
  118. package/dist/__tests__/errors.test.js.map +0 -1
  119. package/dist/__tests__/logger.test.d.ts +0 -2
  120. package/dist/__tests__/logger.test.d.ts.map +0 -1
  121. package/dist/__tests__/logger.test.js +0 -324
  122. package/dist/__tests__/logger.test.js.map +0 -1
  123. package/dist/__tests__/page-utils.test.d.ts +0 -2
  124. package/dist/__tests__/page-utils.test.d.ts.map +0 -1
  125. package/dist/__tests__/page-utils.test.js +0 -349
  126. package/dist/__tests__/page-utils.test.js.map +0 -1
  127. package/dist/__tests__/setup-verification.test.d.ts +0 -2
  128. package/dist/__tests__/setup-verification.test.d.ts.map +0 -1
  129. package/dist/__tests__/setup-verification.test.js +0 -15
  130. package/dist/__tests__/setup-verification.test.js.map +0 -1
  131. package/dist/__tests__/stealth-utils.test.d.ts +0 -2
  132. package/dist/__tests__/stealth-utils.test.d.ts.map +0 -1
  133. package/dist/__tests__/stealth-utils.test.js +0 -413
  134. package/dist/__tests__/stealth-utils.test.js.map +0 -1
  135. package/dist/__tests__/types.test.d.ts +0 -2
  136. package/dist/__tests__/types.test.d.ts.map +0 -1
  137. package/dist/__tests__/types.test.js +0 -461
  138. package/dist/__tests__/types.test.js.map +0 -1
@@ -1,6 +1,20 @@
1
1
  # Chrome Profile Limitation
2
2
 
3
- ## 🚨 Current Limitation (v1.3.2)
3
+ ## SOLVED: Use the Stdio-HTTP Proxy (v1.3.6+)
4
+
5
+ **The proxy mode allows Claude Desktop and HTTP server to run simultaneously!**
6
+
7
+ ```bash
8
+ # Terminal 1: Start HTTP server (owns Chrome)
9
+ npm run start:http
10
+
11
+ # Claude Desktop uses the proxy (no Chrome needed)
12
+ # See: deployment/docs/09-MULTI-INTERFACE.md
13
+ ```
14
+
15
+ ---
16
+
17
+ ## 🚨 Original Limitation (v1.3.2-v1.3.5)
4
18
 
5
19
  **The HTTP server and MCP stdio modes cannot run simultaneously** due to Chrome profile locking.
6
20
 
@@ -0,0 +1,304 @@
1
+ # Multi-Account Management System
2
+
3
+ ## Overview
4
+
5
+ The multi-account system enables industrial-grade authentication management for NotebookLM MCP by supporting:
6
+
7
+ - **Multiple Google accounts** with encrypted credential storage
8
+ - **Account pool rotation** with configurable strategies
9
+ - **Quota tracking** per account (50 queries/day free tier)
10
+ - **Automated login** with credential replay and interstitial handling
11
+ - **TOTP 2FA support** for accounts with two-factor authentication
12
+
13
+ ## Architecture
14
+
15
+ ```
16
+ ┌─────────────────────────────────────────────────────────────────┐
17
+ │ Account Management │
18
+ ├─────────────────────────────────────────────────────────────────┤
19
+ │ │
20
+ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
21
+ │ │ Account 1 │ │ Account 2 │ │ Account N │ │
22
+ │ │ (Primary) │ │ (Backup) │ │ (Pool) │ │
23
+ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
24
+ │ │ │ │ │
25
+ │ └──────────────────┴──────────────────┘ │
26
+ │ │ │
27
+ │ ┌────────▼────────┐ │
28
+ │ │ AccountManager │ │
29
+ │ │ - Pool logic │ │
30
+ │ │ - Rotation │ │
31
+ │ │ - Quota │ │
32
+ │ └────────┬────────┘ │
33
+ │ │ │
34
+ │ ┌────────▼────────┐ │
35
+ │ │ AutoLoginManager│ │
36
+ │ │ - Credential │ │
37
+ │ │ replay │ │
38
+ │ │ - 2FA/TOTP │ │
39
+ │ │ - Interstitial │ │
40
+ │ │ handling │ │
41
+ │ └─────────────────┘ │
42
+ │ │
43
+ └─────────────────────────────────────────────────────────────────┘
44
+ ```
45
+
46
+ ## Components
47
+
48
+ ### 1. Credential Encryption (`src/accounts/crypto.ts`)
49
+
50
+ - **Algorithm**: AES-256-GCM
51
+ - **Key Management**: Auto-generated encryption key stored securely
52
+ - **Storage**: Encrypted credentials in JSON format
53
+
54
+ ```typescript
55
+ // Example encrypted credential structure
56
+ {
57
+ emailEncrypted: "base64...",
58
+ passwordEncrypted: "base64...",
59
+ totpSecretEncrypted: "base64...", // Optional
60
+ encryptedAt: "2024-01-15T10:30:00Z"
61
+ }
62
+ ```
63
+
64
+ ### 2. Account Manager (`src/accounts/account-manager.ts`)
65
+
66
+ Manages the account pool with:
67
+
68
+ - **Account lifecycle**: Add, remove, enable/disable
69
+ - **Quota tracking**: Per-account usage limits
70
+ - **Rotation strategies**:
71
+ - `least_used`: Prefer accounts with lowest usage
72
+ - `round_robin`: Sequential rotation
73
+ - `failover`: Use primary until failure
74
+ - `random`: Random selection from pool
75
+
76
+ ### 3. Auto-Login Manager (`src/accounts/auto-login-manager.ts`)
77
+
78
+ Handles automated Google authentication:
79
+
80
+ - **Credential replay**: Email and password entry with human-like typing
81
+ - **TOTP 2FA**: Automatic code generation and entry
82
+ - **Interstitial handling**: Dismisses Google prompts (passkeys, security, etc.)
83
+ - **State persistence**: Saves authenticated session for reuse
84
+
85
+ ## Adding a New Account with 2FA (Complete Procedure)
86
+
87
+ ### Prerequisites
88
+
89
+ Before adding an account, ensure it has:
90
+
91
+ - A completed Google profile (date of birth, recovery email, etc.)
92
+ - TOTP-based 2FA enabled (Google Authenticator, not SMS)
93
+ - The TOTP secret key (base32 format, e.g., `JBSWY3DPEHPK3PXP`)
94
+
95
+ ### Step 1: Add the Account
96
+
97
+ Use a TypeScript script to avoid shell escaping issues with special characters in passwords:
98
+
99
+ ```typescript
100
+ // add-account.ts
101
+ import { AccountManager } from './src/accounts/account-manager.js';
102
+
103
+ const manager = new AccountManager();
104
+ await manager.initialize();
105
+
106
+ await manager.addAccount(
107
+ 'user@gmail.com',
108
+ 'P@ssw0rd!Special$Chars', // Special chars handled correctly
109
+ 'JBSWY3DPEHPK3PXP' // TOTP secret (no spaces)
110
+ );
111
+ ```
112
+
113
+ Run with:
114
+
115
+ ```bash
116
+ npx tsx add-account.ts
117
+ ```
118
+
119
+ ### Step 2: First Login (Headed Mode Required)
120
+
121
+ **CRITICAL**: The first login MUST be in headed mode (visible browser). Google blocks headless browsers for new account connections with "This browser or app may not be secure" error.
122
+
123
+ ```bash
124
+ npx tsx src/cli/accounts.ts test <account-id> --show
125
+ ```
126
+
127
+ This step:
128
+
129
+ - Opens a visible Chrome browser
130
+ - Automatically enters email, password, and TOTP code
131
+ - No human intervention required (fully automated)
132
+ - Establishes trust with Google for future headless logins
133
+ - Saves the authenticated session
134
+
135
+ ### Step 3: Verify Headless Mode Works
136
+
137
+ After the headed login succeeds, test headless mode:
138
+
139
+ ```bash
140
+ npx tsx src/cli/accounts.ts test <account-id>
141
+ ```
142
+
143
+ Expected output: `Already authenticated (session still valid)!`
144
+
145
+ ### Step 4: Share Notebooks (Optional)
146
+
147
+ If the account needs access to existing notebooks:
148
+
149
+ 1. Share notebooks from the owner account to the new account's email
150
+ 2. The new account can access shared notebooks immediately via direct URL
151
+ 3. No need for the new account to manually open the notebook first
152
+
153
+ ### Important Notes
154
+
155
+ | Aspect | Behavior |
156
+ | ------------------- | ---------------------------------------------- |
157
+ | First login | Must be headed (`--show`), but fully automated |
158
+ | Subsequent logins | Can be headless |
159
+ | TOTP handling | Automatic code generation and entry |
160
+ | Shared notebooks | Accessible immediately via URL |
161
+ | Session persistence | Saved to browser profile for reuse |
162
+ | Google anti-bot | Blocks headless on first login only |
163
+
164
+ ### Troubleshooting
165
+
166
+ **"This browser or app may not be secure"**
167
+
168
+ - Always use `--show` for the first login
169
+ - This is Google's anti-bot detection, not an account issue
170
+
171
+ **"Password field not found"**
172
+
173
+ - Usually means Google blocked the browser
174
+ - Run with `--show` to see what's happening
175
+
176
+ **TOTP code rejected**
177
+
178
+ - Verify the TOTP secret is correct (base32, no spaces)
179
+ - Check system time is synchronized
180
+
181
+ **Session expires quickly**
182
+
183
+ - Re-run the headed login to refresh the session
184
+ - Check that the browser profile isn't corrupted
185
+
186
+ ## CLI Commands
187
+
188
+ ```bash
189
+ # Add account (without 2FA)
190
+ npm run accounts add "user@gmail.com" "password"
191
+
192
+ # Add account (with TOTP) - USE SCRIPT FOR SPECIAL CHARS
193
+ npx tsx add-account.ts # Recommended for passwords with special characters
194
+
195
+ # List all accounts
196
+ npm run accounts list
197
+
198
+ # Test auto-login (headless)
199
+ npm run accounts test <account-id>
200
+
201
+ # Test auto-login (headed - REQUIRED for first login)
202
+ npm run accounts test <account-id> --show
203
+
204
+ # Check account health
205
+ npm run accounts health
206
+
207
+ # Set rotation strategy
208
+ npm run accounts strategy least_used
209
+
210
+ # Remove account
211
+ npm run accounts remove <account-id>
212
+ ```
213
+
214
+ ## Configuration
215
+
216
+ ### Data Storage
217
+
218
+ Account data is stored in the platform-specific data directory:
219
+
220
+ - **Windows**: `%APPDATA%\notebooklm-mcp\Data\accounts\`
221
+ - **Linux**: `~/.local/share/notebooklm-mcp/accounts/`
222
+ - **macOS**: `~/Library/Application Support/notebooklm-mcp/accounts/`
223
+
224
+ ### Files
225
+
226
+ | File | Description |
227
+ | ---------------------------------------- | ------------------------------------- |
228
+ | `accounts.json` | Account configurations and state |
229
+ | `encryption.key` | AES-256 encryption key (BACKUP THIS!) |
230
+ | `accounts/<id>/credentials.enc` | Encrypted credentials per account |
231
+ | `accounts/<id>/browser_state/state.json` | Session cookies per account |
232
+
233
+ ## Security Considerations
234
+
235
+ 1. **Encryption Key**: The encryption key (`encryption.key`) must be backed up securely. Lost key = lost credentials.
236
+
237
+ 2. **Credential Storage**: Credentials are encrypted at rest using AES-256-GCM.
238
+
239
+ 3. **Browser Profiles**: Each account has isolated browser profile data.
240
+
241
+ 4. **TOTP Secrets**: If stored, TOTP secrets are also encrypted.
242
+
243
+ ## Limitations
244
+
245
+ 1. **Google Account Requirements**: Accounts must have:
246
+ - Completed profile (date of birth, etc.)
247
+ - Standard password authentication enabled
248
+ - Optional: TOTP 2FA configured (not SMS/phone)
249
+
250
+ 2. **Google Security**: Google may still require additional verification for:
251
+ - New device/location
252
+ - Suspicious activity detection
253
+ - Captcha challenges
254
+
255
+ 3. **Rate Limits**: Google may rate-limit login attempts. Space out auto-login tests.
256
+
257
+ ## Usage Example
258
+
259
+ ```typescript
260
+ import { getAccountManager, AutoLoginManager } from './accounts/index.js';
261
+
262
+ // Get account manager
263
+ const manager = await getAccountManager();
264
+
265
+ // Add an account
266
+ const accountId = await manager.addAccount(
267
+ 'user@gmail.com',
268
+ 'password',
269
+ 'TOTP_SECRET' // optional
270
+ );
271
+
272
+ // Get best account based on rotation strategy
273
+ const selection = await manager.getBestAccount();
274
+ if (selection) {
275
+ console.log(`Using: ${selection.account.config.email}`);
276
+ console.log(`Reason: ${selection.reason}`);
277
+ }
278
+
279
+ // Perform auto-login
280
+ const autoLogin = new AutoLoginManager(manager);
281
+ const result = await autoLogin.performAutoLogin(accountId, { showBrowser: true });
282
+
283
+ if (result.success) {
284
+ console.log('Login successful!');
285
+ } else {
286
+ console.log(`Login failed: ${result.error}`);
287
+ if (result.requiresManualIntervention) {
288
+ console.log('Manual verification required');
289
+ }
290
+ }
291
+
292
+ // Record usage (for quota tracking)
293
+ await manager.recordUsage(accountId);
294
+
295
+ // Check health of all accounts
296
+ const health = await manager.healthCheck();
297
+ ```
298
+
299
+ ## Future Enhancements
300
+
301
+ 1. **Session Manager Integration**: Coordinate account selection with SessionManager
302
+ 2. **Auto-refresh**: Background session keep-alive with cookie refresh
303
+ 3. **Quota Alerts**: Notifications when approaching quota limits
304
+ 4. **Account Analytics**: Usage patterns and optimization suggestions
package/package.json CHANGED
@@ -1,23 +1,21 @@
1
1
  {
2
2
  "name": "@roomi-fields/notebooklm-mcp",
3
- "version": "1.3.5",
3
+ "version": "1.5.0",
4
4
  "description": "MCP server for NotebookLM API with HTTP REST API - Zero hallucinations from your notebooks",
5
5
  "type": "module",
6
6
  "bin": {
7
- "notebooklm-mcp": "dist/index.js"
7
+ "notebooklm-mcp": "dist/index.js",
8
+ "notebooklm-mcp-proxy": "dist/stdio-http-proxy.js"
8
9
  },
9
10
  "scripts": {
10
11
  "help": "node dist/cli/help.js",
11
12
  "setup-auth": "node dist/cli/setup-auth.js",
12
13
  "de-auth": "node dist/cli/de-auth.js",
14
+ "accounts": "node dist/cli/accounts.js",
13
15
  "start:http": "node dist/http-wrapper.js",
16
+ "start:proxy": "node dist/stdio-http-proxy.js",
14
17
  "dev:http": "tsx watch src/http-wrapper.ts",
15
- "daemon:start": "pm2 start ecosystem.config.cjs",
16
- "daemon:stop": "pm2 stop notebooklm-mcp",
17
- "daemon:restart": "pm2 restart notebooklm-mcp",
18
- "daemon:logs": "pm2 logs notebooklm-mcp",
19
- "daemon:status": "pm2 status",
20
- "daemon:delete": "pm2 delete notebooklm-mcp",
18
+ "dev:proxy": "tsx watch src/stdio-http-proxy.ts",
21
19
  "build": "tsc",
22
20
  "watch": "tsc --watch",
23
21
  "dev": "tsx watch src/index.ts",
@@ -27,7 +25,9 @@
27
25
  "test:coverage": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage",
28
26
  "test:ci": "node --experimental-vm-modules node_modules/jest/bin/jest.js --ci --coverage --reporters=default",
29
27
  "test:unit": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testPathPatterns=unit",
30
- "test:integration": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testPathPatterns=integration"
28
+ "test:integration": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testPathPatterns=integration",
29
+ "test:e2e": "powershell -ExecutionPolicy Bypass -File tests/e2e/run-e2e-tests.ps1",
30
+ "test:e2e:basic": "powershell -ExecutionPolicy Bypass -File tests/e2e/run-e2e-tests.ps1 -SkipBrowserTests"
31
31
  },
32
32
  "keywords": [
33
33
  "mcp",
@@ -68,6 +68,7 @@
68
68
  "env-paths": "^3.0.0",
69
69
  "express": "^4.18.2",
70
70
  "globby": "^14.1.0",
71
+ "otplib": "^12.0.1",
71
72
  "patchright": "^1.48.2",
72
73
  "zod": "^3.22.0"
73
74
  },
@@ -84,7 +85,6 @@
84
85
  "husky": "^9.1.7",
85
86
  "jest": "^30.2.0",
86
87
  "lint-staged": "^16.2.7",
87
- "pm2": "^6.0.14",
88
88
  "prettier": "^3.6.2",
89
89
  "ts-jest": "^29.4.5",
90
90
  "tsx": "^4.7.0",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=cleanup-manager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cleanup-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cleanup-manager.test.ts"],"names":[],"mappings":""}