@dyanet/config-aws 1.0.3 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +20 -1
- package/dist/cjs/loaders/s3.loader.js +60 -9
- package/dist/cjs/loaders/s3.loader.js.map +1 -1
- package/dist/cjs/loaders/secrets-manager.loader.js +61 -11
- package/dist/cjs/loaders/secrets-manager.loader.js.map +1 -1
- package/dist/cjs/loaders/ssm-parameter-store.loader.js +61 -11
- package/dist/cjs/loaders/ssm-parameter-store.loader.js.map +1 -1
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/utils/optional-dependency.util.js +43 -0
- package/dist/cjs/utils/optional-dependency.util.js.map +1 -0
- package/dist/esm/loaders/s3.loader.js +27 -9
- package/dist/esm/loaders/s3.loader.js.map +1 -1
- package/dist/esm/loaders/secrets-manager.loader.js +28 -11
- package/dist/esm/loaders/secrets-manager.loader.js.map +1 -1
- package/dist/esm/loaders/ssm-parameter-store.loader.js +28 -11
- package/dist/esm/loaders/ssm-parameter-store.loader.js.map +1 -1
- package/dist/esm/package.json +3 -1
- package/dist/esm/utils/optional-dependency.util.js +40 -0
- package/dist/esm/utils/optional-dependency.util.js.map +1 -0
- package/dist/types/loaders/s3.loader.d.ts +15 -3
- package/dist/types/loaders/s3.loader.d.ts.map +1 -1
- package/dist/types/loaders/secrets-manager.loader.d.ts +15 -3
- package/dist/types/loaders/secrets-manager.loader.d.ts.map +1 -1
- package/dist/types/loaders/ssm-parameter-store.loader.d.ts +15 -3
- package/dist/types/loaders/ssm-parameter-store.loader.d.ts.map +1 -1
- package/dist/types/utils/optional-dependency.util.d.ts +23 -0
- package/dist/types/utils/optional-dependency.util.d.ts.map +1 -0
- package/package.json +36 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Dyanet
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -25,7 +25,10 @@ npm install @dyanet/config-aws
|
|
|
25
25
|
|
|
26
26
|
### Peer Dependencies
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
The AWS SDK clients are **optional**. Each AWS-backed loader imports its SDK lazily
|
|
29
|
+
(only when the loader actually runs), so you only install the clients for the sources
|
|
30
|
+
you use. An env-vars-only or `.env`-only setup needs no AWS SDK at all — importing this
|
|
31
|
+
package never loads the AWS SDK.
|
|
29
32
|
|
|
30
33
|
```bash
|
|
31
34
|
# For Secrets Manager
|
|
@@ -41,6 +44,22 @@ npm install @aws-sdk/client-s3
|
|
|
41
44
|
npm install zod
|
|
42
45
|
```
|
|
43
46
|
|
|
47
|
+
If you use an AWS loader without its SDK installed, the loader throws a clear error
|
|
48
|
+
telling you which package to install. Credentials are resolved through the AWS SDK's
|
|
49
|
+
default Node provider chain (environment, shared config, SSO, container, and IMDS).
|
|
50
|
+
|
|
51
|
+
### Importing individual loaders
|
|
52
|
+
|
|
53
|
+
The package root (`@dyanet/config-aws`) re-exports everything. You can also import a
|
|
54
|
+
single loader via its subpath, which keeps unused loaders (and their AWS SDKs) out of
|
|
55
|
+
your bundle:
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
import { EnvironmentLoader } from '@dyanet/config-aws/loaders/environment';
|
|
59
|
+
import { SecretsManagerLoader } from '@dyanet/config-aws/loaders/secrets-manager';
|
|
60
|
+
// also: /loaders/env-file, /loaders/s3, /loaders/ssm-parameter-store
|
|
61
|
+
```
|
|
62
|
+
|
|
44
63
|
## Quick Start
|
|
45
64
|
|
|
46
65
|
```typescript
|
|
@@ -1,10 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.S3Loader = void 0;
|
|
4
|
-
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
5
|
-
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
6
37
|
const env_file_parser_util_js_1 = require("../utils/env-file-parser.util.js");
|
|
7
38
|
const index_js_1 = require("../errors/index.js");
|
|
39
|
+
const optional_dependency_util_js_1 = require("../utils/optional-dependency.util.js");
|
|
8
40
|
/**
|
|
9
41
|
* Loader that reads configuration from S3 buckets.
|
|
10
42
|
* Supports JSON and .env file formats with auto-detection.
|
|
@@ -35,10 +67,26 @@ class S3Loader {
|
|
|
35
67
|
region: config.region || process.env['AWS_REGION'] || 'us-east-1',
|
|
36
68
|
format: config.format || 'auto',
|
|
37
69
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Lazily import the AWS S3 SDK. Imported on demand so the SDK is an optional
|
|
73
|
+
* peer dependency and is never loaded unless this loader runs.
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
importSdk() {
|
|
77
|
+
return (0, optional_dependency_util_js_1.loadOptionalDependency)('@aws-sdk/client-s3', () => Promise.resolve().then(() => __importStar(require('@aws-sdk/client-s3'))));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get (creating on first use) the S3 client. The client relies on the AWS SDK's
|
|
81
|
+
* default Node credential provider chain.
|
|
82
|
+
* @internal
|
|
83
|
+
*/
|
|
84
|
+
async getClient() {
|
|
85
|
+
if (!this._client) {
|
|
86
|
+
const { S3Client } = await this.importSdk();
|
|
87
|
+
this._client = new S3Client({ region: this._config.region });
|
|
88
|
+
}
|
|
89
|
+
return this._client;
|
|
42
90
|
}
|
|
43
91
|
getName() {
|
|
44
92
|
return `S3Loader(s3://${this._config.bucket}/${this._config.key})`;
|
|
@@ -49,7 +97,8 @@ class S3Loader {
|
|
|
49
97
|
*/
|
|
50
98
|
async isAvailable() {
|
|
51
99
|
try {
|
|
52
|
-
await this.
|
|
100
|
+
const client = await this.getClient();
|
|
101
|
+
await client.config.credentials();
|
|
53
102
|
return true;
|
|
54
103
|
}
|
|
55
104
|
catch {
|
|
@@ -63,12 +112,14 @@ class S3Loader {
|
|
|
63
112
|
* @throws ConfigurationLoadError if content cannot be parsed
|
|
64
113
|
*/
|
|
65
114
|
async load() {
|
|
115
|
+
const { GetObjectCommand } = await this.importSdk();
|
|
66
116
|
try {
|
|
67
|
-
const
|
|
117
|
+
const client = await this.getClient();
|
|
118
|
+
const command = new GetObjectCommand({
|
|
68
119
|
Bucket: this._config.bucket,
|
|
69
120
|
Key: this._config.key,
|
|
70
121
|
});
|
|
71
|
-
const response = await
|
|
122
|
+
const response = await client.send(command);
|
|
72
123
|
if (!response.Body) {
|
|
73
124
|
return {};
|
|
74
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3.loader.js","sourceRoot":"","sources":["../../../src/loaders/s3.loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"s3.loader.js","sourceRoot":"","sources":["../../../src/loaders/s3.loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.SecretsManagerLoader = void 0;
|
|
4
|
-
const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
|
|
5
|
-
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
6
37
|
const index_js_1 = require("../errors/index.js");
|
|
38
|
+
const optional_dependency_util_js_1 = require("../utils/optional-dependency.util.js");
|
|
7
39
|
/**
|
|
8
40
|
* Loader that reads configuration from AWS Secrets Manager.
|
|
9
41
|
* Supports environment-aware path construction.
|
|
@@ -40,11 +72,26 @@ class SecretsManagerLoader {
|
|
|
40
72
|
production: 'production',
|
|
41
73
|
},
|
|
42
74
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Lazily import the AWS Secrets Manager SDK. Imported on demand so the SDK is an
|
|
78
|
+
* optional peer dependency and is never loaded unless this loader runs.
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
importSdk() {
|
|
82
|
+
return (0, optional_dependency_util_js_1.loadOptionalDependency)('@aws-sdk/client-secrets-manager', () => Promise.resolve().then(() => __importStar(require('@aws-sdk/client-secrets-manager'))));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get (creating on first use) the Secrets Manager client. The client relies on the
|
|
86
|
+
* AWS SDK's default Node credential provider chain.
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
async getClient() {
|
|
90
|
+
if (!this._client) {
|
|
91
|
+
const { SecretsManagerClient } = await this.importSdk();
|
|
92
|
+
this._client = new SecretsManagerClient({ region: this._config.region });
|
|
93
|
+
}
|
|
94
|
+
return this._client;
|
|
48
95
|
}
|
|
49
96
|
/**
|
|
50
97
|
* Get the name of this loader for logging and debugging.
|
|
@@ -71,8 +118,9 @@ class SecretsManagerLoader {
|
|
|
71
118
|
return false;
|
|
72
119
|
}
|
|
73
120
|
try {
|
|
74
|
-
// Test AWS credentials by
|
|
75
|
-
await this.
|
|
121
|
+
// Test AWS credentials by resolving the default provider chain
|
|
122
|
+
const client = await this.getClient();
|
|
123
|
+
await client.config.credentials();
|
|
76
124
|
return true;
|
|
77
125
|
}
|
|
78
126
|
catch {
|
|
@@ -91,9 +139,11 @@ class SecretsManagerLoader {
|
|
|
91
139
|
return {};
|
|
92
140
|
}
|
|
93
141
|
const secretName = this.buildSecretName();
|
|
142
|
+
const { GetSecretValueCommand } = await this.importSdk();
|
|
94
143
|
try {
|
|
95
|
-
const
|
|
96
|
-
const
|
|
144
|
+
const client = await this.getClient();
|
|
145
|
+
const command = new GetSecretValueCommand({ SecretId: secretName });
|
|
146
|
+
const response = await client.send(command);
|
|
97
147
|
if (!response.SecretString) {
|
|
98
148
|
return {};
|
|
99
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets-manager.loader.js","sourceRoot":"","sources":["../../../src/loaders/secrets-manager.loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secrets-manager.loader.js","sourceRoot":"","sources":["../../../src/loaders/secrets-manager.loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.SSMParameterStoreLoader = void 0;
|
|
4
|
-
const client_ssm_1 = require("@aws-sdk/client-ssm");
|
|
5
|
-
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
6
37
|
const index_js_1 = require("../errors/index.js");
|
|
38
|
+
const optional_dependency_util_js_1 = require("../utils/optional-dependency.util.js");
|
|
7
39
|
/**
|
|
8
40
|
* Loader that reads configuration from AWS SSM Parameter Store.
|
|
9
41
|
* Supports environment-aware path construction, pagination, and decryption options.
|
|
@@ -41,11 +73,26 @@ class SSMParameterStoreLoader {
|
|
|
41
73
|
},
|
|
42
74
|
withDecryption: config.withDecryption ?? true,
|
|
43
75
|
};
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Lazily import the AWS SSM SDK. Imported on demand so the SDK is an optional
|
|
79
|
+
* peer dependency and is never loaded unless this loader runs.
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
importSdk() {
|
|
83
|
+
return (0, optional_dependency_util_js_1.loadOptionalDependency)('@aws-sdk/client-ssm', () => Promise.resolve().then(() => __importStar(require('@aws-sdk/client-ssm'))));
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get (creating on first use) the SSM client. The client relies on the AWS SDK's
|
|
87
|
+
* default Node credential provider chain.
|
|
88
|
+
* @internal
|
|
89
|
+
*/
|
|
90
|
+
async getClient() {
|
|
91
|
+
if (!this._client) {
|
|
92
|
+
const { SSMClient } = await this.importSdk();
|
|
93
|
+
this._client = new SSMClient({ region: this._config.region });
|
|
94
|
+
}
|
|
95
|
+
return this._client;
|
|
49
96
|
}
|
|
50
97
|
/**
|
|
51
98
|
* Get the name of this loader for logging and debugging.
|
|
@@ -71,8 +118,9 @@ class SSMParameterStoreLoader {
|
|
|
71
118
|
return false;
|
|
72
119
|
}
|
|
73
120
|
try {
|
|
74
|
-
// Test AWS credentials by
|
|
75
|
-
await this.
|
|
121
|
+
// Test AWS credentials by resolving the default provider chain
|
|
122
|
+
const client = await this.getClient();
|
|
123
|
+
await client.config.credentials();
|
|
76
124
|
return true;
|
|
77
125
|
}
|
|
78
126
|
catch {
|
|
@@ -92,17 +140,19 @@ class SSMParameterStoreLoader {
|
|
|
92
140
|
return {};
|
|
93
141
|
}
|
|
94
142
|
const parameterPath = this.buildParameterPath();
|
|
143
|
+
const { GetParametersByPathCommand } = await this.importSdk();
|
|
144
|
+
const client = await this.getClient();
|
|
95
145
|
const result = {};
|
|
96
146
|
let nextToken;
|
|
97
147
|
try {
|
|
98
148
|
do {
|
|
99
|
-
const command = new
|
|
149
|
+
const command = new GetParametersByPathCommand({
|
|
100
150
|
Path: parameterPath,
|
|
101
151
|
Recursive: true,
|
|
102
152
|
WithDecryption: this._config.withDecryption,
|
|
103
153
|
NextToken: nextToken,
|
|
104
154
|
});
|
|
105
|
-
const response = await
|
|
155
|
+
const response = await client.send(command);
|
|
106
156
|
if (!response.Parameters) {
|
|
107
157
|
// No parameters found - this is not necessarily an error
|
|
108
158
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssm-parameter-store.loader.js","sourceRoot":"","sources":["../../../src/loaders/ssm-parameter-store.loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ssm-parameter-store.loader.js","sourceRoot":"","sources":["../../../src/loaders/ssm-parameter-store.loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadOptionalDependency = loadOptionalDependency;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
/**
|
|
6
|
+
* Dynamically import an optional dependency (e.g. an AWS SDK client) only when a
|
|
7
|
+
* loader actually needs it.
|
|
8
|
+
*
|
|
9
|
+
* This keeps the AWS SDK packages as genuinely optional peer dependencies:
|
|
10
|
+
* consumers that never use AWS-backed loaders do not need them installed, and the
|
|
11
|
+
* SDKs are never loaded at module import time — only on first use of the loader.
|
|
12
|
+
*
|
|
13
|
+
* @param packageName The npm package name, used for the install hint and error message.
|
|
14
|
+
* @param importer A thunk performing the dynamic `import()` with a literal specifier.
|
|
15
|
+
* @returns The imported module namespace.
|
|
16
|
+
* @throws ConfigurationLoadError with an install hint when the package is not installed.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const { S3Client } = await loadOptionalDependency(
|
|
21
|
+
* '@aws-sdk/client-s3',
|
|
22
|
+
* () => import('@aws-sdk/client-s3'),
|
|
23
|
+
* );
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
async function loadOptionalDependency(packageName, importer) {
|
|
27
|
+
try {
|
|
28
|
+
return await importer();
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
const code = error?.code;
|
|
32
|
+
const message = error instanceof Error ? error.message : '';
|
|
33
|
+
const isMissing = code === 'MODULE_NOT_FOUND' ||
|
|
34
|
+
code === 'ERR_MODULE_NOT_FOUND' ||
|
|
35
|
+
/cannot find (module|package)/i.test(message);
|
|
36
|
+
if (isMissing) {
|
|
37
|
+
throw new errors_1.ConfigurationLoadError(`The optional dependency "${packageName}" is required for this loader but is not installed. ` +
|
|
38
|
+
`Install it with: npm install ${packageName}`, packageName, error instanceof Error ? error : undefined);
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=optional-dependency.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional-dependency.util.js","sourceRoot":"","sources":["../../../src/utils/optional-dependency.util.ts"],"names":[],"mappings":";;AAuBA,wDAyBC;AAhDD,sCAAmD;AAEnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACI,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,QAA0B;IAE1B,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA2C,EAAE,IAAI,CAAC;QAChE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GACb,IAAI,KAAK,kBAAkB;YAC3B,IAAI,KAAK,sBAAsB;YAC/B,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,+BAAsB,CAC9B,4BAA4B,WAAW,sDAAsD;gBAC3F,gCAAgC,WAAW,EAAE,EAC/C,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { GetObjectCommand, S3Client } from '@aws-sdk/client-s3';
|
|
2
|
-
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
3
1
|
import { EnvFileParser } from '../utils/env-file-parser.util.js';
|
|
4
2
|
import { AWSServiceError, ConfigurationLoadError } from '../errors/index.js';
|
|
3
|
+
import { loadOptionalDependency } from '../utils/optional-dependency.util.js';
|
|
5
4
|
/**
|
|
6
5
|
* Loader that reads configuration from S3 buckets.
|
|
7
6
|
* Supports JSON and .env file formats with auto-detection.
|
|
@@ -27,7 +26,7 @@ import { AWSServiceError, ConfigurationLoadError } from '../errors/index.js';
|
|
|
27
26
|
export class S3Loader {
|
|
28
27
|
/** @internal */
|
|
29
28
|
_config;
|
|
30
|
-
/** @internal */
|
|
29
|
+
/** @internal Lazily created on first use so the AWS SDK stays optional. */
|
|
31
30
|
_client;
|
|
32
31
|
constructor(config) {
|
|
33
32
|
this._config = {
|
|
@@ -36,10 +35,26 @@ export class S3Loader {
|
|
|
36
35
|
region: config.region || process.env['AWS_REGION'] || 'us-east-1',
|
|
37
36
|
format: config.format || 'auto',
|
|
38
37
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Lazily import the AWS S3 SDK. Imported on demand so the SDK is an optional
|
|
41
|
+
* peer dependency and is never loaded unless this loader runs.
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
importSdk() {
|
|
45
|
+
return loadOptionalDependency('@aws-sdk/client-s3', () => import('@aws-sdk/client-s3'));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get (creating on first use) the S3 client. The client relies on the AWS SDK's
|
|
49
|
+
* default Node credential provider chain.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
async getClient() {
|
|
53
|
+
if (!this._client) {
|
|
54
|
+
const { S3Client } = await this.importSdk();
|
|
55
|
+
this._client = new S3Client({ region: this._config.region });
|
|
56
|
+
}
|
|
57
|
+
return this._client;
|
|
43
58
|
}
|
|
44
59
|
getName() {
|
|
45
60
|
return `S3Loader(s3://${this._config.bucket}/${this._config.key})`;
|
|
@@ -50,7 +65,8 @@ export class S3Loader {
|
|
|
50
65
|
*/
|
|
51
66
|
async isAvailable() {
|
|
52
67
|
try {
|
|
53
|
-
await this.
|
|
68
|
+
const client = await this.getClient();
|
|
69
|
+
await client.config.credentials();
|
|
54
70
|
return true;
|
|
55
71
|
}
|
|
56
72
|
catch {
|
|
@@ -64,12 +80,14 @@ export class S3Loader {
|
|
|
64
80
|
* @throws ConfigurationLoadError if content cannot be parsed
|
|
65
81
|
*/
|
|
66
82
|
async load() {
|
|
83
|
+
const { GetObjectCommand } = await this.importSdk();
|
|
67
84
|
try {
|
|
85
|
+
const client = await this.getClient();
|
|
68
86
|
const command = new GetObjectCommand({
|
|
69
87
|
Bucket: this._config.bucket,
|
|
70
88
|
Key: this._config.key,
|
|
71
89
|
});
|
|
72
|
-
const response = await
|
|
90
|
+
const response = await client.send(command);
|
|
73
91
|
if (!response.Body) {
|
|
74
92
|
return {};
|
|
75
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3.loader.js","sourceRoot":"","sources":["../../../src/loaders/s3.loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"s3.loader.js","sourceRoot":"","sources":["../../../src/loaders/s3.loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { GetSecretValueCommand, SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
|
|
2
|
-
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
3
1
|
import { AWSServiceError, ConfigurationLoadError } from '../errors/index.js';
|
|
2
|
+
import { loadOptionalDependency } from '../utils/optional-dependency.util.js';
|
|
4
3
|
/**
|
|
5
4
|
* Loader that reads configuration from AWS Secrets Manager.
|
|
6
5
|
* Supports environment-aware path construction.
|
|
@@ -25,7 +24,7 @@ import { AWSServiceError, ConfigurationLoadError } from '../errors/index.js';
|
|
|
25
24
|
* ```
|
|
26
25
|
*/
|
|
27
26
|
export class SecretsManagerLoader {
|
|
28
|
-
/** @internal */
|
|
27
|
+
/** @internal Lazily created on first use so the AWS SDK stays optional. */
|
|
29
28
|
_client;
|
|
30
29
|
/** @internal */
|
|
31
30
|
_config;
|
|
@@ -43,11 +42,26 @@ export class SecretsManagerLoader {
|
|
|
43
42
|
production: 'production',
|
|
44
43
|
},
|
|
45
44
|
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Lazily import the AWS Secrets Manager SDK. Imported on demand so the SDK is an
|
|
48
|
+
* optional peer dependency and is never loaded unless this loader runs.
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
importSdk() {
|
|
52
|
+
return loadOptionalDependency('@aws-sdk/client-secrets-manager', () => import('@aws-sdk/client-secrets-manager'));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get (creating on first use) the Secrets Manager client. The client relies on the
|
|
56
|
+
* AWS SDK's default Node credential provider chain.
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
async getClient() {
|
|
60
|
+
if (!this._client) {
|
|
61
|
+
const { SecretsManagerClient } = await this.importSdk();
|
|
62
|
+
this._client = new SecretsManagerClient({ region: this._config.region });
|
|
63
|
+
}
|
|
64
|
+
return this._client;
|
|
51
65
|
}
|
|
52
66
|
/**
|
|
53
67
|
* Get the name of this loader for logging and debugging.
|
|
@@ -74,8 +88,9 @@ export class SecretsManagerLoader {
|
|
|
74
88
|
return false;
|
|
75
89
|
}
|
|
76
90
|
try {
|
|
77
|
-
// Test AWS credentials by
|
|
78
|
-
await this.
|
|
91
|
+
// Test AWS credentials by resolving the default provider chain
|
|
92
|
+
const client = await this.getClient();
|
|
93
|
+
await client.config.credentials();
|
|
79
94
|
return true;
|
|
80
95
|
}
|
|
81
96
|
catch {
|
|
@@ -94,9 +109,11 @@ export class SecretsManagerLoader {
|
|
|
94
109
|
return {};
|
|
95
110
|
}
|
|
96
111
|
const secretName = this.buildSecretName();
|
|
112
|
+
const { GetSecretValueCommand } = await this.importSdk();
|
|
97
113
|
try {
|
|
114
|
+
const client = await this.getClient();
|
|
98
115
|
const command = new GetSecretValueCommand({ SecretId: secretName });
|
|
99
|
-
const response = await
|
|
116
|
+
const response = await client.send(command);
|
|
100
117
|
if (!response.SecretString) {
|
|
101
118
|
return {};
|
|
102
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets-manager.loader.js","sourceRoot":"","sources":["../../../src/loaders/secrets-manager.loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secrets-manager.loader.js","sourceRoot":"","sources":["../../../src/loaders/secrets-manager.loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { GetParametersByPathCommand, SSMClient } from '@aws-sdk/client-ssm';
|
|
2
|
-
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
3
1
|
import { AWSServiceError, ConfigurationLoadError } from '../errors/index.js';
|
|
2
|
+
import { loadOptionalDependency } from '../utils/optional-dependency.util.js';
|
|
4
3
|
/**
|
|
5
4
|
* Loader that reads configuration from AWS SSM Parameter Store.
|
|
6
5
|
* Supports environment-aware path construction, pagination, and decryption options.
|
|
@@ -25,7 +24,7 @@ import { AWSServiceError, ConfigurationLoadError } from '../errors/index.js';
|
|
|
25
24
|
* ```
|
|
26
25
|
*/
|
|
27
26
|
export class SSMParameterStoreLoader {
|
|
28
|
-
/** @internal */
|
|
27
|
+
/** @internal Lazily created on first use so the AWS SDK stays optional. */
|
|
29
28
|
_client;
|
|
30
29
|
/** @internal */
|
|
31
30
|
_config;
|
|
@@ -44,11 +43,26 @@ export class SSMParameterStoreLoader {
|
|
|
44
43
|
},
|
|
45
44
|
withDecryption: config.withDecryption ?? true,
|
|
46
45
|
};
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Lazily import the AWS SSM SDK. Imported on demand so the SDK is an optional
|
|
49
|
+
* peer dependency and is never loaded unless this loader runs.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
importSdk() {
|
|
53
|
+
return loadOptionalDependency('@aws-sdk/client-ssm', () => import('@aws-sdk/client-ssm'));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get (creating on first use) the SSM client. The client relies on the AWS SDK's
|
|
57
|
+
* default Node credential provider chain.
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
async getClient() {
|
|
61
|
+
if (!this._client) {
|
|
62
|
+
const { SSMClient } = await this.importSdk();
|
|
63
|
+
this._client = new SSMClient({ region: this._config.region });
|
|
64
|
+
}
|
|
65
|
+
return this._client;
|
|
52
66
|
}
|
|
53
67
|
/**
|
|
54
68
|
* Get the name of this loader for logging and debugging.
|
|
@@ -74,8 +88,9 @@ export class SSMParameterStoreLoader {
|
|
|
74
88
|
return false;
|
|
75
89
|
}
|
|
76
90
|
try {
|
|
77
|
-
// Test AWS credentials by
|
|
78
|
-
await this.
|
|
91
|
+
// Test AWS credentials by resolving the default provider chain
|
|
92
|
+
const client = await this.getClient();
|
|
93
|
+
await client.config.credentials();
|
|
79
94
|
return true;
|
|
80
95
|
}
|
|
81
96
|
catch {
|
|
@@ -95,6 +110,8 @@ export class SSMParameterStoreLoader {
|
|
|
95
110
|
return {};
|
|
96
111
|
}
|
|
97
112
|
const parameterPath = this.buildParameterPath();
|
|
113
|
+
const { GetParametersByPathCommand } = await this.importSdk();
|
|
114
|
+
const client = await this.getClient();
|
|
98
115
|
const result = {};
|
|
99
116
|
let nextToken;
|
|
100
117
|
try {
|
|
@@ -105,7 +122,7 @@ export class SSMParameterStoreLoader {
|
|
|
105
122
|
WithDecryption: this._config.withDecryption,
|
|
106
123
|
NextToken: nextToken,
|
|
107
124
|
});
|
|
108
|
-
const response = await
|
|
125
|
+
const response = await client.send(command);
|
|
109
126
|
if (!response.Parameters) {
|
|
110
127
|
// No parameters found - this is not necessarily an error
|
|
111
128
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssm-parameter-store.loader.js","sourceRoot":"","sources":["../../../src/loaders/ssm-parameter-store.loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ssm-parameter-store.loader.js","sourceRoot":"","sources":["../../../src/loaders/ssm-parameter-store.loader.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/package.json
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ConfigurationLoadError } from '../errors/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Dynamically import an optional dependency (e.g. an AWS SDK client) only when a
|
|
4
|
+
* loader actually needs it.
|
|
5
|
+
*
|
|
6
|
+
* This keeps the AWS SDK packages as genuinely optional peer dependencies:
|
|
7
|
+
* consumers that never use AWS-backed loaders do not need them installed, and the
|
|
8
|
+
* SDKs are never loaded at module import time — only on first use of the loader.
|
|
9
|
+
*
|
|
10
|
+
* @param packageName The npm package name, used for the install hint and error message.
|
|
11
|
+
* @param importer A thunk performing the dynamic `import()` with a literal specifier.
|
|
12
|
+
* @returns The imported module namespace.
|
|
13
|
+
* @throws ConfigurationLoadError with an install hint when the package is not installed.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const { S3Client } = await loadOptionalDependency(
|
|
18
|
+
* '@aws-sdk/client-s3',
|
|
19
|
+
* () => import('@aws-sdk/client-s3'),
|
|
20
|
+
* );
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export async function loadOptionalDependency(packageName, importer) {
|
|
24
|
+
try {
|
|
25
|
+
return await importer();
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const code = error?.code;
|
|
29
|
+
const message = error instanceof Error ? error.message : '';
|
|
30
|
+
const isMissing = code === 'MODULE_NOT_FOUND' ||
|
|
31
|
+
code === 'ERR_MODULE_NOT_FOUND' ||
|
|
32
|
+
/cannot find (module|package)/i.test(message);
|
|
33
|
+
if (isMissing) {
|
|
34
|
+
throw new ConfigurationLoadError(`The optional dependency "${packageName}" is required for this loader but is not installed. ` +
|
|
35
|
+
`Install it with: npm install ${packageName}`, packageName, error instanceof Error ? error : undefined);
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=optional-dependency.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional-dependency.util.js","sourceRoot":"","sources":["../../../src/utils/optional-dependency.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,QAA0B;IAE1B,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAI,KAA2C,EAAE,IAAI,CAAC;QAChE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,SAAS,GACb,IAAI,KAAK,kBAAkB;YAC3B,IAAI,KAAK,sBAAsB;YAC/B,+BAA+B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,sBAAsB,CAC9B,4BAA4B,WAAW,sDAAsD;gBAC3F,gCAAgC,WAAW,EAAE,EAC/C,WAAW,EACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S3Client } from '@aws-sdk/client-s3';
|
|
1
|
+
import type { S3Client } from '@aws-sdk/client-s3';
|
|
2
2
|
import type { ConfigLoader } from '../interfaces/config-loader.interface.js';
|
|
3
3
|
import type { S3LoaderConfig } from '../interfaces/s3-loader.interface.js';
|
|
4
4
|
/**
|
|
@@ -26,9 +26,21 @@ import type { S3LoaderConfig } from '../interfaces/s3-loader.interface.js';
|
|
|
26
26
|
export declare class S3Loader implements ConfigLoader {
|
|
27
27
|
/** @internal */
|
|
28
28
|
protected readonly _config: Required<S3LoaderConfig>;
|
|
29
|
-
/** @internal */
|
|
30
|
-
protected
|
|
29
|
+
/** @internal Lazily created on first use so the AWS SDK stays optional. */
|
|
30
|
+
protected _client?: S3Client;
|
|
31
31
|
constructor(config: S3LoaderConfig);
|
|
32
|
+
/**
|
|
33
|
+
* Lazily import the AWS S3 SDK. Imported on demand so the SDK is an optional
|
|
34
|
+
* peer dependency and is never loaded unless this loader runs.
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
protected importSdk(): Promise<typeof import('@aws-sdk/client-s3')>;
|
|
38
|
+
/**
|
|
39
|
+
* Get (creating on first use) the S3 client. The client relies on the AWS SDK's
|
|
40
|
+
* default Node credential provider chain.
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
protected getClient(): Promise<S3Client>;
|
|
32
44
|
getName(): string;
|
|
33
45
|
/**
|
|
34
46
|
* Check if this loader is available by verifying AWS credentials.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3.loader.d.ts","sourceRoot":"","sources":["../../../src/loaders/s3.loader.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"s3.loader.d.ts","sourceRoot":"","sources":["../../../src/loaders/s3.loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAK3E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,QAAS,YAAW,YAAY;IAC3C,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACrD,2EAA2E;IAC3E,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;gBAEjB,MAAM,EAAE,cAAc;IASlC;;;;OAIG;IACH,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,oBAAoB,CAAC,CAAC;IAInE;;;;OAIG;cACa,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC;IAQ9C,OAAO,IAAI,MAAM;IAKjB;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAqD9C;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUhE;;;;OAIG;IACH,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK;IAQvD;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAkB9D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
|
|
1
|
+
import type { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
|
|
2
2
|
import type { ConfigLoader } from '../interfaces/config-loader.interface.js';
|
|
3
3
|
import type { SecretsManagerLoaderConfig } from '../interfaces/secrets-manager-loader.interface.js';
|
|
4
4
|
/**
|
|
@@ -25,13 +25,25 @@ import type { SecretsManagerLoaderConfig } from '../interfaces/secrets-manager-l
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
export declare class SecretsManagerLoader implements ConfigLoader {
|
|
28
|
-
/** @internal */
|
|
29
|
-
protected
|
|
28
|
+
/** @internal Lazily created on first use so the AWS SDK stays optional. */
|
|
29
|
+
protected _client?: SecretsManagerClient;
|
|
30
30
|
/** @internal */
|
|
31
31
|
protected readonly _config: Required<SecretsManagerLoaderConfig>;
|
|
32
32
|
/** @internal */
|
|
33
33
|
protected readonly _appEnv: string;
|
|
34
34
|
constructor(config?: SecretsManagerLoaderConfig);
|
|
35
|
+
/**
|
|
36
|
+
* Lazily import the AWS Secrets Manager SDK. Imported on demand so the SDK is an
|
|
37
|
+
* optional peer dependency and is never loaded unless this loader runs.
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
protected importSdk(): Promise<typeof import('@aws-sdk/client-secrets-manager')>;
|
|
41
|
+
/**
|
|
42
|
+
* Get (creating on first use) the Secrets Manager client. The client relies on the
|
|
43
|
+
* AWS SDK's default Node credential provider chain.
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
protected getClient(): Promise<SecretsManagerClient>;
|
|
35
47
|
/**
|
|
36
48
|
* Get the name of this loader for logging and debugging.
|
|
37
49
|
* @returns The loader name with secret path or base secret name if path cannot be built
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets-manager.loader.d.ts","sourceRoot":"","sources":["../../../src/loaders/secrets-manager.loader.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"secrets-manager.loader.d.ts","sourceRoot":"","sources":["../../../src/loaders/secrets-manager.loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAE5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mDAAmD,CAAC;AAIpG;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,2EAA2E;IAC3E,SAAS,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC;IACzC,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IACjE,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEvB,MAAM,GAAE,0BAA+B;IAenD;;;;OAIG;IACH,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,iCAAiC,CAAC,CAAC;IAOhF;;;;OAIG;cACa,SAAS,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAS1D;;;OAGG;IACH,OAAO,IAAI,MAAM;IAYjB;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAsE9C;;;OAGG;IACH,eAAe,IAAI,MAAM;IAczB;;;OAGG;IACH,SAAS,IAAI,MAAM;IAInB;;;OAGG;IACH,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGhD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SSMClient } from '@aws-sdk/client-ssm';
|
|
1
|
+
import type { SSMClient } from '@aws-sdk/client-ssm';
|
|
2
2
|
import type { ConfigLoader } from '../interfaces/config-loader.interface.js';
|
|
3
3
|
import type { SSMParameterStoreLoaderConfig } from '../interfaces/ssm-parameter-store-loader.interface.js';
|
|
4
4
|
/**
|
|
@@ -25,13 +25,25 @@ import type { SSMParameterStoreLoaderConfig } from '../interfaces/ssm-parameter-
|
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
27
|
export declare class SSMParameterStoreLoader implements ConfigLoader {
|
|
28
|
-
/** @internal */
|
|
29
|
-
protected
|
|
28
|
+
/** @internal Lazily created on first use so the AWS SDK stays optional. */
|
|
29
|
+
protected _client?: SSMClient;
|
|
30
30
|
/** @internal */
|
|
31
31
|
protected readonly _config: Required<SSMParameterStoreLoaderConfig>;
|
|
32
32
|
/** @internal */
|
|
33
33
|
protected readonly _appEnv: string;
|
|
34
34
|
constructor(config?: SSMParameterStoreLoaderConfig);
|
|
35
|
+
/**
|
|
36
|
+
* Lazily import the AWS SSM SDK. Imported on demand so the SDK is an optional
|
|
37
|
+
* peer dependency and is never loaded unless this loader runs.
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
protected importSdk(): Promise<typeof import('@aws-sdk/client-ssm')>;
|
|
41
|
+
/**
|
|
42
|
+
* Get (creating on first use) the SSM client. The client relies on the AWS SDK's
|
|
43
|
+
* default Node credential provider chain.
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
protected getClient(): Promise<SSMClient>;
|
|
35
47
|
/**
|
|
36
48
|
* Get the name of this loader for logging and debugging.
|
|
37
49
|
* @returns The loader name with parameter path
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssm-parameter-store.loader.d.ts","sourceRoot":"","sources":["../../../src/loaders/ssm-parameter-store.loader.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ssm-parameter-store.loader.d.ts","sourceRoot":"","sources":["../../../src/loaders/ssm-parameter-store.loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uDAAuD,CAAC;AAI3G;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC1D,2EAA2E;IAC3E,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC9B,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IACpE,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEvB,MAAM,GAAE,6BAAkC;IAgBtD;;;;OAIG;IACH,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,cAAc,qBAAqB,CAAC,CAAC;IAIpE;;;;OAIG;cACa,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;IAS/C;;;OAGG;IACH,OAAO,IAAI,MAAM;IAUjB;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBrC;;;;;;OAMG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA+E9C;;;;OAIG;IACH,kBAAkB,IAAI,MAAM;IAc5B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;;OAGG;IACH,SAAS,IAAI,MAAM;IAInB;;;OAGG;IACH,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGhD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamically import an optional dependency (e.g. an AWS SDK client) only when a
|
|
3
|
+
* loader actually needs it.
|
|
4
|
+
*
|
|
5
|
+
* This keeps the AWS SDK packages as genuinely optional peer dependencies:
|
|
6
|
+
* consumers that never use AWS-backed loaders do not need them installed, and the
|
|
7
|
+
* SDKs are never loaded at module import time — only on first use of the loader.
|
|
8
|
+
*
|
|
9
|
+
* @param packageName The npm package name, used for the install hint and error message.
|
|
10
|
+
* @param importer A thunk performing the dynamic `import()` with a literal specifier.
|
|
11
|
+
* @returns The imported module namespace.
|
|
12
|
+
* @throws ConfigurationLoadError with an install hint when the package is not installed.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const { S3Client } = await loadOptionalDependency(
|
|
17
|
+
* '@aws-sdk/client-s3',
|
|
18
|
+
* () => import('@aws-sdk/client-s3'),
|
|
19
|
+
* );
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function loadOptionalDependency<T>(packageName: string, importer: () => Promise<T>): Promise<T>;
|
|
23
|
+
//# sourceMappingURL=optional-dependency.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional-dependency.util.d.ts","sourceRoot":"","sources":["../../../src/utils/optional-dependency.util.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,CAAC,CAAC,CAsBZ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dyanet/config-aws",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Framework-agnostic AWS configuration management with support for environment variables, AWS Secrets Manager, SSM Parameter Store, S3, and .env files",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -10,7 +10,38 @@
|
|
|
10
10
|
"import": "./dist/esm/index.js",
|
|
11
11
|
"require": "./dist/cjs/index.js",
|
|
12
12
|
"types": "./dist/types/index.d.ts"
|
|
13
|
-
}
|
|
13
|
+
},
|
|
14
|
+
"./loaders": {
|
|
15
|
+
"import": "./dist/esm/loaders/index.js",
|
|
16
|
+
"require": "./dist/cjs/loaders/index.js",
|
|
17
|
+
"types": "./dist/types/loaders/index.d.ts"
|
|
18
|
+
},
|
|
19
|
+
"./loaders/environment": {
|
|
20
|
+
"import": "./dist/esm/loaders/environment.loader.js",
|
|
21
|
+
"require": "./dist/cjs/loaders/environment.loader.js",
|
|
22
|
+
"types": "./dist/types/loaders/environment.loader.d.ts"
|
|
23
|
+
},
|
|
24
|
+
"./loaders/env-file": {
|
|
25
|
+
"import": "./dist/esm/loaders/env-file.loader.js",
|
|
26
|
+
"require": "./dist/cjs/loaders/env-file.loader.js",
|
|
27
|
+
"types": "./dist/types/loaders/env-file.loader.d.ts"
|
|
28
|
+
},
|
|
29
|
+
"./loaders/s3": {
|
|
30
|
+
"import": "./dist/esm/loaders/s3.loader.js",
|
|
31
|
+
"require": "./dist/cjs/loaders/s3.loader.js",
|
|
32
|
+
"types": "./dist/types/loaders/s3.loader.d.ts"
|
|
33
|
+
},
|
|
34
|
+
"./loaders/secrets-manager": {
|
|
35
|
+
"import": "./dist/esm/loaders/secrets-manager.loader.js",
|
|
36
|
+
"require": "./dist/cjs/loaders/secrets-manager.loader.js",
|
|
37
|
+
"types": "./dist/types/loaders/secrets-manager.loader.d.ts"
|
|
38
|
+
},
|
|
39
|
+
"./loaders/ssm-parameter-store": {
|
|
40
|
+
"import": "./dist/esm/loaders/ssm-parameter-store.loader.js",
|
|
41
|
+
"require": "./dist/cjs/loaders/ssm-parameter-store.loader.js",
|
|
42
|
+
"types": "./dist/types/loaders/ssm-parameter-store.loader.d.ts"
|
|
43
|
+
},
|
|
44
|
+
"./package.json": "./package.json"
|
|
14
45
|
},
|
|
15
46
|
"files": [
|
|
16
47
|
"dist",
|
|
@@ -18,10 +49,11 @@
|
|
|
18
49
|
"LICENSE"
|
|
19
50
|
],
|
|
20
51
|
"scripts": {
|
|
21
|
-
"build": "npm run clean && npm run build:types && npm run build:esm && npm run build:cjs",
|
|
52
|
+
"build": "npm run clean && npm run build:types && npm run build:esm && npm run build:cjs && npm run build:postbuild",
|
|
22
53
|
"build:types": "tsc --project tsconfig.types.json",
|
|
23
|
-
"build:esm": "tsc --project tsconfig.esm.json
|
|
54
|
+
"build:esm": "tsc --project tsconfig.esm.json",
|
|
24
55
|
"build:cjs": "tsc --project tsconfig.cjs.json",
|
|
56
|
+
"build:postbuild": "node ../../scripts/postbuild.mjs ./dist",
|
|
25
57
|
"clean": "rimraf dist",
|
|
26
58
|
"test": "jest",
|
|
27
59
|
"test:watch": "jest --watch",
|