envilder 0.6.6 → 0.7.1
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 -21
- package/README.md +259 -247
- package/ROADMAP.md +40 -66
- package/docs/CHANGELOG.md +345 -0
- package/docs/SECURITY.md +167 -0
- package/lib/apps/cli/Cli.d.ts +0 -1
- package/lib/apps/cli/Cli.d.ts.map +1 -1
- package/lib/apps/cli/Cli.js +0 -6
- package/lib/apps/cli/Cli.js.map +1 -1
- package/lib/apps/cli/Index.d.ts +7 -0
- package/lib/apps/cli/Index.d.ts.map +1 -0
- package/lib/apps/cli/Index.js +12 -0
- package/lib/apps/cli/Index.js.map +1 -0
- package/lib/apps/gha/Gha.d.ts +3 -0
- package/lib/apps/gha/Gha.d.ts.map +1 -0
- package/lib/apps/gha/Gha.js +62 -0
- package/lib/apps/gha/Gha.js.map +1 -0
- package/lib/apps/gha/Index.d.ts +7 -0
- package/lib/apps/gha/Index.d.ts.map +1 -0
- package/lib/apps/gha/Index.js +12 -0
- package/lib/apps/gha/Index.js.map +1 -0
- package/lib/apps/gha/Startup.d.ts +19 -0
- package/lib/apps/gha/Startup.d.ts.map +1 -0
- package/lib/apps/gha/Startup.js +75 -0
- package/lib/apps/gha/Startup.js.map +1 -0
- package/lib/envilder/infrastructure/variableStore/FileVariableStore.d.ts.map +1 -1
- package/lib/envilder/infrastructure/variableStore/FileVariableStore.js +6 -0
- package/lib/envilder/infrastructure/variableStore/FileVariableStore.js.map +1 -1
- package/package.json +53 -38
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Entry point for the CLI application
|
|
4
|
+
* This file is executed when the CLI runs
|
|
5
|
+
*/
|
|
6
|
+
import { main } from './Cli.js';
|
|
7
|
+
main().catch((error) => {
|
|
8
|
+
console.error('🚨 Uh-oh! Looks like Mario fell into the wrong pipe! 🍄💥');
|
|
9
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
10
|
+
process.exit(1);
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=Index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../src/apps/cli/Index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC3E,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gha.d.ts","sourceRoot":"","sources":["../../../src/apps/gha/Gha.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAoC1B,wBAAsB,IAAI,kBAyBzB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import 'reflect-metadata';
|
|
11
|
+
import { DispatchActionCommand } from '../../envilder/application/dispatch/DispatchActionCommand.js';
|
|
12
|
+
import { TYPES } from '../../envilder/types.js';
|
|
13
|
+
import { Startup } from './Startup.js';
|
|
14
|
+
let serviceProvider;
|
|
15
|
+
/**
|
|
16
|
+
* Reads GitHub Actions inputs from environment variables.
|
|
17
|
+
* GitHub Actions passes inputs as INPUT_<NAME> environment variables.
|
|
18
|
+
*/
|
|
19
|
+
function readInputs() {
|
|
20
|
+
const mapFile = process.env.INPUT_MAP_FILE;
|
|
21
|
+
const envFile = process.env.INPUT_ENV_FILE;
|
|
22
|
+
return {
|
|
23
|
+
map: mapFile,
|
|
24
|
+
envfile: envFile,
|
|
25
|
+
// GitHub Action only supports pull mode
|
|
26
|
+
push: false,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function executeCommand(options) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
const commandHandler = serviceProvider.get(TYPES.DispatchActionCommandHandler);
|
|
32
|
+
const command = DispatchActionCommand.fromCliOptions(options);
|
|
33
|
+
yield commandHandler.handleCommand(command);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export function main() {
|
|
37
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
const logger = serviceProvider === null || serviceProvider === void 0 ? void 0 : serviceProvider.get(TYPES.ILogger);
|
|
39
|
+
try {
|
|
40
|
+
const options = readInputs();
|
|
41
|
+
// Validate required inputs
|
|
42
|
+
if (!options.map || !options.envfile) {
|
|
43
|
+
throw new Error('🚨 Missing required inputs! Please provide map-file and env-file.');
|
|
44
|
+
}
|
|
45
|
+
logger === null || logger === void 0 ? void 0 : logger.info('🔑 Envilder GitHub Action - Starting secret pull...');
|
|
46
|
+
logger === null || logger === void 0 ? void 0 : logger.info(`📋 Map file: ${options.map}`);
|
|
47
|
+
logger === null || logger === void 0 ? void 0 : logger.info(`📄 Env file: ${options.envfile}`);
|
|
48
|
+
yield executeCommand(options);
|
|
49
|
+
logger === null || logger === void 0 ? void 0 : logger.info('✅ Secrets pulled successfully!');
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
logger === null || logger === void 0 ? void 0 : logger.error('🚨 Uh-oh! Looks like Mario fell into the wrong pipe! 🍄💥');
|
|
53
|
+
logger === null || logger === void 0 ? void 0 : logger.error(error instanceof Error ? error.message : String(error));
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// Initialize the service provider
|
|
59
|
+
const startup = Startup.build();
|
|
60
|
+
startup.configureServices().configureInfrastructure();
|
|
61
|
+
serviceProvider = startup.create();
|
|
62
|
+
//# sourceMappingURL=Gha.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gha.js","sourceRoot":"","sources":["../../../src/apps/gha/Gha.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,8DAA8D,CAAC;AAIrG,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,IAAI,eAA0B,CAAC;AAE/B;;;GAGG;AACH,SAAS,UAAU;IACjB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAE3C,OAAO;QACL,GAAG,EAAE,OAAO;QACZ,OAAO,EAAE,OAAO;QAChB,wCAAwC;QACxC,IAAI,EAAE,KAAK;KACZ,CAAC;AACJ,CAAC;AAED,SAAe,cAAc,CAAC,OAAmB;;QAC/C,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CACxC,KAAK,CAAC,4BAA4B,CACnC,CAAC;QAEF,MAAM,OAAO,GAAG,qBAAqB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CAAA;AAED,MAAM,UAAgB,IAAI;;QACxB,MAAM,MAAM,GAAG,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,GAAG,CAAU,KAAK,CAAC,OAAO,CAAC,CAAC;QAE5D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAE7B,2BAA2B;YAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;YACJ,CAAC;YAED,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACpE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,gBAAgB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5C,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,gBAAgB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAEhD,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAE9B,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC3E,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACtE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CAAA;AAED,kCAAkC;AAClC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;AAChC,OAAO,CAAC,iBAAiB,EAAE,CAAC,uBAAuB,EAAE,CAAC;AACtD,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Index.d.ts","sourceRoot":"","sources":["../../../src/apps/gha/Index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Entry point for the GitHub Action
|
|
4
|
+
* This file is executed when the action runs
|
|
5
|
+
*/
|
|
6
|
+
import { main } from './Gha.js';
|
|
7
|
+
main().catch((error) => {
|
|
8
|
+
console.error('🚨 Uh-oh! Looks like Mario fell into the wrong pipe! 🍄💥');
|
|
9
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
10
|
+
process.exit(1);
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=Index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../src/apps/gha/Index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC3E,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Container } from 'inversify';
|
|
2
|
+
export declare class Startup {
|
|
3
|
+
private readonly container;
|
|
4
|
+
constructor();
|
|
5
|
+
static build(): Startup;
|
|
6
|
+
configureServices(): this;
|
|
7
|
+
/**
|
|
8
|
+
* Configures infrastructure services for the application.
|
|
9
|
+
* Optionally accepts an AWS profile to use for service configuration.
|
|
10
|
+
* @param awsProfile - The AWS profile to use for configuring infrastructure services.
|
|
11
|
+
* @returns The current instance for method chaining.
|
|
12
|
+
*/
|
|
13
|
+
configureInfrastructure(awsProfile?: string): this;
|
|
14
|
+
create(): Container;
|
|
15
|
+
getServiceProvider(): Container;
|
|
16
|
+
private configureInfrastructureServices;
|
|
17
|
+
private configureApplicationServices;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=Startup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Startup.d.ts","sourceRoot":"","sources":["../../../src/apps/gha/Startup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAgBtC,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;;IAMtC,MAAM,CAAC,KAAK,IAAI,OAAO;IAIvB,iBAAiB,IAAI,IAAI;IAKzB;;;;;OAKG;IACH,uBAAuB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAKlD,MAAM,IAAI,SAAS;IAInB,kBAAkB,IAAI,SAAS;IAI/B,OAAO,CAAC,+BAA+B;IAsBvC,OAAO,CAAC,4BAA4B;CAqBrC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { SSM } from '@aws-sdk/client-ssm';
|
|
2
|
+
import { fromIni } from '@aws-sdk/credential-providers';
|
|
3
|
+
import { Container } from 'inversify';
|
|
4
|
+
import { DispatchActionCommandHandler } from '../../envilder/application/dispatch/DispatchActionCommandHandler.js';
|
|
5
|
+
import { PullSsmToEnvCommandHandler } from '../../envilder/application/pullSsmToEnv/PullSsmToEnvCommandHandler.js';
|
|
6
|
+
import { PushEnvToSsmCommandHandler } from '../../envilder/application/pushEnvToSsm/PushEnvToSsmCommandHandler.js';
|
|
7
|
+
import { PushSingleCommandHandler } from '../../envilder/application/pushSingle/PushSingleCommandHandler.js';
|
|
8
|
+
import { AwsSsmSecretProvider } from '../../envilder/infrastructure/aws/AwsSsmSecretProvider.js';
|
|
9
|
+
import { ConsoleLogger } from '../../envilder/infrastructure/logger/ConsoleLogger.js';
|
|
10
|
+
import { FileVariableStore } from '../../envilder/infrastructure/variableStore/FileVariableStore.js';
|
|
11
|
+
import { TYPES } from '../../envilder/types.js';
|
|
12
|
+
export class Startup {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.container = new Container();
|
|
15
|
+
}
|
|
16
|
+
static build() {
|
|
17
|
+
return new Startup();
|
|
18
|
+
}
|
|
19
|
+
configureServices() {
|
|
20
|
+
this.configureApplicationServices();
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Configures infrastructure services for the application.
|
|
25
|
+
* Optionally accepts an AWS profile to use for service configuration.
|
|
26
|
+
* @param awsProfile - The AWS profile to use for configuring infrastructure services.
|
|
27
|
+
* @returns The current instance for method chaining.
|
|
28
|
+
*/
|
|
29
|
+
configureInfrastructure(awsProfile) {
|
|
30
|
+
this.configureInfrastructureServices(awsProfile);
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
create() {
|
|
34
|
+
return this.container;
|
|
35
|
+
}
|
|
36
|
+
getServiceProvider() {
|
|
37
|
+
return this.container;
|
|
38
|
+
}
|
|
39
|
+
configureInfrastructureServices(awsProfile) {
|
|
40
|
+
this.container
|
|
41
|
+
.bind(TYPES.ILogger)
|
|
42
|
+
.to(ConsoleLogger)
|
|
43
|
+
.inSingletonScope();
|
|
44
|
+
this.container
|
|
45
|
+
.bind(TYPES.IVariableStore)
|
|
46
|
+
.to(FileVariableStore)
|
|
47
|
+
.inSingletonScope();
|
|
48
|
+
const ssm = awsProfile
|
|
49
|
+
? new SSM({ credentials: fromIni({ profile: awsProfile }) })
|
|
50
|
+
: new SSM();
|
|
51
|
+
const secretProvider = new AwsSsmSecretProvider(ssm);
|
|
52
|
+
this.container
|
|
53
|
+
.bind(TYPES.ISecretProvider)
|
|
54
|
+
.toConstantValue(secretProvider);
|
|
55
|
+
}
|
|
56
|
+
configureApplicationServices() {
|
|
57
|
+
this.container
|
|
58
|
+
.bind(TYPES.PullSsmToEnvCommandHandler)
|
|
59
|
+
.to(PullSsmToEnvCommandHandler)
|
|
60
|
+
.inTransientScope();
|
|
61
|
+
this.container
|
|
62
|
+
.bind(TYPES.PushEnvToSsmCommandHandler)
|
|
63
|
+
.to(PushEnvToSsmCommandHandler)
|
|
64
|
+
.inTransientScope();
|
|
65
|
+
this.container
|
|
66
|
+
.bind(TYPES.PushSingleCommandHandler)
|
|
67
|
+
.to(PushSingleCommandHandler)
|
|
68
|
+
.inTransientScope();
|
|
69
|
+
this.container
|
|
70
|
+
.bind(TYPES.DispatchActionCommandHandler)
|
|
71
|
+
.to(DispatchActionCommandHandler)
|
|
72
|
+
.inTransientScope();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=Startup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Startup.js","sourceRoot":"","sources":["../../../src/apps/gha/Startup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,qEAAqE,CAAC;AACnH,OAAO,EAAE,0BAA0B,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,EAAE,0BAA0B,EAAE,MAAM,uEAAuE,CAAC;AACnH,OAAO,EAAE,wBAAwB,EAAE,MAAM,mEAAmE,CAAC;AAM7G,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,uDAAuD,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kEAAkE,CAAC;AACrG,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEhD,MAAM,OAAO,OAAO;IAGlB;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,OAAO,EAAE,CAAC;IACvB,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,UAAmB;QACzC,IAAI,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,+BAA+B,CAAC,UAAmB;QACzD,IAAI,CAAC,SAAS;aACX,IAAI,CAAU,KAAK,CAAC,OAAO,CAAC;aAC5B,EAAE,CAAC,aAAa,CAAC;aACjB,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,SAAS;aACX,IAAI,CAAiB,KAAK,CAAC,cAAc,CAAC;aAC1C,EAAE,CAAC,iBAAiB,CAAC;aACrB,gBAAgB,EAAE,CAAC;QAEtB,MAAM,GAAG,GAAG,UAAU;YACpB,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;YAC5D,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;QAEd,MAAM,cAAc,GAAG,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS;aACX,IAAI,CAAkB,KAAK,CAAC,eAAe,CAAC;aAC5C,eAAe,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC;IAEO,4BAA4B;QAClC,IAAI,CAAC,SAAS;aACX,IAAI,CAA6B,KAAK,CAAC,0BAA0B,CAAC;aAClE,EAAE,CAAC,0BAA0B,CAAC;aAC9B,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,SAAS;aACX,IAAI,CAA6B,KAAK,CAAC,0BAA0B,CAAC;aAClE,EAAE,CAAC,0BAA0B,CAAC;aAC9B,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,SAAS;aACX,IAAI,CAA2B,KAAK,CAAC,wBAAwB,CAAC;aAC9D,EAAE,CAAC,wBAAwB,CAAC;aAC5B,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,SAAS;aACX,IAAI,CAA+B,KAAK,CAAC,4BAA4B,CAAC;aACtE,EAAE,CAAC,4BAA4B,CAAC;aAChC,gBAAgB,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileVariableStore.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/variableStore/FileVariableStore.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAG3E,qBACa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,MAAM,CAAU;gBAEW,MAAM,EAAE,OAAO;IAO5C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAmB3D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAc/D,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC;IAiBhB,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"FileVariableStore.d.ts","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/variableStore/FileVariableStore.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAG3E,qBACa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,MAAM,CAAU;gBAEW,MAAM,EAAE,OAAO;IAO5C,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAmB3D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAc/D,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC;IAiBhB,OAAO,CAAC,cAAc;CASvB"}
|
|
@@ -82,6 +82,12 @@ let FileVariableStore = class FileVariableStore {
|
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
escapeEnvValue(value) {
|
|
85
|
+
// lgtm[js/incomplete-sanitization]
|
|
86
|
+
// CodeQL flags this as incomplete sanitization because we don't escape backslashes
|
|
87
|
+
// before newlines. However, this is intentional: the dotenv library does NOT
|
|
88
|
+
// interpret escape sequences (it treats \n literally as backslash+n, not as a newline).
|
|
89
|
+
// Therefore, escaping backslashes would actually break the functionality by
|
|
90
|
+
// doubling them when read back by dotenv. This is not a security issue in this context.
|
|
85
91
|
return value.replace(/(\r\n|\n|\r)/g, '\\n');
|
|
86
92
|
}
|
|
87
93
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileVariableStore.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/variableStore/FileVariableStore.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"FileVariableStore.js","sourceRoot":"","sources":["../../../../src/envilder/infrastructure/variableStore/FileVariableStore.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,26 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "envilder",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "A CLI that securely centralizes your environment variables from AWS SSM as a single source of truth",
|
|
5
|
-
"main": "./lib/apps/cli/
|
|
5
|
+
"main": "./lib/apps/cli/Index.js",
|
|
6
6
|
"bin": {
|
|
7
|
-
"envilder": "lib/apps/cli/
|
|
8
|
-
},
|
|
9
|
-
"scripts": {
|
|
10
|
-
"clean": "npm cache clean --force && npx rimraf lib && npx rimraf coverage && npx rimraf node_modules",
|
|
11
|
-
"build": "tsc",
|
|
12
|
-
"local:install": "npm run build && node --loader ts-node/esm scripts/pack-and-install.ts",
|
|
13
|
-
"local:test-run": "npm run build && node lib/apps/cli/Cli.js --map=tests/sample/param-map.json --envfile=tests/sample/autogenerated.env",
|
|
14
|
-
"format": "biome format",
|
|
15
|
-
"format:write": "biome format --write",
|
|
16
|
-
"lint": "secretlint \"**/*\" && biome check --write && tsc --noEmit",
|
|
17
|
-
"lint:fix": "biome lint --fix",
|
|
18
|
-
"test": "vitest run --reporter=verbose --coverage",
|
|
19
|
-
"test:ci": "vitest run --reporter=verbose --reporter=junit --coverage --outputFile=coverage/junit/test-results.xml",
|
|
20
|
-
"npm-publish": "npm run lint && npm run build && npm run test && npm pack --dry-run && npm publish",
|
|
21
|
-
"npm-release-patch": "npm version patch",
|
|
22
|
-
"npm-release-minor": "npm version minor",
|
|
23
|
-
"npm-release-prerelease": "npm version prerelease"
|
|
7
|
+
"envilder": "lib/apps/cli/Index.js"
|
|
24
8
|
},
|
|
25
9
|
"keywords": [
|
|
26
10
|
"env",
|
|
@@ -37,7 +21,10 @@
|
|
|
37
21
|
"devops",
|
|
38
22
|
"ci-cd",
|
|
39
23
|
"secure",
|
|
40
|
-
"envfile"
|
|
24
|
+
"envfile",
|
|
25
|
+
"github-actions",
|
|
26
|
+
"github-action",
|
|
27
|
+
"actions"
|
|
41
28
|
],
|
|
42
29
|
"repository": {
|
|
43
30
|
"type": "git",
|
|
@@ -57,32 +44,60 @@
|
|
|
57
44
|
"lib/**/*",
|
|
58
45
|
"README.md",
|
|
59
46
|
"LICENSE",
|
|
60
|
-
"ROADMAP.md"
|
|
47
|
+
"ROADMAP.md",
|
|
48
|
+
"docs/CHANGELOG.md",
|
|
49
|
+
"docs/SECURITY.md"
|
|
61
50
|
],
|
|
62
51
|
"type": "module",
|
|
63
52
|
"dependencies": {
|
|
64
|
-
"@aws-sdk/client-ssm": "^3.
|
|
65
|
-
"@aws-sdk/credential-providers": "^3.
|
|
66
|
-
"@types/node": "^24.
|
|
67
|
-
"commander": "^14.0.
|
|
68
|
-
"dotenv": "^
|
|
69
|
-
"inversify": "^7.
|
|
70
|
-
"picocolors": "^1.1.
|
|
53
|
+
"@aws-sdk/client-ssm": "^3.932.0",
|
|
54
|
+
"@aws-sdk/credential-providers": "^3.932.0",
|
|
55
|
+
"@types/node": "^24.10.1",
|
|
56
|
+
"commander": "^14.0.2",
|
|
57
|
+
"dotenv": "^17.2.3",
|
|
58
|
+
"inversify": "^7.10.4",
|
|
59
|
+
"picocolors": "^1.1.1",
|
|
71
60
|
"reflect-metadata": "^0.2.2"
|
|
72
61
|
},
|
|
73
62
|
"devDependencies": {
|
|
74
|
-
"@biomejs/biome": "^2.
|
|
75
|
-
"@
|
|
76
|
-
"@
|
|
77
|
-
"@
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
63
|
+
"@biomejs/biome": "^2.3.5",
|
|
64
|
+
"@commitlint/cli": "^19.6.0",
|
|
65
|
+
"@commitlint/config-conventional": "^19.6.0",
|
|
66
|
+
"@secretlint/secretlint-rule-preset-recommend": "^11.2.5",
|
|
67
|
+
"@testcontainers/localstack": "^11.8.1",
|
|
68
|
+
"@vercel/ncc": "^0.38.4",
|
|
69
|
+
"@vitest/coverage-v8": "^4.0.9",
|
|
70
|
+
"conventional-changelog-cli": "^5.0.0",
|
|
71
|
+
"glob": "^11.0.3",
|
|
72
|
+
"secretlint": "^11.2.5",
|
|
73
|
+
"testcontainers": "^11.8.1",
|
|
81
74
|
"ts-node": "^10.9.2",
|
|
82
|
-
"typescript": "^5.
|
|
83
|
-
"vitest": "^4.0.
|
|
75
|
+
"typescript": "^5.9.3",
|
|
76
|
+
"vitest": "^4.0.9"
|
|
84
77
|
},
|
|
85
78
|
"engines": {
|
|
86
79
|
"node": ">=20.0.0"
|
|
80
|
+
},
|
|
81
|
+
"scripts": {
|
|
82
|
+
"clean": "pnpm store prune && pnpm dlx rimraf lib && pnpm dlx rimraf coverage && pnpm dlx rimraf node_modules",
|
|
83
|
+
"build": "tsc",
|
|
84
|
+
"build:gha": "ncc build src/apps/gha/Index.ts -o github-action/dist --minify",
|
|
85
|
+
"verify:gha": "pnpm build:gha && git diff --exit-code github-action/dist/index.js || (echo '❌ github-action/dist/index.js is not up to date. Run pnpm build:gha' && exit 1)",
|
|
86
|
+
"local:install": "pnpm build && node --loader ts-node/esm scripts/pack-and-install.ts",
|
|
87
|
+
"local:test-run": "pnpm build && node lib/apps/cli/Index.js --map=tests/sample/param-map.json --envfile=tests/sample/autogenerated.env",
|
|
88
|
+
"format": "biome format",
|
|
89
|
+
"format:write": "biome format --write",
|
|
90
|
+
"lint": "secretlint \"**/*\" && biome check --write && tsc --noEmit",
|
|
91
|
+
"lint:fix": "biome lint --fix",
|
|
92
|
+
"test": "vitest run --reporter=verbose --coverage",
|
|
93
|
+
"test:ci": "vitest run --reporter=verbose --reporter=junit --coverage --outputFile=coverage/junit/test-results.xml",
|
|
94
|
+
"changelog": "conventional-changelog -p angular -i docs/CHANGELOG.md -s",
|
|
95
|
+
"changelog:all": "conventional-changelog -p angular -i docs/CHANGELOG.md -s -r 0",
|
|
96
|
+
"pnpm-publish": "pnpm lint && pnpm build && pnpm test && pnpm pack --dry-run && pnpm publish",
|
|
97
|
+
"action-publish": "pnpm build:gha && pnpm verify:gha",
|
|
98
|
+
"pnpm-release-patch": "pnpm version patch && pnpm changelog",
|
|
99
|
+
"pnpm-release-minor": "pnpm version minor && pnpm changelog",
|
|
100
|
+
"pnpm-release-major": "pnpm version major && pnpm changelog",
|
|
101
|
+
"pnpm-release-prerelease": "pnpm version prerelease"
|
|
87
102
|
}
|
|
88
|
-
}
|
|
103
|
+
}
|