@effect-aws/secrets-manager 1.0.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/CHANGELOG.md +8 -0
- package/LICENSE +19 -0
- package/README.md +66 -0
- package/docgen.json +8 -0
- package/lib/ConfigProvider.d.ts +12 -0
- package/lib/ConfigProvider.js +49 -0
- package/lib/esm/ConfigProvider.js +45 -0
- package/lib/esm/index.js +2 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +18 -0
- package/package.json +52 -0
- package/project.json +80 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# @effect-aws/secrets-manager
|
|
2
|
+
|
|
3
|
+
## 1.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- [`234a5e2`](https://github.com/floydspace/effect-aws/commit/234a5e2d76b8cf12c180ef88584956eaeb039e89) Thanks [@floydspace](https://github.com/floydspace)! - Implement `fromSecretsManager` ConfigProvider constructor, fetching configuration from AWS Secrets Manager service.
|
|
8
|
+
Closes [#55](https://github.com/floydspace/effect-aws/issues/55)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright (c) 2024 Victor Korzunin
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
in the Software without restriction, including without limitation the rights
|
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
furnished to do so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# @effect-aws/secrets-manager
|
|
2
|
+
|
|
3
|
+
This package provides a `fromSecretsManager` [ConfigProvider](https://effect.website/docs/guides/configuration) constructor function.
|
|
4
|
+
You can use it to read secrets from AWS Secrets Manager as a `Config` schema.
|
|
5
|
+
|
|
6
|
+
The config primitive name must match the secret Name or ARN in Secrets Manager.
|
|
7
|
+
For example, `Config.string("my_secret_name")` or `Config.string("arn:aws:secretsmanager:eu-central-1:123456789012:secret:my_secret_name-AbCdEf")`.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install --save @effect-aws/secrets-manager @effect-aws/client-secrets-manager
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
With default service layer:
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
import { Effect, Config, Console } from "effect";
|
|
21
|
+
import { fromSecretsManager } from "@effect-aws/secrets-manager";
|
|
22
|
+
|
|
23
|
+
const program = Effect.gen(function* () {
|
|
24
|
+
const secret: string = yield* Config.string("my_secret_name");
|
|
25
|
+
|
|
26
|
+
yield* Console.log("Secret from Secrets Manager: ", secret);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
program.pipe(
|
|
30
|
+
Effect.provide(Layer.setConfigProvider(fromSecretsManager())),
|
|
31
|
+
Effect.runPromise,
|
|
32
|
+
);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
With custom service layer:
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { Effect, Config, Console, Layer } from "effect";
|
|
39
|
+
import { SecretsManagerClient } from "@aws-sdk/client-secrets-manager";
|
|
40
|
+
import {
|
|
41
|
+
BaseSecretsManagerServiceLayer,
|
|
42
|
+
SecretsManagerClientInstance,
|
|
43
|
+
} from "@effect-aws/client-secrets-manager";
|
|
44
|
+
import { fromSecretsManager } from "@effect-aws/secrets-manager";
|
|
45
|
+
|
|
46
|
+
const program = Effect.gen(function* () {
|
|
47
|
+
const secret: string = yield* Config.string("my_secret_name");
|
|
48
|
+
|
|
49
|
+
yield* Console.log("Secret from Secrets Manager: ", secret);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
const SecretsManagerClientInstanceLayer = Layer.succeed(
|
|
53
|
+
SecretsManagerClientInstance,
|
|
54
|
+
new SecretsManagerClient({ region: "eu-central-1" }),
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const serviceLayer = Layer.provide(
|
|
58
|
+
BaseSecretsManagerServiceLayer,
|
|
59
|
+
SecretsManagerClientInstanceLayer,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
program.pipe(
|
|
63
|
+
Effect.provide(Layer.setConfigProvider(fromSecretsManager({ serviceLayer }))),
|
|
64
|
+
Effect.runPromise,
|
|
65
|
+
);
|
|
66
|
+
```
|
package/docgen.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SecretsManagerService } from "@effect-aws/client-secrets-manager";
|
|
2
|
+
import { ConfigProvider, Layer } from "effect";
|
|
3
|
+
/**
|
|
4
|
+
* A config provider that loads configuration from AWS Secrets Manager.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
* @category constructors
|
|
8
|
+
*/
|
|
9
|
+
export declare const fromSecretsManager: (config?: {
|
|
10
|
+
pathDelim?: string;
|
|
11
|
+
serviceLayer?: Layer.Layer<SecretsManagerService, never, never>;
|
|
12
|
+
}) => ConfigProvider.ConfigProvider;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fromSecretsManager = void 0;
|
|
4
|
+
const client_secrets_manager_1 = require("@effect-aws/client-secrets-manager");
|
|
5
|
+
const effect_1 = require("effect");
|
|
6
|
+
/**
|
|
7
|
+
* A config provider that loads configuration from AWS Secrets Manager.
|
|
8
|
+
*
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
* @category constructors
|
|
11
|
+
*/
|
|
12
|
+
const fromSecretsManager = (config) => {
|
|
13
|
+
const { pathDelim, serviceLayer } = Object.assign({}, { pathDelim: "_", serviceLayer: client_secrets_manager_1.DefaultSecretsManagerServiceLayer }, config);
|
|
14
|
+
const makePathString = (path) => (0, effect_1.pipe)(path, effect_1.Array.join(pathDelim));
|
|
15
|
+
const unmakePathString = (pathString) => pathString.split(pathDelim);
|
|
16
|
+
const load = (path, primitive) => {
|
|
17
|
+
const pathString = makePathString(path);
|
|
18
|
+
return client_secrets_manager_1.SecretsManagerService.getSecretValue({ SecretId: pathString }).pipe(effect_1.Effect.flatMap((value) => effect_1.Option.fromNullable(value.SecretString)), effect_1.Effect.catchTag("ResourceNotFoundException", () => effect_1.Effect.fail(effect_1.ConfigError.MissingData(path, `Expected ${pathString} to exist in AWS Secrets Manager`))), effect_1.Effect.catchTag("NoSuchElementException", () => effect_1.Effect.fail(effect_1.ConfigError.MissingData(path, `Expected ${pathString} to exist in AWS Secrets Manager`))), effect_1.Effect.catchTag("InvalidParameterException", () => effect_1.Effect.fail(effect_1.ConfigError.InvalidData(path, "Invalid parameter provided to AWS Secrets Manager"))), effect_1.Effect.catchTag("InvalidRequestException", () => effect_1.Effect.fail(effect_1.ConfigError.InvalidData(path, "Invalid request to AWS Secrets Manager"))), effect_1.Effect.catchAllCause((cause) => effect_1.Cause.isFailType(cause) && effect_1.ConfigError.isConfigError(cause.error)
|
|
19
|
+
? effect_1.Effect.fail(cause.error)
|
|
20
|
+
: effect_1.Effect.fail(effect_1.ConfigError.SourceUnavailable(path, "Failed to load configuration from AWS Secrets Manager", cause))), effect_1.Effect.flatMap((value) => (0, effect_1.pipe)(primitive.parse(value), effect_1.Effect.mapBoth({
|
|
21
|
+
onFailure: effect_1.ConfigError.prefixed(path),
|
|
22
|
+
onSuccess: effect_1.Array.of,
|
|
23
|
+
}))), effect_1.Effect.provide(serviceLayer));
|
|
24
|
+
};
|
|
25
|
+
const enumerateChildren = (path) => client_secrets_manager_1.SecretsManagerService.listSecrets({}).pipe(effect_1.Effect.flatMap((secrets) => effect_1.Option.fromNullable(secrets.SecretList)), effect_1.Effect.map(effect_1.Array.map((secret) => effect_1.Option.fromNullable(secret.Name))), effect_1.Effect.flatMap(effect_1.Option.all), effect_1.Effect.orDie, effect_1.Effect.map((keys) => {
|
|
26
|
+
const keyPaths = keys.map(unmakePathString);
|
|
27
|
+
const filteredKeyPaths = keyPaths
|
|
28
|
+
.filter((keyPath) => {
|
|
29
|
+
for (let i = 0; i < path.length; i++) {
|
|
30
|
+
const pathComponent = (0, effect_1.pipe)(path, effect_1.Array.unsafeGet(i));
|
|
31
|
+
const currentElement = keyPath[i];
|
|
32
|
+
if (currentElement === undefined ||
|
|
33
|
+
pathComponent !== currentElement) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
})
|
|
39
|
+
.flatMap((keyPath) => keyPath.slice(path.length, path.length + 1));
|
|
40
|
+
return effect_1.HashSet.fromIterable(filteredKeyPaths);
|
|
41
|
+
}), effect_1.Effect.provide(serviceLayer));
|
|
42
|
+
return effect_1.ConfigProvider.fromFlat(effect_1.ConfigProvider.makeFlat({
|
|
43
|
+
load,
|
|
44
|
+
enumerateChildren,
|
|
45
|
+
patch: effect_1.ConfigProviderPathPatch.empty,
|
|
46
|
+
}));
|
|
47
|
+
};
|
|
48
|
+
exports.fromSecretsManager = fromSecretsManager;
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ29uZmlnUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0VBRzRDO0FBQzVDLG1DQVlnQjtBQUVoQjs7Ozs7R0FLRztBQUNJLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUdsQyxFQUFpQyxFQUFFO0lBQ2xDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDL0MsRUFBRSxFQUNGLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsMERBQWlDLEVBQUUsRUFDbkUsTUFBTSxDQUNQLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxDQUFDLElBQTJCLEVBQVUsRUFBRSxDQUM3RCxJQUFBLGFBQUksRUFBQyxJQUFJLEVBQUUsY0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxVQUFrQixFQUF5QixFQUFFLENBQ3JFLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFOUIsTUFBTSxJQUFJLEdBQUcsQ0FDWCxJQUEyQixFQUMzQixTQUFxQyxFQUNhLEVBQUU7UUFDcEQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sOENBQXFCLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN4RSxlQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxlQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUNsRSxlQUFNLENBQUMsUUFBUSxDQUFDLDJCQUEyQixFQUFFLEdBQUcsRUFBRSxDQUNoRCxlQUFNLENBQUMsSUFBSSxDQUNULG9CQUFXLENBQUMsV0FB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QUFjLEtBQUssU0FBUztvQkFDNUIsYUFBYSxLQUFLLGNBQWMsRUFDaEMsQ0FBQztvQkFDRCxPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO2FBQ0QsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sZ0JBQU8sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsRUFDRixlQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUM3QixDQUFDO0lBRUosT0FBTyx1QkFBYyxDQUFDLFFBQVEsQ0FDNUIsdUJBQWMsQ0FBQyxRQUFRLENBQUM7UUFDdEIsSUFBSTtRQUNKLGlCQUFpQjtRQUNqQixLQUFLLEVBQUUsZ0NBQXVCLENBQUMsS0FBSztLQUNyQyxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMsQ0FBQztBQWxIVyxRQUFBLGtCQUFrQixzQkFrSDdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGVmYXVsdFNlY3JldHNNYW5hZ2VyU2VydmljZUxheWVyLFxuICBTZWNyZXRzTWFuYWdlclNlcnZpY2UsXG59IGZyb20gXCJAZWZmZWN0LWF3cy9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBBcnJheSxcbiAgQ2F1c2UsXG4gIENvbmZpZyxcbiAgQ29uZmlnRXJyb3IsXG4gIENvbmZpZ1Byb3ZpZGVyLFxuICBDb25maWdQcm92aWRlclBhdGhQYXRjaCxcbiAgRWZmZWN0LFxuICBIYXNoU2V0LFxuICBMYXllcixcbiAgT3B0aW9uLFxuICBwaXBlLFxufSBmcm9tIFwiZWZmZWN0XCI7XG5cbi8qKlxuICogQSBjb25maWcgcHJvdmlkZXIgdGhhdCBsb2FkcyBjb25maWd1cmF0aW9uIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlci5cbiAqXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBjb25zdHJ1Y3RvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGZyb21TZWNyZXRzTWFuYWdlciA9IChjb25maWc/OiB7XG4gIHBhdGhEZWxpbT86IHN0cmluZztcbiAgc2VydmljZUxheWVyPzogTGF5ZXIuTGF5ZXI8U2VjcmV0c01hbmFnZXJTZXJ2aWNlLCBuZXZlciwgbmV2ZXI+O1xufSk6IENvbmZpZ1Byb3ZpZGVyLkNvbmZpZ1Byb3ZpZGVyID0+IHtcbiAgY29uc3QgeyBwYXRoRGVsaW0sIHNlcnZpY2VMYXllciB9ID0gT2JqZWN0LmFzc2lnbihcbiAgICB7fSxcbiAgICB7IHBhdGhEZWxpbTogXCJfXCIsIHNlcnZpY2VMYXllcjogRGVmYXVsdFNlY3JldHNNYW5hZ2VyU2VydmljZUxheWVyIH0sXG4gICAgY29uZmlnLFxuICApO1xuICBjb25zdCBtYWtlUGF0aFN0cmluZyA9IChwYXRoOiBSZWFkb25seUFycmF5PHN0cmluZz4pOiBzdHJpbmcgPT5cbiAgICBwaXBlKHBhdGgsIEFycmF5LmpvaW4ocGF0aERlbGltKSk7XG4gIGNvbnN0IHVubWFrZVBhdGhTdHJpbmcgPSAocGF0aFN0cmluZzogc3RyaW5nKTogUmVhZG9ubHlBcnJheTxzdHJpbmc+ID0+XG4gICAgcGF0aFN0cmluZy5zcGxpdChwYXRoRGVsaW0pO1xuXG4gIGNvbnN0IGxvYWQgPSA8QT4oXG4gICAgcGF0aDogUmVhZG9ubHlBcnJheTxzdHJpbmc+LFxuICAgIHByaW1pdGl2ZTogQ29uZmlnLkNvbmZpZy5QcmltaXRpdmU8QT4sXG4gICk6IEVmZmVjdC5FZmZlY3Q8QXJyYXk8QT4sIENvbmZpZ0Vycm9yLkNvbmZpZ0Vycm9yPiA9PiB7XG4gICAgY29uc3QgcGF0aFN0cmluZyA9IG1ha2VQYXRoU3RyaW5nKHBhdGgpO1xuICAgIHJldHVybiBTZWNyZXRzTWFuYWdlclNlcnZpY2UuZ2V0U2VjcmV0VmFsdWUoeyBTZWNyZXRJZDogcGF0aFN0cmluZyB9KS5waXBlKFxuICAgICAgRWZmZWN0LmZsYXRNYXAoKHZhbHVlKSA9PiBPcHRpb24uZnJvbU51bGxhYmxlKHZhbHVlLlNlY3JldFN0cmluZykpLFxuICAgICAgRWZmZWN0LmNhdGNoVGFnKFwiUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvblwiLCAoKSA9PlxuICAgICAgICBFZmZlY3QuZmFpbChcbiAgICAgICAgICBDb25maWdFcnJvci5NaXNzaW5nRGF0YShcbiAgICAgICAgICAgIHBhdGggYXMgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGBFeHBlY3RlZCAke3BhdGhTdHJpbmd9IHRvIGV4aXN0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXJgLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgRWZmZWN0LmNhdGNoVGFnKFwiTm9TdWNoRWxlbWVudEV4Y2VwdGlvblwiLCAoKSA9PlxuICAgICAgICBFZmZlY3QuZmFpbChcbiAgICAgICAgICBDb25maWdFcnJvci5NaXNzaW5nRGF0YShcbiAgICAgICAgICAgIHBhdGggYXMgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIGBFeHBlY3RlZCAke3BhdGhTdHJpbmd9IHRvIGV4aXN0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXJgLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgRWZmZWN0LmNhdGNoVGFnKFwiSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiLCAoKSA9PlxuICAgICAgICBFZmZlY3QuZmFpbChcbiAgICAgICAgICBDb25maWdFcnJvci5JbnZhbGlkRGF0YShcbiAgICAgICAgICAgIHBhdGggYXMgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIFwiSW52YWxpZCBwYXJhbWV0ZXIgcHJvdmlkZWQgdG8gQVdTIFNlY3JldHMgTWFuYWdlclwiLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgRWZmZWN0LmNhdGNoVGFnKFwiSW52YWxpZFJlcXVlc3RFeGNlcHRpb25cIiwgKCkgPT5cbiAgICAgICAgRWZmZWN0LmZhaWwoXG4gICAgICAgICAgQ29uZmlnRXJyb3IuSW52YWxpZERhdGEoXG4gICAgICAgICAgICBwYXRoIGFzIEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgICBcIkludmFsaWQgcmVxdWVzdCB0byBBV1MgU2VjcmV0cyBNYW5hZ2VyXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBFZmZlY3QuY2F0Y2hBbGxDYXVzZSgoY2F1c2UpID0+XG4gICAgICAgIENhdXNlLmlzRmFpbFR5cGUoY2F1c2UpICYmIENvbmZpZ0Vycm9yLmlzQ29uZmlnRXJyb3IoY2F1c2UuZXJyb3IpXG4gICAgICAgICAgPyBFZmZlY3QuZmFpbChjYXVzZS5lcnJvcilcbiAgICAgICAgICA6IEVmZmVjdC5mYWlsKFxuICAgICAgICAgICAgICBDb25maWdFcnJvci5Tb3VyY2VVbmF2YWlsYWJsZShcbiAgICAgICAgICAgICAgICBwYXRoIGFzIEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgICAgICAgXCJGYWlsZWQgdG8gbG9hZCBjb25maWd1cmF0aW9uIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlclwiLFxuICAgICAgICAgICAgICAgIGNhdXNlLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBFZmZlY3QuZmxhdE1hcCgodmFsdWUpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgcHJpbWl0aXZlLnBhcnNlKHZhbHVlKSxcbiAgICAgICAgICBFZmZlY3QubWFwQm90aCh7XG4gICAgICAgICAgICBvbkZhaWx1cmU6IENvbmZpZ0Vycm9yLnByZWZpeGVkKHBhdGggYXMgQXJyYXk8c3RyaW5nPiksXG4gICAgICAgICAgICBvblN1Y2Nlc3M6IEFycmF5Lm9mLFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIEVmZmVjdC5wcm92aWRlKHNlcnZpY2VMYXllciksXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBlbnVtZXJhdGVDaGlsZHJlbiA9IChcbiAgICBwYXRoOiBSZWFkb25seUFycmF5PHN0cmluZz4sXG4gICk6IEVmZmVjdC5FZmZlY3Q8SGFzaFNldC5IYXNoU2V0PHN0cmluZz4sIENvbmZpZ0Vycm9yLkNvbmZpZ0Vycm9yPiA9PlxuICAgIFNlY3JldHNNYW5hZ2VyU2VydmljZS5saXN0U2VjcmV0cyh7fSkucGlwZShcbiAgICAgIEVmZmVjdC5mbGF0TWFwKChzZWNyZXRzKSA9PiBPcHRpb24uZnJvbU51bGxhYmxlKHNlY3JldHMuU2VjcmV0TGlzdCkpLFxuICAgICAgRWZmZWN0Lm1hcChBcnJheS5tYXAoKHNlY3JldCkgPT4gT3B0aW9uLmZyb21OdWxsYWJsZShzZWNyZXQuTmFtZSkpKSxcbiAgICAgIEVmZmVjdC5mbGF0TWFwKE9wdGlvbi5hbGwpLFxuICAgICAgRWZmZWN0Lm9yRGllLFxuICAgICAgRWZmZWN0Lm1hcCgoa2V5cykgPT4ge1xuICAgICAgICBjb25zdCBrZXlQYXRocyA9IGtleXMubWFwKHVubWFrZVBhdGhTdHJpbmcpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEtleVBhdGhzID0ga2V5UGF0aHNcbiAgICAgICAgICAuZmlsdGVyKChrZXlQYXRoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgcGF0aENvbXBvbmVudCA9IHBpcGUocGF0aCwgQXJyYXkudW5zYWZlR2V0KGkpKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnQgPSBrZXlQYXRoW2ldO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIHBhdGhDb21wb25lbnQgIT09IGN1cnJlbnRFbGVtZW50XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmxhdE1hcCgoa2V5UGF0aCkgPT4ga2V5UGF0aC5zbGljZShwYXRoLmxlbmd0aCwgcGF0aC5sZW5ndGggKyAxKSk7XG4gICAgICAgIHJldHVybiBIYXNoU2V0LmZyb21JdGVyYWJsZShmaWx0ZXJlZEtleVBhdGhzKTtcbiAgICAgIH0pLFxuICAgICAgRWZmZWN0LnByb3ZpZGUoc2VydmljZUxheWVyKSxcbiAgICApO1xuXG4gIHJldHVybiBDb25maWdQcm92aWRlci5mcm9tRmxhdChcbiAgICBDb25maWdQcm92aWRlci5tYWtlRmxhdCh7XG4gICAgICBsb2FkLFxuICAgICAgZW51bWVyYXRlQ2hpbGRyZW4sXG4gICAgICBwYXRjaDogQ29uZmlnUHJvdmlkZXJQYXRoUGF0Y2guZW1wdHksXG4gICAgfSksXG4gICk7XG59O1xuIl19
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { DefaultSecretsManagerServiceLayer, SecretsManagerService, } from "@effect-aws/client-secrets-manager";
|
|
2
|
+
import { Array, Cause, ConfigError, ConfigProvider, ConfigProviderPathPatch, Effect, HashSet, Option, pipe, } from "effect";
|
|
3
|
+
/**
|
|
4
|
+
* A config provider that loads configuration from AWS Secrets Manager.
|
|
5
|
+
*
|
|
6
|
+
* @since 1.0.0
|
|
7
|
+
* @category constructors
|
|
8
|
+
*/
|
|
9
|
+
export const fromSecretsManager = (config) => {
|
|
10
|
+
const { pathDelim, serviceLayer } = Object.assign({}, { pathDelim: "_", serviceLayer: DefaultSecretsManagerServiceLayer }, config);
|
|
11
|
+
const makePathString = (path) => pipe(path, Array.join(pathDelim));
|
|
12
|
+
const unmakePathString = (pathString) => pathString.split(pathDelim);
|
|
13
|
+
const load = (path, primitive) => {
|
|
14
|
+
const pathString = makePathString(path);
|
|
15
|
+
return SecretsManagerService.getSecretValue({ SecretId: pathString }).pipe(Effect.flatMap((value) => Option.fromNullable(value.SecretString)), Effect.catchTag("ResourceNotFoundException", () => Effect.fail(ConfigError.MissingData(path, `Expected ${pathString} to exist in AWS Secrets Manager`))), Effect.catchTag("NoSuchElementException", () => Effect.fail(ConfigError.MissingData(path, `Expected ${pathString} to exist in AWS Secrets Manager`))), Effect.catchTag("InvalidParameterException", () => Effect.fail(ConfigError.InvalidData(path, "Invalid parameter provided to AWS Secrets Manager"))), Effect.catchTag("InvalidRequestException", () => Effect.fail(ConfigError.InvalidData(path, "Invalid request to AWS Secrets Manager"))), Effect.catchAllCause((cause) => Cause.isFailType(cause) && ConfigError.isConfigError(cause.error)
|
|
16
|
+
? Effect.fail(cause.error)
|
|
17
|
+
: Effect.fail(ConfigError.SourceUnavailable(path, "Failed to load configuration from AWS Secrets Manager", cause))), Effect.flatMap((value) => pipe(primitive.parse(value), Effect.mapBoth({
|
|
18
|
+
onFailure: ConfigError.prefixed(path),
|
|
19
|
+
onSuccess: Array.of,
|
|
20
|
+
}))), Effect.provide(serviceLayer));
|
|
21
|
+
};
|
|
22
|
+
const enumerateChildren = (path) => SecretsManagerService.listSecrets({}).pipe(Effect.flatMap((secrets) => Option.fromNullable(secrets.SecretList)), Effect.map(Array.map((secret) => Option.fromNullable(secret.Name))), Effect.flatMap(Option.all), Effect.orDie, Effect.map((keys) => {
|
|
23
|
+
const keyPaths = keys.map(unmakePathString);
|
|
24
|
+
const filteredKeyPaths = keyPaths
|
|
25
|
+
.filter((keyPath) => {
|
|
26
|
+
for (let i = 0; i < path.length; i++) {
|
|
27
|
+
const pathComponent = pipe(path, Array.unsafeGet(i));
|
|
28
|
+
const currentElement = keyPath[i];
|
|
29
|
+
if (currentElement === undefined ||
|
|
30
|
+
pathComponent !== currentElement) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
})
|
|
36
|
+
.flatMap((keyPath) => keyPath.slice(path.length, path.length + 1));
|
|
37
|
+
return HashSet.fromIterable(filteredKeyPaths);
|
|
38
|
+
}), Effect.provide(serviceLayer));
|
|
39
|
+
return ConfigProvider.fromFlat(ConfigProvider.makeFlat({
|
|
40
|
+
load,
|
|
41
|
+
enumerateChildren,
|
|
42
|
+
patch: ConfigProviderPathPatch.empty,
|
|
43
|
+
}));
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnUHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQ29uZmlnUHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyxxQkFBcUIsR0FDdEIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsS0FBSyxFQUNMLEtBQUssRUFFTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixNQUFNLEVBQ04sT0FBTyxFQUVQLE1BQU0sRUFDTixJQUFJLEdBQ0wsTUFBTSxRQUFRLENBQUM7QUFFaEI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE1BR2xDLEVBQWlDLEVBQUU7SUFDbEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUMvQyxFQUFFLEVBQ0YsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxpQ0FBaUMsRUFBRSxFQUNuRSxNQUFNLENBQ1AsQ0FBQztJQUNGLE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBMkIsRUFBVSxFQUFFLENBQzdELElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxVQUFrQixFQUF5QixFQUFFLENBQ3JFLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFOUIsTUFBTSxJQUFJLEdBQUcsQ0FDWCxJQUEyQixFQUMzQixTQUFxQyxFQUNhLEVBQUU7UUFDcEQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE9BQU8scUJBQXFCLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUN4RSxNQUFNLENBQUMsT0FBTyxD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QUM7Z0JBQ3JDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLElBQ0UsY0FBYyxLQUFLLFNBQVM7b0JBQzVCLGFBQWEsS0FBSyxjQUFjLEVBQ2hDLENBQUM7b0JBQ0QsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQzthQUNELE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUM3QixDQUFDO0lBRUosT0FBTyxjQUFjLENBQUMsUUFBUSxDQUM1QixjQUFjLENBQUMsUUFBUSxDQUFDO1FBQ3RCLElBQUk7UUFDSixpQkFBaUI7UUFDakIsS0FBSyxFQUFFLHVCQUF1QixDQUFDLEtBQUs7S0FDckMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZWZhdWx0U2VjcmV0c01hbmFnZXJTZXJ2aWNlTGF5ZXIsXG4gIFNlY3JldHNNYW5hZ2VyU2VydmljZSxcbn0gZnJvbSBcIkBlZmZlY3QtYXdzL2NsaWVudC1zZWNyZXRzLW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEFycmF5LFxuICBDYXVzZSxcbiAgQ29uZmlnLFxuICBDb25maWdFcnJvcixcbiAgQ29uZmlnUHJvdmlkZXIsXG4gIENvbmZpZ1Byb3ZpZGVyUGF0aFBhdGNoLFxuICBFZmZlY3QsXG4gIEhhc2hTZXQsXG4gIExheWVyLFxuICBPcHRpb24sXG4gIHBpcGUsXG59IGZyb20gXCJlZmZlY3RcIjtcblxuLyoqXG4gKiBBIGNvbmZpZyBwcm92aWRlciB0aGF0IGxvYWRzIGNvbmZpZ3VyYXRpb24gZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyLlxuICpcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IGNvbnN0cnVjdG9yc1xuICovXG5leHBvcnQgY29uc3QgZnJvbVNlY3JldHNNYW5hZ2VyID0gKGNvbmZpZz86IHtcbiAgcGF0aERlbGltPzogc3RyaW5nO1xuICBzZXJ2aWNlTGF5ZXI/OiBMYXllci5MYXllcjxTZWNyZXRzTWFuYWdlclNlcnZpY2UsIG5ldmVyLCBuZXZlcj47XG59KTogQ29uZmlnUHJvdmlkZXIuQ29uZmlnUHJvdmlkZXIgPT4ge1xuICBjb25zdCB7IHBhdGhEZWxpbSwgc2VydmljZUxheWVyIH0gPSBPYmplY3QuYXNzaWduKFxuICAgIHt9LFxuICAgIHsgcGF0aERlbGltOiBcIl9cIiwgc2VydmljZUxheWVyOiBEZWZhdWx0U2VjcmV0c01hbmFnZXJTZXJ2aWNlTGF5ZXIgfSxcbiAgICBjb25maWcsXG4gICk7XG4gIGNvbnN0IG1ha2VQYXRoU3RyaW5nID0gKHBhdGg6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPik6IHN0cmluZyA9PlxuICAgIHBpcGUocGF0aCwgQXJyYXkuam9pbihwYXRoRGVsaW0pKTtcbiAgY29uc3QgdW5tYWtlUGF0aFN0cmluZyA9IChwYXRoU3RyaW5nOiBzdHJpbmcpOiBSZWFkb25seUFycmF5PHN0cmluZz4gPT5cbiAgICBwYXRoU3RyaW5nLnNwbGl0KHBhdGhEZWxpbSk7XG5cbiAgY29uc3QgbG9hZCA9IDxBPihcbiAgICBwYXRoOiBSZWFkb25seUFycmF5PHN0cmluZz4sXG4gICAgcHJpbWl0aXZlOiBDb25maWcuQ29uZmlnLlByaW1pdGl2ZTxBPixcbiAgKTogRWZmZWN0LkVmZmVjdDxBcnJheTxBPiwgQ29uZmlnRXJyb3IuQ29uZmlnRXJyb3I+ID0+IHtcbiAgICBjb25zdCBwYXRoU3RyaW5nID0gbWFrZVBhdGhTdHJpbmcocGF0aCk7XG4gICAgcmV0dXJuIFNlY3JldHNNYW5hZ2VyU2VydmljZS5nZXRTZWNyZXRWYWx1ZSh7IFNlY3JldElkOiBwYXRoU3RyaW5nIH0pLnBpcGUoXG4gICAgICBFZmZlY3QuZmxhdE1hcCgodmFsdWUpID0+IE9wdGlvbi5mcm9tTnVsbGFibGUodmFsdWUuU2VjcmV0U3RyaW5nKSksXG4gICAgICBFZmZlY3QuY2F0Y2hUYWcoXCJSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uXCIsICgpID0+XG4gICAgICAgIEVmZmVjdC5mYWlsKFxuICAgICAgICAgIENvbmZpZ0Vycm9yLk1pc3NpbmdEYXRhKFxuICAgICAgICAgICAgcGF0aCBhcyBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgYEV4cGVjdGVkICR7cGF0aFN0cmluZ30gdG8gZXhpc3QgaW4gQVdTIFNlY3JldHMgTWFuYWdlcmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBFZmZlY3QuY2F0Y2hUYWcoXCJOb1N1Y2hFbGVtZW50RXhjZXB0aW9uXCIsICgpID0+XG4gICAgICAgIEVmZmVjdC5mYWlsKFxuICAgICAgICAgIENvbmZpZ0Vycm9yLk1pc3NpbmdEYXRhKFxuICAgICAgICAgICAgcGF0aCBhcyBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgYEV4cGVjdGVkICR7cGF0aFN0cmluZ30gdG8gZXhpc3QgaW4gQVdTIFNlY3JldHMgTWFuYWdlcmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBFZmZlY3QuY2F0Y2hUYWcoXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCIsICgpID0+XG4gICAgICAgIEVmZmVjdC5mYWlsKFxuICAgICAgICAgIENvbmZpZ0Vycm9yLkludmFsaWREYXRhKFxuICAgICAgICAgICAgcGF0aCBhcyBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgXCJJbnZhbGlkIHBhcmFtZXRlciBwcm92aWRlZCB0byBBV1MgU2VjcmV0cyBNYW5hZ2VyXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgICBFZmZlY3QuY2F0Y2hUYWcoXCJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvblwiLCAoKSA9PlxuICAgICAgICBFZmZlY3QuZmFpbChcbiAgICAgICAgICBDb25maWdFcnJvci5JbnZhbGlkRGF0YShcbiAgICAgICAgICAgIHBhdGggYXMgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgIFwiSW52YWxpZCByZXF1ZXN0IHRvIEFXUyBTZWNyZXRzIE1hbmFnZXJcIixcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIEVmZmVjdC5jYXRjaEFsbENhdXNlKChjYXVzZSkgPT5cbiAgICAgICAgQ2F1c2UuaXNGYWlsVHlwZShjYXVzZSkgJiYgQ29uZmlnRXJyb3IuaXNDb25maWdFcnJvcihjYXVzZS5lcnJvcilcbiAgICAgICAgICA/IEVmZmVjdC5mYWlsKGNhdXNlLmVycm9yKVxuICAgICAgICAgIDogRWZmZWN0LmZhaWwoXG4gICAgICAgICAgICAgIENvbmZpZ0Vycm9yLlNvdXJjZVVuYXZhaWxhYmxlKFxuICAgICAgICAgICAgICAgIHBhdGggYXMgQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgICAgICBcIkZhaWxlZCB0byBsb2FkIGNvbmZpZ3VyYXRpb24gZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyXCIsXG4gICAgICAgICAgICAgICAgY2F1c2UsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIEVmZmVjdC5mbGF0TWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBwcmltaXRpdmUucGFyc2UodmFsdWUpLFxuICAgICAgICAgIEVmZmVjdC5tYXBCb3RoKHtcbiAgICAgICAgICAgIG9uRmFpbHVyZTogQ29uZmlnRXJyb3IucHJlZml4ZWQocGF0aCBhcyBBcnJheTxzdHJpbmc+KSxcbiAgICAgICAgICAgIG9uU3VjY2VzczogQXJyYXkub2YsXG4gICAgICAgICAgfSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgRWZmZWN0LnByb3ZpZGUoc2VydmljZUxheWVyKSxcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGVudW1lcmF0ZUNoaWxkcmVuID0gKFxuICAgIHBhdGg6IFJlYWRvbmx5QXJyYXk8c3RyaW5nPixcbiAgKTogRWZmZWN0LkVmZmVjdDxIYXNoU2V0Lkhhc2hTZXQ8c3RyaW5nPiwgQ29uZmlnRXJyb3IuQ29uZmlnRXJyb3I+ID0+XG4gICAgU2VjcmV0c01hbmFnZXJTZXJ2aWNlLmxpc3RTZWNyZXRzKHt9KS5waXBlKFxuICAgICAgRWZmZWN0LmZsYXRNYXAoKHNlY3JldHMpID0+IE9wdGlvbi5mcm9tTnVsbGFibGUoc2VjcmV0cy5TZWNyZXRMaXN0KSksXG4gICAgICBFZmZlY3QubWFwKEFycmF5Lm1hcCgoc2VjcmV0KSA9PiBPcHRpb24uZnJvbU51bGxhYmxlKHNlY3JldC5OYW1lKSkpLFxuICAgICAgRWZmZWN0LmZsYXRNYXAoT3B0aW9uLmFsbCksXG4gICAgICBFZmZlY3Qub3JEaWUsXG4gICAgICBFZmZlY3QubWFwKChrZXlzKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleVBhdGhzID0ga2V5cy5tYXAodW5tYWtlUGF0aFN0cmluZyk7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkS2V5UGF0aHMgPSBrZXlQYXRoc1xuICAgICAgICAgIC5maWx0ZXIoKGtleVBhdGgpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBwYXRoQ29tcG9uZW50ID0gcGlwZShwYXRoLCBBcnJheS51bnNhZmVHZXQoaSkpO1xuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IGtleVBhdGhbaV07XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgcGF0aENvbXBvbmVudCAhPT0gY3VycmVudEVsZW1lbnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5mbGF0TWFwKChrZXlQYXRoKSA9PiBrZXlQYXRoLnNsaWNlKHBhdGgubGVuZ3RoLCBwYXRoLmxlbmd0aCArIDEpKTtcbiAgICAgICAgcmV0dXJuIEhhc2hTZXQuZnJvbUl0ZXJhYmxlKGZpbHRlcmVkS2V5UGF0aHMpO1xuICAgICAgfSksXG4gICAgICBFZmZlY3QucHJvdmlkZShzZXJ2aWNlTGF5ZXIpLFxuICAgICk7XG5cbiAgcmV0dXJuIENvbmZpZ1Byb3ZpZGVyLmZyb21GbGF0KFxuICAgIENvbmZpZ1Byb3ZpZGVyLm1ha2VGbGF0KHtcbiAgICAgIGxvYWQsXG4gICAgICBlbnVtZXJhdGVDaGlsZHJlbixcbiAgICAgIHBhdGNoOiBDb25maWdQcm92aWRlclBhdGhQYXRjaC5lbXB0eSxcbiAgICB9KSxcbiAgKTtcbn07XG4iXX0=
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "./ConfigProvider";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0NvbmZpZ1Byb3ZpZGVyXCI7XG4iXX0=
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ConfigProvider";
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ConfigProvider"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0NvbmZpZ1Byb3ZpZGVyXCI7XG4iXX0=
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@effect-aws/secrets-manager",
|
|
3
|
+
"author": {
|
|
4
|
+
"name": "Victor Korzunin",
|
|
5
|
+
"email": "ifloydrose@gmail.com",
|
|
6
|
+
"organization": false
|
|
7
|
+
},
|
|
8
|
+
"devDependencies": {
|
|
9
|
+
"@aws-sdk/client-secrets-manager": "^3",
|
|
10
|
+
"@effect-aws/client-secrets-manager": "1.1.0",
|
|
11
|
+
"@fluffy-spoon/substitute": "^1.208.0",
|
|
12
|
+
"@types/node": "^18",
|
|
13
|
+
"@typescript-eslint/eslint-plugin": "^7",
|
|
14
|
+
"@typescript-eslint/parser": "^7",
|
|
15
|
+
"effect": "3.0.0",
|
|
16
|
+
"eslint": "^8",
|
|
17
|
+
"eslint-config-prettier": "^9.1.0",
|
|
18
|
+
"eslint-import-resolver-typescript": "^3.6.1",
|
|
19
|
+
"eslint-plugin-import": "^2.29.1",
|
|
20
|
+
"eslint-plugin-prettier": "^5.2.1",
|
|
21
|
+
"prettier": "^3.2.5",
|
|
22
|
+
"typescript": "^5.4.2"
|
|
23
|
+
},
|
|
24
|
+
"peerDependencies": {
|
|
25
|
+
"@effect-aws/client-secrets-manager": "^1.1.0",
|
|
26
|
+
"effect": ">=3.0.0 <4.0.0"
|
|
27
|
+
},
|
|
28
|
+
"main": "lib/index.js",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"homepage": "https://floydspace.github.io/effect-aws",
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"version": "1.0.0",
|
|
35
|
+
"types": "lib/index.d.ts",
|
|
36
|
+
"module": "lib/esm/index.js",
|
|
37
|
+
"sideEffects": [],
|
|
38
|
+
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\".",
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "npx projen build",
|
|
41
|
+
"compile": "npx projen compile",
|
|
42
|
+
"default": "npx projen default",
|
|
43
|
+
"eslint": "npx projen eslint",
|
|
44
|
+
"package": "npx projen package",
|
|
45
|
+
"post-compile": "npx projen post-compile",
|
|
46
|
+
"pre-compile": "npx projen pre-compile",
|
|
47
|
+
"test": "npx projen test",
|
|
48
|
+
"test:watch": "npx projen test:watch",
|
|
49
|
+
"watch": "npx projen watch",
|
|
50
|
+
"docgen": "docgen"
|
|
51
|
+
}
|
|
52
|
+
}
|
package/project.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@effect-aws/secrets-manager",
|
|
3
|
+
"root": "packages/secrets-manager",
|
|
4
|
+
"targets": {
|
|
5
|
+
"default": {
|
|
6
|
+
"executor": "nx:run-commands",
|
|
7
|
+
"options": {
|
|
8
|
+
"command": "pnpm exec projen default",
|
|
9
|
+
"cwd": "packages/secrets-manager"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"pre-compile": {
|
|
13
|
+
"executor": "nx:run-commands",
|
|
14
|
+
"options": {
|
|
15
|
+
"command": "pnpm exec projen pre-compile",
|
|
16
|
+
"cwd": "packages/secrets-manager"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"compile": {
|
|
20
|
+
"executor": "nx:run-commands",
|
|
21
|
+
"options": {
|
|
22
|
+
"command": "pnpm exec projen compile",
|
|
23
|
+
"cwd": "packages/secrets-manager"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"post-compile": {
|
|
27
|
+
"executor": "nx:run-commands",
|
|
28
|
+
"options": {
|
|
29
|
+
"command": "pnpm exec projen post-compile",
|
|
30
|
+
"cwd": "packages/secrets-manager"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"test": {
|
|
34
|
+
"executor": "nx:run-commands",
|
|
35
|
+
"options": {
|
|
36
|
+
"command": "pnpm exec projen test",
|
|
37
|
+
"cwd": "packages/secrets-manager"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"package": {
|
|
41
|
+
"executor": "nx:run-commands",
|
|
42
|
+
"options": {
|
|
43
|
+
"command": "pnpm exec projen package",
|
|
44
|
+
"cwd": "packages/secrets-manager"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"build": {
|
|
48
|
+
"executor": "nx:run-commands",
|
|
49
|
+
"options": {
|
|
50
|
+
"command": "pnpm exec projen build",
|
|
51
|
+
"cwd": "packages/secrets-manager"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"watch": {
|
|
55
|
+
"executor": "nx:run-commands",
|
|
56
|
+
"options": {
|
|
57
|
+
"command": "pnpm exec projen watch",
|
|
58
|
+
"cwd": "packages/secrets-manager"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"eslint": {
|
|
62
|
+
"executor": "nx:run-commands",
|
|
63
|
+
"options": {
|
|
64
|
+
"command": "pnpm exec projen eslint",
|
|
65
|
+
"cwd": "packages/secrets-manager"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"test:watch": {
|
|
69
|
+
"executor": "nx:run-commands",
|
|
70
|
+
"options": {
|
|
71
|
+
"command": "pnpm exec projen test:watch",
|
|
72
|
+
"cwd": "packages/secrets-manager"
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"implicitDependencies": [
|
|
77
|
+
"@effect-aws/client-secrets-manager"
|
|
78
|
+
],
|
|
79
|
+
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
|
|
80
|
+
}
|