@super-protocol/pki-sync-client 2.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/dist/cli.d.ts +2 -0
- package/dist/cli.js +76 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.js +71 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +18 -0
- package/dist/sync-client.d.ts +16 -0
- package/dist/sync-client.js +104 -0
- package/package.json +36 -0
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const yargs_1 = __importDefault(require("yargs"));
|
|
8
|
+
const helpers_1 = require("yargs/helpers");
|
|
9
|
+
const config_1 = require("./config");
|
|
10
|
+
const sync_client_1 = require("./sync-client");
|
|
11
|
+
const DEFAULT_SWARM_ENV_PATH = '/sp/swarm/swarm-env.yaml';
|
|
12
|
+
async function sync(argv) {
|
|
13
|
+
try {
|
|
14
|
+
const config = (0, config_1.parseConfig)(argv.config);
|
|
15
|
+
const swarmEnv = (0, config_1.parseSwarmEnv)(argv.swarmEnv);
|
|
16
|
+
const client = new sync_client_1.SyncClient({
|
|
17
|
+
servers: swarmEnv['pki-authority'].servers,
|
|
18
|
+
networkKey: swarmEnv['pki-authority'].networkKey,
|
|
19
|
+
caBundle: swarmEnv['pki-authority'].caBundle,
|
|
20
|
+
ownChallenge: argv.ownChallenge,
|
|
21
|
+
verbose: argv.verbose,
|
|
22
|
+
disableServerIdentityCheck: argv.disableServerIdentityCheck,
|
|
23
|
+
});
|
|
24
|
+
await client.sync(config);
|
|
25
|
+
console.log('Sync completed successfully');
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error('Sync failed:', error.message);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function main() {
|
|
33
|
+
await (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
|
|
34
|
+
.usage('Usage: $0 sync [options]')
|
|
35
|
+
.command('sync', 'Sync secrets from PKI server', (yargs) => {
|
|
36
|
+
return yargs
|
|
37
|
+
.option('swarm-env', {
|
|
38
|
+
describe: 'Path to swarm environment config (YAML)',
|
|
39
|
+
type: 'string',
|
|
40
|
+
default: DEFAULT_SWARM_ENV_PATH,
|
|
41
|
+
})
|
|
42
|
+
.option('config', {
|
|
43
|
+
alias: 'c',
|
|
44
|
+
describe: 'Path to secrets config file (YAML)',
|
|
45
|
+
type: 'string',
|
|
46
|
+
demandOption: true,
|
|
47
|
+
})
|
|
48
|
+
.option('own-challenge', {
|
|
49
|
+
describe: 'Own challenge string for authentication',
|
|
50
|
+
type: 'string',
|
|
51
|
+
demandOption: true,
|
|
52
|
+
})
|
|
53
|
+
.option('verbose', {
|
|
54
|
+
alias: 'v',
|
|
55
|
+
describe: 'Verbose output',
|
|
56
|
+
type: 'boolean',
|
|
57
|
+
default: false,
|
|
58
|
+
})
|
|
59
|
+
.option('disable-server-identity-check', {
|
|
60
|
+
describe: 'Disable server identity verification',
|
|
61
|
+
type: 'boolean',
|
|
62
|
+
default: false,
|
|
63
|
+
});
|
|
64
|
+
}, sync)
|
|
65
|
+
.demandCommand(1, 'You must provide a command')
|
|
66
|
+
.help()
|
|
67
|
+
.alias('help', 'h')
|
|
68
|
+
.version()
|
|
69
|
+
.alias('version', 'V')
|
|
70
|
+
.parse();
|
|
71
|
+
}
|
|
72
|
+
main().catch((error) => {
|
|
73
|
+
console.error('Error:', error.message);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxrREFBMEI7QUFDMUIsMkNBQXdDO0FBQ3hDLHFDQUFzRDtBQUN0RCwrQ0FBMkM7QUFFM0MsTUFBTSxzQkFBc0IsR0FBRywwQkFBMEIsQ0FBQztBQUUxRCxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQVM7SUFDekIsSUFBSSxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQkFBVyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFBLHNCQUFhLEVBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sTUFBTSxHQUFHLElBQUksd0JBQVUsQ0FBQztZQUMxQixPQUFPLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU87WUFDMUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxVQUFVO1lBQ2hELFFBQVEsRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUTtZQUM1QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLDBCQUEwQixFQUFFLElBQUksQ0FBQywwQkFBMEI7U0FDOUQsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixDQUFDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSxJQUFJO0lBQ2YsTUFBTSxJQUFBLGVBQUssRUFBQyxJQUFBLGlCQUFPLEVBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztTQUNqQyxPQUFPLENBQ0osTUFBTSxFQUNOLDhCQUE4QixFQUM5QixDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ04sT0FBTyxLQUFLO2FBQ1AsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUNqQixRQUFRLEVBQUUseUNBQXlDO1lBQ25ELElBQUksRUFBRSxRQUFRO1lBQ2QsT0FBTyxFQUFFLHNCQUFzQjtTQUNsQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNkLEtBQUssRUFBRSxHQUFHO1lBQ1YsUUFBUSxFQUFFLG9DQUFvQztZQUM5QyxJQUFJLEVBQUUsUUFBUTtZQUNkLFlBQVksRUFBRSxJQUFJO1NBQ3JCLENBQUM7YUFDRCxNQUFNLENBQUMsZUFBZSxFQUFFO1lBQ3JCLFFBQVEsRUFBRSx5Q0FBeUM7WUFDbkQsSUFBSSxFQUFFLFFBQVE7WUFDZCxZQUFZLEVBQUUsSUFBSTtTQUNyQixDQUFDO2FBQ0QsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUNmLEtBQUssRUFBRSxHQUFHO1lBQ1YsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixJQUFJLEVBQUUsU0FBUztZQUNmLE9BQU8sRUFBRSxLQUFLO1NBQ2pCLENBQUM7YUFDRCxNQUFNLENBQUMsK0JBQStCLEVBQUU7WUFDckMsUUFBUSxFQUFFLHNDQUFzQztZQUNoRCxJQUFJLEVBQUUsU0FBUztZQUNmLE9BQU8sRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQztJQUNYLENBQUMsRUFDRCxJQUFJLENBQ1A7U0FDQSxhQUFhLENBQUMsQ0FBQyxFQUFFLDRCQUE0QixDQUFDO1NBQzlDLElBQUksRUFBRTtTQUNOLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1NBQ2xCLE9BQU8sRUFBRTtTQUNULEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO1NBQ3JCLEtBQUssRUFBRSxDQUFDO0FBQ2pCLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixDQUFDLENBQUMsQ0FBQyJ9
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Static } from '@sinclair/typebox';
|
|
2
|
+
declare const SecretEntrySchema: import("@sinclair/typebox").TObject<{
|
|
3
|
+
secretName: import("@sinclair/typebox").TString;
|
|
4
|
+
saveTo: import("@sinclair/typebox").TString;
|
|
5
|
+
}>;
|
|
6
|
+
declare const SyncConfigSchema: import("@sinclair/typebox").TObject<{
|
|
7
|
+
secrets: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
8
|
+
secretName: import("@sinclair/typebox").TString;
|
|
9
|
+
saveTo: import("@sinclair/typebox").TString;
|
|
10
|
+
}>>;
|
|
11
|
+
}>;
|
|
12
|
+
declare const SwarmEnvSchema: import("@sinclair/typebox").TObject<{
|
|
13
|
+
'pki-authority': import("@sinclair/typebox").TObject<{
|
|
14
|
+
networkKey: import("@sinclair/typebox").TString;
|
|
15
|
+
caBundle: import("@sinclair/typebox").TString;
|
|
16
|
+
servers: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
|
|
17
|
+
}>;
|
|
18
|
+
}>;
|
|
19
|
+
export type SecretEntry = Static<typeof SecretEntrySchema>;
|
|
20
|
+
export type SyncConfig = Static<typeof SyncConfigSchema>;
|
|
21
|
+
export type SwarmEnv = Static<typeof SwarmEnvSchema>;
|
|
22
|
+
export declare function parseConfig(configPath: string): SyncConfig;
|
|
23
|
+
export declare function parseSwarmEnv(swarmEnvPath: string): SwarmEnv;
|
|
24
|
+
export {};
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
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.parseSwarmEnv = exports.parseConfig = void 0;
|
|
27
|
+
const typebox_1 = require("@sinclair/typebox");
|
|
28
|
+
const value_1 = require("@sinclair/typebox/value");
|
|
29
|
+
const fs = __importStar(require("fs"));
|
|
30
|
+
const yaml = __importStar(require("js-yaml"));
|
|
31
|
+
const SecretEntrySchema = typebox_1.Type.Object({
|
|
32
|
+
secretName: typebox_1.Type.String(),
|
|
33
|
+
saveTo: typebox_1.Type.String(),
|
|
34
|
+
});
|
|
35
|
+
const SyncConfigSchema = typebox_1.Type.Object({
|
|
36
|
+
secrets: typebox_1.Type.Array(SecretEntrySchema),
|
|
37
|
+
});
|
|
38
|
+
const SwarmEnvSchema = typebox_1.Type.Object({
|
|
39
|
+
'pki-authority': typebox_1.Type.Object({
|
|
40
|
+
networkKey: typebox_1.Type.String(),
|
|
41
|
+
caBundle: typebox_1.Type.String(),
|
|
42
|
+
servers: typebox_1.Type.Array(typebox_1.Type.String()),
|
|
43
|
+
}),
|
|
44
|
+
});
|
|
45
|
+
function parseConfig(configPath) {
|
|
46
|
+
if (!fs.existsSync(configPath)) {
|
|
47
|
+
throw new Error(`Config file not found: ${configPath}`);
|
|
48
|
+
}
|
|
49
|
+
const fileContent = fs.readFileSync(configPath, 'utf-8');
|
|
50
|
+
const parsed = yaml.load(fileContent);
|
|
51
|
+
if (!value_1.Value.Check(SyncConfigSchema, parsed)) {
|
|
52
|
+
const errors = [...value_1.Value.Errors(SyncConfigSchema, parsed)];
|
|
53
|
+
throw new Error(`Invalid config file: ${errors.map((e) => `${e.path}: ${e.message}`).join(', ')}`);
|
|
54
|
+
}
|
|
55
|
+
return parsed;
|
|
56
|
+
}
|
|
57
|
+
exports.parseConfig = parseConfig;
|
|
58
|
+
function parseSwarmEnv(swarmEnvPath) {
|
|
59
|
+
if (!fs.existsSync(swarmEnvPath)) {
|
|
60
|
+
throw new Error(`Swarm env file not found: ${swarmEnvPath}`);
|
|
61
|
+
}
|
|
62
|
+
const fileContent = fs.readFileSync(swarmEnvPath, 'utf-8');
|
|
63
|
+
const parsed = yaml.load(fileContent);
|
|
64
|
+
if (!value_1.Value.Check(SwarmEnvSchema, parsed)) {
|
|
65
|
+
const errors = [...value_1.Value.Errors(SwarmEnvSchema, parsed)];
|
|
66
|
+
throw new Error(`Invalid swarm env file: ${errors.map((e) => `${e.path}: ${e.message}`).join(', ')}`);
|
|
67
|
+
}
|
|
68
|
+
return parsed;
|
|
69
|
+
}
|
|
70
|
+
exports.parseSwarmEnv = parseSwarmEnv;
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpRDtBQUNqRCxtREFBZ0Q7QUFDaEQsdUNBQXlCO0FBQ3pCLDhDQUFnQztBQUVoQyxNQUFNLGlCQUFpQixHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUM7SUFDbEMsVUFBVSxFQUFFLGNBQUksQ0FBQyxNQUFNLEVBQUU7SUFDekIsTUFBTSxFQUFFLGNBQUksQ0FBQyxNQUFNLEVBQUU7Q0FDeEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxnQkFBZ0IsR0FBRyxjQUFJLENBQUMsTUFBTSxDQUFDO0lBQ2pDLE9BQU8sRUFBRSxjQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO0NBQ3pDLENBQUMsQ0FBQztBQUVILE1BQU0sY0FBYyxHQUFHLGNBQUksQ0FBQyxNQUFNLENBQUM7SUFDL0IsZUFBZSxFQUFFLGNBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsVUFBVSxFQUFFLGNBQUksQ0FBQyxNQUFNLEVBQUU7UUFDekIsUUFBUSxFQUFFLGNBQUksQ0FBQyxNQUFNLEVBQUU7UUFDdkIsT0FBTyxFQUFFLGNBQUksQ0FBQyxLQUFLLENBQUMsY0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3JDLENBQUM7Q0FDTCxDQUFDLENBQUM7QUFNSCxTQUFnQixXQUFXLENBQUMsVUFBa0I7SUFDMUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXRDLElBQUksQ0FBQyxhQUFLLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksS0FBSyxDQUNYLHdCQUF3QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3BGLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQWhCRCxrQ0FnQkM7QUFFRCxTQUFnQixhQUFhLENBQUMsWUFBb0I7SUFDOUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXRDLElBQUksQ0FBQyxhQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxhQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sSUFBSSxLQUFLLENBQ1gsMkJBQTJCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDdkYsQ0FBQztJQUNOLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBaEJELHNDQWdCQyJ9
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './sync-client';
|
package/dist/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("./sync-client"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QiJ9
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SyncConfig } from './config';
|
|
2
|
+
export interface SyncClientOptions {
|
|
3
|
+
servers: string[];
|
|
4
|
+
networkKey: string;
|
|
5
|
+
caBundle: string;
|
|
6
|
+
ownChallenge: string;
|
|
7
|
+
verbose?: boolean;
|
|
8
|
+
disableServerIdentityCheck?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class SyncClient {
|
|
11
|
+
private options;
|
|
12
|
+
private challenge;
|
|
13
|
+
constructor(options: SyncClientOptions);
|
|
14
|
+
private log;
|
|
15
|
+
sync(config: SyncConfig): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.SyncClient = void 0;
|
|
30
|
+
const pki_client_1 = require("@super-protocol/pki-client");
|
|
31
|
+
const pki_common_1 = require("@super-protocol/pki-common");
|
|
32
|
+
const axios_1 = __importDefault(require("axios"));
|
|
33
|
+
const fs = __importStar(require("fs"));
|
|
34
|
+
class SyncClient {
|
|
35
|
+
options;
|
|
36
|
+
challenge;
|
|
37
|
+
constructor(options) {
|
|
38
|
+
this.options = options;
|
|
39
|
+
if (options.ownChallenge === 'tdx') {
|
|
40
|
+
this.challenge = { type: pki_common_1.ChallengeType.TDX };
|
|
41
|
+
}
|
|
42
|
+
else if (options.ownChallenge === 'sev') {
|
|
43
|
+
this.challenge = { type: pki_common_1.ChallengeType.SEVSNP };
|
|
44
|
+
}
|
|
45
|
+
else if (options.ownChallenge === 'untrusted') {
|
|
46
|
+
this.challenge = {
|
|
47
|
+
type: pki_common_1.ChallengeType.Untrusted,
|
|
48
|
+
idHex: 'aaaaaa',
|
|
49
|
+
commonIdHex: 'aaaaaa',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
throw new Error(`Unsupported challenge type: ${options.ownChallenge}. Supported: tdx, sev, untrusted`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
log(message) {
|
|
57
|
+
if (this.options.verbose ?? false) {
|
|
58
|
+
console.log(message);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async sync(config) {
|
|
62
|
+
for (const server of this.options.servers) {
|
|
63
|
+
try {
|
|
64
|
+
this.log(`Trying server: ${server}`);
|
|
65
|
+
const pkiConfig = {
|
|
66
|
+
clientCertProvider: {
|
|
67
|
+
type: 'pki-ca',
|
|
68
|
+
challenge: this.challenge,
|
|
69
|
+
baseUrl: `https://${server}/api/v1/pki`,
|
|
70
|
+
caBundle: this.options.caBundle,
|
|
71
|
+
disableServerIdentityCheck: this.options.disableServerIdentityCheck ?? false,
|
|
72
|
+
},
|
|
73
|
+
networkKey: this.options.networkKey,
|
|
74
|
+
};
|
|
75
|
+
const pkiClientFactory = new pki_client_1.PkiClientFactory(pkiConfig);
|
|
76
|
+
const httpsAgent = await pkiClientFactory.getHTTPSAgent();
|
|
77
|
+
// Collect all secret names
|
|
78
|
+
const secretNames = config.secrets.map((s) => s.secretName);
|
|
79
|
+
// Make POST request to fetch secrets
|
|
80
|
+
const response = await axios_1.default.post(`https://${server}/api/v1/secrets/get`, { objects: secretNames }, { httpsAgent });
|
|
81
|
+
const result = response.data;
|
|
82
|
+
// Write secrets to files
|
|
83
|
+
for (const secret of config.secrets) {
|
|
84
|
+
const base64Content = result.secrets[secret.secretName];
|
|
85
|
+
if (!base64Content) {
|
|
86
|
+
throw new Error(`Secret "${secret.secretName}" not found in response`);
|
|
87
|
+
}
|
|
88
|
+
const content = Buffer.from(base64Content, 'base64');
|
|
89
|
+
await fs.promises.writeFile(secret.saveTo, content);
|
|
90
|
+
this.log(`Saved secret "${secret.secretName}" to ${secret.saveTo}`);
|
|
91
|
+
}
|
|
92
|
+
this.log(`Successfully synced from server: ${server}`);
|
|
93
|
+
return; // Success - exit from method
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
this.log(`Failed to sync from server ${server}: ${error.message}`);
|
|
97
|
+
// Continue to next server
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
throw new Error('Failed to sync from all servers');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.SyncClient = SyncClient;
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3luYy1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSwyREFJb0M7QUFDcEMsMkRBQTJEO0FBQzNELGtEQUEwQjtBQUMxQix1Q0FBeUI7QUFXekIsTUFBYSxVQUFVO0lBQ1gsT0FBTyxDQUFvQjtJQUMzQixTQUFTLENBQWtCO0lBRW5DLFlBQVksT0FBMEI7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxJQUFJLEVBQUUsMEJBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqRCxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxJQUFJLEVBQUUsMEJBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwRCxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUc7Z0JBQ2IsSUFBSSxFQUFFLDBCQUFhLENBQUMsU0FBUztnQkFDN0IsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsV0FBVyxFQUFFLFFBQVE7YUFDeEIsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLEtBQUssQ0FDWCwrQkFBK0IsT0FBTyxDQUFDLFlBQVksa0NBQWtDLENBQ3hGLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQztJQUVPLEdBQUcsQ0FBQyxPQUFlO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTyxDQUFDLEdBQUcs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
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@super-protocol/pki-sync-client",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "PKI sync client utility",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"pki-sync-client": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist"
|
|
11
|
+
],
|
|
12
|
+
"directories": {
|
|
13
|
+
"lib": "dist"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc -b",
|
|
17
|
+
"start": "ts-node src/cli.ts",
|
|
18
|
+
"lint": "eslint --max-warnings=0 src",
|
|
19
|
+
"lint:fix": "eslint --fix src"
|
|
20
|
+
},
|
|
21
|
+
"author": "Super Protocol",
|
|
22
|
+
"license": "ISC",
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@sinclair/typebox": "0.33.22",
|
|
25
|
+
"@super-protocol/pki-client": "^2.1.0",
|
|
26
|
+
"@super-protocol/pki-common": "^2.0.1",
|
|
27
|
+
"axios": "^1.7.0",
|
|
28
|
+
"js-yaml": "^4.1.0",
|
|
29
|
+
"yargs": "^17.7.2"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/js-yaml": "^4.0.9",
|
|
33
|
+
"@types/node": "^20.11.0",
|
|
34
|
+
"@types/yargs": "^17.0.33"
|
|
35
|
+
}
|
|
36
|
+
}
|