playwright-ms-auth 0.0.10
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/LICENSE +21 -0
- package/README.md +525 -0
- package/bin/ms-auth +2 -0
- package/lib/authenticate.d.ts +10 -0
- package/lib/authenticate.d.ts.map +1 -0
- package/lib/authenticate.js +213 -0
- package/lib/authenticate.js.map +1 -0
- package/lib/certAuth.d.ts +21 -0
- package/lib/certAuth.d.ts.map +1 -0
- package/lib/certAuth.js +82 -0
- package/lib/certAuth.js.map +1 -0
- package/lib/cli.d.ts +3 -0
- package/lib/cli.d.ts.map +1 -0
- package/lib/cli.js +109 -0
- package/lib/cli.js.map +1 -0
- package/lib/config.d.ts +10 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +115 -0
- package/lib/config.js.map +1 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +17 -0
- package/lib/index.js.map +1 -0
- package/lib/providers/AzureKeyVaultProvider.d.ts +17 -0
- package/lib/providers/AzureKeyVaultProvider.d.ts.map +1 -0
- package/lib/providers/AzureKeyVaultProvider.js +105 -0
- package/lib/providers/AzureKeyVaultProvider.js.map +1 -0
- package/lib/providers/CredentialProvider.d.ts +24 -0
- package/lib/providers/CredentialProvider.d.ts.map +1 -0
- package/lib/providers/CredentialProvider.js +10 -0
- package/lib/providers/CredentialProvider.js.map +1 -0
- package/lib/providers/CredentialProviderFactory.d.ts +20 -0
- package/lib/providers/CredentialProviderFactory.d.ts.map +1 -0
- package/lib/providers/CredentialProviderFactory.js +37 -0
- package/lib/providers/CredentialProviderFactory.js.map +1 -0
- package/lib/providers/EnvironmentProvider.d.ts +13 -0
- package/lib/providers/EnvironmentProvider.d.ts.map +1 -0
- package/lib/providers/EnvironmentProvider.js +52 -0
- package/lib/providers/EnvironmentProvider.js.map +1 -0
- package/lib/providers/GitHubSecretsProvider.d.ts +13 -0
- package/lib/providers/GitHubSecretsProvider.d.ts.map +1 -0
- package/lib/providers/GitHubSecretsProvider.js +59 -0
- package/lib/providers/GitHubSecretsProvider.js.map +1 -0
- package/lib/providers/LocalFileProvider.d.ts +13 -0
- package/lib/providers/LocalFileProvider.d.ts.map +1 -0
- package/lib/providers/LocalFileProvider.js +77 -0
- package/lib/providers/LocalFileProvider.js.map +1 -0
- package/lib/providers/index.d.ts +7 -0
- package/lib/providers/index.d.ts.map +1 -0
- package/lib/providers/index.js +7 -0
- package/lib/providers/index.js.map +1 -0
- package/lib/types.d.ts +111 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +37 -0
- package/lib/types.js.map +1 -0
- package/lib/utils.d.ts +30 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +75 -0
- package/lib/utils.js.map +1 -0
- package/package.json +68 -0
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication configuration types for playwright-ms-auth
|
|
3
|
+
*/
|
|
4
|
+
/** Supported credential types */
|
|
5
|
+
export type CredentialType = 'password' | 'certificate';
|
|
6
|
+
/** Supported credential provider types */
|
|
7
|
+
export type CredentialProviderType = 'azure-keyvault' | 'local-file' | 'environment' | 'github-secrets';
|
|
8
|
+
/** Base configuration for authentication */
|
|
9
|
+
export interface AuthConfig {
|
|
10
|
+
/** User email/username */
|
|
11
|
+
email: string;
|
|
12
|
+
/** Type of authentication credential */
|
|
13
|
+
credentialType: CredentialType;
|
|
14
|
+
/** Provider for credential retrieval */
|
|
15
|
+
credentialProvider: CredentialProviderType;
|
|
16
|
+
/** Directory to store authentication state */
|
|
17
|
+
outputDir?: string;
|
|
18
|
+
/** Hours until storage state expires (default: 24) */
|
|
19
|
+
storageStateExpiration?: number;
|
|
20
|
+
/** Entra login endpoint (default: login.microsoftonline.com) */
|
|
21
|
+
loginEndpoint?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Configuration for Azure KeyVault credential provider */
|
|
24
|
+
export interface AzureKeyVaultConfig {
|
|
25
|
+
/** KeyVault endpoint URL */
|
|
26
|
+
keyVaultEndpoint: string;
|
|
27
|
+
/** Secret name in KeyVault */
|
|
28
|
+
secretName: string;
|
|
29
|
+
/** Optional secret version */
|
|
30
|
+
secretVersion?: string;
|
|
31
|
+
}
|
|
32
|
+
/** Configuration for local file credential provider */
|
|
33
|
+
export interface LocalFileConfig {
|
|
34
|
+
/** Path to the credential file (password or certificate) */
|
|
35
|
+
filePath: string;
|
|
36
|
+
/** Password for encrypted certificate (optional) */
|
|
37
|
+
certificatePassword?: string;
|
|
38
|
+
}
|
|
39
|
+
/** Configuration for environment variable credential provider */
|
|
40
|
+
export interface EnvironmentConfig {
|
|
41
|
+
/** Name of the environment variable containing the credential */
|
|
42
|
+
variableName: string;
|
|
43
|
+
/** For certificates: optional password variable */
|
|
44
|
+
passwordVariableName?: string;
|
|
45
|
+
}
|
|
46
|
+
/** Configuration for GitHub Secrets credential provider */
|
|
47
|
+
export interface GitHubSecretsConfig {
|
|
48
|
+
/** Repository in format 'owner/repo' */
|
|
49
|
+
repository: string;
|
|
50
|
+
/** Secret name */
|
|
51
|
+
secretName: string;
|
|
52
|
+
/** GitHub token for authentication */
|
|
53
|
+
token?: string;
|
|
54
|
+
}
|
|
55
|
+
/** Union type for all provider configurations */
|
|
56
|
+
export type ProviderConfig = AzureKeyVaultConfig | LocalFileConfig | EnvironmentConfig | GitHubSecretsConfig;
|
|
57
|
+
/** Complete authentication configuration */
|
|
58
|
+
export interface MsAuthConfig extends AuthConfig {
|
|
59
|
+
/** Provider-specific configuration */
|
|
60
|
+
providerConfig: ProviderConfig;
|
|
61
|
+
}
|
|
62
|
+
/** CLI environment variable names */
|
|
63
|
+
export declare const EnvVars: {
|
|
64
|
+
/** User email */
|
|
65
|
+
readonly EMAIL: "MS_AUTH_EMAIL";
|
|
66
|
+
/** Credential type (password|certificate) */
|
|
67
|
+
readonly CREDENTIAL_TYPE: "MS_AUTH_CREDENTIAL_TYPE";
|
|
68
|
+
/** Credential provider type */
|
|
69
|
+
readonly CREDENTIAL_PROVIDER: "MS_AUTH_CREDENTIAL_PROVIDER";
|
|
70
|
+
/** Azure KeyVault endpoint */
|
|
71
|
+
readonly KEYVAULT_ENDPOINT: "MS_AUTH_KEYVAULT_ENDPOINT";
|
|
72
|
+
/** KeyVault secret name */
|
|
73
|
+
readonly KEYVAULT_SECRET_NAME: "MS_AUTH_KEYVAULT_SECRET_NAME";
|
|
74
|
+
/** Local file path */
|
|
75
|
+
readonly LOCAL_FILE_PATH: "MS_AUTH_LOCAL_FILE_PATH";
|
|
76
|
+
/** Certificate password */
|
|
77
|
+
readonly CERTIFICATE_PASSWORD: "MS_AUTH_CERTIFICATE_PASSWORD";
|
|
78
|
+
/** Environment variable name for credential */
|
|
79
|
+
readonly ENV_VARIABLE_NAME: "MS_AUTH_ENV_VARIABLE_NAME";
|
|
80
|
+
/** Output directory for storage state */
|
|
81
|
+
readonly OUTPUT_DIR: "MS_AUTH_OUTPUT_DIR";
|
|
82
|
+
/** Entra login endpoint */
|
|
83
|
+
readonly LOGIN_ENDPOINT: "MS_AUTH_LOGIN_ENDPOINT";
|
|
84
|
+
/** Storage state expiration hours */
|
|
85
|
+
readonly STORAGE_STATE_EXPIRATION: "MS_AUTH_STORAGE_STATE_EXPIRATION";
|
|
86
|
+
/** GitHub repository */
|
|
87
|
+
readonly GITHUB_REPOSITORY: "MS_AUTH_GITHUB_REPOSITORY";
|
|
88
|
+
/** GitHub secret name */
|
|
89
|
+
readonly GITHUB_SECRET_NAME: "MS_AUTH_GITHUB_SECRET_NAME";
|
|
90
|
+
/** GitHub token */
|
|
91
|
+
readonly GITHUB_TOKEN: "MS_AUTH_GITHUB_TOKEN";
|
|
92
|
+
/** Debug logging */
|
|
93
|
+
readonly SYSTEM_DEBUG: "SYSTEM_DEBUG";
|
|
94
|
+
};
|
|
95
|
+
/** Result of credential retrieval */
|
|
96
|
+
export interface CredentialResult {
|
|
97
|
+
/** Type of credential retrieved */
|
|
98
|
+
type: CredentialType;
|
|
99
|
+
/** The credential value (password string or certificate buffer) */
|
|
100
|
+
value: string | Buffer;
|
|
101
|
+
}
|
|
102
|
+
/** User information for authentication */
|
|
103
|
+
export interface UserInfo {
|
|
104
|
+
/** User email */
|
|
105
|
+
email: string;
|
|
106
|
+
/** User alias/identifier */
|
|
107
|
+
alias?: string;
|
|
108
|
+
/** Display name */
|
|
109
|
+
displayName?: string;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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,GAAG,gBAAgB,GAAG,YAAY,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAExG,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;CACxB;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,GAAG,mBAAmB,GAAG,eAAe,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAE7G,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
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication configuration types for playwright-ms-auth
|
|
3
|
+
*/
|
|
4
|
+
/** CLI environment variable names */
|
|
5
|
+
export const EnvVars = {
|
|
6
|
+
/** User email */
|
|
7
|
+
EMAIL: 'MS_AUTH_EMAIL',
|
|
8
|
+
/** Credential type (password|certificate) */
|
|
9
|
+
CREDENTIAL_TYPE: 'MS_AUTH_CREDENTIAL_TYPE',
|
|
10
|
+
/** Credential provider type */
|
|
11
|
+
CREDENTIAL_PROVIDER: 'MS_AUTH_CREDENTIAL_PROVIDER',
|
|
12
|
+
/** Azure KeyVault endpoint */
|
|
13
|
+
KEYVAULT_ENDPOINT: 'MS_AUTH_KEYVAULT_ENDPOINT',
|
|
14
|
+
/** KeyVault secret name */
|
|
15
|
+
KEYVAULT_SECRET_NAME: 'MS_AUTH_KEYVAULT_SECRET_NAME',
|
|
16
|
+
/** Local file path */
|
|
17
|
+
LOCAL_FILE_PATH: 'MS_AUTH_LOCAL_FILE_PATH',
|
|
18
|
+
/** Certificate password */
|
|
19
|
+
CERTIFICATE_PASSWORD: 'MS_AUTH_CERTIFICATE_PASSWORD',
|
|
20
|
+
/** Environment variable name for credential */
|
|
21
|
+
ENV_VARIABLE_NAME: 'MS_AUTH_ENV_VARIABLE_NAME',
|
|
22
|
+
/** Output directory for storage state */
|
|
23
|
+
OUTPUT_DIR: 'MS_AUTH_OUTPUT_DIR',
|
|
24
|
+
/** Entra login endpoint */
|
|
25
|
+
LOGIN_ENDPOINT: 'MS_AUTH_LOGIN_ENDPOINT',
|
|
26
|
+
/** Storage state expiration hours */
|
|
27
|
+
STORAGE_STATE_EXPIRATION: 'MS_AUTH_STORAGE_STATE_EXPIRATION',
|
|
28
|
+
/** GitHub repository */
|
|
29
|
+
GITHUB_REPOSITORY: 'MS_AUTH_GITHUB_REPOSITORY',
|
|
30
|
+
/** GitHub secret name */
|
|
31
|
+
GITHUB_SECRET_NAME: 'MS_AUTH_GITHUB_SECRET_NAME',
|
|
32
|
+
/** GitHub token */
|
|
33
|
+
GITHUB_TOKEN: 'MS_AUTH_GITHUB_TOKEN',
|
|
34
|
+
/** Debug logging */
|
|
35
|
+
SYSTEM_DEBUG: 'SYSTEM_DEBUG',
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=types.js.map
|
package/lib/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgFH,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
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logging function that checks SYSTEM_DEBUG at runtime
|
|
3
|
+
*/
|
|
4
|
+
export declare function log(message: string): void;
|
|
5
|
+
/**
|
|
6
|
+
* Get the base directory for authentication files
|
|
7
|
+
* Can be overridden via MS_AUTH_OUTPUT_DIR environment variable
|
|
8
|
+
*/
|
|
9
|
+
export declare function getAuthBaseDir(): string;
|
|
10
|
+
/**
|
|
11
|
+
* Ensure a directory exists
|
|
12
|
+
*/
|
|
13
|
+
export declare function ensureDirExists(dir: string): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Get the storage state path for a user
|
|
16
|
+
*/
|
|
17
|
+
export declare function getStorageStatePath(email: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Get the screenshot filepath for authentication
|
|
20
|
+
*/
|
|
21
|
+
export declare function getAuthScreenshotPath(email: string, status: "success" | "failed"): string;
|
|
22
|
+
/**
|
|
23
|
+
* Sanitize email for use in filenames
|
|
24
|
+
*/
|
|
25
|
+
export declare function sanitizeEmail(email: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Check if storage state file exists and is not expired
|
|
28
|
+
*/
|
|
29
|
+
export declare function isStorageStateValid(filePath: string, expirationHours?: number): Promise<boolean>;
|
|
30
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAKzC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAMvC;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,CASR;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
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { resolve, join } from "node:path";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { mkdir } from "node:fs/promises";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
import { EnvVars } from "./types";
|
|
6
|
+
/**
|
|
7
|
+
* Logging function that checks SYSTEM_DEBUG at runtime
|
|
8
|
+
*/
|
|
9
|
+
export function log(message) {
|
|
10
|
+
if (process.env[EnvVars.SYSTEM_DEBUG]?.toLowerCase() === "true") {
|
|
11
|
+
process.stdout.write(`${message}\n`);
|
|
12
|
+
console.log(message);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get the base directory for authentication files
|
|
17
|
+
* Can be overridden via MS_AUTH_OUTPUT_DIR environment variable
|
|
18
|
+
*/
|
|
19
|
+
export function getAuthBaseDir() {
|
|
20
|
+
const customDir = process.env[EnvVars.OUTPUT_DIR];
|
|
21
|
+
if (customDir) {
|
|
22
|
+
return resolve(customDir);
|
|
23
|
+
}
|
|
24
|
+
return resolve(homedir(), ".playwright-ms-auth");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Ensure a directory exists
|
|
28
|
+
*/
|
|
29
|
+
export async function ensureDirExists(dir) {
|
|
30
|
+
if (!existsSync(dir)) {
|
|
31
|
+
await mkdir(dir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get the storage state path for a user
|
|
36
|
+
*/
|
|
37
|
+
export function getStorageStatePath(email) {
|
|
38
|
+
const authDir = getAuthBaseDir();
|
|
39
|
+
const sanitizedEmail = email.replace(/[^a-zA-Z0-9@.-]/g, "_");
|
|
40
|
+
return join(authDir, `state-${sanitizedEmail}.json`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the screenshot filepath for authentication
|
|
44
|
+
*/
|
|
45
|
+
export function getAuthScreenshotPath(email, status) {
|
|
46
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
47
|
+
const authDir = getAuthBaseDir();
|
|
48
|
+
const sanitizedEmail = email.replace(/[^a-zA-Z0-9@.-]/g, "_");
|
|
49
|
+
return join(authDir, "screenshots", `auth-${sanitizedEmail}-${status}-${timestamp}.png`);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Sanitize email for use in filenames
|
|
53
|
+
*/
|
|
54
|
+
export function sanitizeEmail(email) {
|
|
55
|
+
return email.replace(/[^a-zA-Z0-9@.-]/g, "_");
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if storage state file exists and is not expired
|
|
59
|
+
*/
|
|
60
|
+
export async function isStorageStateValid(filePath, expirationHours = 24) {
|
|
61
|
+
try {
|
|
62
|
+
const { stat } = await import("node:fs/promises");
|
|
63
|
+
const stats = await stat(filePath);
|
|
64
|
+
const ageMs = Date.now() - stats.mtimeMs;
|
|
65
|
+
const expirationMs = expirationHours * 60 * 60 * 1000;
|
|
66
|
+
return ageMs < expirationMs;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error.code === "ENOENT") {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "playwright-ms-auth",
|
|
3
|
+
"version": "0.0.10",
|
|
4
|
+
"description": "Flexible authentication framework for Playwright tests supporting password and certificate auth with multiple credential providers",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./lib/index.js",
|
|
7
|
+
"types": "./lib/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/index.d.ts",
|
|
11
|
+
"import": "./lib/index.js",
|
|
12
|
+
"default": "./lib/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"bin": {
|
|
16
|
+
"ms-auth": "./bin/ms-auth"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"lib",
|
|
20
|
+
"bin",
|
|
21
|
+
"README.md",
|
|
22
|
+
"LICENSE"
|
|
23
|
+
],
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc",
|
|
26
|
+
"clean": "rimraf lib",
|
|
27
|
+
"prepublishOnly": "npm run clean && npm run build",
|
|
28
|
+
"test": "playwright test"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"playwright",
|
|
32
|
+
"authentication",
|
|
33
|
+
"microsoft",
|
|
34
|
+
"entra",
|
|
35
|
+
"azure",
|
|
36
|
+
"keyvault",
|
|
37
|
+
"certificate",
|
|
38
|
+
"password",
|
|
39
|
+
"testing"
|
|
40
|
+
],
|
|
41
|
+
"author": "Deepak Kamboj",
|
|
42
|
+
"license": "MIT",
|
|
43
|
+
"repository": {
|
|
44
|
+
"type": "git",
|
|
45
|
+
"url": "git+https://github.com/deepakkamboj/playwright-ms-auth.git"
|
|
46
|
+
},
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/deepakkamboj/playwright-ms-auth/issues"
|
|
49
|
+
},
|
|
50
|
+
"homepage": "https://github.com/deepakkamboj/playwright-ms-auth#readme",
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18"
|
|
53
|
+
},
|
|
54
|
+
"devDependencies": {
|
|
55
|
+
"@playwright/test": "^1.44.1",
|
|
56
|
+
"@types/node": "^20.12.6",
|
|
57
|
+
"rimraf": "^5.0.0",
|
|
58
|
+
"typescript": "^5.4.4"
|
|
59
|
+
},
|
|
60
|
+
"dependencies": {
|
|
61
|
+
"@azure/keyvault-secrets": "^4.8.0",
|
|
62
|
+
"@azure/identity": "^4.2.1",
|
|
63
|
+
"commander": "^11.0.0"
|
|
64
|
+
},
|
|
65
|
+
"peerDependencies": {
|
|
66
|
+
"@playwright/test": "^1.40.1"
|
|
67
|
+
}
|
|
68
|
+
}
|