@dataflint/mcp-server 1.0.14 → 1.0.17
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/dist/auth/auth-strategy-factory.d.ts +60 -0
- package/dist/auth/auth-strategy-factory.d.ts.map +1 -0
- package/dist/auth/auth-strategy-factory.js +113 -0
- package/dist/auth/auth-strategy-factory.js.map +1 -0
- package/dist/auth/auth0-m2m-service.d.ts +74 -0
- package/dist/auth/auth0-m2m-service.d.ts.map +1 -0
- package/dist/auth/auth0-m2m-service.js +195 -0
- package/dist/auth/auth0-m2m-service.js.map +1 -0
- package/dist/auth/auth0-service.d.ts +64 -0
- package/dist/auth/auth0-service.d.ts.map +1 -0
- package/dist/auth/auth0-service.js +326 -0
- package/dist/auth/auth0-service.js.map +1 -0
- package/dist/auth/customer-auth-configs.d.ts +31 -0
- package/dist/auth/customer-auth-configs.d.ts.map +1 -0
- package/dist/auth/customer-auth-configs.js +39 -0
- package/dist/auth/customer-auth-configs.js.map +1 -0
- package/dist/auth/index.d.ts +75 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +137 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/secrets/aws-secrets-provider.d.ts +45 -0
- package/dist/auth/secrets/aws-secrets-provider.d.ts.map +1 -0
- package/dist/auth/secrets/aws-secrets-provider.js +125 -0
- package/dist/auth/secrets/aws-secrets-provider.js.map +1 -0
- package/dist/auth/secrets/index.d.ts +12 -0
- package/dist/auth/secrets/index.d.ts.map +1 -0
- package/dist/auth/secrets/index.js +17 -0
- package/dist/auth/secrets/index.js.map +1 -0
- package/dist/auth/secrets/local-file-secrets-provider.d.ts +47 -0
- package/dist/auth/secrets/local-file-secrets-provider.d.ts.map +1 -0
- package/dist/auth/secrets/local-file-secrets-provider.js +151 -0
- package/dist/auth/secrets/local-file-secrets-provider.js.map +1 -0
- package/dist/auth/secrets/secrets-provider.d.ts +54 -0
- package/dist/auth/secrets/secrets-provider.d.ts.map +1 -0
- package/dist/auth/secrets/secrets-provider.js +106 -0
- package/dist/auth/secrets/secrets-provider.js.map +1 -0
- package/dist/auth/secrets/types.d.ts +32 -0
- package/dist/auth/secrets/types.d.ts.map +1 -0
- package/dist/auth/secrets/types.js +8 -0
- package/dist/auth/secrets/types.js.map +1 -0
- package/dist/auth/service-account-service.d.ts +77 -0
- package/dist/auth/service-account-service.d.ts.map +1 -0
- package/dist/auth/service-account-service.js +209 -0
- package/dist/auth/service-account-service.js.map +1 -0
- package/dist/auth/types.d.ts +140 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +30 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth.d.ts +47 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +302 -0
- package/dist/auth.js.map +1 -0
- package/dist/dataflint-server-service.d.ts +3 -6
- package/dist/dataflint-server-service.d.ts.map +1 -1
- package/dist/dataflint-server-service.js +48 -133
- package/dist/dataflint-server-service.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -11
- package/dist/index.js.map +1 -1
- package/dist/request-context.d.ts +0 -20
- package/dist/request-context.d.ts.map +1 -1
- package/dist/request-context.js +1 -31
- package/dist/request-context.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +14 -16
- package/dist/server.js.map +1 -1
- package/dist/standalone/config.d.ts +7 -13
- package/dist/standalone/config.d.ts.map +1 -1
- package/dist/standalone/config.js +439 -23059
- package/dist/standalone/config.js.map +4 -4
- package/dist/standalone/logger.js +2 -2
- package/dist/standalone/logger.js.map +1 -1
- package/dist/standalone/server.d.ts.map +1 -1
- package/dist/standalone/server.js +25 -45
- package/dist/standalone/server.js.map +1 -1
- package/dist/standalone/stdio-transport.d.ts +1 -2
- package/dist/standalone/stdio-transport.d.ts.map +1 -1
- package/dist/standalone/stdio-transport.js +4 -3
- package/dist/standalone/stdio-transport.js.map +1 -1
- package/dist/tools/base.d.ts +16 -0
- package/dist/tools/base.d.ts.map +1 -1
- package/dist/tools/base.js +16 -0
- package/dist/tools/base.js.map +1 -1
- package/dist/tools/core-tools.d.ts.map +1 -1
- package/dist/tools/core-tools.js +4 -4
- package/dist/tools/core-tools.js.map +1 -1
- package/dist/tools/expertise-tools.d.ts.map +1 -1
- package/dist/tools/expertise-tools.js +5 -5
- package/dist/tools/expertise-tools.js.map +1 -1
- package/dist/tools/findings-tools.d.ts.map +1 -1
- package/dist/tools/findings-tools.js +4 -4
- package/dist/tools/findings-tools.js.map +1 -1
- package/dist/tools/highlight-tools.d.ts.map +1 -1
- package/dist/tools/highlight-tools.js +8 -10
- package/dist/tools/highlight-tools.js.map +1 -1
- package/dist/tools/listing-tools.d.ts.map +1 -1
- package/dist/tools/listing-tools.js +1 -1
- package/dist/tools/listing-tools.js.map +1 -1
- package/dist/types.d.ts +13 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -5
- package/dist/types.js.map +1 -1
- package/package.json +1 -2
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Secrets Manager Provider
|
|
3
|
+
*
|
|
4
|
+
* Loads M2M credentials from AWS Secrets Manager.
|
|
5
|
+
* Uses dynamic import to avoid requiring AWS SDK when not in AWS environment.
|
|
6
|
+
*/
|
|
7
|
+
import { Auth0M2MCredentials, IAuthLogger } from "../types";
|
|
8
|
+
import { ISecretsProvider } from "./types";
|
|
9
|
+
/**
|
|
10
|
+
* AWS Secrets Manager provider for M2M credentials
|
|
11
|
+
*
|
|
12
|
+
* This provider:
|
|
13
|
+
* 1. Detects AWS environment via env vars
|
|
14
|
+
* 2. Dynamically imports AWS SDK to avoid bundling overhead
|
|
15
|
+
* 3. Loads credentials from Secrets Manager
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const provider = new AWSSecretsProvider(logger);
|
|
20
|
+
* if (await provider.isAvailable()) {
|
|
21
|
+
* const credentials = await provider.loadAuth0M2MCredentials('my-secret-name');
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare class AWSSecretsProvider implements ISecretsProvider {
|
|
26
|
+
private logger;
|
|
27
|
+
private region;
|
|
28
|
+
constructor(logger?: IAuthLogger);
|
|
29
|
+
/**
|
|
30
|
+
* Get the provider name for logging
|
|
31
|
+
*/
|
|
32
|
+
getName(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Check if running in AWS environment with credentials available
|
|
35
|
+
*/
|
|
36
|
+
isAvailable(): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Load Auth0 M2M credentials from AWS Secrets Manager
|
|
39
|
+
*
|
|
40
|
+
* @param secretName - The name or ARN of the secret in Secrets Manager
|
|
41
|
+
* @returns M2M credentials or null if not found
|
|
42
|
+
*/
|
|
43
|
+
loadAuth0M2MCredentials(secretName: string): Promise<Auth0M2MCredentials | null>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=aws-secrets-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-secrets-provider.d.ts","sourceRoot":"","sources":["../../../src/auth/secrets/aws-secrets-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAY3C;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,kBAAmB,YAAW,gBAAgB;IACvD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,CAAC,EAAE,WAAW;IAKhC;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAwBrC;;;;;OAKG;IACG,uBAAuB,CACzB,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;CAiEzC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AWS Secrets Manager Provider
|
|
4
|
+
*
|
|
5
|
+
* Loads M2M credentials from AWS Secrets Manager.
|
|
6
|
+
* Uses dynamic import to avoid requiring AWS SDK when not in AWS environment.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.AWSSecretsProvider = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* Default no-op logger
|
|
12
|
+
*/
|
|
13
|
+
const noopLogger = {
|
|
14
|
+
info: () => { },
|
|
15
|
+
warn: () => { },
|
|
16
|
+
error: () => { },
|
|
17
|
+
debug: () => { },
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* AWS Secrets Manager provider for M2M credentials
|
|
21
|
+
*
|
|
22
|
+
* This provider:
|
|
23
|
+
* 1. Detects AWS environment via env vars
|
|
24
|
+
* 2. Dynamically imports AWS SDK to avoid bundling overhead
|
|
25
|
+
* 3. Loads credentials from Secrets Manager
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const provider = new AWSSecretsProvider(logger);
|
|
30
|
+
* if (await provider.isAvailable()) {
|
|
31
|
+
* const credentials = await provider.loadAuth0M2MCredentials('my-secret-name');
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
class AWSSecretsProvider {
|
|
36
|
+
logger;
|
|
37
|
+
region;
|
|
38
|
+
constructor(logger) {
|
|
39
|
+
this.logger = logger || noopLogger;
|
|
40
|
+
this.region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get the provider name for logging
|
|
44
|
+
*/
|
|
45
|
+
getName() {
|
|
46
|
+
return "AWS Secrets Manager";
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if running in AWS environment with credentials available
|
|
50
|
+
*/
|
|
51
|
+
async isAvailable() {
|
|
52
|
+
// Check for AWS environment indicators
|
|
53
|
+
const hasRegion = !!(process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION);
|
|
54
|
+
const hasExecutionEnv = !!process.env.AWS_EXECUTION_ENV;
|
|
55
|
+
const hasCredentials = !!(process.env.AWS_ACCESS_KEY_ID ||
|
|
56
|
+
process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ||
|
|
57
|
+
process.env.AWS_WEB_IDENTITY_TOKEN_FILE);
|
|
58
|
+
const isAWSEnvironment = hasRegion && (hasExecutionEnv || hasCredentials);
|
|
59
|
+
if (isAWSEnvironment) {
|
|
60
|
+
this.logger.debug("AWS environment detected");
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.logger.debug("Not in AWS environment");
|
|
64
|
+
}
|
|
65
|
+
return isAWSEnvironment;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Load Auth0 M2M credentials from AWS Secrets Manager
|
|
69
|
+
*
|
|
70
|
+
* @param secretName - The name or ARN of the secret in Secrets Manager
|
|
71
|
+
* @returns M2M credentials or null if not found
|
|
72
|
+
*/
|
|
73
|
+
async loadAuth0M2MCredentials(secretName) {
|
|
74
|
+
this.logger.info(`Loading M2M credentials from AWS Secrets Manager: ${secretName}`);
|
|
75
|
+
try {
|
|
76
|
+
// Dynamic import to avoid bundling AWS SDK when not needed
|
|
77
|
+
const { SecretsManagerClient, GetSecretValueCommand } =
|
|
78
|
+
// @ts-expect-error - @aws-sdk/client-secrets-manager is an optional runtime dependency
|
|
79
|
+
await import("@aws-sdk/client-secrets-manager");
|
|
80
|
+
const client = new SecretsManagerClient({
|
|
81
|
+
region: this.region,
|
|
82
|
+
});
|
|
83
|
+
const command = new GetSecretValueCommand({
|
|
84
|
+
SecretId: secretName,
|
|
85
|
+
});
|
|
86
|
+
const response = await client.send(command);
|
|
87
|
+
if (!response.SecretString) {
|
|
88
|
+
this.logger.error("Secret value is empty or binary");
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
const secretValue = JSON.parse(response.SecretString);
|
|
92
|
+
// Validate required fields
|
|
93
|
+
if (!secretValue.client_id ||
|
|
94
|
+
!secretValue.client_secret ||
|
|
95
|
+
!secretValue.audience ||
|
|
96
|
+
!secretValue.domain) {
|
|
97
|
+
this.logger.error("Secret missing required fields (client_id, client_secret, audience, domain)");
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
this.logger.info("M2M credentials loaded from AWS Secrets Manager");
|
|
101
|
+
return {
|
|
102
|
+
client_id: secretValue.client_id,
|
|
103
|
+
client_secret: secretValue.client_secret,
|
|
104
|
+
audience: secretValue.audience,
|
|
105
|
+
domain: secretValue.domain,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
if (error instanceof Error) {
|
|
110
|
+
if (error.name === "ResourceNotFoundException") {
|
|
111
|
+
this.logger.warn(`Secret not found: ${secretName}`);
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
if (error.message.includes("Cannot find module")) {
|
|
115
|
+
this.logger.warn("AWS SDK not available - @aws-sdk/client-secrets-manager not installed");
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
this.logger.error("Failed to load secret from AWS", error);
|
|
119
|
+
}
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.AWSSecretsProvider = AWSSecretsProvider;
|
|
125
|
+
//# sourceMappingURL=aws-secrets-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-secrets-provider.js","sourceRoot":"","sources":["../../../src/auth/secrets/aws-secrets-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secrets Providers Module
|
|
3
|
+
*
|
|
4
|
+
* Provides multiple strategies for loading M2M credentials:
|
|
5
|
+
* - AWS Secrets Manager (production)
|
|
6
|
+
* - Local file (development)
|
|
7
|
+
*/
|
|
8
|
+
export { ISecretsProvider } from "./types";
|
|
9
|
+
export { AWSSecretsProvider } from "./aws-secrets-provider";
|
|
10
|
+
export { LocalFileSecretsProvider } from "./local-file-secrets-provider";
|
|
11
|
+
export { SecretsProvider } from "./secrets-provider";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Secrets Providers Module
|
|
4
|
+
*
|
|
5
|
+
* Provides multiple strategies for loading M2M credentials:
|
|
6
|
+
* - AWS Secrets Manager (production)
|
|
7
|
+
* - Local file (development)
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SecretsProvider = exports.LocalFileSecretsProvider = exports.AWSSecretsProvider = void 0;
|
|
11
|
+
var aws_secrets_provider_1 = require("./aws-secrets-provider");
|
|
12
|
+
Object.defineProperty(exports, "AWSSecretsProvider", { enumerable: true, get: function () { return aws_secrets_provider_1.AWSSecretsProvider; } });
|
|
13
|
+
var local_file_secrets_provider_1 = require("./local-file-secrets-provider");
|
|
14
|
+
Object.defineProperty(exports, "LocalFileSecretsProvider", { enumerable: true, get: function () { return local_file_secrets_provider_1.LocalFileSecretsProvider; } });
|
|
15
|
+
var secrets_provider_1 = require("./secrets-provider");
|
|
16
|
+
Object.defineProperty(exports, "SecretsProvider", { enumerable: true, get: function () { return secrets_provider_1.SecretsProvider; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/secrets/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAGH,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,6EAAyE;AAAhE,uIAAA,wBAAwB,OAAA;AACjC,uDAAqD;AAA5C,mHAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local File Secrets Provider
|
|
3
|
+
*
|
|
4
|
+
* Loads M2M credentials from local file system.
|
|
5
|
+
* Primarily used for local development and testing.
|
|
6
|
+
*/
|
|
7
|
+
import { Auth0M2MCredentials, IAuthLogger } from "../types";
|
|
8
|
+
import { ISecretsProvider } from "./types";
|
|
9
|
+
/**
|
|
10
|
+
* Local file secrets provider for M2M credentials
|
|
11
|
+
*
|
|
12
|
+
* Loads credentials from `~/.dataflint/m2m_secret.{environment}.json`
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const provider = new LocalFileSecretsProvider('prod', logger);
|
|
17
|
+
* if (await provider.isAvailable()) {
|
|
18
|
+
* const credentials = await provider.loadAuth0M2MCredentials('unused');
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class LocalFileSecretsProvider implements ISecretsProvider {
|
|
23
|
+
private logger;
|
|
24
|
+
private environment;
|
|
25
|
+
private secretFilePath;
|
|
26
|
+
constructor(environment: string, logger?: IAuthLogger);
|
|
27
|
+
/**
|
|
28
|
+
* Get the provider name for logging
|
|
29
|
+
*/
|
|
30
|
+
getName(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Check if the local secret file exists
|
|
33
|
+
*/
|
|
34
|
+
isAvailable(): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Load Auth0 M2M credentials from local file
|
|
37
|
+
*
|
|
38
|
+
* @param _secretName - Ignored, uses environment-based file path
|
|
39
|
+
* @returns M2M credentials or null if not found or invalid
|
|
40
|
+
*/
|
|
41
|
+
loadAuth0M2MCredentials(_secretName: string): Promise<Auth0M2MCredentials | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Get the path to the secret file (for diagnostics)
|
|
44
|
+
*/
|
|
45
|
+
getSecretFilePath(): string;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=local-file-secrets-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-file-secrets-provider.d.ts","sourceRoot":"","sources":["../../../src/auth/secrets/local-file-secrets-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAY3C;;;;;;;;;;;;GAYG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAS;gBAEnB,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW;IAUrD;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC;;;;;OAKG;IACG,uBAAuB,CACzB,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAqDtC;;OAEG;IACH,iBAAiB,IAAI,MAAM;CAG9B"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Local File Secrets Provider
|
|
4
|
+
*
|
|
5
|
+
* Loads M2M credentials from local file system.
|
|
6
|
+
* Primarily used for local development and testing.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.LocalFileSecretsProvider = void 0;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
/**
|
|
47
|
+
* Default no-op logger
|
|
48
|
+
*/
|
|
49
|
+
const noopLogger = {
|
|
50
|
+
info: () => { },
|
|
51
|
+
warn: () => { },
|
|
52
|
+
error: () => { },
|
|
53
|
+
debug: () => { },
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Local file secrets provider for M2M credentials
|
|
57
|
+
*
|
|
58
|
+
* Loads credentials from `~/.dataflint/m2m_secret.{environment}.json`
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const provider = new LocalFileSecretsProvider('prod', logger);
|
|
63
|
+
* if (await provider.isAvailable()) {
|
|
64
|
+
* const credentials = await provider.loadAuth0M2MCredentials('unused');
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
class LocalFileSecretsProvider {
|
|
69
|
+
logger;
|
|
70
|
+
environment;
|
|
71
|
+
secretFilePath;
|
|
72
|
+
constructor(environment, logger) {
|
|
73
|
+
this.logger = logger || noopLogger;
|
|
74
|
+
this.environment = environment;
|
|
75
|
+
this.secretFilePath = path.join(os.homedir(), ".dataflint", `m2m_secret.${environment}.json`);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the provider name for logging
|
|
79
|
+
*/
|
|
80
|
+
getName() {
|
|
81
|
+
return "Local File";
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Check if the local secret file exists
|
|
85
|
+
*/
|
|
86
|
+
async isAvailable() {
|
|
87
|
+
const exists = fs.existsSync(this.secretFilePath);
|
|
88
|
+
if (exists) {
|
|
89
|
+
this.logger.debug(`Local M2M secret file found: ${this.secretFilePath}`);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.logger.debug(`Local M2M secret file not found: ${this.secretFilePath}`);
|
|
93
|
+
}
|
|
94
|
+
return exists;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Load Auth0 M2M credentials from local file
|
|
98
|
+
*
|
|
99
|
+
* @param _secretName - Ignored, uses environment-based file path
|
|
100
|
+
* @returns M2M credentials or null if not found or invalid
|
|
101
|
+
*/
|
|
102
|
+
async loadAuth0M2MCredentials(_secretName) {
|
|
103
|
+
this.logger.info(`Loading M2M credentials from local file: ${this.secretFilePath}`);
|
|
104
|
+
try {
|
|
105
|
+
if (!fs.existsSync(this.secretFilePath)) {
|
|
106
|
+
this.logger.debug("Local secret file does not exist");
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
// Check file permissions (should be 0600 for security)
|
|
110
|
+
const stats = fs.statSync(this.secretFilePath);
|
|
111
|
+
const mode = stats.mode & 0o777;
|
|
112
|
+
if (mode !== 0o600) {
|
|
113
|
+
this.logger.warn(`Secret file has insecure permissions: ${mode.toString(8)}. Should be 600.`);
|
|
114
|
+
}
|
|
115
|
+
const content = fs.readFileSync(this.secretFilePath, "utf8");
|
|
116
|
+
const secretValue = JSON.parse(content);
|
|
117
|
+
// Validate required fields
|
|
118
|
+
if (!secretValue.client_id ||
|
|
119
|
+
!secretValue.client_secret ||
|
|
120
|
+
!secretValue.audience ||
|
|
121
|
+
!secretValue.domain) {
|
|
122
|
+
this.logger.error("Local secret file missing required fields (client_id, client_secret, audience, domain)");
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
this.logger.info("M2M credentials loaded from local file");
|
|
126
|
+
return {
|
|
127
|
+
client_id: secretValue.client_id,
|
|
128
|
+
client_secret: secretValue.client_secret,
|
|
129
|
+
audience: secretValue.audience,
|
|
130
|
+
domain: secretValue.domain,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error instanceof SyntaxError) {
|
|
135
|
+
this.logger.error("Failed to parse local secret file as JSON");
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
this.logger.error("Failed to load local secret file", error);
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get the path to the secret file (for diagnostics)
|
|
145
|
+
*/
|
|
146
|
+
getSecretFilePath() {
|
|
147
|
+
return this.secretFilePath;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.LocalFileSecretsProvider = LocalFileSecretsProvider;
|
|
151
|
+
//# sourceMappingURL=local-file-secrets-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-file-secrets-provider.js","sourceRoot":"","sources":["../../../src/auth/secrets/local-file-secrets-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composite Secrets Provider
|
|
3
|
+
*
|
|
4
|
+
* Tries multiple secrets providers in priority order:
|
|
5
|
+
* 1. AWS Secrets Manager (production environments)
|
|
6
|
+
* 2. Local file (development/testing)
|
|
7
|
+
*/
|
|
8
|
+
import { Auth0M2MCredentials, IAuthLogger } from "../types";
|
|
9
|
+
import { ISecretsProvider } from "./types";
|
|
10
|
+
/**
|
|
11
|
+
* Composite secrets provider that tries multiple sources in order
|
|
12
|
+
*
|
|
13
|
+
* Priority:
|
|
14
|
+
* 1. AWS Secrets Manager (if in AWS environment)
|
|
15
|
+
* 2. Local file (~/.dataflint/m2m_secret.{env}.json)
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const provider = new SecretsProvider('prod', logger);
|
|
20
|
+
* const credentials = await provider.loadAuth0M2MCredentials('auth0_m2m_databricks_loader_prod');
|
|
21
|
+
* if (credentials) {
|
|
22
|
+
* // Use credentials for Auth0 M2M authentication
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare class SecretsProvider implements ISecretsProvider {
|
|
27
|
+
private logger;
|
|
28
|
+
private providers;
|
|
29
|
+
private environment;
|
|
30
|
+
constructor(environment: string, logger?: IAuthLogger);
|
|
31
|
+
/**
|
|
32
|
+
* Get the provider name for logging
|
|
33
|
+
*/
|
|
34
|
+
getName(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Check if any provider is available
|
|
37
|
+
*/
|
|
38
|
+
isAvailable(): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Load Auth0 M2M credentials from the first available provider
|
|
41
|
+
*
|
|
42
|
+
* @param secretName - The name of the secret (used for AWS, ignored for local file)
|
|
43
|
+
* @returns M2M credentials or null if not found in any provider
|
|
44
|
+
*/
|
|
45
|
+
loadAuth0M2MCredentials(secretName: string): Promise<Auth0M2MCredentials | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Get the default secret name for M2M credentials based on environment
|
|
48
|
+
*
|
|
49
|
+
* @param environment - The environment (prod, staging, local)
|
|
50
|
+
* @returns The default secret name
|
|
51
|
+
*/
|
|
52
|
+
static getDefaultSecretName(environment: string): string;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=secrets-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-provider.d.ts","sourceRoot":"","sources":["../../../src/auth/secrets/secrets-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAc3C;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACpD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW;IAWrD;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAarC;;;;;OAKG;IACG,uBAAuB,CACzB,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IA+BtC;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAG3D"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Composite Secrets Provider
|
|
4
|
+
*
|
|
5
|
+
* Tries multiple secrets providers in priority order:
|
|
6
|
+
* 1. AWS Secrets Manager (production environments)
|
|
7
|
+
* 2. Local file (development/testing)
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SecretsProvider = void 0;
|
|
11
|
+
const aws_secrets_provider_1 = require("./aws-secrets-provider");
|
|
12
|
+
const local_file_secrets_provider_1 = require("./local-file-secrets-provider");
|
|
13
|
+
/**
|
|
14
|
+
* Default no-op logger
|
|
15
|
+
*/
|
|
16
|
+
const noopLogger = {
|
|
17
|
+
info: () => { },
|
|
18
|
+
warn: () => { },
|
|
19
|
+
error: () => { },
|
|
20
|
+
debug: () => { },
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Composite secrets provider that tries multiple sources in order
|
|
24
|
+
*
|
|
25
|
+
* Priority:
|
|
26
|
+
* 1. AWS Secrets Manager (if in AWS environment)
|
|
27
|
+
* 2. Local file (~/.dataflint/m2m_secret.{env}.json)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const provider = new SecretsProvider('prod', logger);
|
|
32
|
+
* const credentials = await provider.loadAuth0M2MCredentials('auth0_m2m_databricks_loader_prod');
|
|
33
|
+
* if (credentials) {
|
|
34
|
+
* // Use credentials for Auth0 M2M authentication
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
class SecretsProvider {
|
|
39
|
+
logger;
|
|
40
|
+
providers;
|
|
41
|
+
environment;
|
|
42
|
+
constructor(environment, logger) {
|
|
43
|
+
this.logger = logger || noopLogger;
|
|
44
|
+
this.environment = environment;
|
|
45
|
+
// Initialize providers in priority order
|
|
46
|
+
this.providers = [
|
|
47
|
+
new aws_secrets_provider_1.AWSSecretsProvider(logger),
|
|
48
|
+
new local_file_secrets_provider_1.LocalFileSecretsProvider(environment, logger),
|
|
49
|
+
];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get the provider name for logging
|
|
53
|
+
*/
|
|
54
|
+
getName() {
|
|
55
|
+
return "Composite Secrets Provider";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check if any provider is available
|
|
59
|
+
*/
|
|
60
|
+
async isAvailable() {
|
|
61
|
+
for (const provider of this.providers) {
|
|
62
|
+
if (await provider.isAvailable()) {
|
|
63
|
+
this.logger.debug(`Secrets provider available: ${provider.getName()}`);
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
this.logger.debug("No secrets providers available");
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Load Auth0 M2M credentials from the first available provider
|
|
72
|
+
*
|
|
73
|
+
* @param secretName - The name of the secret (used for AWS, ignored for local file)
|
|
74
|
+
* @returns M2M credentials or null if not found in any provider
|
|
75
|
+
*/
|
|
76
|
+
async loadAuth0M2MCredentials(secretName) {
|
|
77
|
+
this.logger.info("Attempting to load M2M credentials...");
|
|
78
|
+
for (const provider of this.providers) {
|
|
79
|
+
const providerName = provider.getName();
|
|
80
|
+
if (!(await provider.isAvailable())) {
|
|
81
|
+
this.logger.debug(`Provider not available: ${providerName}`);
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
this.logger.info(`Trying provider: ${providerName}`);
|
|
85
|
+
const credentials = await provider.loadAuth0M2MCredentials(secretName);
|
|
86
|
+
if (credentials) {
|
|
87
|
+
this.logger.info(`M2M credentials loaded from: ${providerName}`);
|
|
88
|
+
return credentials;
|
|
89
|
+
}
|
|
90
|
+
this.logger.debug(`No credentials found in provider: ${providerName}`);
|
|
91
|
+
}
|
|
92
|
+
this.logger.info("No M2M credentials found in any provider");
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the default secret name for M2M credentials based on environment
|
|
97
|
+
*
|
|
98
|
+
* @param environment - The environment (prod, staging, local)
|
|
99
|
+
* @returns The default secret name
|
|
100
|
+
*/
|
|
101
|
+
static getDefaultSecretName(environment) {
|
|
102
|
+
return `auth0_m2m_databricks_loader_${environment}`;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.SecretsProvider = SecretsProvider;
|
|
106
|
+
//# sourceMappingURL=secrets-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-provider.js","sourceRoot":"","sources":["../../../src/auth/secrets/secrets-provider.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAIH,iEAA4D;AAC5D,+EAAyE;AAEzE;;GAEG;AACH,MAAM,UAAU,GAAgB;IAC5B,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;CAClB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAa,eAAe;IAChB,MAAM,CAAc;IACpB,SAAS,CAAqB;IAC9B,WAAW,CAAS;IAE5B,YAAY,WAAmB,EAAE,MAAoB;QACjD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,UAAU,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,yCAAyC;QACzC,IAAI,CAAC,SAAS,GAAG;YACb,IAAI,yCAAkB,CAAC,MAAM,CAAC;YAC9B,IAAI,sDAAwB,CAAC,WAAW,EAAE,MAAM,CAAC;SACpD,CAAC;IACN,CAAC;IAED;;OAEG;IACH,OAAO;QACH,OAAO,4BAA4B,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACb,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,+BAA+B,QAAQ,CAAC,OAAO,EAAE,EAAE,CACtD,CAAC;gBACF,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,uBAAuB,CACzB,UAAkB;QAElB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAE1D,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAExC,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,YAAY,EAAE,CAAC,CAAC;gBAC7D,SAAS;YACb,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,YAAY,EAAE,CAAC,CAAC;YACrD,MAAM,WAAW,GACb,MAAM,QAAQ,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;YAEvD,IAAI,WAAW,EAAE,CAAC;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ,gCAAgC,YAAY,EAAE,CACjD,CAAC;gBACF,OAAO,WAAW,CAAC;YACvB,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,qCAAqC,YAAY,EAAE,CACtD,CAAC;QACN,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CAAC,WAAmB;QAC3C,OAAO,+BAA+B,WAAW,EAAE,CAAC;IACxD,CAAC;CACJ;AAvFD,0CAuFC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secrets Provider Types
|
|
3
|
+
*
|
|
4
|
+
* Defines interfaces for loading M2M credentials from various sources.
|
|
5
|
+
*/
|
|
6
|
+
import { Auth0M2MCredentials } from "../types";
|
|
7
|
+
/**
|
|
8
|
+
* Interface for secrets providers that can load M2M credentials
|
|
9
|
+
*
|
|
10
|
+
* Implementations:
|
|
11
|
+
* - AWSSecretsProvider: Loads from AWS Secrets Manager
|
|
12
|
+
* - LocalFileSecretsProvider: Loads from local file system
|
|
13
|
+
*/
|
|
14
|
+
export interface ISecretsProvider {
|
|
15
|
+
/**
|
|
16
|
+
* Get the name of this provider for logging
|
|
17
|
+
*/
|
|
18
|
+
getName(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Check if this provider is available in the current environment
|
|
21
|
+
* (e.g., AWS credentials available, local file exists)
|
|
22
|
+
*/
|
|
23
|
+
isAvailable(): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Load Auth0 M2M credentials from the secrets source
|
|
26
|
+
*
|
|
27
|
+
* @param secretName - The name/path of the secret to load
|
|
28
|
+
* @returns The M2M credentials or null if not found
|
|
29
|
+
*/
|
|
30
|
+
loadAuth0M2MCredentials(secretName: string): Promise<Auth0M2MCredentials | null>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/auth/secrets/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;OAEG;IACH,OAAO,IAAI,MAAM,CAAC;IAElB;;;OAGG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC;;;;;OAKG;IACH,uBAAuB,CACnB,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;CAC1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/auth/secrets/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|