@prosopo/cli 3.6.73 → 3.6.75

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.
Files changed (59) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +37 -27
  2. package/.turbo/turbo-build$colon$tsc.log +27 -27
  3. package/.turbo/turbo-build.log +30 -27
  4. package/CHANGELOG.md +32 -0
  5. package/dist/RateLimiter.js +118 -118
  6. package/dist/_virtual/_rolldown/runtime.js +3 -0
  7. package/dist/argv.js +37 -36
  8. package/dist/bundle/decodeBehavior-BnJdECMR.js +233 -0
  9. package/dist/bundle/decodeSimd-hDznYwxo.js +218 -0
  10. package/dist/bundle/i18nBackend-C078WszN.js +3553 -0
  11. package/dist/bundle/i18nFrontend-pIqw8hl9.js +850 -0
  12. package/dist/bundle/i18next-q3w8LsnI.js +1213 -0
  13. package/dist/bundle/node-ponyfill-BXKwLYwg.js +1534 -0
  14. package/dist/bundle/provider.cli.bundle.js +102274 -131288
  15. package/dist/bundle/src-DhRyWllF.js +1880 -0
  16. package/dist/cjs/RateLimiter.cjs +118 -118
  17. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  18. package/dist/cjs/argv.cjs +41 -38
  19. package/dist/cjs/cli.cjs +32 -43
  20. package/dist/cjs/commands/ensureExternalIndexes.cjs +26 -27
  21. package/dist/cjs/commands/ensureIndexes.cjs +24 -25
  22. package/dist/cjs/commands/index.cjs +18 -20
  23. package/dist/cjs/commands/migrateAbuserScoreThreshold.cjs +54 -65
  24. package/dist/cjs/commands/providerSetDataset.cjs +45 -59
  25. package/dist/cjs/commands/siteKeyRegister.cjs +93 -105
  26. package/dist/cjs/commands/siteKeyRegisterApi.cjs +84 -102
  27. package/dist/cjs/commands/storeCaptchasExternally.cjs +24 -24
  28. package/dist/cjs/commands/updateSpamEmailDomains.cjs +42 -49
  29. package/dist/cjs/commands/validators.cjs +18 -37
  30. package/dist/cjs/commands/version.cjs +14 -15
  31. package/dist/cjs/files.cjs +32 -30
  32. package/dist/cjs/index.cjs +15 -17
  33. package/dist/cjs/process.env.cjs +14 -25
  34. package/dist/cjs/prosopo.config.cjs +108 -132
  35. package/dist/cjs/reloader.cjs +54 -63
  36. package/dist/cjs/start.cjs +59 -81
  37. package/dist/cli.js +27 -37
  38. package/dist/commands/ensureExternalIndexes.js +24 -26
  39. package/dist/commands/ensureIndexes.js +22 -24
  40. package/dist/commands/index.js +10 -20
  41. package/dist/commands/migrateAbuserScoreThreshold.js +52 -64
  42. package/dist/commands/providerSetDataset.js +41 -41
  43. package/dist/commands/siteKeyRegister.js +90 -103
  44. package/dist/commands/siteKeyRegisterApi.js +82 -101
  45. package/dist/commands/storeCaptchasExternally.js +22 -23
  46. package/dist/commands/updateSpamEmailDomains.js +40 -48
  47. package/dist/commands/validators.js +15 -37
  48. package/dist/commands/version.js +13 -15
  49. package/dist/files.js +28 -30
  50. package/dist/index.js +5 -16
  51. package/dist/process.env.js +14 -28
  52. package/dist/prosopo.config.js +108 -131
  53. package/dist/reloader.js +49 -61
  54. package/dist/start.js +57 -79
  55. package/package.json +16 -16
  56. package/dist/bundle/decodeBehavior-Btp_pZCR.js +0 -224
  57. package/dist/bundle/decodeSimd-Cz4sdHHN.js +0 -212
  58. package/dist/bundle/i18nBackend-BiuZSvrn.js +0 -5366
  59. package/dist/bundle/index-DUVLsNmB.js +0 -2371
@@ -1,140 +1,117 @@
1
- import { parseLogLevel } from "@prosopo/logger";
2
- import { ProsopoConfigSchema, FrictionlessPenalties, DatabaseTypes, EnvironmentTypesSchema } from "@prosopo/types";
3
1
  import { getRateLimitConfig } from "./RateLimiter.js";
4
- import { getSecret, getPassword, getAddress } from "./process.env.js";
2
+ import { getAddress, getPassword, getSecret } from "./process.env.js";
3
+ import { parseLogLevel } from "@prosopo/logger";
4
+ import { DatabaseTypes, EnvironmentTypesSchema, FrictionlessPenalties, ProsopoConfigSchema } from "@prosopo/types";
5
+ //#region src/prosopo.config.ts
5
6
  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 || "root";
9
- const username = process.env.PROSOPO_DATABASE_USERNAME || "root";
10
- const host = process.env.PROSOPO_DATABASE_HOST || "localhost";
11
- const port = mongoSrv ? "" : `:${process.env.PROSOPO_DATABASE_PORT || 27017}`;
12
- const retries = mongoSrv ? "?retryWrites=true&w=majority" : "";
13
- const mongoURI = `${protocol}://${username}:${password}@${host}${port}/${retries}`;
14
- return mongoURI;
7
+ const protocol = process.env.PROSOPO_DATABASE_PROTOCOL || "mongodb";
8
+ const mongoSrv = protocol === "mongodb+srv";
9
+ const password = process.env.PROSOPO_DATABASE_PASSWORD || "root";
10
+ return `${protocol}://${process.env.PROSOPO_DATABASE_USERNAME || "root"}:${password}@${process.env.PROSOPO_DATABASE_HOST || "localhost"}${mongoSrv ? "" : `:${process.env.PROSOPO_DATABASE_PORT || 27017}`}/${mongoSrv ? "?retryWrites=true&w=majority" : ""}`;
15
11
  }
16
- const getLRules = () => {
17
- if (!process.env.L_RULES) {
18
- return {};
19
- }
20
- try {
21
- return JSON.parse(process.env.L_RULES);
22
- } catch (e) {
23
- return {};
24
- }
12
+ var getLRules = () => {
13
+ if (!process.env.L_RULES) return {};
14
+ try {
15
+ return JSON.parse(process.env.L_RULES);
16
+ } catch (e) {
17
+ return {};
18
+ }
25
19
  };
26
- const isStringArray = (value) => Array.isArray(value) && value.every((item) => typeof item === "string");
27
- const getDnsServers = () => {
28
- if (!process.env.PROSOPO_DNS_SERVERS) {
29
- return void 0;
30
- }
31
- try {
32
- const parsed = JSON.parse(process.env.PROSOPO_DNS_SERVERS);
33
- if (isStringArray(parsed)) {
34
- return parsed;
35
- }
36
- return void 0;
37
- } catch (e) {
38
- return void 0;
39
- }
20
+ var isStringArray = (value) => Array.isArray(value) && value.every((item) => typeof item === "string");
21
+ var getDnsServers = () => {
22
+ if (!process.env.PROSOPO_DNS_SERVERS) return;
23
+ try {
24
+ const parsed = JSON.parse(process.env.PROSOPO_DNS_SERVERS);
25
+ if (isStringArray(parsed)) return parsed;
26
+ return;
27
+ } catch (e) {
28
+ return;
29
+ }
40
30
  };
41
- const getSpamEmailDomainsUrls = () => {
42
- if (!process.env.SPAM_EMAIL_DOMAINS_URLS) {
43
- return void 0;
44
- }
45
- try {
46
- const parsed = JSON.parse(process.env.SPAM_EMAIL_DOMAINS_URLS);
47
- if (isStringArray(parsed)) {
48
- return parsed;
49
- }
50
- return void 0;
51
- } catch (e) {
52
- return void 0;
53
- }
31
+ var getSpamEmailDomainsUrls = () => {
32
+ if (!process.env.SPAM_EMAIL_DOMAINS_URLS) return;
33
+ try {
34
+ const parsed = JSON.parse(process.env.SPAM_EMAIL_DOMAINS_URLS);
35
+ if (isStringArray(parsed)) return parsed;
36
+ return;
37
+ } catch (e) {
38
+ return;
39
+ }
54
40
  };
55
- const getHost = () => {
56
- const importMeta = import.meta;
57
- return process.env.CADDY_DOMAIN || importMeta.env?.VITE_CADDY_DOMAIN;
41
+ var getHost = () => {
42
+ const importMeta = import.meta;
43
+ return process.env.CADDY_DOMAIN || importMeta.env?.VITE_CADDY_DOMAIN;
58
44
  };
59
45
  function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER", admin = "ADMIN") {
60
- return ProsopoConfigSchema.parse({
61
- logLevel: parseLogLevel(process.env.PROSOPO_LOG_LEVEL, "info"),
62
- host: getHost(),
63
- defaultEnvironment: process.env.PROSOPO_DEFAULT_ENVIRONMENT ? EnvironmentTypesSchema.parse(process.env.PROSOPO_DEFAULT_ENVIRONMENT) : EnvironmentTypesSchema.enum.development,
64
- account: {
65
- address: getAddress(who),
66
- password: getPassword(who),
67
- secret: getSecret(who)
68
- },
69
- database: {
70
- development: {
71
- type: DatabaseTypes.enum.provider,
72
- endpoint: getMongoURI(),
73
- dbname: process.env.PROSOPO_DATABASE_NAME,
74
- authSource: process.env.PROSOPO_DATABASE_AUTH_SOURCE
75
- },
76
- staging: {
77
- type: DatabaseTypes.enum.provider,
78
- endpoint: getMongoURI(),
79
- dbname: process.env.PROSOPO_DATABASE_NAME,
80
- authSource: process.env.PROSOPO_DATABASE_AUTH_SOURCE
81
- },
82
- production: {
83
- type: DatabaseTypes.enum.provider,
84
- endpoint: getMongoURI(),
85
- dbname: process.env.PROSOPO_DATABASE_NAME,
86
- authSource: process.env.PROSOPO_DATABASE_AUTH_SOURCE
87
- }
88
- },
89
- server: {
90
- baseURL: process.env.PROSOPO_API_BASE_URL || "http://localhost",
91
- port: process.env.PROSOPO_API_PORT ? Number.parseInt(process.env.PROSOPO_API_PORT) : 9229
92
- },
93
- captchaSolutions: captchaSolutionsConfig,
94
- captchas: captchaServeConfig,
95
- penalties: FrictionlessPenalties.parse({
96
- PENALTY_OLD_TIMESTAMP: process.env.PENALTY_OLD_TIMESTAMP,
97
- PENALTY_ACCESS_RULE: process.env.PENALTY_ACCESS_RULE,
98
- PENALTY_UNVERIFIED_HOST: process.env.PENALTY_UNVERIFIED_HOST
99
- }),
100
- mongoEventsUri: process.env.PROSOPO_MONGO_EVENTS_URI || "",
101
- mongoCaptchaUri: process.env.PROSOPO_MONGO_CAPTCHA_URI || "",
102
- mongoClientUri: process.env.PROSOPO_MONGO_CLIENT_URI || "",
103
- redisConnection: {
104
- url: process.env.REDIS_CONNECTION_URL || "",
105
- password: process.env.REDIS_CONNECTION_PASSWORD || ""
106
- },
107
- rateLimits: getRateLimitConfig(),
108
- proxyCount: process.env.PROSOPO_PROXY_COUNT ? Number.parseInt(process.env.PROSOPO_PROXY_COUNT) : 0,
109
- scheduledTasks: {
110
- captchaScheduler: {
111
- schedule: process.env.CAPTCHA_STORAGE_SCHEDULE
112
- },
113
- clientListScheduler: {
114
- schedule: process.env.CLIENT_LIST_SCHEDULE
115
- },
116
- clientEntropyScheduler: {
117
- schedule: process.env.CLIENT_ENTROPY_SCHEDULE
118
- },
119
- spamEmailDomainsScheduler: {
120
- schedule: process.env.SPAM_EMAIL_DOMAINS_SCHEDULE
121
- }
122
- },
123
- lRules: getLRules(),
124
- spamEmailDomainsUrls: getSpamEmailDomainsUrls(),
125
- authAccount: {
126
- address: getAddress(admin),
127
- password: getPassword(admin),
128
- secret: getSecret(admin)
129
- },
130
- ipApi: {
131
- apiKey: process.env.PROSOPO_IPAPI_KEY,
132
- baseUrl: process.env.PROSOPO_IPAPI_URL
133
- },
134
- maxmindDbPath: process.env.MAXMIND_DB_PATH,
135
- dnsServers: getDnsServers()
136
- });
46
+ return ProsopoConfigSchema.parse({
47
+ logLevel: parseLogLevel(process.env.PROSOPO_LOG_LEVEL, "info"),
48
+ host: getHost(),
49
+ defaultEnvironment: process.env.PROSOPO_DEFAULT_ENVIRONMENT ? EnvironmentTypesSchema.parse(process.env.PROSOPO_DEFAULT_ENVIRONMENT) : EnvironmentTypesSchema.enum.development,
50
+ account: {
51
+ address: getAddress(who),
52
+ password: getPassword(who),
53
+ secret: getSecret(who)
54
+ },
55
+ database: {
56
+ development: {
57
+ type: DatabaseTypes.enum.provider,
58
+ endpoint: getMongoURI(),
59
+ dbname: process.env.PROSOPO_DATABASE_NAME,
60
+ authSource: process.env.PROSOPO_DATABASE_AUTH_SOURCE
61
+ },
62
+ staging: {
63
+ type: DatabaseTypes.enum.provider,
64
+ endpoint: getMongoURI(),
65
+ dbname: process.env.PROSOPO_DATABASE_NAME,
66
+ authSource: process.env.PROSOPO_DATABASE_AUTH_SOURCE
67
+ },
68
+ production: {
69
+ type: DatabaseTypes.enum.provider,
70
+ endpoint: getMongoURI(),
71
+ dbname: process.env.PROSOPO_DATABASE_NAME,
72
+ authSource: process.env.PROSOPO_DATABASE_AUTH_SOURCE
73
+ }
74
+ },
75
+ server: {
76
+ baseURL: process.env.PROSOPO_API_BASE_URL || "http://localhost",
77
+ port: process.env.PROSOPO_API_PORT ? Number.parseInt(process.env.PROSOPO_API_PORT) : 9229
78
+ },
79
+ captchaSolutions: captchaSolutionsConfig,
80
+ captchas: captchaServeConfig,
81
+ penalties: FrictionlessPenalties.parse({
82
+ PENALTY_OLD_TIMESTAMP: process.env.PENALTY_OLD_TIMESTAMP,
83
+ PENALTY_ACCESS_RULE: process.env.PENALTY_ACCESS_RULE,
84
+ PENALTY_UNVERIFIED_HOST: process.env.PENALTY_UNVERIFIED_HOST
85
+ }),
86
+ mongoEventsUri: process.env.PROSOPO_MONGO_EVENTS_URI || "",
87
+ mongoCaptchaUri: process.env.PROSOPO_MONGO_CAPTCHA_URI || "",
88
+ mongoClientUri: process.env.PROSOPO_MONGO_CLIENT_URI || "",
89
+ redisConnection: {
90
+ url: process.env.REDIS_CONNECTION_URL || "",
91
+ password: process.env.REDIS_CONNECTION_PASSWORD || ""
92
+ },
93
+ rateLimits: getRateLimitConfig(),
94
+ proxyCount: process.env.PROSOPO_PROXY_COUNT ? Number.parseInt(process.env.PROSOPO_PROXY_COUNT) : 0,
95
+ scheduledTasks: {
96
+ captchaScheduler: { schedule: process.env.CAPTCHA_STORAGE_SCHEDULE },
97
+ clientListScheduler: { schedule: process.env.CLIENT_LIST_SCHEDULE },
98
+ clientEntropyScheduler: { schedule: process.env.CLIENT_ENTROPY_SCHEDULE },
99
+ spamEmailDomainsScheduler: { schedule: process.env.SPAM_EMAIL_DOMAINS_SCHEDULE }
100
+ },
101
+ lRules: getLRules(),
102
+ spamEmailDomainsUrls: getSpamEmailDomainsUrls(),
103
+ authAccount: {
104
+ address: getAddress(admin),
105
+ password: getPassword(admin),
106
+ secret: getSecret(admin)
107
+ },
108
+ ipApi: {
109
+ apiKey: process.env.PROSOPO_IPAPI_KEY,
110
+ baseUrl: process.env.PROSOPO_IPAPI_URL
111
+ },
112
+ maxmindDbPath: process.env.MAXMIND_DB_PATH,
113
+ dnsServers: getDnsServers()
114
+ });
137
115
  }
138
- export {
139
- getConfig as default
140
- };
116
+ //#endregion
117
+ export { getConfig as default };
package/dist/reloader.js CHANGED
@@ -1,64 +1,52 @@
1
+ import { start } from "./start.js";
2
+ import { LogLevel, getLogger } from "@prosopo/logger";
3
+ import { ProviderEnvironment } from "@prosopo/env";
1
4
  import fs from "node:fs";
2
5
  import { loadEnv } from "@prosopo/dotenv";
3
- import { ProviderEnvironment } from "@prosopo/env";
4
- import { getLogger, LogLevel } from "@prosopo/logger";
5
- import { start } from "./start.js";
6
- const log = getLogger(LogLevel.enum.info, "cli");
7
- class ReloadingAPI {
8
- constructor(envPath, config, pair, authAccount, processedArgs) {
9
- this._envPath = envPath;
10
- this._config = config;
11
- this._pair = pair;
12
- this._authAccount = authAccount;
13
- this._processedArgs = processedArgs;
14
- this._restarting = false;
15
- }
16
- get env() {
17
- if (!this._env) {
18
- throw new Error("Environment not initialized. Call start() first.");
19
- }
20
- return this._env;
21
- }
22
- async start(reloadEnv = false) {
23
- log.info(() => ({ msg: "Starting API" }));
24
- loadEnv();
25
- if (!this._env || reloadEnv) {
26
- this._env = new ProviderEnvironment(
27
- this._config,
28
- this._pair,
29
- this._authAccount
30
- );
31
- }
32
- await this.env.isReady();
33
- this.api = await start(this.env, !!this._processedArgs.adminApi);
34
- if (process.env.NODE_ENV === "development") {
35
- this._envWatcher = await this._watchEnv();
36
- }
37
- }
38
- async stop() {
39
- log.info(() => ({ msg: "Stopping API" }));
40
- return new Promise((resolve) => {
41
- if (this.api) {
42
- this.api.close(resolve);
43
- }
44
- });
45
- }
46
- async _watchEnv() {
47
- return fs.watch(this._envPath, async () => {
48
- log.info(() => ({
49
- data: { restarting: this._restarting },
50
- msg: "env file change detected. Restarting"
51
- }));
52
- if (!this._restarting) {
53
- this._restarting = true;
54
- await this.stop();
55
- loadEnv();
56
- await this.start(true);
57
- this._restarting = false;
58
- }
59
- });
60
- }
61
- }
62
- export {
63
- ReloadingAPI as default
6
+ //#region src/reloader.ts
7
+ var log = getLogger(LogLevel.enum.info, "cli");
8
+ var ReloadingAPI = class {
9
+ constructor(envPath, config, pair, authAccount, processedArgs) {
10
+ this._envPath = envPath;
11
+ this._config = config;
12
+ this._pair = pair;
13
+ this._authAccount = authAccount;
14
+ this._processedArgs = processedArgs;
15
+ this._restarting = false;
16
+ }
17
+ get env() {
18
+ if (!this._env) throw new Error("Environment not initialized. Call start() first.");
19
+ return this._env;
20
+ }
21
+ async start(reloadEnv = false) {
22
+ log.info(() => ({ msg: "Starting API" }));
23
+ loadEnv();
24
+ if (!this._env || reloadEnv) this._env = new ProviderEnvironment(this._config, this._pair, this._authAccount);
25
+ await this.env.isReady();
26
+ this.api = await start(this.env, !!this._processedArgs.adminApi);
27
+ if (process.env.NODE_ENV === "development") this._envWatcher = await this._watchEnv();
28
+ }
29
+ async stop() {
30
+ log.info(() => ({ msg: "Stopping API" }));
31
+ return new Promise((resolve) => {
32
+ if (this.api) this.api.close(resolve);
33
+ });
34
+ }
35
+ async _watchEnv() {
36
+ return fs.watch(this._envPath, async () => {
37
+ log.info(() => ({
38
+ data: { restarting: this._restarting },
39
+ msg: "env file change detected. Restarting"
40
+ }));
41
+ if (!this._restarting) {
42
+ this._restarting = true;
43
+ await this.stop();
44
+ loadEnv();
45
+ await this.start(true);
46
+ this._restarting = false;
47
+ }
48
+ });
49
+ }
64
50
  };
51
+ //#endregion
52
+ export { ReloadingAPI as default };
package/dist/start.js CHANGED
@@ -1,83 +1,61 @@
1
- import { loadEnv } from "@prosopo/dotenv";
2
- import { ProviderEnvironment } from "@prosopo/env";
3
- import { getPair } from "@prosopo/keyring";
4
- import { storeCaptchasExternally, getClientList, setClientEntropy, updateSpamEmailDomainsScheduler, startProviderApi } from "@prosopo/provider";
5
1
  import { getDB, getSecret } from "./process.env.js";
6
2
  import getConfig from "./prosopo.config.js";
3
+ import { ProviderEnvironment } from "@prosopo/env";
4
+ import { getClientList, setClientEntropy, startProviderApi, storeCaptchasExternally, updateSpamEmailDomainsScheduler } from "@prosopo/provider";
5
+ import { loadEnv } from "@prosopo/dotenv";
6
+ import { getPair } from "@prosopo/keyring";
7
+ //#region src/start.ts
7
8
  async function start(env, admin, port) {
8
- if (!env) {
9
- loadEnv();
10
- getDB();
11
- const secret = getSecret();
12
- const config = getConfig(void 0, {
13
- solved: { count: 2 },
14
- unsolved: { count: 0 }
15
- });
16
- const pair = getPair(secret);
17
- let authAccount;
18
- if (config.authAccount) {
19
- authAccount = getPair(void 0, config.authAccount.address);
20
- }
21
- env = new ProviderEnvironment(config, pair, authAccount);
22
- } else {
23
- env.logger.debug(() => ({
24
- msg: "Env already defined",
25
- data: {
26
- config: env?.config
27
- }
28
- }));
29
- }
30
- await env.isReady();
31
- env.cleanup();
32
- const maintenanceMode = process.env.MAINTENANCE_MODE?.toLowerCase() === "true";
33
- if (env.pair && !maintenanceMode) {
34
- const cronScheduleStorage = env.config.scheduledTasks?.captchaScheduler?.schedule;
35
- if (cronScheduleStorage) {
36
- storeCaptchasExternally(env.pair, cronScheduleStorage, env.config).catch(
37
- (err) => {
38
- console.error("Failed to start scheduler:", err);
39
- }
40
- );
41
- }
42
- const cronScheduleClient = env.config.scheduledTasks?.clientListScheduler?.schedule;
43
- if (cronScheduleClient) {
44
- getClientList(env.pair, cronScheduleClient, env.config).catch((err) => {
45
- env.logger.error(() => ({
46
- msg: "Failed to start client list scheduler",
47
- err,
48
- context: { failedFuncName: getClientList.name }
49
- }));
50
- });
51
- }
52
- const cronClientEntropySetter = env.config.scheduledTasks?.clientEntropyScheduler?.schedule;
53
- if (cronClientEntropySetter) {
54
- setClientEntropy(env.pair, cronClientEntropySetter, env.config).catch(
55
- (err) => {
56
- env.logger.error(() => ({
57
- msg: "Failed to start client entropy scheduler",
58
- err,
59
- context: { failedFuncName: setClientEntropy.name }
60
- }));
61
- }
62
- );
63
- }
64
- const cronSpamEmailDomains = env.config.scheduledTasks?.spamEmailDomainsScheduler?.schedule;
65
- if (cronSpamEmailDomains) {
66
- updateSpamEmailDomainsScheduler(
67
- env.pair,
68
- cronSpamEmailDomains,
69
- env.config
70
- ).catch((err) => {
71
- env.logger.error(() => ({
72
- msg: "Failed to start spam email domains scheduler",
73
- err,
74
- context: { failedFuncName: updateSpamEmailDomainsScheduler.name }
75
- }));
76
- });
77
- }
78
- }
79
- return startProviderApi(env, admin, port);
9
+ if (!env) {
10
+ loadEnv();
11
+ getDB();
12
+ const secret = getSecret();
13
+ const config = getConfig(void 0, {
14
+ solved: { count: 2 },
15
+ unsolved: { count: 0 }
16
+ });
17
+ const pair = getPair(secret);
18
+ let authAccount;
19
+ if (config.authAccount) authAccount = getPair(void 0, config.authAccount.address);
20
+ env = new ProviderEnvironment(config, pair, authAccount);
21
+ } else env.logger.debug(() => ({
22
+ msg: "Env already defined",
23
+ data: { config: env?.config }
24
+ }));
25
+ await env.isReady();
26
+ env.cleanup();
27
+ const maintenanceMode = process.env.MAINTENANCE_MODE?.toLowerCase() === "true";
28
+ if (env.pair && !maintenanceMode) {
29
+ const cronScheduleStorage = env.config.scheduledTasks?.captchaScheduler?.schedule;
30
+ if (cronScheduleStorage) storeCaptchasExternally(env.pair, cronScheduleStorage, env.config).catch((err) => {
31
+ console.error("Failed to start scheduler:", err);
32
+ });
33
+ const cronScheduleClient = env.config.scheduledTasks?.clientListScheduler?.schedule;
34
+ if (cronScheduleClient) getClientList(env.pair, cronScheduleClient, env.config).catch((err) => {
35
+ env.logger.error(() => ({
36
+ msg: "Failed to start client list scheduler",
37
+ err,
38
+ context: { failedFuncName: getClientList.name }
39
+ }));
40
+ });
41
+ const cronClientEntropySetter = env.config.scheduledTasks?.clientEntropyScheduler?.schedule;
42
+ if (cronClientEntropySetter) setClientEntropy(env.pair, cronClientEntropySetter, env.config).catch((err) => {
43
+ env.logger.error(() => ({
44
+ msg: "Failed to start client entropy scheduler",
45
+ err,
46
+ context: { failedFuncName: setClientEntropy.name }
47
+ }));
48
+ });
49
+ const cronSpamEmailDomains = env.config.scheduledTasks?.spamEmailDomainsScheduler?.schedule;
50
+ if (cronSpamEmailDomains) updateSpamEmailDomainsScheduler(env.pair, cronSpamEmailDomains, env.config).catch((err) => {
51
+ env.logger.error(() => ({
52
+ msg: "Failed to start spam email domains scheduler",
53
+ err,
54
+ context: { failedFuncName: updateSpamEmailDomainsScheduler.name }
55
+ }));
56
+ });
57
+ }
58
+ return startProviderApi(env, admin, port);
80
59
  }
81
- export {
82
- start
83
- };
60
+ //#endregion
61
+ export { start };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/cli",
3
- "version": "3.6.73",
3
+ "version": "3.6.75",
4
4
  "description": "CLI for Prosopo Provider",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -32,29 +32,29 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@polkadot/types-codec": "16.4.9",
35
- "@prosopo/api": "3.5.19",
36
- "@prosopo/common": "3.1.47",
37
- "@prosopo/logger": "2.0.3",
38
- "@prosopo/dotenv": "3.0.49",
39
- "@prosopo/env": "3.6.18",
40
- "@prosopo/keyring": "2.9.60",
41
- "@prosopo/locale": "3.2.7",
42
- "@prosopo/provider": "4.15.13",
43
- "@prosopo/types": "4.9.12",
44
- "@prosopo/util": "3.3.4",
45
- "@prosopo/workspace": "3.1.20",
35
+ "@prosopo/api": "3.5.20",
36
+ "@prosopo/common": "3.1.48",
37
+ "@prosopo/logger": "2.0.4",
38
+ "@prosopo/dotenv": "3.0.50",
39
+ "@prosopo/env": "3.6.20",
40
+ "@prosopo/keyring": "2.9.61",
41
+ "@prosopo/locale": "3.2.8",
42
+ "@prosopo/provider": "4.15.15",
43
+ "@prosopo/types": "4.10.0",
44
+ "@prosopo/util": "3.3.5",
45
+ "@prosopo/workspace": "3.2.0",
46
46
  "cron-parser": "4.9.0",
47
47
  "dotenv": "16.4.5",
48
48
  "yargs": "17.7.2",
49
49
  "zod": "3.23.8"
50
50
  },
51
51
  "devDependencies": {
52
- "@prosopo/config": "3.3.4",
52
+ "@prosopo/config": "3.3.5",
53
53
  "@polkadot-api/substrate-client": "0.1.4",
54
54
  "@types/cors": "2.8.17",
55
55
  "@types/node": "22.10.2",
56
56
  "@types/yargs": "17.0.33",
57
- "@vitest/coverage-v8": "3.2.4",
57
+ "@vitest/coverage-v8": "4.1.10",
58
58
  "concurrently": "9.0.1",
59
59
  "del-cli": "6.0.0",
60
60
  "express": "4.21.2",
@@ -63,8 +63,8 @@
63
63
  "tslib": "2.7.0",
64
64
  "tsx": "4.20.3",
65
65
  "typescript": "5.6.2",
66
- "vite": "6.4.1",
67
- "vitest": "3.2.4"
66
+ "vite": "8.1.5",
67
+ "vitest": "4.1.10"
68
68
  },
69
69
  "author": "Prosopo",
70
70
  "license": "Apache-2.0",