playwright-ms-auth 0.0.10 → 0.0.12
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 +267 -9
- package/lib/authenticate.d.ts.map +1 -1
- package/lib/authenticate.js +25 -4
- package/lib/authenticate.js.map +1 -1
- package/lib/cli.js +13 -1
- package/lib/cli.js.map +1 -1
- package/lib/types.d.ts +4 -2
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +15 -15
- package/lib/types.js.map +1 -1
- package/lib/utils.d.ts +5 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +33 -5
- package/lib/utils.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
A robust, production-ready authentication framework that simplifies Microsoft identity integration in Playwright test suites. Built with the Abstract Factory pattern, it supports both password and certificate-based authentication across multiple credential providers including Azure KeyVault, local files, environment variables, and GitHub Secrets.
|
|
15
15
|
|
|
16
|
-
Perfect for enterprise test automation requiring secure, reusable authentication flows with multi-region support and smart session caching.
|
|
16
|
+
Perfect for enterprise test automation requiring secure, reusable authentication flows with multi-region support and smart session caching. Get started in seconds with just email and password, or use enterprise-grade providers like Azure KeyVault for production.
|
|
17
17
|
|
|
18
18
|
## Tech Stack
|
|
19
19
|
|
|
@@ -41,11 +41,12 @@ Perfect for enterprise test automation requiring secure, reusable authentication
|
|
|
41
41
|
- 🏭 **Abstract Factory Pattern**: Easily extensible credential provider system
|
|
42
42
|
- ☁️ **Multiple Providers**: Azure KeyVault, Local File, Environment Variables, GitHub Secrets
|
|
43
43
|
- 🌍 **Multi-Region Support**: Works with different Microsoft Entra endpoints
|
|
44
|
-
- 🔧 **CLI Tool**: Full-featured command-line interface
|
|
44
|
+
- 🔧 **CLI Tool**: Full-featured command-line interface with direct password support
|
|
45
45
|
- 🌳 **Environment Variables**: Complete configuration via environment variables
|
|
46
46
|
- 💾 **Smart Caching**: Automatic storage state management with expiration
|
|
47
47
|
- 📝 **TypeScript**: Full type safety and IntelliSense support
|
|
48
48
|
- 🐛 **Debug Logging**: Comprehensive logging for troubleshooting
|
|
49
|
+
- ⚡ **Zero Config for Simple Cases**: Just email and password to get started
|
|
49
50
|
|
|
50
51
|
## Installation
|
|
51
52
|
|
|
@@ -58,14 +59,26 @@ npm install playwright-ms-auth
|
|
|
58
59
|
### Using CLI
|
|
59
60
|
|
|
60
61
|
```bash
|
|
61
|
-
#
|
|
62
|
+
# Simple password authentication (for testing/development)
|
|
63
|
+
npx ms-auth login \
|
|
64
|
+
--url https://your-app.com \
|
|
65
|
+
--email user@company.com \
|
|
66
|
+
--password "your-password"
|
|
67
|
+
|
|
68
|
+
# Run in headful mode (visible browser window)
|
|
69
|
+
npx ms-auth login \
|
|
70
|
+
--url https://your-app.com \
|
|
71
|
+
--email user@company.com \
|
|
72
|
+
--password "your-password" \
|
|
73
|
+
--headful
|
|
74
|
+
|
|
75
|
+
# Authenticate with Azure KeyVault (recommended for production)
|
|
62
76
|
npx ms-auth login \
|
|
63
77
|
--url https://your-app.com \
|
|
64
78
|
--email user@company.com \
|
|
65
79
|
--credential-provider azure-keyvault \
|
|
66
80
|
--keyvault-endpoint https://your-vault.vault.azure.net \
|
|
67
|
-
--keyvault-secret your-secret-name
|
|
68
|
-
--debug
|
|
81
|
+
--keyvault-secret your-secret-name
|
|
69
82
|
|
|
70
83
|
# Authenticate with local certificate file
|
|
71
84
|
npx ms-auth login \
|
|
@@ -166,7 +179,7 @@ const config: MsAuthConfig = {
|
|
|
166
179
|
|
|
167
180
|
### Environment Variables
|
|
168
181
|
|
|
169
|
-
Read credentials directly from environment variables.
|
|
182
|
+
Read credentials directly from environment variables. **Also used when passing `--password` via CLI.**
|
|
170
183
|
|
|
171
184
|
```typescript
|
|
172
185
|
const config: MsAuthConfig = {
|
|
@@ -179,10 +192,30 @@ const config: MsAuthConfig = {
|
|
|
179
192
|
};
|
|
180
193
|
```
|
|
181
194
|
|
|
195
|
+
**CLI Usage:**
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Direct password (automatically uses environment provider)
|
|
199
|
+
npx ms-auth login \
|
|
200
|
+
--url https://your-app.com \
|
|
201
|
+
--email user@company.com \
|
|
202
|
+
--password "your-password"
|
|
203
|
+
|
|
204
|
+
# Or use environment variable
|
|
205
|
+
export MY_PASSWORD_VAR="your-password"
|
|
206
|
+
npx ms-auth login \
|
|
207
|
+
--url https://your-app.com \
|
|
208
|
+
--email user@company.com \
|
|
209
|
+
--credential-provider environment \
|
|
210
|
+
--env-variable MY_PASSWORD_VAR
|
|
211
|
+
```
|
|
212
|
+
|
|
182
213
|
**Environment Variables:**
|
|
183
214
|
|
|
184
215
|
- `MS_AUTH_ENV_VARIABLE_NAME`
|
|
185
216
|
|
|
217
|
+
⚠️ **Security Note**: Using `--password` directly in CLI is not recommended for production. Use Azure KeyVault or other secure providers instead.
|
|
218
|
+
|
|
186
219
|
### GitHub Secrets
|
|
187
220
|
|
|
188
221
|
Use GitHub Actions secrets (reads from environment).
|
|
@@ -213,11 +246,45 @@ All configuration can be provided via environment variables. Run `npx ms-auth en
|
|
|
213
246
|
|
|
214
247
|
- `MS_AUTH_EMAIL` - User email address
|
|
215
248
|
- `MS_AUTH_CREDENTIAL_TYPE` - `password` or `certificate`
|
|
216
|
-
- `MS_AUTH_CREDENTIAL_PROVIDER` - Provider type
|
|
217
|
-
- `MS_AUTH_OUTPUT_DIR` - Directory for storage state files
|
|
249
|
+
- `MS_AUTH_CREDENTIAL_PROVIDER` - Provider type (auto-set to `environment` when using `--password`)
|
|
250
|
+
- `MS_AUTH_OUTPUT_DIR` - Directory for storage state files (defaults to project root)
|
|
218
251
|
- `MS_AUTH_LOGIN_ENDPOINT` - Entra endpoint (default: `login.microsoftonline.com`)
|
|
219
252
|
- `MS_AUTH_STORAGE_STATE_EXPIRATION` - Hours until state expires (default: 24)
|
|
220
|
-
- `SYSTEM_DEBUG` - Enable debug logging (`true`/`false`)
|
|
253
|
+
- `SYSTEM_DEBUG` - Enable detailed debug logging (`true`/`false`, default: `false`)
|
|
254
|
+
|
|
255
|
+
### Debugging
|
|
256
|
+
|
|
257
|
+
Enable detailed logging to troubleshoot authentication issues:
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
# Enable debug logging via environment variable
|
|
261
|
+
export SYSTEM_DEBUG=true
|
|
262
|
+
npx ms-auth login --url https://your-app.com --email user@company.com --password "your-password"
|
|
263
|
+
|
|
264
|
+
# Or inline
|
|
265
|
+
SYSTEM_DEBUG=true npx ms-auth login --url https://your-app.com --email user@company.com --password "your-password"
|
|
266
|
+
|
|
267
|
+
# In .env file
|
|
268
|
+
SYSTEM_DEBUG=true
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
When `SYSTEM_DEBUG=true`, you'll see detailed logs including:
|
|
272
|
+
|
|
273
|
+
- Authentication flow steps
|
|
274
|
+
- Credential provider operations
|
|
275
|
+
- Browser launch parameters
|
|
276
|
+
- Storage state paths
|
|
277
|
+
- Screenshot locations
|
|
278
|
+
- URL redirects and navigation events
|
|
279
|
+
|
|
280
|
+
### Quick Reference
|
|
281
|
+
|
|
282
|
+
| Use Case | Command |
|
|
283
|
+
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
284
|
+
| **Development/Testing** | `npx ms-auth login --url <url> --email <email> --password <pwd>` |
|
|
285
|
+
| **Production (KeyVault)** | `npx ms-auth login --url <url> --email <email> --credential-provider azure-keyvault --keyvault-endpoint <endpoint> --keyvault-secret <secret>` |
|
|
286
|
+
| **Certificate Auth** | `npx ms-auth login --url <url> --email <email> --credential-type certificate --credential-provider local-file --local-file <path>` |
|
|
287
|
+
| **Environment Var** | `npx ms-auth login --url <url> --email <email> --credential-provider environment --env-variable MY_VAR` |
|
|
221
288
|
|
|
222
289
|
## Architecture
|
|
223
290
|
|
|
@@ -474,6 +541,11 @@ playwright-ms-auth/
|
|
|
474
541
|
│ ├── GitHubSecretsProvider.ts # GitHub secrets implementation
|
|
475
542
|
│ ├── CredentialProviderFactory.ts # Factory pattern
|
|
476
543
|
│ └── index.ts # Provider exports
|
|
544
|
+
├── examples/
|
|
545
|
+
│ ├── msLogin.ts # Example authentication helper
|
|
546
|
+
│ ├── .env.example # Environment template
|
|
547
|
+
│ ├── package.json # Example dependencies
|
|
548
|
+
│ └── README.md # Example documentation
|
|
477
549
|
├── bin/
|
|
478
550
|
│ └── ms-auth # CLI executable
|
|
479
551
|
├── package.json
|
|
@@ -481,6 +553,25 @@ playwright-ms-auth/
|
|
|
481
553
|
└── README.md
|
|
482
554
|
```
|
|
483
555
|
|
|
556
|
+
## Examples
|
|
557
|
+
|
|
558
|
+
Check out the [`examples/`](./examples) directory for a complete working example:
|
|
559
|
+
|
|
560
|
+
```bash
|
|
561
|
+
cd examples
|
|
562
|
+
npm install
|
|
563
|
+
npm run login
|
|
564
|
+
```
|
|
565
|
+
|
|
566
|
+
The example includes:
|
|
567
|
+
|
|
568
|
+
- 📝 Ready-to-use authentication helper (`msLogin.ts`)
|
|
569
|
+
- 🔧 Pre-configured environment file
|
|
570
|
+
- 📚 Complete documentation
|
|
571
|
+
- ⚡ NPM scripts for easy execution
|
|
572
|
+
|
|
573
|
+
See [`examples/README.md`](./examples/README.md) for details.
|
|
574
|
+
|
|
484
575
|
## Abstract Factory Pattern
|
|
485
576
|
|
|
486
577
|
The package uses the **Abstract Factory Pattern** for extensibility:
|
|
@@ -520,6 +611,173 @@ class MyCustomProvider extends CredentialProvider {
|
|
|
520
611
|
}
|
|
521
612
|
```
|
|
522
613
|
|
|
614
|
+
## Troubleshooting & FAQ
|
|
615
|
+
|
|
616
|
+
### Authentication Issues
|
|
617
|
+
|
|
618
|
+
**Q: Browser is not visible when using `--headful` flag**
|
|
619
|
+
|
|
620
|
+
A: Make sure you're running the latest version and that Microsoft Edge is installed. The package uses Edge for better Windows compatibility.
|
|
621
|
+
|
|
622
|
+
```bash
|
|
623
|
+
# Verify Edge channel is working
|
|
624
|
+
npx playwright install msedge
|
|
625
|
+
```
|
|
626
|
+
|
|
627
|
+
**Q: Authentication times out waiting for redirect**
|
|
628
|
+
|
|
629
|
+
A: This usually happens when SharePoint redirects to a different page after login. The package automatically handles redirects to any page on the same domain. Enable debug logging to see the actual redirect:
|
|
630
|
+
|
|
631
|
+
```bash
|
|
632
|
+
SYSTEM_DEBUG=true npx ms-auth login --url https://your-site.com --email user@company.com --password "pwd"
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
**Q: "page.waitForURL: Timeout exceeded" error**
|
|
636
|
+
|
|
637
|
+
A: The authentication may have succeeded but redirected to a different page than expected. Check the logs for "navigated to" message. This is normal for SharePoint sites that redirect to home pages.
|
|
638
|
+
|
|
639
|
+
**Q: Screenshot saved to wrong location**
|
|
640
|
+
|
|
641
|
+
A: Screenshots are saved to `<project-root>/screenshots/` by default. To change this, set `MS_AUTH_OUTPUT_DIR`:
|
|
642
|
+
|
|
643
|
+
```bash
|
|
644
|
+
export MS_AUTH_OUTPUT_DIR=/path/to/custom/dir
|
|
645
|
+
```
|
|
646
|
+
|
|
647
|
+
### Storage State Issues
|
|
648
|
+
|
|
649
|
+
**Q: Where are storage state files saved?**
|
|
650
|
+
|
|
651
|
+
A: By default, storage state files are saved to `<project-root>/.playwright-ms-auth/state-{email}.json`. You can customize this with the `MS_AUTH_OUTPUT_DIR` environment variable.
|
|
652
|
+
|
|
653
|
+
**Q: How long do storage states last?**
|
|
654
|
+
|
|
655
|
+
A: Storage states expire after 24 hours by default. Configure with `MS_AUTH_STORAGE_STATE_EXPIRATION` (in hours):
|
|
656
|
+
|
|
657
|
+
```bash
|
|
658
|
+
export MS_AUTH_STORAGE_STATE_EXPIRATION=48 # 48 hours
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
**Q: How do I force re-authentication?**
|
|
662
|
+
|
|
663
|
+
A: Delete the storage state file or use the CLI:
|
|
664
|
+
|
|
665
|
+
```bash
|
|
666
|
+
# Find and delete the storage state file
|
|
667
|
+
rm .playwright-ms-auth/state-your-email@company.com.json
|
|
668
|
+
|
|
669
|
+
# Or use clearAuth from examples
|
|
670
|
+
npm run clear-auth
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
### Debugging
|
|
674
|
+
|
|
675
|
+
**Q: How do I enable detailed logging?**
|
|
676
|
+
|
|
677
|
+
A: Set `SYSTEM_DEBUG=true` to see detailed authentication flow:
|
|
678
|
+
|
|
679
|
+
```bash
|
|
680
|
+
# Temporary (command line)
|
|
681
|
+
SYSTEM_DEBUG=true npx ms-auth login --url https://site.com --email user@company.com --password "pwd"
|
|
682
|
+
|
|
683
|
+
# Permanent (in .env file)
|
|
684
|
+
SYSTEM_DEBUG=true
|
|
685
|
+
```
|
|
686
|
+
|
|
687
|
+
Debug logs include:
|
|
688
|
+
|
|
689
|
+
- Credential provider operations
|
|
690
|
+
- Browser launch parameters (headless/headful)
|
|
691
|
+
- Storage state paths
|
|
692
|
+
- Screenshot locations
|
|
693
|
+
- Navigation events and redirects
|
|
694
|
+
- Authentication flow steps
|
|
695
|
+
|
|
696
|
+
**Q: Authentication succeeds but I get errors in my tests**
|
|
697
|
+
|
|
698
|
+
A: Verify the storage state file exists and check its timestamp:
|
|
699
|
+
|
|
700
|
+
```bash
|
|
701
|
+
# Check if file exists and when it was created
|
|
702
|
+
ls -la .playwright-ms-auth/state-*.json
|
|
703
|
+
|
|
704
|
+
# View file contents (check cookies)
|
|
705
|
+
cat .playwright-ms-auth/state-*.json
|
|
706
|
+
```
|
|
707
|
+
|
|
708
|
+
**Q: Getting "Cannot find module" errors**
|
|
709
|
+
|
|
710
|
+
A: Make sure to rebuild after making changes:
|
|
711
|
+
|
|
712
|
+
```bash
|
|
713
|
+
npm run build
|
|
714
|
+
|
|
715
|
+
# If using examples directory
|
|
716
|
+
cd examples
|
|
717
|
+
rm -rf node_modules/playwright-ms-auth
|
|
718
|
+
npm install
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
### Certificate Authentication
|
|
722
|
+
|
|
723
|
+
**Q: Certificate authentication fails with validation error**
|
|
724
|
+
|
|
725
|
+
A: Ensure:
|
|
726
|
+
|
|
727
|
+
1. Certificate is in PFX/P12 format
|
|
728
|
+
2. Certificate is not expired
|
|
729
|
+
3. Certificate password is correct (if encrypted)
|
|
730
|
+
4. Certificate is trusted by the Entra tenant
|
|
731
|
+
|
|
732
|
+
**Q: How do I convert PEM to PFX?**
|
|
733
|
+
|
|
734
|
+
```bash
|
|
735
|
+
openssl pkcs12 -export -out cert.pfx -inkey private.key -in certificate.crt
|
|
736
|
+
```
|
|
737
|
+
|
|
738
|
+
### Production Issues
|
|
739
|
+
|
|
740
|
+
**Q: Should I use `--password` flag in production?**
|
|
741
|
+
|
|
742
|
+
A: No. Use Azure KeyVault or other secure credential providers for production:
|
|
743
|
+
|
|
744
|
+
```bash
|
|
745
|
+
# Production (Azure KeyVault)
|
|
746
|
+
npx ms-auth login \
|
|
747
|
+
--url https://your-site.com \
|
|
748
|
+
--email user@company.com \
|
|
749
|
+
--credential-provider azure-keyvault \
|
|
750
|
+
--keyvault-endpoint https://vault.vault.azure.net \
|
|
751
|
+
--keyvault-secret secret-name
|
|
752
|
+
```
|
|
753
|
+
|
|
754
|
+
**Q: How do I handle multiple environments?**
|
|
755
|
+
|
|
756
|
+
A: Use different `.env` files or environment-specific configuration:
|
|
757
|
+
|
|
758
|
+
```bash
|
|
759
|
+
# Development
|
|
760
|
+
SYSTEM_DEBUG=true npm run login
|
|
761
|
+
|
|
762
|
+
# Production
|
|
763
|
+
MS_AUTH_CREDENTIAL_PROVIDER=azure-keyvault npm run login
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
**Q: Can I use this in CI/CD pipelines?**
|
|
767
|
+
|
|
768
|
+
A: Yes! Use GitHub Secrets or Azure KeyVault providers:
|
|
769
|
+
|
|
770
|
+
```yaml
|
|
771
|
+
# GitHub Actions example
|
|
772
|
+
- name: Authenticate
|
|
773
|
+
env:
|
|
774
|
+
MS_AUTH_EMAIL: ${{ secrets.MS_AUTH_EMAIL }}
|
|
775
|
+
MS_USER_PASSWORD: ${{ secrets.MS_USER_PASSWORD }}
|
|
776
|
+
MS_AUTH_CREDENTIAL_PROVIDER: environment
|
|
777
|
+
MS_AUTH_ENV_VARIABLE_NAME: MS_USER_PASSWORD
|
|
778
|
+
run: npx ms-auth login --url https://your-site.com
|
|
779
|
+
```
|
|
780
|
+
|
|
523
781
|
## License
|
|
524
782
|
|
|
525
783
|
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate.d.ts","sourceRoot":"","sources":["../src/authenticate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,SAAS,CAAC;AAc9D;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"authenticate.d.ts","sourceRoot":"","sources":["../src/authenticate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,SAAS,CAAC;AAc9D;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAuEf;AAiPD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5E"}
|
package/lib/authenticate.js
CHANGED
|
@@ -18,6 +18,9 @@ export async function authenticate(config, targetUrl) {
|
|
|
18
18
|
log(`[MsAuth] Starting authentication for '${config.email}'`);
|
|
19
19
|
log(`[MsAuth] Credential provider: ${config.credentialProvider}`);
|
|
20
20
|
log(`[MsAuth] Credential type: ${config.credentialType}`);
|
|
21
|
+
if (config.headless === false) {
|
|
22
|
+
log(`[MsAuth] Running in headful mode (visible browser)`);
|
|
23
|
+
}
|
|
21
24
|
// Create credential provider and retrieve credential
|
|
22
25
|
const provider = CredentialProviderFactory.createProvider(config.credentialProvider, config.providerConfig);
|
|
23
26
|
const credential = await provider.getCredential();
|
|
@@ -26,10 +29,16 @@ export async function authenticate(config, targetUrl) {
|
|
|
26
29
|
log(`[MsAuth] ##[warning]Credential type mismatch: expected '${config.credentialType}' but got '${credential.type}'`);
|
|
27
30
|
}
|
|
28
31
|
// Launch browser and perform authentication
|
|
32
|
+
const headlessMode = config.headless !== false;
|
|
33
|
+
console.log(`[CONSOLE] About to launch browser with headless=${headlessMode} (config.headless=${config.headless})`);
|
|
34
|
+
log(`[MsAuth] About to launch browser with headless=${headlessMode} (config.headless=${config.headless})`);
|
|
29
35
|
const browser = await chromium.launch({
|
|
30
|
-
headless:
|
|
36
|
+
headless: headlessMode,
|
|
37
|
+
channel: "msedge", // Use Microsoft Edge for better Windows compatibility
|
|
31
38
|
args: ["--no-sandbox", "--disable-setuid-sandbox"],
|
|
32
39
|
});
|
|
40
|
+
console.log(`[CONSOLE] Browser launched successfully with headless=${headlessMode}`);
|
|
41
|
+
log(`[MsAuth] Browser launched successfully`);
|
|
33
42
|
try {
|
|
34
43
|
await performAuthenticationFlow(browser, config, targetUrl, credential, storagePath);
|
|
35
44
|
log(`[MsAuth] ##[section]Authentication completed successfully for '${config.email}'`);
|
|
@@ -69,9 +78,21 @@ async function performAuthenticationFlow(browser, config, targetUrl, credential,
|
|
|
69
78
|
}
|
|
70
79
|
// Handle "Stay signed in?" prompt
|
|
71
80
|
await handleStaySignedIn(page);
|
|
72
|
-
// Wait for redirect to target URL
|
|
73
|
-
log(`[MsAuth] Waiting for redirect to target
|
|
74
|
-
|
|
81
|
+
// Wait for redirect to target URL or any page on the same domain
|
|
82
|
+
log(`[MsAuth] Waiting for redirect to target domain`);
|
|
83
|
+
const targetDomain = new URL(targetUrl).origin;
|
|
84
|
+
try {
|
|
85
|
+
// Try to wait for the exact URL first
|
|
86
|
+
await page.waitForURL(targetUrl, { timeout: 5000 });
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// If exact URL doesn't match, check if we're on the same domain (authentication succeeded)
|
|
90
|
+
const currentUrl = page.url();
|
|
91
|
+
if (!currentUrl.startsWith(targetDomain)) {
|
|
92
|
+
throw new Error(`Authentication may have failed. Expected to be on ${targetDomain}, but got ${currentUrl}`);
|
|
93
|
+
}
|
|
94
|
+
log(`[MsAuth] Redirected to ${currentUrl} (authentication successful)`);
|
|
95
|
+
}
|
|
75
96
|
// Give it a bit more time for cookies to settle
|
|
76
97
|
await page.waitForTimeout(2000);
|
|
77
98
|
// Save storage state
|
package/lib/authenticate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../src/authenticate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EACL,GAAG,EACH,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAE3D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAoB,EACpB,SAAiB;IAEjB,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtD,iDAAiD;IACjD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CACvC,WAAW,EACX,MAAM,CAAC,sBAAsB,CAC9B,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,GAAG,CACD,+BAA+B,MAAM,CAAC,KAAK,2CAA2C,CACvF,CAAC;QACF,OAAO;IACT,CAAC;IAED,GAAG,CAAC,yCAAyC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IAC9D,GAAG,CAAC,iCAAiC,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,6BAA6B,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"authenticate.js","sourceRoot":"","sources":["../src/authenticate.ts"],"names":[],"mappings":"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"}
|
package/lib/cli.js
CHANGED
|
@@ -20,9 +20,11 @@ program
|
|
|
20
20
|
.option("--keyvault-secret <secret>", `Azure KeyVault secret name (or set ${EnvVars.KEYVAULT_SECRET_NAME})`)
|
|
21
21
|
.option("--local-file <path>", `Local file path for credential (or set ${EnvVars.LOCAL_FILE_PATH})`)
|
|
22
22
|
.option("--env-variable <name>", `Environment variable name (or set ${EnvVars.ENV_VARIABLE_NAME})`)
|
|
23
|
+
.option("--password <password>", `Password for authentication (not recommended for production, use credential providers instead)`)
|
|
23
24
|
.option("--github-repo <repo>", `GitHub repository owner/repo (or set ${EnvVars.GITHUB_REPOSITORY})`)
|
|
24
25
|
.option("--github-secret <secret>", `GitHub secret name (or set ${EnvVars.GITHUB_SECRET_NAME})`)
|
|
25
26
|
.option("--output-dir <dir>", `Output directory for storage state (or set ${EnvVars.OUTPUT_DIR})`)
|
|
27
|
+
.option("--headful", "Run browser in headful mode (visible browser window)")
|
|
26
28
|
.option("--debug", "Enable debug logging")
|
|
27
29
|
.action(async (options) => {
|
|
28
30
|
try {
|
|
@@ -37,8 +39,15 @@ program
|
|
|
37
39
|
process.env[EnvVars.EMAIL] = options.email;
|
|
38
40
|
if (options.credentialType)
|
|
39
41
|
process.env[EnvVars.CREDENTIAL_TYPE] = options.credentialType;
|
|
40
|
-
|
|
42
|
+
// Handle password option - automatically set provider to environment
|
|
43
|
+
if (options.password) {
|
|
44
|
+
process.env[EnvVars.CREDENTIAL_PROVIDER] = "environment";
|
|
45
|
+
process.env[EnvVars.ENV_VARIABLE_NAME] = "MS_AUTH_PASSWORD_INLINE";
|
|
46
|
+
process.env["MS_AUTH_PASSWORD_INLINE"] = options.password;
|
|
47
|
+
}
|
|
48
|
+
else if (options.credentialProvider) {
|
|
41
49
|
process.env[EnvVars.CREDENTIAL_PROVIDER] = options.credentialProvider;
|
|
50
|
+
}
|
|
42
51
|
if (options.keyvaultEndpoint)
|
|
43
52
|
process.env[EnvVars.KEYVAULT_ENDPOINT] = options.keyvaultEndpoint;
|
|
44
53
|
if (options.keyvaultSecret)
|
|
@@ -55,10 +64,13 @@ program
|
|
|
55
64
|
process.env[EnvVars.OUTPUT_DIR] = options.outputDir;
|
|
56
65
|
// Load configuration from environment
|
|
57
66
|
const config = loadConfigFromEnv();
|
|
67
|
+
// Set headless mode based on --headful flag
|
|
68
|
+
config.headless = !options.headful; // If --headful is set, headless = false
|
|
58
69
|
validateConfig(config);
|
|
59
70
|
log(`[CLI] Email: ${config.email}`);
|
|
60
71
|
log(`[CLI] Credential type: ${config.credentialType}`);
|
|
61
72
|
log(`[CLI] Credential provider: ${config.credentialProvider}`);
|
|
73
|
+
log(`[CLI] Browser mode: ${config.headless ? "headless" : "headful"}`);
|
|
62
74
|
// Perform authentication
|
|
63
75
|
await authenticate(config, options.url);
|
|
64
76
|
console.log("✅ Authentication successful!");
|
package/lib/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,mDAAmD,CAAC;KAChE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,cAAc,CAAC,iBAAiB,EAAE,oCAAoC,CAAC;KACvE,MAAM,CAAC,qBAAqB,EAAE,sBAAsB,OAAO,CAAC,KAAK,GAAG,CAAC;KACrE,MAAM,CACL,8BAA8B,EAC9B,iDAAiD,OAAO,CAAC,eAAe,GAAG,EAC3E,UAAU,CACX;KACA,MAAM,CACL,sCAAsC,EACtC,qFAAqF,OAAO,CAAC,mBAAmB,GAAG,EACnH,gBAAgB,CACjB;KACA,MAAM,CACL,gCAAgC,EAChC,mCAAmC,OAAO,CAAC,iBAAiB,GAAG,CAChE;KACA,MAAM,CACL,4BAA4B,EAC5B,sCAAsC,OAAO,CAAC,oBAAoB,GAAG,CACtE;KACA,MAAM,CACL,qBAAqB,EACrB,0CAA0C,OAAO,CAAC,eAAe,GAAG,CACrE;KACA,MAAM,CACL,uBAAuB,EACvB,qCAAqC,OAAO,CAAC,iBAAiB,GAAG,CAClE;KACA,MAAM,CACL,sBAAsB,EACtB,wCAAwC,OAAO,CAAC,iBAAiB,GAAG,CACrE;KACA,MAAM,CACL,0BAA0B,EAC1B,8BAA8B,OAAO,CAAC,kBAAkB,GAAG,CAC5D;KACA,MAAM,CACL,oBAAoB,EACpB,8CAA8C,OAAO,CAAC,UAAU,GAAG,CACpE;KACA,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;KACzC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,oCAAoC;QACpC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;QAC7C,CAAC;QAED,GAAG,CAAC,+BAA+B,CAAC,CAAC;QACrC,GAAG,CAAC,qBAAqB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAExC,6CAA6C;QAC7C,IAAI,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9D,IAAI,OAAO,CAAC,cAAc;YACxB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Authentication configuration types for playwright-ms-auth
|
|
3
3
|
*/
|
|
4
4
|
/** Supported credential types */
|
|
5
|
-
export type CredentialType =
|
|
5
|
+
export type CredentialType = "password" | "certificate";
|
|
6
6
|
/** Supported credential provider types */
|
|
7
|
-
export type CredentialProviderType =
|
|
7
|
+
export type CredentialProviderType = "azure-keyvault" | "local-file" | "environment" | "github-secrets";
|
|
8
8
|
/** Base configuration for authentication */
|
|
9
9
|
export interface AuthConfig {
|
|
10
10
|
/** User email/username */
|
|
@@ -19,6 +19,8 @@ export interface AuthConfig {
|
|
|
19
19
|
storageStateExpiration?: number;
|
|
20
20
|
/** Entra login endpoint (default: login.microsoftonline.com) */
|
|
21
21
|
loginEndpoint?: string;
|
|
22
|
+
/** Run browser in headless mode (default: true) */
|
|
23
|
+
headless?: boolean;
|
|
22
24
|
}
|
|
23
25
|
/** Configuration for Azure KeyVault credential provider */
|
|
24
26
|
export interface AzureKeyVaultConfig {
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,aAAa,CAAC;AAExD,0CAA0C;AAC1C,MAAM,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,aAAa,CAAC;AAExD,0CAA0C;AAC1C,MAAM,MAAM,sBAAsB,GAC9B,gBAAgB,GAChB,YAAY,GACZ,aAAa,GACb,gBAAgB,CAAC;AAErB,4CAA4C;AAC5C,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IAEd,wCAAwC;IACxC,cAAc,EAAE,cAAc,CAAC;IAE/B,wCAAwC;IACxC,kBAAkB,EAAE,sBAAsB,CAAC;IAE3C,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sDAAsD;IACtD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IAEnB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IAEjB,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IAErB,mDAAmD;IACnD,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,2DAA2D;AAC3D,MAAM,WAAW,mBAAmB;IAClC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IAEnB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IAEnB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iDAAiD;AACjD,MAAM,MAAM,cAAc,GACtB,mBAAmB,GACnB,eAAe,GACf,iBAAiB,GACjB,mBAAmB,CAAC;AAExB,4CAA4C;AAC5C,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,sCAAsC;IACtC,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,qCAAqC;AACrC,eAAO,MAAM,OAAO;IAClB,iBAAiB;;IAGjB,6CAA6C;;IAG7C,+BAA+B;;IAG/B,8BAA8B;;IAG9B,2BAA2B;;IAG3B,sBAAsB;;IAGtB,2BAA2B;;IAG3B,+CAA+C;;IAG/C,yCAAyC;;IAGzC,2BAA2B;;IAG3B,qCAAqC;;IAGrC,wBAAwB;;IAGxB,yBAAyB;;IAGzB,mBAAmB;;IAGnB,oBAAoB;;CAEZ,CAAC;AAEX,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,IAAI,EAAE,cAAc,CAAC;IAErB,mEAAmE;IACnE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,0CAA0C;AAC1C,MAAM,WAAW,QAAQ;IACvB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IAEd,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
|
package/lib/types.js
CHANGED
|
@@ -4,34 +4,34 @@
|
|
|
4
4
|
/** CLI environment variable names */
|
|
5
5
|
export const EnvVars = {
|
|
6
6
|
/** User email */
|
|
7
|
-
EMAIL:
|
|
7
|
+
EMAIL: "MS_AUTH_EMAIL",
|
|
8
8
|
/** Credential type (password|certificate) */
|
|
9
|
-
CREDENTIAL_TYPE:
|
|
9
|
+
CREDENTIAL_TYPE: "MS_AUTH_CREDENTIAL_TYPE",
|
|
10
10
|
/** Credential provider type */
|
|
11
|
-
CREDENTIAL_PROVIDER:
|
|
11
|
+
CREDENTIAL_PROVIDER: "MS_AUTH_CREDENTIAL_PROVIDER",
|
|
12
12
|
/** Azure KeyVault endpoint */
|
|
13
|
-
KEYVAULT_ENDPOINT:
|
|
13
|
+
KEYVAULT_ENDPOINT: "MS_AUTH_KEYVAULT_ENDPOINT",
|
|
14
14
|
/** KeyVault secret name */
|
|
15
|
-
KEYVAULT_SECRET_NAME:
|
|
15
|
+
KEYVAULT_SECRET_NAME: "MS_AUTH_KEYVAULT_SECRET_NAME",
|
|
16
16
|
/** Local file path */
|
|
17
|
-
LOCAL_FILE_PATH:
|
|
17
|
+
LOCAL_FILE_PATH: "MS_AUTH_LOCAL_FILE_PATH",
|
|
18
18
|
/** Certificate password */
|
|
19
|
-
CERTIFICATE_PASSWORD:
|
|
19
|
+
CERTIFICATE_PASSWORD: "MS_AUTH_CERTIFICATE_PASSWORD",
|
|
20
20
|
/** Environment variable name for credential */
|
|
21
|
-
ENV_VARIABLE_NAME:
|
|
21
|
+
ENV_VARIABLE_NAME: "MS_AUTH_ENV_VARIABLE_NAME",
|
|
22
22
|
/** Output directory for storage state */
|
|
23
|
-
OUTPUT_DIR:
|
|
23
|
+
OUTPUT_DIR: "MS_AUTH_OUTPUT_DIR",
|
|
24
24
|
/** Entra login endpoint */
|
|
25
|
-
LOGIN_ENDPOINT:
|
|
25
|
+
LOGIN_ENDPOINT: "MS_AUTH_LOGIN_ENDPOINT",
|
|
26
26
|
/** Storage state expiration hours */
|
|
27
|
-
STORAGE_STATE_EXPIRATION:
|
|
27
|
+
STORAGE_STATE_EXPIRATION: "MS_AUTH_STORAGE_STATE_EXPIRATION",
|
|
28
28
|
/** GitHub repository */
|
|
29
|
-
GITHUB_REPOSITORY:
|
|
29
|
+
GITHUB_REPOSITORY: "MS_AUTH_GITHUB_REPOSITORY",
|
|
30
30
|
/** GitHub secret name */
|
|
31
|
-
GITHUB_SECRET_NAME:
|
|
31
|
+
GITHUB_SECRET_NAME: "MS_AUTH_GITHUB_SECRET_NAME",
|
|
32
32
|
/** GitHub token */
|
|
33
|
-
GITHUB_TOKEN:
|
|
33
|
+
GITHUB_TOKEN: "MS_AUTH_GITHUB_TOKEN",
|
|
34
34
|
/** Debug logging */
|
|
35
|
-
SYSTEM_DEBUG:
|
|
35
|
+
SYSTEM_DEBUG: "SYSTEM_DEBUG",
|
|
36
36
|
};
|
|
37
37
|
//# sourceMappingURL=types.js.map
|
package/lib/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2FH,qCAAqC;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,iBAAiB;IACjB,KAAK,EAAE,eAAe;IAEtB,6CAA6C;IAC7C,eAAe,EAAE,yBAAyB;IAE1C,+BAA+B;IAC/B,mBAAmB,EAAE,6BAA6B;IAElD,8BAA8B;IAC9B,iBAAiB,EAAE,2BAA2B;IAE9C,2BAA2B;IAC3B,oBAAoB,EAAE,8BAA8B;IAEpD,sBAAsB;IACtB,eAAe,EAAE,yBAAyB;IAE1C,2BAA2B;IAC3B,oBAAoB,EAAE,8BAA8B;IAEpD,+CAA+C;IAC/C,iBAAiB,EAAE,2BAA2B;IAE9C,yCAAyC;IACzC,UAAU,EAAE,oBAAoB;IAEhC,2BAA2B;IAC3B,cAAc,EAAE,wBAAwB;IAExC,qCAAqC;IACrC,wBAAwB,EAAE,kCAAkC;IAE5D,wBAAwB;IACxB,iBAAiB,EAAE,2BAA2B;IAE9C,yBAAyB;IACzB,kBAAkB,EAAE,4BAA4B;IAEhD,mBAAmB;IACnB,YAAY,EAAE,sBAAsB;IAEpC,oBAAoB;IACpB,YAAY,EAAE,cAAc;CACpB,CAAC"}
|
package/lib/utils.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the calling project's root directory
|
|
3
|
+
*/
|
|
4
|
+
export declare function getProjectRoot(): string;
|
|
1
5
|
/**
|
|
2
6
|
* Logging function that checks SYSTEM_DEBUG at runtime
|
|
3
7
|
*/
|
|
@@ -5,6 +9,7 @@ export declare function log(message: string): void;
|
|
|
5
9
|
/**
|
|
6
10
|
* Get the base directory for authentication files
|
|
7
11
|
* Can be overridden via MS_AUTH_OUTPUT_DIR environment variable
|
|
12
|
+
* Defaults to project root/.playwright-ms-auth
|
|
8
13
|
*/
|
|
9
14
|
export declare function getAuthBaseDir(): string;
|
|
10
15
|
/**
|
package/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAyBA;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAQvC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,GAAG,QAAQ,GAC3B,MAAM,CAcR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,eAAe,GAAE,MAAW,GAC3B,OAAO,CAAC,OAAO,CAAC,CAalB"}
|
package/lib/utils.js
CHANGED
|
@@ -1,8 +1,29 @@
|
|
|
1
|
-
import { resolve, join } from "node:path";
|
|
2
|
-
import { homedir } from "node:os";
|
|
1
|
+
import { resolve, join, dirname, parse } from "node:path";
|
|
3
2
|
import { mkdir } from "node:fs/promises";
|
|
4
3
|
import { existsSync } from "node:fs";
|
|
5
4
|
import { EnvVars } from "./types";
|
|
5
|
+
/**
|
|
6
|
+
* Find the project root by looking for package.json file
|
|
7
|
+
* @param startDir - The directory to start searching from
|
|
8
|
+
* @returns The project root directory
|
|
9
|
+
*/
|
|
10
|
+
function findProjectRoot(startDir) {
|
|
11
|
+
let currentDir = startDir;
|
|
12
|
+
while (currentDir !== parse(currentDir).root) {
|
|
13
|
+
if (existsSync(join(currentDir, "package.json"))) {
|
|
14
|
+
return currentDir;
|
|
15
|
+
}
|
|
16
|
+
currentDir = dirname(currentDir);
|
|
17
|
+
}
|
|
18
|
+
// Fall back to the current working directory if project root isn't found
|
|
19
|
+
return process.cwd();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the calling project's root directory
|
|
23
|
+
*/
|
|
24
|
+
export function getProjectRoot() {
|
|
25
|
+
return findProjectRoot(process.cwd());
|
|
26
|
+
}
|
|
6
27
|
/**
|
|
7
28
|
* Logging function that checks SYSTEM_DEBUG at runtime
|
|
8
29
|
*/
|
|
@@ -15,13 +36,16 @@ export function log(message) {
|
|
|
15
36
|
/**
|
|
16
37
|
* Get the base directory for authentication files
|
|
17
38
|
* Can be overridden via MS_AUTH_OUTPUT_DIR environment variable
|
|
39
|
+
* Defaults to project root/.playwright-ms-auth
|
|
18
40
|
*/
|
|
19
41
|
export function getAuthBaseDir() {
|
|
20
42
|
const customDir = process.env[EnvVars.OUTPUT_DIR];
|
|
21
43
|
if (customDir) {
|
|
22
44
|
return resolve(customDir);
|
|
23
45
|
}
|
|
24
|
-
|
|
46
|
+
// Use project root instead of user home directory
|
|
47
|
+
const projectRoot = getProjectRoot();
|
|
48
|
+
return resolve(projectRoot, ".playwright-ms-auth");
|
|
25
49
|
}
|
|
26
50
|
/**
|
|
27
51
|
* Ensure a directory exists
|
|
@@ -44,9 +68,13 @@ export function getStorageStatePath(email) {
|
|
|
44
68
|
*/
|
|
45
69
|
export function getAuthScreenshotPath(email, status) {
|
|
46
70
|
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
47
|
-
const authDir = getAuthBaseDir();
|
|
48
71
|
const sanitizedEmail = email.replace(/[^a-zA-Z0-9@.-]/g, "_");
|
|
49
|
-
|
|
72
|
+
// If MS_AUTH_OUTPUT_DIR is set, use that directory
|
|
73
|
+
// Otherwise find the calling project's root directory
|
|
74
|
+
const outputDir = process.env[EnvVars.OUTPUT_DIR];
|
|
75
|
+
const baseDir = outputDir ? resolve(outputDir) : getProjectRoot();
|
|
76
|
+
const screenshotDir = join(baseDir, "screenshots");
|
|
77
|
+
return join(screenshotDir, `auth-${sanitizedEmail}-${status}-${timestamp}.png`);
|
|
50
78
|
}
|
|
51
79
|
/**
|
|
52
80
|
* Sanitize email for use in filenames
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playwright-ms-auth",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"description": "Flexible authentication framework for Playwright tests supporting password and certificate auth with multiple credential providers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"build": "tsc",
|
|
26
26
|
"clean": "rimraf lib",
|
|
27
27
|
"prepublishOnly": "npm run clean && npm run build",
|
|
28
|
-
"test": "playwright test"
|
|
28
|
+
"test": "playwright test",
|
|
29
|
+
"example:login": "tsx examples/msLogin.ts"
|
|
29
30
|
},
|
|
30
31
|
"keywords": [
|
|
31
32
|
"playwright",
|
|
@@ -54,7 +55,9 @@
|
|
|
54
55
|
"devDependencies": {
|
|
55
56
|
"@playwright/test": "^1.44.1",
|
|
56
57
|
"@types/node": "^20.12.6",
|
|
58
|
+
"dotenv": "^16.4.5",
|
|
57
59
|
"rimraf": "^5.0.0",
|
|
60
|
+
"tsx": "^4.7.0",
|
|
58
61
|
"typescript": "^5.4.4"
|
|
59
62
|
},
|
|
60
63
|
"dependencies": {
|