@prosopo/cli 0.2.32 → 0.2.36
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/cjs/argv.cjs +25 -0
- package/dist/cjs/cli.cjs +36 -0
- package/dist/cjs/commands/batchCommit.cjs +42 -0
- package/dist/cjs/commands/calculateCaptchaSolutions.cjs +32 -0
- package/dist/cjs/commands/dappAccounts.cjs +25 -0
- package/dist/cjs/commands/dappDetails.cjs +30 -0
- package/dist/cjs/commands/dappRegister.cjs +63 -0
- package/dist/cjs/commands/dappUpdate.cjs +65 -0
- package/dist/cjs/commands/index.cjs +30 -0
- package/dist/cjs/commands/providerAccounts.cjs +24 -0
- package/dist/cjs/commands/providerDataset.cjs +61 -0
- package/dist/cjs/commands/providerDeregister.cjs +29 -0
- package/dist/cjs/commands/providerDetails.cjs +48 -0
- package/dist/cjs/commands/providerRegister.cjs +74 -0
- package/dist/cjs/commands/providerSetDataset.cjs +51 -0
- package/dist/cjs/commands/providerUpdate.cjs +84 -0
- package/dist/cjs/commands/validators.cjs +80 -0
- package/dist/cjs/commands/version.cjs +14 -0
- package/dist/cjs/env.cjs +29 -0
- package/dist/cjs/files.cjs +38 -0
- package/dist/cjs/index.cjs +23 -0
- package/dist/cjs/process.env.cjs +31 -0
- package/dist/cjs/prosopo.config.cjs +49 -0
- package/dist/cjs/reloader.cjs +43 -0
- package/dist/cjs/start.cjs +57 -0
- package/package.json +10 -10
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
require("./commands/index.cjs");
|
|
5
|
+
const helpers = require("yargs/helpers");
|
|
6
|
+
const yargs = require("yargs");
|
|
7
|
+
const providerRegister = require("./commands/providerRegister.cjs");
|
|
8
|
+
const providerUpdate = require("./commands/providerUpdate.cjs");
|
|
9
|
+
const providerDeregister = require("./commands/providerDeregister.cjs");
|
|
10
|
+
const providerSetDataset = require("./commands/providerSetDataset.cjs");
|
|
11
|
+
const dappRegister = require("./commands/dappRegister.cjs");
|
|
12
|
+
const dappUpdate = require("./commands/dappUpdate.cjs");
|
|
13
|
+
const providerAccounts = require("./commands/providerAccounts.cjs");
|
|
14
|
+
const dappAccounts = require("./commands/dappAccounts.cjs");
|
|
15
|
+
const providerDetails = require("./commands/providerDetails.cjs");
|
|
16
|
+
const providerDataset = require("./commands/providerDataset.cjs");
|
|
17
|
+
const dappDetails = require("./commands/dappDetails.cjs");
|
|
18
|
+
const calculateCaptchaSolutions = require("./commands/calculateCaptchaSolutions.cjs");
|
|
19
|
+
const batchCommit = require("./commands/batchCommit.cjs");
|
|
20
|
+
const version = require("./commands/version.cjs");
|
|
21
|
+
function processArgs(args, pair, config) {
|
|
22
|
+
const logger = common.getLogger(common.LogLevel.enum.info, "CLI");
|
|
23
|
+
return yargs(helpers.hideBin(args)).usage("Usage: $0 [global options] <command> [options]").option("api", { demand: false, default: false, type: "boolean" }).option("adminApi", { demand: false, default: false, type: "boolean" }).command(providerRegister(pair, config, { logger })).command(providerUpdate(pair, config, { logger })).command(providerDeregister(pair, config, { logger })).command(providerSetDataset(pair, config, { logger })).command(dappRegister(pair, config, { logger })).command(dappUpdate(pair, config, { logger })).command(providerAccounts(pair, config, { logger })).command(dappAccounts(pair, config, { logger })).command(providerDetails(pair, config, { logger })).command(providerDataset(pair, config, { logger })).command(dappDetails(pair, config, { logger })).command(calculateCaptchaSolutions(pair, config, { logger })).command(batchCommit(pair, config, { logger })).command(version(pair, config, { logger })).parse();
|
|
24
|
+
}
|
|
25
|
+
exports.processArgs = processArgs;
|
package/dist/cjs/cli.cjs
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const common = require("@prosopo/common");
|
|
3
|
+
const contract = require("@prosopo/contract");
|
|
4
|
+
const process_env = require("./process.env.cjs");
|
|
5
|
+
const util = require("@prosopo/util");
|
|
6
|
+
const env = require("./env.cjs");
|
|
7
|
+
const argv = require("./argv.cjs");
|
|
8
|
+
const reloader = require("./reloader.cjs");
|
|
9
|
+
const prosopo_config = require("./prosopo.config.cjs");
|
|
10
|
+
const process = require("process");
|
|
11
|
+
const log = common.getLogger(common.LogLevel.enum.info, "CLI");
|
|
12
|
+
async function main() {
|
|
13
|
+
const envPath = env.loadEnv();
|
|
14
|
+
const secret = process_env.getSecret();
|
|
15
|
+
const config = prosopo_config(void 0, void 0, void 0, {
|
|
16
|
+
solved: { count: 2 },
|
|
17
|
+
unsolved: { count: 0 }
|
|
18
|
+
});
|
|
19
|
+
const pair = await contract.getPairAsync(config.networks[config.defaultNetwork], secret, "");
|
|
20
|
+
log.info(`Pair address: ${pair.address}`);
|
|
21
|
+
log.info(`Contract address: ${process.env.PROSOPO_CONTRACT_ADDRESS}`);
|
|
22
|
+
const processedArgs = await argv.processArgs(process.argv, pair, config);
|
|
23
|
+
log.info(`Processsed args: ${JSON.stringify(processedArgs, null, 4)}`);
|
|
24
|
+
if (processedArgs.api) {
|
|
25
|
+
await new reloader(envPath, config, pair, processedArgs).start();
|
|
26
|
+
} else {
|
|
27
|
+
process.exit(0);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (util.isMain(module, "provider")) {
|
|
31
|
+
main().then(() => {
|
|
32
|
+
log.info("Running main process...");
|
|
33
|
+
}).catch((error) => {
|
|
34
|
+
log.error(error);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const provider = require("@prosopo/provider");
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const env = require("@prosopo/env");
|
|
5
|
+
const validators = require("./validators.cjs");
|
|
6
|
+
const commandBatchCommit = (pair, config, cmdArgs) => {
|
|
7
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.batch_commit");
|
|
8
|
+
return {
|
|
9
|
+
command: "batch_commit",
|
|
10
|
+
describe: "Batch commit user solutions to contract",
|
|
11
|
+
builder: (yargs) => {
|
|
12
|
+
return yargs.option("schedule", {
|
|
13
|
+
type: "string",
|
|
14
|
+
demand: false,
|
|
15
|
+
desc: "A Recurring schedule expression"
|
|
16
|
+
});
|
|
17
|
+
},
|
|
18
|
+
handler: async (argv) => {
|
|
19
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
20
|
+
await env$1.isReady();
|
|
21
|
+
if (argv.schedule) {
|
|
22
|
+
throw new common.ProsopoEnvError("GENERAL.NOT_IMPLEMENTED");
|
|
23
|
+
} else {
|
|
24
|
+
if (env$1.db) {
|
|
25
|
+
const batchCommitter = new provider.BatchCommitmentsTask(
|
|
26
|
+
env$1.config.batchCommit,
|
|
27
|
+
env$1.getContractInterface(),
|
|
28
|
+
env$1.db,
|
|
29
|
+
0n,
|
|
30
|
+
env$1.logger
|
|
31
|
+
);
|
|
32
|
+
const result = await batchCommitter.run();
|
|
33
|
+
logger.info(`Batch commit complete: ${result}`);
|
|
34
|
+
} else {
|
|
35
|
+
logger.error("No database configured");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
middlewares: [validators.validateScheduleExpression]
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
module.exports = commandBatchCommit;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const provider = require("@prosopo/provider");
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const env = require("@prosopo/env");
|
|
5
|
+
const validators = require("./validators.cjs");
|
|
6
|
+
const commandCalculateCaptchaSolutions = (pair, config, cmdArgs) => {
|
|
7
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.calculate_captcha_solutions");
|
|
8
|
+
return {
|
|
9
|
+
command: "calculate_captcha_solutions",
|
|
10
|
+
describe: "Calculate captcha solutions",
|
|
11
|
+
builder: (yargs) => {
|
|
12
|
+
return yargs.option("schedule", {
|
|
13
|
+
type: "string",
|
|
14
|
+
demand: false,
|
|
15
|
+
desc: "A Recurring schedule expression"
|
|
16
|
+
});
|
|
17
|
+
},
|
|
18
|
+
handler: async (argv) => {
|
|
19
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
20
|
+
await env$1.isReady();
|
|
21
|
+
if (argv.schedule) {
|
|
22
|
+
throw new common.ProsopoEnvError("GENERAL.NOT_IMPLEMENTED");
|
|
23
|
+
} else {
|
|
24
|
+
const calculateSolutionsTask = new provider.CalculateSolutionsTask(env$1);
|
|
25
|
+
const result = await calculateSolutionsTask.run();
|
|
26
|
+
logger.info(`Updated ${result} captcha solutions`);
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
middlewares: [validators.validateScheduleExpression]
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
module.exports = commandCalculateCaptchaSolutions;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const common = require("@prosopo/common");
|
|
3
|
+
const env = require("@prosopo/env");
|
|
4
|
+
const provider = require("@prosopo/provider");
|
|
5
|
+
const commandDappAccounts = (pair, config, cmdArgs) => {
|
|
6
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.dapp_accounts");
|
|
7
|
+
return {
|
|
8
|
+
command: "dapp_accounts",
|
|
9
|
+
describe: "List all dapp accounts",
|
|
10
|
+
builder: (yargs) => yargs,
|
|
11
|
+
handler: async (argv) => {
|
|
12
|
+
try {
|
|
13
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
14
|
+
await env$1.isReady();
|
|
15
|
+
const tasks = new provider.Tasks(env$1);
|
|
16
|
+
const result = await tasks.contract.contract["dappAccounts"]();
|
|
17
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
18
|
+
} catch (err) {
|
|
19
|
+
logger.error(err);
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
middlewares: []
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
module.exports = commandDappAccounts;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const common = require("@prosopo/common");
|
|
3
|
+
const env = require("@prosopo/env");
|
|
4
|
+
const provider = require("@prosopo/provider");
|
|
5
|
+
const validators = require("./validators.cjs");
|
|
6
|
+
const commandDappDetails = (pair, config, cmdArgs) => {
|
|
7
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.dapp_details");
|
|
8
|
+
return {
|
|
9
|
+
command: "dapp_details",
|
|
10
|
+
describe: "List details of a single Dapp",
|
|
11
|
+
builder: (yargs) => yargs.option("address", {
|
|
12
|
+
type: "string",
|
|
13
|
+
demand: true,
|
|
14
|
+
desc: "The AccountId of the Dapp"
|
|
15
|
+
}),
|
|
16
|
+
handler: async (argv) => {
|
|
17
|
+
try {
|
|
18
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
19
|
+
await env$1.isReady();
|
|
20
|
+
const tasks = new provider.Tasks(env$1);
|
|
21
|
+
const result = (await tasks.contract.query.getDapp(validators.validateAddress(argv).address)).value.unwrap().unwrap();
|
|
22
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
23
|
+
} catch (err) {
|
|
24
|
+
logger.error(err);
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
middlewares: [validators.validateAddress]
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
module.exports = commandDappDetails;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const z = require("zod");
|
|
3
|
+
const typesReturns = require("@prosopo/captcha-contract/types-returns");
|
|
4
|
+
const common = require("@prosopo/common");
|
|
5
|
+
const env = require("@prosopo/env");
|
|
6
|
+
const provider = require("@prosopo/provider");
|
|
7
|
+
const util = require("@prosopo/util");
|
|
8
|
+
const validators = require("./validators.cjs");
|
|
9
|
+
const contract = require("@prosopo/contract");
|
|
10
|
+
function _interopNamespaceDefault(e) {
|
|
11
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
12
|
+
if (e) {
|
|
13
|
+
for (const k in e) {
|
|
14
|
+
if (k !== "default") {
|
|
15
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: () => e[k]
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
const z__namespace = /* @__PURE__ */ _interopNamespaceDefault(z);
|
|
27
|
+
const commandDappRegister = (pair, config, cmdArgs) => {
|
|
28
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.dapp_register");
|
|
29
|
+
return {
|
|
30
|
+
command: "dapp_register",
|
|
31
|
+
describe: "Register a Dapp",
|
|
32
|
+
builder: (yargs) => yargs.option("contract", {
|
|
33
|
+
type: "string",
|
|
34
|
+
demand: true,
|
|
35
|
+
desc: "The AccountId of the Dapp"
|
|
36
|
+
}).option("payee", {
|
|
37
|
+
type: "string",
|
|
38
|
+
demand: true,
|
|
39
|
+
desc: "The person who receives the fee (`Provider` or `Dapp`)"
|
|
40
|
+
}),
|
|
41
|
+
handler: async (argv) => {
|
|
42
|
+
try {
|
|
43
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
44
|
+
await env$1.isReady();
|
|
45
|
+
const tasks = new provider.Tasks(env$1);
|
|
46
|
+
const dappRegisterArgs = [
|
|
47
|
+
z__namespace.string().parse(argv.contract),
|
|
48
|
+
util.get(typesReturns.DappPayee, z__namespace.string().parse(argv.payee)),
|
|
49
|
+
{
|
|
50
|
+
value: 0
|
|
51
|
+
}
|
|
52
|
+
];
|
|
53
|
+
await contract.wrapQuery(tasks.contract.query.dappRegister, tasks.contract.query)(...dappRegisterArgs);
|
|
54
|
+
const result = await tasks.contract.tx.dappRegister(...dappRegisterArgs);
|
|
55
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
56
|
+
} catch (err) {
|
|
57
|
+
logger.error(err);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
middlewares: [validators.validateContract, validators.validatePayee]
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
module.exports = commandDappRegister;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const z = require("zod");
|
|
3
|
+
const typesReturns = require("@prosopo/captcha-contract/types-returns");
|
|
4
|
+
const common = require("@prosopo/common");
|
|
5
|
+
const env = require("@prosopo/env");
|
|
6
|
+
const provider = require("@prosopo/provider");
|
|
7
|
+
const util = require("@prosopo/util");
|
|
8
|
+
const validators = require("./validators.cjs");
|
|
9
|
+
const contract = require("@prosopo/contract");
|
|
10
|
+
function _interopNamespaceDefault(e) {
|
|
11
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
12
|
+
if (e) {
|
|
13
|
+
for (const k in e) {
|
|
14
|
+
if (k !== "default") {
|
|
15
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: () => e[k]
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
const z__namespace = /* @__PURE__ */ _interopNamespaceDefault(z);
|
|
27
|
+
const commandDappUpdate = (pair, config, cmdArgs) => {
|
|
28
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.dapp_update");
|
|
29
|
+
return {
|
|
30
|
+
command: "dapp_update",
|
|
31
|
+
describe: "Register a Dapp",
|
|
32
|
+
builder: (yargs) => yargs.option("contract", {
|
|
33
|
+
type: "string",
|
|
34
|
+
demand: true,
|
|
35
|
+
desc: "The AccountId of the Dapp"
|
|
36
|
+
}).option("payee", {
|
|
37
|
+
type: "string",
|
|
38
|
+
demand: true,
|
|
39
|
+
desc: "The person who receives the fee (`Provider` or `Dapp`)"
|
|
40
|
+
}),
|
|
41
|
+
handler: async (argv) => {
|
|
42
|
+
try {
|
|
43
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
44
|
+
await env$1.isReady();
|
|
45
|
+
const tasks = new provider.Tasks(env$1);
|
|
46
|
+
const stakeThreshold = (await tasks.contract.query.getDappStakeThreshold({})).value.unwrap();
|
|
47
|
+
const dappRegisterArgs = [
|
|
48
|
+
z__namespace.string().parse(argv.contract),
|
|
49
|
+
util.get(typesReturns.DappPayee, z__namespace.string().parse(argv.payee)),
|
|
50
|
+
z__namespace.string().parse(argv.owner),
|
|
51
|
+
{
|
|
52
|
+
value: stakeThreshold.toNumber()
|
|
53
|
+
}
|
|
54
|
+
];
|
|
55
|
+
await contract.wrapQuery(tasks.contract.query.dappUpdate, tasks.contract.query)(...dappRegisterArgs);
|
|
56
|
+
const result = await tasks.contract.tx.dappUpdate(...dappRegisterArgs);
|
|
57
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
58
|
+
} catch (err) {
|
|
59
|
+
logger.error(err);
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
middlewares: [validators.validateContract, validators.validatePayee]
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
module.exports = commandDappUpdate;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const batchCommit = require("./batchCommit.cjs");
|
|
4
|
+
const calculateCaptchaSolutions = require("./calculateCaptchaSolutions.cjs");
|
|
5
|
+
const dappAccounts = require("./dappAccounts.cjs");
|
|
6
|
+
const dappDetails = require("./dappDetails.cjs");
|
|
7
|
+
const dappUpdate = require("./dappUpdate.cjs");
|
|
8
|
+
const dappRegister = require("./dappRegister.cjs");
|
|
9
|
+
const providerAccounts = require("./providerAccounts.cjs");
|
|
10
|
+
const providerDataset = require("./providerDataset.cjs");
|
|
11
|
+
const providerDetails = require("./providerDetails.cjs");
|
|
12
|
+
const providerDeregister = require("./providerDeregister.cjs");
|
|
13
|
+
const providerRegister = require("./providerRegister.cjs");
|
|
14
|
+
const providerSetDataset = require("./providerSetDataset.cjs");
|
|
15
|
+
const providerUpdate = require("./providerUpdate.cjs");
|
|
16
|
+
const version = require("./version.cjs");
|
|
17
|
+
exports.commandBatchCommit = batchCommit;
|
|
18
|
+
exports.commandCalculateCaptchaSolutions = calculateCaptchaSolutions;
|
|
19
|
+
exports.commandDappAccounts = dappAccounts;
|
|
20
|
+
exports.commandDappDetails = dappDetails;
|
|
21
|
+
exports.commandDappUpdate = dappUpdate;
|
|
22
|
+
exports.commandDappRegister = dappRegister;
|
|
23
|
+
exports.commandProviderAccounts = providerAccounts;
|
|
24
|
+
exports.commandProviderDataset = providerDataset;
|
|
25
|
+
exports.commandProviderDetails = providerDetails;
|
|
26
|
+
exports.commandProviderDeregister = providerDeregister;
|
|
27
|
+
exports.commandProviderRegister = providerRegister;
|
|
28
|
+
exports.commandProviderSetDataset = providerSetDataset;
|
|
29
|
+
exports.commandProviderUpdate = providerUpdate;
|
|
30
|
+
exports.commandVersion = version;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const common = require("@prosopo/common");
|
|
3
|
+
const env = require("@prosopo/env");
|
|
4
|
+
const provider = require("@prosopo/provider");
|
|
5
|
+
const commandProviderAccounts = (pair, config, cmdArgs) => {
|
|
6
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.provider_accounts");
|
|
7
|
+
return {
|
|
8
|
+
command: "provider_accounts",
|
|
9
|
+
describe: "List all provider accounts",
|
|
10
|
+
builder: (yargs) => yargs,
|
|
11
|
+
handler: async (argv) => {
|
|
12
|
+
try {
|
|
13
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
14
|
+
await env$1.isReady();
|
|
15
|
+
const tasks = new provider.Tasks(env$1);
|
|
16
|
+
const result = await tasks.contract.contract["providerAccounts"]();
|
|
17
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
18
|
+
} catch (err) {
|
|
19
|
+
logger.error(err);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
module.exports = commandProviderAccounts;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const z = require("zod");
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const env = require("@prosopo/env");
|
|
5
|
+
const provider = require("@prosopo/provider");
|
|
6
|
+
const files = require("../files.cjs");
|
|
7
|
+
function _interopNamespaceDefault(e) {
|
|
8
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
9
|
+
if (e) {
|
|
10
|
+
for (const k in e) {
|
|
11
|
+
if (k !== "default") {
|
|
12
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: () => e[k]
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
n.default = e;
|
|
21
|
+
return Object.freeze(n);
|
|
22
|
+
}
|
|
23
|
+
const z__namespace = /* @__PURE__ */ _interopNamespaceDefault(z);
|
|
24
|
+
const commandProviderDataset = (pair, config, cmdArgs) => {
|
|
25
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.provider_dataset");
|
|
26
|
+
return {
|
|
27
|
+
command: "provider_dataset",
|
|
28
|
+
describe: "Exports a dataset from the provider database",
|
|
29
|
+
builder: (yargs) => yargs.option("dataset-id", {
|
|
30
|
+
type: "string",
|
|
31
|
+
demand: false,
|
|
32
|
+
desc: "The dataset ID to export"
|
|
33
|
+
}).option("file", {
|
|
34
|
+
type: "string",
|
|
35
|
+
demand: true,
|
|
36
|
+
desc: "The file path to export the dataset to"
|
|
37
|
+
}),
|
|
38
|
+
handler: async (argv) => {
|
|
39
|
+
try {
|
|
40
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
41
|
+
await env$1.isReady();
|
|
42
|
+
const tasks = new provider.Tasks(env$1);
|
|
43
|
+
let datasetId = z__namespace.string().optional().parse(argv.datasetId);
|
|
44
|
+
if (!env$1.config.account.address) {
|
|
45
|
+
throw new common.ProsopoEnvError("GENERAL.ACCOUNT_NOT_FOUND");
|
|
46
|
+
}
|
|
47
|
+
if (datasetId === void 0) {
|
|
48
|
+
const providerAddress = env$1.config.account.address;
|
|
49
|
+
const provider2 = (await tasks.contract.query.getProvider(providerAddress)).value.unwrap().unwrap();
|
|
50
|
+
logger.info(`Getting dataset ID from provider ${providerAddress}`);
|
|
51
|
+
datasetId = provider2.datasetId.toString();
|
|
52
|
+
}
|
|
53
|
+
const result = await tasks.getProviderDataset(datasetId);
|
|
54
|
+
await files.writeJSONFile(z__namespace.string().parse(argv.file), result);
|
|
55
|
+
} catch (err) {
|
|
56
|
+
logger.error(err);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
module.exports = commandProviderDataset;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const common = require("@prosopo/common");
|
|
3
|
+
const env = require("@prosopo/env");
|
|
4
|
+
const provider = require("@prosopo/provider");
|
|
5
|
+
const validators = require("./validators.cjs");
|
|
6
|
+
const commandProviderDeregister = (pair, config, cmdArgs) => {
|
|
7
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.provider_deregister");
|
|
8
|
+
return {
|
|
9
|
+
command: "provider_deregister",
|
|
10
|
+
describe: "Deregister a Provider",
|
|
11
|
+
builder: (yargs) => yargs.option("address", {
|
|
12
|
+
type: "string",
|
|
13
|
+
demand: true,
|
|
14
|
+
desc: "The AccountId of the Provider"
|
|
15
|
+
}),
|
|
16
|
+
handler: async (argv) => {
|
|
17
|
+
try {
|
|
18
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
19
|
+
await env$1.isReady();
|
|
20
|
+
const tasks = new provider.Tasks(env$1);
|
|
21
|
+
throw new common.ProsopoEnvError("GENERAL.NOT_IMPLEMENTED");
|
|
22
|
+
} catch (err) {
|
|
23
|
+
logger.error(err);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
middlewares: [validators.validateAddress]
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
module.exports = commandProviderDeregister;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const z = require("zod");
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const env = require("@prosopo/env");
|
|
5
|
+
const provider = require("@prosopo/provider");
|
|
6
|
+
const validators = require("./validators.cjs");
|
|
7
|
+
function _interopNamespaceDefault(e) {
|
|
8
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
9
|
+
if (e) {
|
|
10
|
+
for (const k in e) {
|
|
11
|
+
if (k !== "default") {
|
|
12
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: () => e[k]
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
n.default = e;
|
|
21
|
+
return Object.freeze(n);
|
|
22
|
+
}
|
|
23
|
+
const z__namespace = /* @__PURE__ */ _interopNamespaceDefault(z);
|
|
24
|
+
const commandProviderDetails = (pair, config, cmdArgs) => {
|
|
25
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.provider_details");
|
|
26
|
+
return {
|
|
27
|
+
command: "provider_details",
|
|
28
|
+
describe: "List details of a single Provider",
|
|
29
|
+
builder: (yargs) => yargs.option("address", {
|
|
30
|
+
type: "string",
|
|
31
|
+
demand: true,
|
|
32
|
+
desc: "The AccountId of the Provider"
|
|
33
|
+
}),
|
|
34
|
+
handler: async (argv) => {
|
|
35
|
+
try {
|
|
36
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
37
|
+
await env$1.isReady();
|
|
38
|
+
const tasks = new provider.Tasks(env$1);
|
|
39
|
+
const result = (await tasks.contract.query.getProvider(z__namespace.string().parse(argv.address), {})).value.unwrap().unwrap();
|
|
40
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
41
|
+
} catch (err) {
|
|
42
|
+
logger.error(err);
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
middlewares: [validators.validateAddress]
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
module.exports = commandProviderDetails;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const z = require("zod");
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const typesReturns = require("@prosopo/captcha-contract/types-returns");
|
|
5
|
+
const env = require("@prosopo/env");
|
|
6
|
+
const provider = require("@prosopo/provider");
|
|
7
|
+
const string = require("@polkadot/util/string");
|
|
8
|
+
const validators = require("./validators.cjs");
|
|
9
|
+
const contract = require("@prosopo/contract");
|
|
10
|
+
function _interopNamespaceDefault(e) {
|
|
11
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
12
|
+
if (e) {
|
|
13
|
+
for (const k in e) {
|
|
14
|
+
if (k !== "default") {
|
|
15
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: () => e[k]
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
const z__namespace = /* @__PURE__ */ _interopNamespaceDefault(z);
|
|
27
|
+
const providerRegisterArgsParser = z__namespace.object({
|
|
28
|
+
url: z__namespace.string(),
|
|
29
|
+
fee: z__namespace.number(),
|
|
30
|
+
payee: z__namespace.nativeEnum(typesReturns.Payee)
|
|
31
|
+
});
|
|
32
|
+
const commandProviderRegister = (pair, config, cmdArgs) => {
|
|
33
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.provider_register");
|
|
34
|
+
return {
|
|
35
|
+
command: "provider_register",
|
|
36
|
+
describe: "Register a Provider",
|
|
37
|
+
builder: (yargs) => yargs.option("url", {
|
|
38
|
+
type: "string",
|
|
39
|
+
demand: true,
|
|
40
|
+
desc: "The provider service origin (URI)"
|
|
41
|
+
}).option("fee", {
|
|
42
|
+
type: "number",
|
|
43
|
+
demand: true,
|
|
44
|
+
desc: "The fee to pay per solved captcha"
|
|
45
|
+
}).option("payee", {
|
|
46
|
+
type: "string",
|
|
47
|
+
demand: true,
|
|
48
|
+
desc: "The person who receives the fee (`Provider` or `Dapp`)"
|
|
49
|
+
}),
|
|
50
|
+
handler: async (argv) => {
|
|
51
|
+
try {
|
|
52
|
+
const parsedArgs = providerRegisterArgsParser.parse(argv);
|
|
53
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
54
|
+
await env$1.isReady();
|
|
55
|
+
const tasks = new provider.Tasks(env$1);
|
|
56
|
+
const providerRegisterArgs = [
|
|
57
|
+
Array.from(string.stringToU8a(parsedArgs.url)),
|
|
58
|
+
parsedArgs.fee,
|
|
59
|
+
parsedArgs.payee,
|
|
60
|
+
{
|
|
61
|
+
value: 0
|
|
62
|
+
}
|
|
63
|
+
];
|
|
64
|
+
await contract.wrapQuery(tasks.contract.query.providerRegister, tasks.contract.query)(...providerRegisterArgs);
|
|
65
|
+
const result = await tasks.contract.tx.providerRegister(...providerRegisterArgs);
|
|
66
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
67
|
+
} catch (err) {
|
|
68
|
+
logger.error(err);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
middlewares: [validators.validatePayee, validators.validateFee]
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
module.exports = commandProviderRegister;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const z = require("zod");
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const env = require("@prosopo/env");
|
|
5
|
+
const provider = require("@prosopo/provider");
|
|
6
|
+
const files = require("../files.cjs");
|
|
7
|
+
function _interopNamespaceDefault(e) {
|
|
8
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
9
|
+
if (e) {
|
|
10
|
+
for (const k in e) {
|
|
11
|
+
if (k !== "default") {
|
|
12
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
13
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: () => e[k]
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
n.default = e;
|
|
21
|
+
return Object.freeze(n);
|
|
22
|
+
}
|
|
23
|
+
const z__namespace = /* @__PURE__ */ _interopNamespaceDefault(z);
|
|
24
|
+
const commandProviderSetDataset = (pair, config, cmdArgs) => {
|
|
25
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.provider_set_data_set");
|
|
26
|
+
return {
|
|
27
|
+
command: "provider_set_data_set",
|
|
28
|
+
describe: "Add a dataset as a Provider",
|
|
29
|
+
builder: (yargs) => yargs.option("file", {
|
|
30
|
+
type: "string",
|
|
31
|
+
demand: true,
|
|
32
|
+
desc: "The file path of a JSON dataset file"
|
|
33
|
+
}),
|
|
34
|
+
handler: async (argv) => {
|
|
35
|
+
try {
|
|
36
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
37
|
+
await env$1.isReady();
|
|
38
|
+
const tasks = new provider.Tasks(env$1);
|
|
39
|
+
const file = z__namespace.string().parse(argv.file);
|
|
40
|
+
const jsonFile = files.loadJSONFile(file);
|
|
41
|
+
logger.info(`Loaded JSON from ${file}`);
|
|
42
|
+
const result = await tasks.providerSetDatasetFromFile(jsonFile);
|
|
43
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
44
|
+
} catch (err) {
|
|
45
|
+
logger.error(err);
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
middlewares: []
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
module.exports = commandProviderSetDataset;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const z = require("zod");
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const typesReturns = require("@prosopo/captcha-contract/types-returns");
|
|
5
|
+
const env = require("@prosopo/env");
|
|
6
|
+
const provider = require("@prosopo/provider");
|
|
7
|
+
const validators = require("./validators.cjs");
|
|
8
|
+
const contract = require("@prosopo/contract");
|
|
9
|
+
function _interopNamespaceDefault(e) {
|
|
10
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
11
|
+
if (e) {
|
|
12
|
+
for (const k in e) {
|
|
13
|
+
if (k !== "default") {
|
|
14
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
15
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: () => e[k]
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
n.default = e;
|
|
23
|
+
return Object.freeze(n);
|
|
24
|
+
}
|
|
25
|
+
const z__namespace = /* @__PURE__ */ _interopNamespaceDefault(z);
|
|
26
|
+
const commandProviderUpdate = (pair, config, cmdArgs) => {
|
|
27
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.provider_update");
|
|
28
|
+
return {
|
|
29
|
+
command: "provider_update",
|
|
30
|
+
describe: "Update a Provider",
|
|
31
|
+
builder: (yargs) => yargs.option("url", {
|
|
32
|
+
type: "string",
|
|
33
|
+
demand: false,
|
|
34
|
+
desc: "The provider service origin (URI)"
|
|
35
|
+
}).option("fee", {
|
|
36
|
+
type: "number",
|
|
37
|
+
demand: false,
|
|
38
|
+
desc: "The fee to pay per solved captcha"
|
|
39
|
+
}).option("payee", {
|
|
40
|
+
type: "string",
|
|
41
|
+
demand: false,
|
|
42
|
+
desc: "The person who receives the fee (`Provider` or `Dapp`)"
|
|
43
|
+
}).option("value", {
|
|
44
|
+
type: "number",
|
|
45
|
+
demand: false,
|
|
46
|
+
desc: "The value to stake in the contract"
|
|
47
|
+
}),
|
|
48
|
+
handler: async (argv) => {
|
|
49
|
+
try {
|
|
50
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
51
|
+
await env$1.isReady();
|
|
52
|
+
const tasks = new provider.Tasks(env$1);
|
|
53
|
+
const { url, fee, payee, value, address } = z__namespace.object({
|
|
54
|
+
url: z__namespace.string().optional(),
|
|
55
|
+
fee: z__namespace.number().optional(),
|
|
56
|
+
payee: z__namespace.nativeEnum(typesReturns.Payee).optional(),
|
|
57
|
+
value: z__namespace.number().optional(),
|
|
58
|
+
address: z__namespace.string()
|
|
59
|
+
}).parse(argv);
|
|
60
|
+
const provider$1 = (await tasks.contract.query.getProvider(address, {})).value.unwrap().unwrap();
|
|
61
|
+
if (provider$1 && (url || fee || payee || value)) {
|
|
62
|
+
const urlConverted = url ? Array.from(new common.UrlConverter().encode(url.toString())) : provider$1.url;
|
|
63
|
+
await contract.wrapQuery(tasks.contract.query.providerUpdate, tasks.contract.query)(
|
|
64
|
+
urlConverted,
|
|
65
|
+
fee || provider$1.fee,
|
|
66
|
+
payee || provider$1.payee,
|
|
67
|
+
{ value: value || 0 }
|
|
68
|
+
);
|
|
69
|
+
const result = await tasks.contract.tx.providerUpdate(
|
|
70
|
+
urlConverted,
|
|
71
|
+
fee || provider$1.fee,
|
|
72
|
+
payee || provider$1.payee,
|
|
73
|
+
{ value: value || 0 }
|
|
74
|
+
);
|
|
75
|
+
logger.info(JSON.stringify(result, null, 2));
|
|
76
|
+
}
|
|
77
|
+
} catch (err) {
|
|
78
|
+
logger.error(err);
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
middlewares: [validators.validateAddress, validators.validatePayee]
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
module.exports = commandProviderUpdate;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const z = require("zod");
|
|
4
|
+
const types = require("@prosopo/types");
|
|
5
|
+
const common = require("@prosopo/common");
|
|
6
|
+
const provider = require("@prosopo/provider");
|
|
7
|
+
const lodash = require("@prosopo/util/lodash");
|
|
8
|
+
const parser = require("cron-parser");
|
|
9
|
+
function _interopNamespaceDefault(e) {
|
|
10
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
11
|
+
if (e) {
|
|
12
|
+
for (const k in e) {
|
|
13
|
+
if (k !== "default") {
|
|
14
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
15
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: () => e[k]
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
n.default = e;
|
|
23
|
+
return Object.freeze(n);
|
|
24
|
+
}
|
|
25
|
+
const z__namespace = /* @__PURE__ */ _interopNamespaceDefault(z);
|
|
26
|
+
const validateAddress = (argv) => {
|
|
27
|
+
const address = provider.encodeStringAddress(argv.address);
|
|
28
|
+
return { address };
|
|
29
|
+
};
|
|
30
|
+
const validateContract = (argv) => {
|
|
31
|
+
const address = provider.encodeStringAddress(argv.contract);
|
|
32
|
+
return { address };
|
|
33
|
+
};
|
|
34
|
+
const validatePayee = (argv) => {
|
|
35
|
+
try {
|
|
36
|
+
if (!argv.payee)
|
|
37
|
+
return;
|
|
38
|
+
const _ = lodash.lodash();
|
|
39
|
+
const payeeArg = _.capitalize(z__namespace.string().parse(argv.payee));
|
|
40
|
+
const payee = types.PayeeSchema.parse(payeeArg);
|
|
41
|
+
return { payee };
|
|
42
|
+
} catch (error) {
|
|
43
|
+
throw new common.ProsopoEnvError("CLI.PARAMETER_ERROR", { context: { payee: [argv.payee], error } });
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const validateValue = (argv) => {
|
|
47
|
+
if (typeof argv.value !== "number") {
|
|
48
|
+
throw new common.ProsopoEnvError("CLI.PARAMETER_ERROR", { context: { value: [argv.value] } });
|
|
49
|
+
}
|
|
50
|
+
const value = argv.value;
|
|
51
|
+
return { value };
|
|
52
|
+
};
|
|
53
|
+
const validateFee = (argv) => {
|
|
54
|
+
if (typeof argv.fee !== "number") {
|
|
55
|
+
throw new common.ProsopoEnvError("CLI.PARAMETER_ERROR", {
|
|
56
|
+
context: { name: validateValue.name, fee: argv.fee }
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const fee = argv.fee;
|
|
60
|
+
return { fee };
|
|
61
|
+
};
|
|
62
|
+
const validateScheduleExpression = (argv) => {
|
|
63
|
+
if (typeof argv.schedule === "string") {
|
|
64
|
+
const result = parser.parseString(argv.schedule);
|
|
65
|
+
if (argv.schedule in result.errors) {
|
|
66
|
+
throw new common.ProsopoEnvError("CLI.PARAMETER_ERROR", {
|
|
67
|
+
context: { payee: [argv.shedule], failedFuncName: validateScheduleExpression.name }
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return { schedule: argv.schedule };
|
|
71
|
+
} else {
|
|
72
|
+
return { schedule: null };
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
exports.validateAddress = validateAddress;
|
|
76
|
+
exports.validateContract = validateContract;
|
|
77
|
+
exports.validateFee = validateFee;
|
|
78
|
+
exports.validatePayee = validatePayee;
|
|
79
|
+
exports.validateScheduleExpression = validateScheduleExpression;
|
|
80
|
+
exports.validateValue = validateValue;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const common = require("@prosopo/common");
|
|
3
|
+
const commandVersion = (pair, config, cmdArgs) => {
|
|
4
|
+
const logger = (cmdArgs == null ? void 0 : cmdArgs.logger) || common.getLogger(common.LogLevel.enum.info, "cli.version");
|
|
5
|
+
return {
|
|
6
|
+
command: "version",
|
|
7
|
+
describe: "Return the version of the software",
|
|
8
|
+
handler: async () => {
|
|
9
|
+
const version = JSON.stringify(process.env.PROSOPO_PACKAGE_VERSION) || "dev";
|
|
10
|
+
logger.info(`Version: ${version}`);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
module.exports = commandVersion;
|
package/dist/cjs/env.cjs
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const url = require("url");
|
|
5
|
+
const dotenv = require("dotenv");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const __filename$1 = url.fileURLToPath(module);
|
|
8
|
+
const __dirname$1 = path.dirname(__filename$1);
|
|
9
|
+
const logger = common.getLogger(process.env.PROSOPO_LOG_LEVEL || common.LogLevel.enum.info, "env");
|
|
10
|
+
function getEnv() {
|
|
11
|
+
if (process.env.NODE_ENV) {
|
|
12
|
+
return process.env.NODE_ENV.replace(/\W/g, "");
|
|
13
|
+
}
|
|
14
|
+
return "development";
|
|
15
|
+
}
|
|
16
|
+
function loadEnv(rootDir, filename, filePath) {
|
|
17
|
+
const envPath = getEnvFile(path.resolve(rootDir || "."), filename, filePath);
|
|
18
|
+
const args = { path: envPath };
|
|
19
|
+
logger.info(`Loading env from ${envPath}`);
|
|
20
|
+
dotenv.config(args);
|
|
21
|
+
return envPath;
|
|
22
|
+
}
|
|
23
|
+
function getEnvFile(rootDir, filename = ".env", filepath = path.join(__dirname$1, "../..")) {
|
|
24
|
+
const env = getEnv();
|
|
25
|
+
return path.join(rootDir || filepath, `${filename}.${env}`);
|
|
26
|
+
}
|
|
27
|
+
exports.getEnv = getEnv;
|
|
28
|
+
exports.getEnvFile = getEnvFile;
|
|
29
|
+
exports.loadEnv = loadEnv;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const stream = require("stream");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
function loadJSONFile(filePath) {
|
|
7
|
+
try {
|
|
8
|
+
return JSON.parse(fs.readFileSync(filePath, "utf8"));
|
|
9
|
+
} catch (error) {
|
|
10
|
+
throw new common.ProsopoCliError("GENERAL.JSON_LOAD_FAILED", { context: { error, filePath } });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function writeJSONFile(filePath, jsonData) {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
const writeStream = fs.createWriteStream(filePath);
|
|
16
|
+
writeStream.setDefaultEncoding("utf-8");
|
|
17
|
+
writeStream.on("finish", () => {
|
|
18
|
+
resolve(true);
|
|
19
|
+
});
|
|
20
|
+
writeStream.on("error", (err) => {
|
|
21
|
+
reject(err);
|
|
22
|
+
});
|
|
23
|
+
const readable = stream.Readable.from(JSON.stringify(jsonData));
|
|
24
|
+
readable.pipe(writeStream);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
async function readFile(filePath) {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
fs.readFile(filePath, (err, data) => {
|
|
30
|
+
if (err)
|
|
31
|
+
reject(err);
|
|
32
|
+
resolve(data);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
exports.loadJSONFile = loadJSONFile;
|
|
37
|
+
exports.readFile = readFile;
|
|
38
|
+
exports.writeJSONFile = writeJSONFile;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const argv = require("./argv.cjs");
|
|
4
|
+
require("./cli.cjs");
|
|
5
|
+
const start = require("./start.cjs");
|
|
6
|
+
const process_env = require("./process.env.cjs");
|
|
7
|
+
const files = require("./files.cjs");
|
|
8
|
+
const prosopo_config = require("./prosopo.config.cjs");
|
|
9
|
+
const env = require("./env.cjs");
|
|
10
|
+
exports.processArgs = argv.processArgs;
|
|
11
|
+
exports.handleErrors = start.handleErrors;
|
|
12
|
+
exports.start = start.start;
|
|
13
|
+
exports.getDB = process_env.getDB;
|
|
14
|
+
exports.getPairType = process_env.getPairType;
|
|
15
|
+
exports.getSecret = process_env.getSecret;
|
|
16
|
+
exports.getSs58Format = process_env.getSs58Format;
|
|
17
|
+
exports.loadJSONFile = files.loadJSONFile;
|
|
18
|
+
exports.readFile = files.readFile;
|
|
19
|
+
exports.writeJSONFile = files.writeJSONFile;
|
|
20
|
+
exports.defaultConfig = prosopo_config;
|
|
21
|
+
exports.getEnv = env.getEnv;
|
|
22
|
+
exports.getEnvFile = env.getEnvFile;
|
|
23
|
+
exports.loadEnv = env.loadEnv;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
function getSs58Format() {
|
|
5
|
+
return parseInt(process.env.SS58_FORMAT || "") || 42;
|
|
6
|
+
}
|
|
7
|
+
function getPairType() {
|
|
8
|
+
return process.env.PROSOPO_PAIR_TYPE || "sr25519";
|
|
9
|
+
}
|
|
10
|
+
function getSecret(who) {
|
|
11
|
+
if (!who) {
|
|
12
|
+
who = "PROVIDER";
|
|
13
|
+
} else {
|
|
14
|
+
who = who.toUpperCase();
|
|
15
|
+
}
|
|
16
|
+
const secret = process.env[`PROSOPO_${who}_MNEMONIC`] || process.env[`PROSOPO_${who}_SEED`] || process.env[`PROSOPO_${who}_URI`] || process.env[`PROSOPO_${who}_JSON`];
|
|
17
|
+
if (!secret) {
|
|
18
|
+
throw new common.ProsopoEnvError("GENERAL.NO_MNEMONIC_OR_SEED");
|
|
19
|
+
}
|
|
20
|
+
return secret;
|
|
21
|
+
}
|
|
22
|
+
function getDB() {
|
|
23
|
+
if (!process.env.PROSOPO_DATABASE_HOST) {
|
|
24
|
+
throw new common.ProsopoEnvError("DATABASE.DATABASE_HOST_UNDEFINED");
|
|
25
|
+
}
|
|
26
|
+
return process.env.PROSOPO_DATABASE_HOST;
|
|
27
|
+
}
|
|
28
|
+
exports.getDB = getDB;
|
|
29
|
+
exports.getPairType = getPairType;
|
|
30
|
+
exports.getSecret = getSecret;
|
|
31
|
+
exports.getSs58Format = getSs58Format;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const types = require("@prosopo/types");
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const process_env = require("./process.env.cjs");
|
|
5
|
+
function getMongoURI() {
|
|
6
|
+
const protocol = process.env.PROSOPO_DATABASE_PROTOCOL || "mongodb";
|
|
7
|
+
const mongoSrv = protocol === "mongodb+srv";
|
|
8
|
+
const password = process.env.PROSOPO_DATABASE_PASSWORD || "";
|
|
9
|
+
const username = process.env.PROSOPO_DATABASE_USERNAME || "";
|
|
10
|
+
const host = process.env.PROSOPO_DATABASE_HOST || "localhost";
|
|
11
|
+
const port = mongoSrv ? "" : `:${process.env.PROSOPO_DATABASE_PORT ? process.env.PROSOPO_DATABASE_PORT : 27017}`;
|
|
12
|
+
const retries = mongoSrv ? "?retryWrites=true&w=majority" : "";
|
|
13
|
+
return `${protocol}://${username}:${password}@${host}${port}/${retries}`;
|
|
14
|
+
}
|
|
15
|
+
function getConfig(networksConfig, captchaSolutionsConfig, batchCommitConfig, captchaServeConfig) {
|
|
16
|
+
return types.ProsopoConfigSchema.parse({
|
|
17
|
+
logLevel: common.getLogLevel(),
|
|
18
|
+
defaultEnvironment: process.env.PROSOPO_DEFAULT_ENVIRONMENT ? types.EnvironmentTypesSchema.parse(process.env.PROSOPO_DEFAULT_ENVIRONMENT) : types.EnvironmentTypesSchema.enum.development,
|
|
19
|
+
defaultNetwork: process.env.PROSOPO_DEFAULT_NETWORK ? types.NetworkNamesSchema.parse(process.env.PROSOPO_DEFAULT_NETWORK) : types.NetworkNamesSchema.enum.development,
|
|
20
|
+
account: {
|
|
21
|
+
address: process.env.PROSOPO_PROVIDER_ADDRESS || void 0,
|
|
22
|
+
password: process.env.PROSOPO_PROVIDER_ACCOUNT_PASSWORD || void 0,
|
|
23
|
+
secret: process_env.getSecret()
|
|
24
|
+
},
|
|
25
|
+
database: {
|
|
26
|
+
development: {
|
|
27
|
+
type: types.DatabaseTypes.enum.mongo,
|
|
28
|
+
endpoint: getMongoURI(),
|
|
29
|
+
dbname: process.env.PROSOPO_DATABASE_NAME || "",
|
|
30
|
+
authSource: "admin"
|
|
31
|
+
},
|
|
32
|
+
production: {
|
|
33
|
+
type: types.DatabaseTypes.enum.mongo,
|
|
34
|
+
endpoint: getMongoURI(),
|
|
35
|
+
dbname: process.env.PROSOPO_DATABASE_NAME || "",
|
|
36
|
+
authSource: "admin"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
server: {
|
|
40
|
+
baseURL: process.env.PROSOPO_API_BASE_URL || "http://localhost",
|
|
41
|
+
port: process.env.PROSOPO_API_PORT ? parseInt(process.env.PROSOPO_API_PORT) : 9229
|
|
42
|
+
},
|
|
43
|
+
networks: networksConfig,
|
|
44
|
+
captchaSolutions: captchaSolutionsConfig,
|
|
45
|
+
batchCommit: batchCommitConfig,
|
|
46
|
+
captchas: captchaServeConfig
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
module.exports = getConfig;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const common = require("@prosopo/common");
|
|
3
|
+
const env = require("@prosopo/env");
|
|
4
|
+
const env$1 = require("./env.cjs");
|
|
5
|
+
const start = require("./start.cjs");
|
|
6
|
+
const fs = require("fs");
|
|
7
|
+
const log = common.getLogger(common.LogLevel.enum.info, "CLI");
|
|
8
|
+
class ReloadingAPI {
|
|
9
|
+
constructor(envPath, config, pair, processedArgs) {
|
|
10
|
+
this._envPath = envPath;
|
|
11
|
+
this._config = config;
|
|
12
|
+
this._pair = pair;
|
|
13
|
+
this._processedArgs = processedArgs;
|
|
14
|
+
this._restarting = false;
|
|
15
|
+
}
|
|
16
|
+
async start() {
|
|
17
|
+
log.info("Starting API");
|
|
18
|
+
this._envWatcher = await this._watchEnv();
|
|
19
|
+
const env$12 = new env.ProviderEnvironment(this._config, this._pair);
|
|
20
|
+
await env$12.isReady();
|
|
21
|
+
this.api = await start.start(env$12, !!this._processedArgs.adminApi);
|
|
22
|
+
}
|
|
23
|
+
async stop() {
|
|
24
|
+
log.info("Stopping API");
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
if (this.api) {
|
|
27
|
+
this.api.close(resolve);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async _watchEnv() {
|
|
32
|
+
return fs.watchFile(this._envPath, async () => {
|
|
33
|
+
if (!this._restarting) {
|
|
34
|
+
this._restarting = true;
|
|
35
|
+
await this.stop();
|
|
36
|
+
env$1.loadEnv();
|
|
37
|
+
await this.start();
|
|
38
|
+
this._restarting = false;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
module.exports = ReloadingAPI;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const common = require("@prosopo/common");
|
|
4
|
+
const env$1 = require("@prosopo/env");
|
|
5
|
+
const process_env = require("./process.env.cjs");
|
|
6
|
+
const contract = require("@prosopo/contract");
|
|
7
|
+
const env = require("./env.cjs");
|
|
8
|
+
const provider = require("@prosopo/provider");
|
|
9
|
+
const cors = require("cors");
|
|
10
|
+
const express = require("express");
|
|
11
|
+
const prosopo_config = require("./prosopo.config.cjs");
|
|
12
|
+
const handleErrors = (err, request, response, next) => {
|
|
13
|
+
const code = "code" in err ? err.code : 400;
|
|
14
|
+
let message = err.message;
|
|
15
|
+
try {
|
|
16
|
+
message = JSON.parse(err.message);
|
|
17
|
+
} catch {
|
|
18
|
+
console.debug("Invalid JSON error message");
|
|
19
|
+
}
|
|
20
|
+
return response.status(code).json({
|
|
21
|
+
message,
|
|
22
|
+
name: err.name
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
function startApi(env2, admin = false) {
|
|
26
|
+
env2.logger.info(`Starting Prosopo API`);
|
|
27
|
+
const apiApp = express();
|
|
28
|
+
const apiPort = env2.config.server.port;
|
|
29
|
+
apiApp.use(cors());
|
|
30
|
+
apiApp.use(express.json({ limit: "50mb" }));
|
|
31
|
+
apiApp.use(common.i18nMiddleware({}));
|
|
32
|
+
apiApp.use(provider.prosopoRouter(env2));
|
|
33
|
+
if (admin) {
|
|
34
|
+
apiApp.use(provider.prosopoAdminRouter(env2));
|
|
35
|
+
}
|
|
36
|
+
apiApp.use(handleErrors);
|
|
37
|
+
return apiApp.listen(apiPort, () => {
|
|
38
|
+
env2.logger.info(`Prosopo app listening at http://localhost:${apiPort}`);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
async function start(env$2, admin) {
|
|
42
|
+
if (!env$2) {
|
|
43
|
+
env.loadEnv();
|
|
44
|
+
process_env.getDB();
|
|
45
|
+
const secret = process_env.getSecret();
|
|
46
|
+
const config = prosopo_config(void 0, void 0, void 0, {
|
|
47
|
+
solved: { count: 2 },
|
|
48
|
+
unsolved: { count: 0 }
|
|
49
|
+
});
|
|
50
|
+
const pair = await contract.getPairAsync(config.networks[config.defaultNetwork], secret, "");
|
|
51
|
+
env$2 = new env$1.ProviderEnvironment(config, pair);
|
|
52
|
+
}
|
|
53
|
+
await env$2.isReady();
|
|
54
|
+
return startApi(env$2, admin);
|
|
55
|
+
}
|
|
56
|
+
exports.handleErrors = handleErrors;
|
|
57
|
+
exports.start = start;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.36",
|
|
4
4
|
"description": "CLI for Prosopo Provider",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -34,13 +34,13 @@
|
|
|
34
34
|
"@polkadot/types": "10.11.1",
|
|
35
35
|
"@polkadot/util": "12.6.1",
|
|
36
36
|
"@polkadot/util-crypto": "12.6.1",
|
|
37
|
-
"@prosopo/captcha-contract": "0.2.
|
|
38
|
-
"@prosopo/common": "0.2.
|
|
39
|
-
"@prosopo/contract": "0.2.
|
|
40
|
-
"@prosopo/env": "0.2.
|
|
41
|
-
"@prosopo/provider": "0.2.
|
|
42
|
-
"@prosopo/types": "0.2.
|
|
43
|
-
"@prosopo/util": "0.2.
|
|
37
|
+
"@prosopo/captcha-contract": "0.2.36",
|
|
38
|
+
"@prosopo/common": "0.2.36",
|
|
39
|
+
"@prosopo/contract": "0.2.36",
|
|
40
|
+
"@prosopo/env": "0.2.36",
|
|
41
|
+
"@prosopo/provider": "0.2.36",
|
|
42
|
+
"@prosopo/types": "0.2.36",
|
|
43
|
+
"@prosopo/util": "0.2.36",
|
|
44
44
|
"cors": "^2.8.5",
|
|
45
45
|
"cron-parser": "^4.9.0",
|
|
46
46
|
"dotenv": "^16.0.1",
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"es-main": "^1.2.0",
|
|
52
52
|
"express": "^4.18.2",
|
|
53
|
-
"vite": "^4.5.
|
|
53
|
+
"vite": "^4.5.2",
|
|
54
54
|
"vitest": "^0.34.6",
|
|
55
|
-
"@prosopo/config": "0.2.
|
|
55
|
+
"@prosopo/config": "0.2.36",
|
|
56
56
|
"@types/cors": "^2.8.14",
|
|
57
57
|
"tslib": "2.6.2",
|
|
58
58
|
"typescript": "5.1.6"
|