@degengineering/web3pgp-cli 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/LICENSE +21 -0
- package/README.md +151 -0
- package/dist/commands/blockchain/addSubkey.d.ts +9 -0
- package/dist/commands/blockchain/addSubkey.d.ts.map +1 -0
- package/dist/commands/blockchain/addSubkey.js +49 -0
- package/dist/commands/blockchain/addSubkey.js.map +1 -0
- package/dist/commands/blockchain/certify.d.ts +13 -0
- package/dist/commands/blockchain/certify.d.ts.map +1 -0
- package/dist/commands/blockchain/certify.js +75 -0
- package/dist/commands/blockchain/certify.js.map +1 -0
- package/dist/commands/blockchain/challenge.d.ts +13 -0
- package/dist/commands/blockchain/challenge.d.ts.map +1 -0
- package/dist/commands/blockchain/challenge.js +58 -0
- package/dist/commands/blockchain/challenge.js.map +1 -0
- package/dist/commands/blockchain/generateKey.d.ts +7 -0
- package/dist/commands/blockchain/generateKey.d.ts.map +1 -0
- package/dist/commands/blockchain/generateKey.js +36 -0
- package/dist/commands/blockchain/generateKey.js.map +1 -0
- package/dist/commands/blockchain/getPublicKey.d.ts +9 -0
- package/dist/commands/blockchain/getPublicKey.d.ts.map +1 -0
- package/dist/commands/blockchain/getPublicKey.js +37 -0
- package/dist/commands/blockchain/getPublicKey.js.map +1 -0
- package/dist/commands/blockchain/index.d.ts +12 -0
- package/dist/commands/blockchain/index.d.ts.map +1 -0
- package/dist/commands/blockchain/index.js +33 -0
- package/dist/commands/blockchain/index.js.map +1 -0
- package/dist/commands/blockchain/keccak256.d.ts +7 -0
- package/dist/commands/blockchain/keccak256.d.ts.map +1 -0
- package/dist/commands/blockchain/keccak256.js +38 -0
- package/dist/commands/blockchain/keccak256.js.map +1 -0
- package/dist/commands/blockchain/listen.d.ts +9 -0
- package/dist/commands/blockchain/listen.d.ts.map +1 -0
- package/dist/commands/blockchain/listen.js +30 -0
- package/dist/commands/blockchain/listen.js.map +1 -0
- package/dist/commands/blockchain/prove.d.ts +13 -0
- package/dist/commands/blockchain/prove.d.ts.map +1 -0
- package/dist/commands/blockchain/prove.js +123 -0
- package/dist/commands/blockchain/prove.js.map +1 -0
- package/dist/commands/blockchain/register.d.ts +13 -0
- package/dist/commands/blockchain/register.d.ts.map +1 -0
- package/dist/commands/blockchain/register.js +65 -0
- package/dist/commands/blockchain/register.js.map +1 -0
- package/dist/commands/blockchain/revoke-certification.d.ts +13 -0
- package/dist/commands/blockchain/revoke-certification.d.ts.map +1 -0
- package/dist/commands/blockchain/revoke-certification.js +75 -0
- package/dist/commands/blockchain/revoke-certification.js.map +1 -0
- package/dist/commands/blockchain/revoke.d.ts +19 -0
- package/dist/commands/blockchain/revoke.d.ts.map +1 -0
- package/dist/commands/blockchain/revoke.js +118 -0
- package/dist/commands/blockchain/revoke.js.map +1 -0
- package/dist/commands/blockchain/sync.d.ts +20 -0
- package/dist/commands/blockchain/sync.d.ts.map +1 -0
- package/dist/commands/blockchain/sync.js +246 -0
- package/dist/commands/blockchain/sync.js.map +1 -0
- package/dist/commands/blockchain/update.d.ts +13 -0
- package/dist/commands/blockchain/update.d.ts.map +1 -0
- package/dist/commands/blockchain/update.js +60 -0
- package/dist/commands/blockchain/update.js.map +1 -0
- package/dist/commands/configuration/display.d.ts +10 -0
- package/dist/commands/configuration/display.d.ts.map +1 -0
- package/dist/commands/configuration/display.js +58 -0
- package/dist/commands/configuration/display.js.map +1 -0
- package/dist/commands/configuration/generate.d.ts +14 -0
- package/dist/commands/configuration/generate.d.ts.map +1 -0
- package/dist/commands/configuration/generate.js +222 -0
- package/dist/commands/configuration/generate.js.map +1 -0
- package/dist/commands/configuration/index.d.ts +6 -0
- package/dist/commands/configuration/index.d.ts.map +1 -0
- package/dist/commands/configuration/index.js +21 -0
- package/dist/commands/configuration/index.js.map +1 -0
- package/dist/commands/configuration/validate.d.ts +10 -0
- package/dist/commands/configuration/validate.d.ts.map +1 -0
- package/dist/commands/configuration/validate.js +45 -0
- package/dist/commands/configuration/validate.js.map +1 -0
- package/dist/commands/factory.d.ts +33 -0
- package/dist/commands/factory.d.ts.map +1 -0
- package/dist/commands/factory.js +48 -0
- package/dist/commands/factory.js.map +1 -0
- package/dist/config/defaults.d.ts +8 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +11 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/loader.d.ts +12 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +205 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/testnet.d.ts +6 -0
- package/dist/config/testnet.d.ts.map +1 -0
- package/dist/config/testnet.js +26 -0
- package/dist/config/testnet.js.map +1 -0
- package/dist/config/transport.d.ts +17 -0
- package/dist/config/transport.d.ts.map +1 -0
- package/dist/config/transport.js +46 -0
- package/dist/config/transport.js.map +1 -0
- package/dist/config/types.d.ts +92 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +12 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validator.d.ts +14 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +156 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +28 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/services/web3pgpServiceFactory.d.ts +14 -0
- package/dist/services/web3pgpServiceFactory.d.ts.map +1 -0
- package/dist/services/web3pgpServiceFactory.js +228 -0
- package/dist/services/web3pgpServiceFactory.js.map +1 -0
- package/dist/setup.d.ts +14 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +46 -0
- package/dist/setup.js.map +1 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/clients.d.ts +49373 -0
- package/dist/utils/clients.d.ts.map +1 -0
- package/dist/utils/clients.js +129 -0
- package/dist/utils/clients.js.map +1 -0
- package/dist/utils/input.d.ts +24 -0
- package/dist/utils/input.d.ts.map +1 -0
- package/dist/utils/input.js +138 -0
- package/dist/utils/input.js.map +1 -0
- package/dist/utils/logger.d.ts +12 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +35 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createKeccak256Command = createKeccak256Command;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const process_1 = require("process");
|
|
6
|
+
const commander_1 = require("commander");
|
|
7
|
+
const sha3_1 = require("@noble/hashes/sha3");
|
|
8
|
+
const utils_1 = require("@noble/hashes/utils");
|
|
9
|
+
function createKeccak256Command(deps) {
|
|
10
|
+
const { logger } = deps;
|
|
11
|
+
const cmdLogger = logger.child({ command: 'keccak256' });
|
|
12
|
+
return new commander_1.Command('keccak256')
|
|
13
|
+
.description('Hash data using keccak256')
|
|
14
|
+
.option('-p, --path <path>', 'Path to file to hash (reads from stdin if not provided)')
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
try {
|
|
17
|
+
cmdLogger.debug({ hasPath: !!options.path }, 'Starting keccak256 operation');
|
|
18
|
+
const inputStream = options.path
|
|
19
|
+
? (0, fs_1.createReadStream)(options.path)
|
|
20
|
+
: process_1.stdin;
|
|
21
|
+
const hasher = sha3_1.keccak_256.create();
|
|
22
|
+
for await (const chunk of inputStream) {
|
|
23
|
+
hasher.update(chunk);
|
|
24
|
+
}
|
|
25
|
+
cmdLogger.debug('Data hashed successfully');
|
|
26
|
+
const hashHex = '0x' + (0, utils_1.bytesToHex)(hasher.digest());
|
|
27
|
+
cmdLogger.debug({ hash: hashHex }, 'Hash computed');
|
|
28
|
+
console.log(hashHex);
|
|
29
|
+
process.exit(0);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
33
|
+
cmdLogger.error({ error: msg }, 'Failed to compute keccak256 hash');
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=keccak256.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keccak256.js","sourceRoot":"","sources":["../../../src/commands/blockchain/keccak256.ts"],"names":[],"mappings":";;AAWA,wDAmCC;AA9CD,2BAAsC;AACtC,qCAAgC;AAChC,yCAAoC;AAEpC,6CAAgD;AAChD,+CAAiD;AAMjD,SAAgB,sBAAsB,CAAC,IAA0B;IAC/D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAEzD,OAAO,IAAI,mBAAO,CAAC,WAAW,CAAC;SAC5B,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,mBAAmB,EAAE,yDAAyD,CAAC;SACtF,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,8BAA8B,CAAC,CAAC;YAE7E,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI;gBAC9B,CAAC,CAAC,IAAA,qBAAgB,EAAC,OAAO,CAAC,IAAI,CAAC;gBAChC,CAAC,CAAC,eAAK,CAAC;YAGV,MAAM,MAAM,GAAG,iBAAU,CAAC,MAAM,EAAE,CAAC;YAEnC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBACtC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAED,SAAS,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAE5C,MAAM,OAAO,GAAG,IAAI,GAAG,IAAA,kBAAU,EAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAEnD,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,kCAAkC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { Logger } from 'pino';
|
|
3
|
+
import { IWeb3PGPService } from 'dexes';
|
|
4
|
+
export interface ListenDeps {
|
|
5
|
+
logger: Logger;
|
|
6
|
+
service: IWeb3PGPService;
|
|
7
|
+
}
|
|
8
|
+
export declare function createListenCommand(deps: ListenDeps): Command;
|
|
9
|
+
//# sourceMappingURL=listen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listen.d.ts","sourceRoot":"","sources":["../../../src/commands/blockchain/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAQ,MAAM,OAAO,CAAC;AAI9C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAuB7D"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createListenCommand = createListenCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const factory_1 = require("../factory");
|
|
6
|
+
function createListenCommand(deps) {
|
|
7
|
+
const { logger } = deps;
|
|
8
|
+
const cmdLogger = logger.child({ command: 'listen' });
|
|
9
|
+
return new commander_1.Command('listen')
|
|
10
|
+
.description('Listen for blockchain events (placeholder - event support TBD)')
|
|
11
|
+
.option('--fingerprint <fp>', 'Optional fingerprint filter')
|
|
12
|
+
.action((options) => {
|
|
13
|
+
try {
|
|
14
|
+
if (options.fingerprint) {
|
|
15
|
+
cmdLogger.info({ fingerprint: options.fingerprint }, 'Would listen for filtered events');
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
cmdLogger.info('Would listen for all events');
|
|
19
|
+
}
|
|
20
|
+
console.log('Event listening not yet implemented - requires Web3 event subscriptions');
|
|
21
|
+
process.exit(0);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
25
|
+
cmdLogger.error({ error: msg }, 'Failed to listen for events');
|
|
26
|
+
(0, factory_1.exitWithError)(msg);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=listen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listen.js","sourceRoot":"","sources":["../../../src/commands/blockchain/listen.ts"],"names":[],"mappings":";;AAWA,kDAuBC;AAlCD,yCAAoC;AAIpC,wCAA2C;AAO3C,SAAgB,mBAAmB,CAAC,IAAgB;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEtD,OAAO,IAAI,mBAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,gEAAgE,CAAC;SAC7E,MAAM,CAAC,oBAAoB,EAAE,6BAA6B,CAAC;SAC3D,MAAM,CAAC,CAAC,OAAiC,EAAE,EAAE;QAC5C,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,SAAS,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,kCAAkC,CAAC,CAAC;YAC3F,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAChD,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,6BAA6B,CAAC,CAAC;YAC/D,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { Logger } from 'pino';
|
|
3
|
+
import { IWeb3PGPService } from '@degengineering/dexes';
|
|
4
|
+
export interface ProveDeps {
|
|
5
|
+
logger: Logger;
|
|
6
|
+
service: IWeb3PGPService;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Prove ownership of a key on the blockchain
|
|
10
|
+
* Usage: web3pgp prove <fingerprint> <hash> --signature <path> | read from stdin
|
|
11
|
+
*/
|
|
12
|
+
export declare function createProveCommand(deps: ProveDeps): Command;
|
|
13
|
+
//# sourceMappingURL=prove.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prove.d.ts","sourceRoot":"","sources":["../../../src/commands/blockchain/prove.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAmB,MAAM,uBAAuB,CAAC;AAKzE,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CA0F3D"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createProveCommand = createProveCommand;
|
|
37
|
+
const fs_1 = require("fs");
|
|
38
|
+
const process_1 = require("process");
|
|
39
|
+
const commander_1 = require("commander");
|
|
40
|
+
const dexes_1 = require("@degengineering/dexes");
|
|
41
|
+
const viem_1 = require("viem");
|
|
42
|
+
const openpgp = __importStar(require("openpgp"));
|
|
43
|
+
const factory_1 = require("../factory");
|
|
44
|
+
/**
|
|
45
|
+
* Prove ownership of a key on the blockchain
|
|
46
|
+
* Usage: web3pgp prove <fingerprint> <hash> --signature <path> | read from stdin
|
|
47
|
+
*/
|
|
48
|
+
function createProveCommand(deps) {
|
|
49
|
+
const { logger, service } = deps;
|
|
50
|
+
const cmdLogger = logger.child({ command: 'prove' });
|
|
51
|
+
return new commander_1.Command('prove')
|
|
52
|
+
.description('Prove ownership of a key by posting a valid signature of the bytes of the keccak256 hash of the challenge on the blockchain')
|
|
53
|
+
.argument('<fingerprint>', 'Hex string fingerprint of the key')
|
|
54
|
+
.argument('<hash>', 'Keccak256 hash of the challenge as hex string')
|
|
55
|
+
.option('-s, --signature <path>', 'Path to file containing detached signature (reads from stdin if not provided)')
|
|
56
|
+
.action(async (fingerprint, hash, options) => {
|
|
57
|
+
try {
|
|
58
|
+
// Process fingerprint - remove whitespaces and convert to bytes32
|
|
59
|
+
const fp = (0, dexes_1.toBytes32)((0, dexes_1.to0x)(fingerprint.replaceAll(/\s/g, '')));
|
|
60
|
+
cmdLogger.debug({ fingerprint: fp }, 'Fingerprint processed');
|
|
61
|
+
// Process hash - convert hex string to proper format
|
|
62
|
+
const challengeHash = (0, viem_1.toHex)(hash);
|
|
63
|
+
cmdLogger.debug({ hash: challengeHash }, 'Challenge hash processed');
|
|
64
|
+
// Read signature from file or stdin
|
|
65
|
+
const signatureStream = options.signature
|
|
66
|
+
? (0, fs_1.createReadStream)(options.signature)
|
|
67
|
+
: process_1.stdin;
|
|
68
|
+
if (options.signature) {
|
|
69
|
+
cmdLogger.debug({ path: options.signature }, 'Reading signature from file');
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
cmdLogger.debug('Reading signature from stdin');
|
|
73
|
+
}
|
|
74
|
+
const signatureData = await new Promise((resolve, reject) => {
|
|
75
|
+
const chunks = [];
|
|
76
|
+
signatureStream.on('data', (chunk) => chunks.push(Buffer.from(chunk)));
|
|
77
|
+
signatureStream.on('end', () => resolve(Buffer.concat(chunks)));
|
|
78
|
+
signatureStream.on('error', reject);
|
|
79
|
+
});
|
|
80
|
+
cmdLogger.debug({ size: signatureData.length }, 'Signature read successfully');
|
|
81
|
+
// Try to read the signature as armored text first
|
|
82
|
+
let signature;
|
|
83
|
+
try {
|
|
84
|
+
const armoredText = signatureData.toString('ascii');
|
|
85
|
+
signature = await openpgp.readSignature({ armoredSignature: armoredText });
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
// Fallback to binary signature
|
|
89
|
+
signature = await openpgp.readSignature({ binarySignature: signatureData });
|
|
90
|
+
}
|
|
91
|
+
cmdLogger.debug('Signature parsed successfully');
|
|
92
|
+
cmdLogger.info({
|
|
93
|
+
fingerprint: fp,
|
|
94
|
+
hash: challengeHash,
|
|
95
|
+
}, 'Verifying ownership proof and submitting to blockchain');
|
|
96
|
+
// Prove ownership on the blockchain
|
|
97
|
+
const result = await service.proveOwnership(fp, challengeHash, signature);
|
|
98
|
+
cmdLogger.info({
|
|
99
|
+
fingerprint: fp,
|
|
100
|
+
transactionHash: result.transactionHash,
|
|
101
|
+
blockNumber: result.blockNumber.toString(),
|
|
102
|
+
}, 'Key ownership proof submitted successfully');
|
|
103
|
+
// Output result as JSON
|
|
104
|
+
(0, factory_1.outputJson)({
|
|
105
|
+
success: true,
|
|
106
|
+
message: 'Key ownership proof submitted successfully',
|
|
107
|
+
fingerprint: fp,
|
|
108
|
+
hash: challengeHash,
|
|
109
|
+
transaction: {
|
|
110
|
+
hash: result.transactionHash,
|
|
111
|
+
blockNumber: result.blockNumber.toString(),
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
process.exit(0);
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
118
|
+
cmdLogger.error({ error: msg }, 'Failed to submit ownership proof');
|
|
119
|
+
(0, factory_1.exitWithError)(msg);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=prove.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prove.js","sourceRoot":"","sources":["../../../src/commands/blockchain/prove.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { Logger } from 'pino';
|
|
3
|
+
import { IWeb3PGPService } from '@degengineering/dexes';
|
|
4
|
+
export interface RegisterDeps {
|
|
5
|
+
logger: Logger;
|
|
6
|
+
service: IWeb3PGPService;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Register a public key on the blockchain
|
|
10
|
+
* Usage: web3pgp register --key <path> | read from stdin
|
|
11
|
+
*/
|
|
12
|
+
export declare function createRegisterCommand(deps: RegisterDeps): Command;
|
|
13
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/commands/blockchain/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAgEjE"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRegisterCommand = createRegisterCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const factory_1 = require("../factory");
|
|
6
|
+
const input_1 = require("../../utils/input");
|
|
7
|
+
/**
|
|
8
|
+
* Register a public key on the blockchain
|
|
9
|
+
* Usage: web3pgp register --key <path> | read from stdin
|
|
10
|
+
*/
|
|
11
|
+
function createRegisterCommand(deps) {
|
|
12
|
+
const { logger, service } = deps;
|
|
13
|
+
const cmdLogger = logger.child({ command: 'register' });
|
|
14
|
+
return new commander_1.Command('register')
|
|
15
|
+
.description('Register a public key on the blockchain')
|
|
16
|
+
.option('--key <path>', 'Path to PGP public key file (armored or binary)')
|
|
17
|
+
.option('--insecure', 'Disable public key verification and allow registering expired and revoked keys')
|
|
18
|
+
.action(async (options) => {
|
|
19
|
+
try {
|
|
20
|
+
let keyData;
|
|
21
|
+
const insecure = options.insecure || false;
|
|
22
|
+
// Determine source and read input
|
|
23
|
+
if (options.key) {
|
|
24
|
+
cmdLogger.info({ path: options.key }, 'Reading PGP key from file');
|
|
25
|
+
keyData = (0, input_1.readInputFromFile)(options.key);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
cmdLogger.info('Reading PGP key from stdin');
|
|
29
|
+
keyData = await (0, input_1.readInputFromStdin)();
|
|
30
|
+
}
|
|
31
|
+
cmdLogger.debug({ dataLength: keyData.length }, 'Key data received');
|
|
32
|
+
// Parse key - tries armor format first, then binary
|
|
33
|
+
cmdLogger.info('Parsing and validating PGP key');
|
|
34
|
+
const publicKey = (await (0, input_1.readKeyData)(keyData));
|
|
35
|
+
cmdLogger.debug({ fingerprint: publicKey.getFingerprint() }, 'Key parsed successfully');
|
|
36
|
+
if (insecure) {
|
|
37
|
+
cmdLogger.warn('Insecure mode enabled - public key verification disabled');
|
|
38
|
+
}
|
|
39
|
+
const result = await service.register(publicKey, insecure);
|
|
40
|
+
cmdLogger.info({
|
|
41
|
+
fingerprint: publicKey.getFingerprint(),
|
|
42
|
+
transactionHash: result.transactionHash,
|
|
43
|
+
blockNumber: result.blockNumber,
|
|
44
|
+
}, 'Key registration successful');
|
|
45
|
+
// Output result as JSON
|
|
46
|
+
(0, factory_1.outputJson)({
|
|
47
|
+
success: true,
|
|
48
|
+
message: 'Public key and subkeys registered successfully',
|
|
49
|
+
fingerprint: publicKey.getFingerprint(),
|
|
50
|
+
subkeys: publicKey.getSubkeys().map((sk) => sk.getFingerprint()),
|
|
51
|
+
transaction: {
|
|
52
|
+
hash: result.transactionHash,
|
|
53
|
+
blockNumber: result.blockNumber.toString(),
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
process.exit(0);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
60
|
+
cmdLogger.error({ error: msg }, 'Failed to register key');
|
|
61
|
+
(0, factory_1.exitWithError)(msg);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/commands/blockchain/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { Logger } from 'pino';
|
|
3
|
+
import { IWeb3PGPService } from '@degengineering/dexes';
|
|
4
|
+
export interface RevokeCertificationDeps {
|
|
5
|
+
logger: Logger;
|
|
6
|
+
service: IWeb3PGPService;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Revoke a certification on the blockchain
|
|
10
|
+
* Usage: web3pgp revoke-certification <issuerFingerprint> --key <path> | read from stdin
|
|
11
|
+
*/
|
|
12
|
+
export declare function createRevokeCertificationCommand(deps: RevokeCertificationDeps): Command;
|
|
13
|
+
//# sourceMappingURL=revoke-certification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke-certification.d.ts","sourceRoot":"","sources":["../../../src/commands/blockchain/revoke-certification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAmB,MAAM,uBAAuB,CAAC;AAKzE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAgFvF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRevokeCertificationCommand = createRevokeCertificationCommand;
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const dexes_1 = require("@degengineering/dexes");
|
|
6
|
+
const factory_1 = require("../factory");
|
|
7
|
+
const input_1 = require("../../utils/input");
|
|
8
|
+
/**
|
|
9
|
+
* Revoke a certification on the blockchain
|
|
10
|
+
* Usage: web3pgp revoke-certification <issuerFingerprint> --key <path> | read from stdin
|
|
11
|
+
*/
|
|
12
|
+
function createRevokeCertificationCommand(deps) {
|
|
13
|
+
const { logger, service } = deps;
|
|
14
|
+
const cmdLogger = logger.child({ command: 'revoke-certification' });
|
|
15
|
+
return new commander_1.Command('revoke-certification')
|
|
16
|
+
.description('Revoke an issued key certification on the blockchain')
|
|
17
|
+
.argument('<issuerFingerprint>', 'Hex string fingerprint of the issuer')
|
|
18
|
+
.option('--key <path>', 'Path to PGP public key file to revoke certification (armored or binary)')
|
|
19
|
+
.action(async (issuerFingerprint, options) => {
|
|
20
|
+
try {
|
|
21
|
+
// Convert issuer fingerprint to bytes32 format
|
|
22
|
+
const issuerFp = (0, dexes_1.toBytes32)((0, dexes_1.to0x)(issuerFingerprint.replaceAll(/\s/g, '')));
|
|
23
|
+
cmdLogger.info({ issuerFp }, 'Fetching issuer public key');
|
|
24
|
+
let keyData;
|
|
25
|
+
// Determine source and read input
|
|
26
|
+
if (options.key) {
|
|
27
|
+
cmdLogger.info({ path: options.key }, 'Reading PGP key to revoke certification from file');
|
|
28
|
+
keyData = (0, input_1.readInputFromFile)(options.key);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
cmdLogger.info('Reading PGP key to revoke certification from stdin');
|
|
32
|
+
keyData = await (0, input_1.readInputFromStdin)();
|
|
33
|
+
}
|
|
34
|
+
cmdLogger.debug({ dataLength: keyData.length }, 'Key data received');
|
|
35
|
+
// Parse key - tries armor format first, then binary
|
|
36
|
+
cmdLogger.info('Parsing and validating PGP key');
|
|
37
|
+
const certifiedKey = (await (0, input_1.readKeyData)(keyData));
|
|
38
|
+
cmdLogger.debug({ fingerprint: certifiedKey.getFingerprint() }, 'Key parsed successfully');
|
|
39
|
+
// Fetch issuer's public key from blockchain
|
|
40
|
+
const issuerPk = await service.getPublicKey(issuerFp);
|
|
41
|
+
cmdLogger.debug({ issuerFingerprint: issuerPk.getFingerprint() }, 'Issuer public key retrieved');
|
|
42
|
+
// Revoke certification on the blockchain
|
|
43
|
+
const result = await service.revokeCertification(issuerPk, certifiedKey);
|
|
44
|
+
cmdLogger.info({
|
|
45
|
+
issuerFingerprint: issuerPk.getFingerprint(),
|
|
46
|
+
certifiedFingerprint: certifiedKey.getFingerprint(),
|
|
47
|
+
transactionHash: result.transactionHash,
|
|
48
|
+
blockNumber: result.blockNumber,
|
|
49
|
+
}, 'Certification revocation successful');
|
|
50
|
+
// Output result as JSON
|
|
51
|
+
(0, factory_1.outputJson)({
|
|
52
|
+
success: true,
|
|
53
|
+
message: 'Certification revoked successfully',
|
|
54
|
+
issuer: {
|
|
55
|
+
fingerprint: issuerFp,
|
|
56
|
+
},
|
|
57
|
+
certified: {
|
|
58
|
+
fingerprint: certifiedKey.getFingerprint(),
|
|
59
|
+
subkeys: certifiedKey.getSubkeys().map((sk) => sk.getFingerprint()),
|
|
60
|
+
},
|
|
61
|
+
transaction: {
|
|
62
|
+
hash: result.transactionHash,
|
|
63
|
+
blockNumber: result.blockNumber.toString(),
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
70
|
+
cmdLogger.error({ error: msg }, 'Failed to revoke certification');
|
|
71
|
+
(0, factory_1.exitWithError)(msg);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=revoke-certification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke-certification.js","sourceRoot":"","sources":["../../../src/commands/blockchain/revoke-certification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { Logger } from 'pino';
|
|
3
|
+
import { IWeb3PGPService } from '@degengineering/dexes';
|
|
4
|
+
export interface RevokeDeps {
|
|
5
|
+
logger: Logger;
|
|
6
|
+
service: IWeb3PGPService;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Revoke a key on the blockchain
|
|
10
|
+
* Usage: web3pgp revoke <fingerprint> [--key <path>]
|
|
11
|
+
* cat revocation.cert | web3pgp revoke <fingerprint>
|
|
12
|
+
*
|
|
13
|
+
* Both fingerprint and revocation certificate/key data are mandatory.
|
|
14
|
+
* The fingerprint specifies which key (primary or subkey) to revoke.
|
|
15
|
+
* The certificate/key data is the revocation certificate or key to revoke.
|
|
16
|
+
* Key data can be provided via --key flag or stdin (stdin is default).
|
|
17
|
+
*/
|
|
18
|
+
export declare function createRevokeCommand(deps: RevokeDeps): Command;
|
|
19
|
+
//# sourceMappingURL=revoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke.d.ts","sourceRoot":"","sources":["../../../src/commands/blockchain/revoke.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAQ,MAAM,uBAAuB,CAAC;AAK9D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CA2E7D"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createRevokeCommand = createRevokeCommand;
|
|
37
|
+
const commander_1 = require("commander");
|
|
38
|
+
const dexes_1 = require("@degengineering/dexes");
|
|
39
|
+
const factory_1 = require("../factory");
|
|
40
|
+
const input_1 = require("../../utils/input");
|
|
41
|
+
const openpgp = __importStar(require("openpgp"));
|
|
42
|
+
/**
|
|
43
|
+
* Revoke a key on the blockchain
|
|
44
|
+
* Usage: web3pgp revoke <fingerprint> [--key <path>]
|
|
45
|
+
* cat revocation.cert | web3pgp revoke <fingerprint>
|
|
46
|
+
*
|
|
47
|
+
* Both fingerprint and revocation certificate/key data are mandatory.
|
|
48
|
+
* The fingerprint specifies which key (primary or subkey) to revoke.
|
|
49
|
+
* The certificate/key data is the revocation certificate or key to revoke.
|
|
50
|
+
* Key data can be provided via --key flag or stdin (stdin is default).
|
|
51
|
+
*/
|
|
52
|
+
function createRevokeCommand(deps) {
|
|
53
|
+
const { logger, service } = deps;
|
|
54
|
+
const cmdLogger = logger.child({ command: 'revoke' });
|
|
55
|
+
return new commander_1.Command('revoke')
|
|
56
|
+
.arguments('<fingerprint>')
|
|
57
|
+
.description('Revoke a public key on the blockchain')
|
|
58
|
+
.option('--key <path>', 'Path to armored revocation certificate file')
|
|
59
|
+
.action(async (fingerprintArg, options) => {
|
|
60
|
+
try {
|
|
61
|
+
// Fingerprint is mandatory
|
|
62
|
+
const fingerprint = fingerprintArg.replaceAll(/\s/g, '');
|
|
63
|
+
cmdLogger.debug({ fingerprint: fingerprint }, 'Processing fingerprint');
|
|
64
|
+
let keyBuffer;
|
|
65
|
+
if (options.key) {
|
|
66
|
+
cmdLogger.info({ path: options.key }, 'Reading armored revocation certificate from file');
|
|
67
|
+
keyBuffer = (0, input_1.readInputFromFile)(options.key);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
cmdLogger.info('Reading armored revocation certificate from stdin');
|
|
71
|
+
keyBuffer = await (0, input_1.readInputFromStdin)();
|
|
72
|
+
}
|
|
73
|
+
let keyOrCert;
|
|
74
|
+
try {
|
|
75
|
+
// Try to read as key using binary format first
|
|
76
|
+
keyOrCert = await openpgp.readKey({ binaryKey: keyBuffer });
|
|
77
|
+
cmdLogger.debug('Parsed key revocation certificate (binary format) successfully');
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// Try to read as key using armored format
|
|
81
|
+
try {
|
|
82
|
+
// Using ascii for the toString as we expect armored text here
|
|
83
|
+
keyOrCert = await openpgp.readKey({ armoredKey: keyBuffer.toString('ascii') });
|
|
84
|
+
cmdLogger.debug('Parsed revocation certificate (armored format) successfully');
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Cast to string (ascii encoding) because we probably have an armored standalone certificate (sdk service will check)
|
|
88
|
+
keyOrCert = keyBuffer.toString('ascii');
|
|
89
|
+
cmdLogger.debug('Parsing input as armored standalone revocation certificate');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Call revoke with certificate data and the fingerprint
|
|
93
|
+
const result = await service.revoke(keyOrCert, (0, dexes_1.to0x)(fingerprint));
|
|
94
|
+
cmdLogger.info({
|
|
95
|
+
fingerprint: fingerprint,
|
|
96
|
+
transactionHash: result.transactionHash,
|
|
97
|
+
blockNumber: result.blockNumber,
|
|
98
|
+
}, 'Key revocation successful');
|
|
99
|
+
// Output result as JSON
|
|
100
|
+
(0, factory_1.outputJson)({
|
|
101
|
+
success: true,
|
|
102
|
+
message: 'Key revoked successfully',
|
|
103
|
+
fingerprint: fingerprintArg,
|
|
104
|
+
transaction: {
|
|
105
|
+
hash: result.transactionHash,
|
|
106
|
+
blockNumber: result.blockNumber.toString(),
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
process.exit(0);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
113
|
+
cmdLogger.error({ error: msg }, 'Failed to revoke key');
|
|
114
|
+
(0, factory_1.exitWithError)(msg);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=revoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revoke.js","sourceRoot":"","sources":["../../../src/commands/blockchain/revoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { Logger } from 'pino';
|
|
3
|
+
import { IWeb3PGPService } from '@degengineering/dexes';
|
|
4
|
+
export interface SyncDeps {
|
|
5
|
+
logger: Logger;
|
|
6
|
+
service: IWeb3PGPService;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Creates a command for listening to Web3PGP blockchain events and relay valid OpenPGP messages.
|
|
10
|
+
*
|
|
11
|
+
* This command synchronizes key-related events (registrations, subkey additions, revocations)
|
|
12
|
+
* from the blockchain and outputs valid OpenPGP messages in armored format to stdout.
|
|
13
|
+
*
|
|
14
|
+
* The listener supports graceful shutdown via SIGINT (Ctrl+C) and SIGTERM signals.
|
|
15
|
+
*
|
|
16
|
+
* @param deps Command dependencies (logger, service)
|
|
17
|
+
* @returns Configured Commander command
|
|
18
|
+
*/
|
|
19
|
+
export declare function createSyncCommand(deps: SyncDeps): Command;
|
|
20
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/blockchain/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAiE,MAAM,uBAAuB,CAAC;AAIvH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,eAAe,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CA0HzD"}
|