@udondan/avanti 0.8.1 → 0.10.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.
@@ -0,0 +1,85 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.fetchS3 = void 0;
27
+ const child_process_1 = require("child_process");
28
+ const fs = __importStar(require("fs"));
29
+ const os = __importStar(require("os"));
30
+ const path = __importStar(require("path"));
31
+ function awsRun(args, opts = { encoding: 'utf8' }) {
32
+ const result = (0, child_process_1.spawnSync)('aws', args, {
33
+ encoding: opts.encoding,
34
+ });
35
+ if (result.error)
36
+ throw new Error(`aws CLI error: ${result.error.message}`);
37
+ return {
38
+ stdout: result.stdout ?? '',
39
+ stderr: result.stderr ?? '',
40
+ status: result.status,
41
+ };
42
+ }
43
+ function collectFiles(base, dir, files) {
44
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
45
+ const full = path.join(dir, entry.name);
46
+ if (entry.isDirectory()) {
47
+ collectFiles(base, full, files);
48
+ }
49
+ else if (entry.isFile()) {
50
+ files.set(path.relative(base, full), fs.readFileSync(full, 'utf8'));
51
+ }
52
+ }
53
+ }
54
+ function fetchS3(uri) {
55
+ const isDir = uri.endsWith('/');
56
+ if (!isDir) {
57
+ const res = awsRun(['s3', 'cp', uri, '-']);
58
+ if (res.status !== 0) {
59
+ throw new Error(`Failed to fetch ${uri}: ${res.stderr.trim()}`);
60
+ }
61
+ let filename;
62
+ try {
63
+ filename = path.basename(new URL(uri).pathname) || 'download';
64
+ }
65
+ catch {
66
+ filename = path.basename(uri) || 'download';
67
+ }
68
+ return { files: new Map([[filename, res.stdout]]) };
69
+ }
70
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'scync-s3-'));
71
+ try {
72
+ const res = awsRun(['s3', 'sync', uri, tmpDir]);
73
+ if (res.status !== 0) {
74
+ throw new Error(`Failed to sync ${uri}: ${res.stderr.trim()}`);
75
+ }
76
+ const files = new Map();
77
+ collectFiles(tmpDir, tmpDir, files);
78
+ return { files };
79
+ }
80
+ finally {
81
+ fs.rmSync(tmpDir, { recursive: true, force: true });
82
+ }
83
+ }
84
+ exports.fetchS3 = fetchS3;
85
+ //# sourceMappingURL=s3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../../src/sources/s3.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface VaultResult {
2
+ files: Map<string, string>;
3
+ }
4
+ export declare function fetchVault(secretPath: string, field?: string): Promise<VaultResult>;
5
+ //# sourceMappingURL=vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/sources/vault.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAsGD,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CActB"}
@@ -0,0 +1,124 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.fetchVault = void 0;
27
+ const child_process_1 = require("child_process");
28
+ const path = __importStar(require("path"));
29
+ const fetch_1 = require("../fetch");
30
+ function isVaultAvailable() {
31
+ return !(0, child_process_1.spawnSync)('vault', ['version'], { encoding: 'utf8' }).error;
32
+ }
33
+ function vaultRun(args) {
34
+ const result = (0, child_process_1.spawnSync)('vault', args, { encoding: 'utf8' });
35
+ if (result.error)
36
+ throw new Error(`vault CLI error: ${result.error.message}`);
37
+ return {
38
+ stdout: result.stdout ?? '',
39
+ stderr: result.stderr ?? '',
40
+ status: result.status,
41
+ };
42
+ }
43
+ function secretFilename(secretPath, field) {
44
+ return field ?? (path.basename(secretPath) || 'secret');
45
+ }
46
+ function fetchVaultViaCli(secretPath, field) {
47
+ const filename = secretFilename(secretPath, field);
48
+ if (field) {
49
+ const res = vaultRun(['kv', 'get', `-field=${field}`, secretPath]);
50
+ if (res.status !== 0) {
51
+ throw new Error(`Failed to read ${secretPath}: ${res.stderr.trim()}`);
52
+ }
53
+ return { files: new Map([[filename, res.stdout]]) };
54
+ }
55
+ const res = vaultRun(['kv', 'get', '-format=json', secretPath]);
56
+ if (res.status !== 0) {
57
+ throw new Error(`Failed to read ${secretPath}: ${res.stderr.trim()}`);
58
+ }
59
+ const parsed = JSON.parse(res.stdout);
60
+ const kvv2 = parsed?.data?.data;
61
+ const data = kvv2 ?? parsed?.data;
62
+ if (!data)
63
+ throw new Error(`No data found at ${secretPath}`);
64
+ return { files: new Map([[filename, JSON.stringify(data, null, 2)]]) };
65
+ }
66
+ async function fetchVaultViaApi(addr, token, secretPath, field) {
67
+ const headers = {
68
+ 'X-Vault-Token': token,
69
+ 'User-Agent': 'scync',
70
+ };
71
+ const namespace = process.env.VAULT_NAMESPACE;
72
+ if (namespace)
73
+ headers['X-Vault-Namespace'] = namespace;
74
+ const filename = secretFilename(secretPath, field);
75
+ const parts = secretPath.split('/');
76
+ const mount = parts[0];
77
+ const subpath = parts.slice(1).join('/');
78
+ // Try KV v2 path first
79
+ const v2Res = await (0, fetch_1.fetchWithRetry)(`${addr}/v1/${mount}/data/${subpath}`, {
80
+ headers,
81
+ });
82
+ if (v2Res.ok) {
83
+ const json = (await v2Res.json());
84
+ const data = json?.data?.data;
85
+ if (data) {
86
+ if (field) {
87
+ if (!(field in data))
88
+ throw new Error(`Field "${field}" not found at ${secretPath}`);
89
+ return { files: new Map([[filename, String(data[field])]]) };
90
+ }
91
+ return {
92
+ files: new Map([[filename, JSON.stringify(data, null, 2)]]),
93
+ };
94
+ }
95
+ }
96
+ // Fall back to KV v1 path
97
+ const v1Res = await (0, fetch_1.fetchWithRetry)(`${addr}/v1/${secretPath}`, { headers });
98
+ if (!v1Res.ok) {
99
+ throw new Error(`Failed to read ${secretPath}: HTTP ${v1Res.status}`);
100
+ }
101
+ const json = (await v1Res.json());
102
+ const data = json?.data;
103
+ if (!data)
104
+ throw new Error(`No data found at ${secretPath}`);
105
+ if (field) {
106
+ if (!(field in data))
107
+ throw new Error(`Field "${field}" not found at ${secretPath}`);
108
+ return { files: new Map([[filename, String(data[field])]]) };
109
+ }
110
+ return { files: new Map([[filename, JSON.stringify(data, null, 2)]]) };
111
+ }
112
+ async function fetchVault(secretPath, field) {
113
+ if (isVaultAvailable()) {
114
+ return fetchVaultViaCli(secretPath, field);
115
+ }
116
+ const addr = process.env.VAULT_ADDR;
117
+ const token = process.env.VAULT_TOKEN;
118
+ if (addr && token) {
119
+ return fetchVaultViaApi(addr, token, secretPath, field);
120
+ }
121
+ throw new Error('vault CLI not found and VAULT_ADDR/VAULT_TOKEN env vars are not set');
122
+ }
123
+ exports.fetchVault = fetchVault;
124
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../src/sources/vault.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -23,8 +23,32 @@ export interface ExecSrc {
23
23
  export interface RawSrc {
24
24
  raw: string;
25
25
  }
26
- /** src can be a plain string (http/https URL or local path) or a map for gitlab/github/exec/raw */
27
- export type FileSrc = string | GitLabSrc | GitHubSrc | ExecSrc | RawSrc;
26
+ export interface BitbucketSrc {
27
+ bitbucket: {
28
+ workspace: string;
29
+ repo: string;
30
+ file: string;
31
+ ref?: string;
32
+ };
33
+ }
34
+ export interface GitSrc {
35
+ git: {
36
+ repo: string;
37
+ file: string;
38
+ ref?: string;
39
+ };
40
+ }
41
+ export interface S3Src {
42
+ s3: string;
43
+ }
44
+ export interface VaultSrc {
45
+ vault: {
46
+ path: string;
47
+ field?: string;
48
+ };
49
+ }
50
+ /** src can be a plain string (http/https URL or local path) or a typed source map */
51
+ export type FileSrc = string | GitLabSrc | GitHubSrc | BitbucketSrc | GitSrc | ExecSrc | RawSrc | S3Src | VaultSrc;
28
52
  export type JsonConflictStrategy = 'abort' | 'first_wins' | 'last_wins';
29
53
  export type JsonArrayStrategy = 'replace' | 'concat';
30
54
  export type JsonObjectStrategy = 'replace' | 'merge';
@@ -33,6 +57,14 @@ export interface JsonMergeOptions {
33
57
  arrays?: JsonArrayStrategy;
34
58
  objects?: JsonObjectStrategy;
35
59
  }
60
+ export type YamlConflictStrategy = 'abort' | 'first_wins' | 'last_wins';
61
+ export type YamlArrayStrategy = 'replace' | 'concat';
62
+ export type YamlObjectStrategy = 'replace' | 'merge';
63
+ export interface YamlMergeOptions {
64
+ conflicts?: YamlConflictStrategy;
65
+ arrays?: YamlArrayStrategy;
66
+ objects?: YamlObjectStrategy;
67
+ }
36
68
  export interface FileEntry {
37
69
  src: FileSrc | FileSrc[];
38
70
  target?: string;
@@ -40,6 +72,7 @@ export interface FileEntry {
40
72
  replace?: ReplaceRule[];
41
73
  post?: string;
42
74
  json?: JsonMergeOptions | boolean;
75
+ yaml?: YamlMergeOptions | boolean;
43
76
  }
44
77
  export interface FileFerryConfig {
45
78
  variables?: Variables;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,mGAAmG;AACnG,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,CAAC;AACrD,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@udondan/avanti",
3
- "version": "0.8.1",
3
+ "version": "0.10.0",
4
4
  "description": "Assemble local files from any source via a declarative YAML spec",
5
5
  "bin": {
6
6
  "avanti": "dist/cli.js"
@@ -42,9 +42,10 @@
42
42
  "dependencies": {
43
43
  "chalk": "5.3.0",
44
44
  "commander": "12.1.0",
45
- "comment-json": "^5.0.0",
45
+ "comment-json": "5.0.0",
46
46
  "diff": "5.2.2",
47
- "js-yaml": "4.1.1"
47
+ "js-yaml": "4.1.1",
48
+ "yaml": "2.8.4"
48
49
  },
49
50
  "devDependencies": {
50
51
  "@eslint/js": "10.0.1",