@prosopo/cli 3.1.6 → 3.4.17
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/CHANGELOG.md +610 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +1243 -0
- package/coverage/coverage-final.json +22 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +146 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/coverage/src/RateLimiter.ts.html +298 -0
- package/coverage/src/argv.ts.html +325 -0
- package/coverage/src/cli.ts.html +328 -0
- package/coverage/src/commands/ensureExternalIndexes.ts.html +244 -0
- package/coverage/src/commands/ensureIndexes.ts.html +226 -0
- package/coverage/src/commands/index.html +236 -0
- package/coverage/src/commands/index.ts.html +145 -0
- package/coverage/src/commands/migrateIpInCaptchaRecords/getDb.ts.html +280 -0
- package/coverage/src/commands/migrateIpInCaptchaRecords/index.html +146 -0
- package/coverage/src/commands/migrateIpInCaptchaRecords/migrateIpField.ts.html +526 -0
- package/coverage/src/commands/migrateIpInCaptchaRecords/migrateIpInCaptchaRecords.ts.html +280 -0
- package/coverage/src/commands/providerSetDataset.ts.html +289 -0
- package/coverage/src/commands/siteKeyRegister.ts.html +445 -0
- package/coverage/src/commands/siteKeyRegisterApi.ts.html +478 -0
- package/coverage/src/commands/storeCaptchasExternally.ts.html +229 -0
- package/coverage/src/commands/validators.ts.html +280 -0
- package/coverage/src/commands/version.ts.html +193 -0
- package/coverage/src/files.ts.html +256 -0
- package/coverage/src/index.html +236 -0
- package/coverage/src/index.ts.html +142 -0
- package/coverage/src/process.env.ts.html +280 -0
- package/coverage/src/prosopo.config.ts.html +496 -0
- package/coverage/src/reloader.ts.html +394 -0
- package/coverage/src/start.ts.html +760 -0
- package/dist/RateLimiter.d.ts +59 -0
- package/dist/RateLimiter.d.ts.map +1 -0
- package/dist/RateLimiter.js +4 -0
- package/dist/RateLimiter.js.map +1 -0
- package/dist/argv.d.ts +22 -0
- package/dist/argv.d.ts.map +1 -0
- package/dist/argv.js +4 -0
- package/dist/argv.js.map +1 -0
- package/dist/bundle/{i18nBackend-B5QB3n19.js → i18nBackend-D6GWR1ra.js} +16 -16
- package/dist/bundle/provider.cli.bundle.js +71512 -119498
- package/dist/cjs/RateLimiter.cjs +4 -0
- package/dist/cjs/argv.cjs +4 -0
- package/dist/cjs/cli.cjs +2 -10
- package/dist/cjs/commands/ensureExternalIndexes.cjs +28 -0
- package/dist/cjs/commands/ensureIndexes.cjs +26 -0
- package/dist/cjs/commands/index.cjs +4 -0
- package/dist/cjs/commands/siteKeyRegister.cjs +2 -1
- package/dist/cjs/commands/siteKeyRegisterApi.cjs +2 -1
- package/dist/cjs/prosopo.config.cjs +12 -1
- package/dist/cjs/reloader.cjs +4 -2
- package/dist/cjs/start.cjs +19 -19
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +0 -9
- package/dist/cli.js.map +1 -0
- package/dist/commands/ensureExternalIndexes.d.ts +13 -0
- package/dist/commands/ensureExternalIndexes.d.ts.map +1 -0
- package/dist/commands/ensureExternalIndexes.js +29 -0
- package/dist/commands/ensureExternalIndexes.js.map +1 -0
- package/dist/commands/ensureIndexes.d.ts +13 -0
- package/dist/commands/ensureIndexes.d.ts.map +1 -0
- package/dist/commands/ensureIndexes.js +27 -0
- package/dist/commands/ensureIndexes.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/migrateIpInCaptchaRecords/getDb.d.ts +5 -0
- package/dist/commands/migrateIpInCaptchaRecords/getDb.d.ts.map +1 -0
- package/dist/commands/migrateIpInCaptchaRecords/getDb.js +31 -0
- package/dist/commands/migrateIpInCaptchaRecords/getDb.js.map +1 -0
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpField.d.ts +4 -0
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpField.d.ts.map +1 -0
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpField.js +106 -0
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpField.js.map +1 -0
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpInCaptchaRecords.d.ts +5 -0
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpInCaptchaRecords.d.ts.map +1 -0
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpInCaptchaRecords.js +40 -0
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpInCaptchaRecords.js.map +1 -0
- package/dist/commands/providerSetDataset.d.ts +17 -0
- package/dist/commands/providerSetDataset.d.ts.map +1 -0
- package/dist/commands/providerSetDataset.js.map +1 -0
- package/dist/commands/siteKeyRegister.d.ts +57 -0
- package/dist/commands/siteKeyRegister.d.ts.map +1 -0
- package/dist/commands/siteKeyRegister.js +2 -1
- package/dist/commands/siteKeyRegister.js.map +1 -0
- package/dist/commands/siteKeyRegisterApi.d.ts +33 -0
- package/dist/commands/siteKeyRegisterApi.d.ts.map +1 -0
- package/dist/commands/siteKeyRegisterApi.js +2 -1
- package/dist/commands/siteKeyRegisterApi.js.map +1 -0
- package/dist/commands/storeCaptchasExternally.d.ts +13 -0
- package/dist/commands/storeCaptchasExternally.d.ts.map +1 -0
- package/dist/commands/storeCaptchasExternally.js.map +1 -0
- package/dist/commands/validators.d.ts +18 -0
- package/dist/commands/validators.d.ts.map +1 -0
- package/dist/commands/validators.js.map +1 -0
- package/dist/commands/version.d.ts +12 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/files.d.ts +4 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/process.env.d.ts +8 -0
- package/dist/process.env.d.ts.map +1 -0
- package/dist/process.env.js.map +1 -0
- package/dist/prosopo.config.d.ts +3 -0
- package/dist/prosopo.config.d.ts.map +1 -0
- package/dist/prosopo.config.js +11 -1
- package/dist/prosopo.config.js.map +1 -0
- package/dist/reloader.d.ts +20 -0
- package/dist/reloader.d.ts.map +1 -0
- package/dist/reloader.js +4 -2
- package/dist/reloader.js.map +1 -0
- package/dist/start.d.ts +4 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +19 -19
- package/dist/start.js.map +1 -0
- package/dist/tests/bundle/bundle.unit.test.d.ts +2 -0
- package/dist/tests/bundle/bundle.unit.test.d.ts.map +1 -0
- package/dist/tests/bundle/bundle.unit.test.js +14 -0
- package/dist/tests/bundle/bundle.unit.test.js.map +1 -0
- package/package.json +23 -28
- package/vite.config.ts +15 -0
package/dist/cjs/RateLimiter.cjs
CHANGED
|
@@ -51,6 +51,10 @@ const getRateLimitConfig = () => {
|
|
|
51
51
|
windowMs: process.env.PROSOPO_REMOVE_DETECTOR_KEY_WINDOW,
|
|
52
52
|
limit: process.env.PROSOPO_REMOVE_DETECTOR_KEY_LIMIT
|
|
53
53
|
},
|
|
54
|
+
[types.AdminApiPaths.ToggleMaintenanceMode]: {
|
|
55
|
+
windowMs: process.env.PROSOPO_TOGGLE_MAINTENANCE_MODE_WINDOW,
|
|
56
|
+
limit: process.env.PROSOPO_TOGGLE_MAINTENANCE_MODE_LIMIT
|
|
57
|
+
},
|
|
54
58
|
[types.ClientApiPaths.GetFrictionlessCaptchaChallenge]: {
|
|
55
59
|
windowMs: process.env.PROSOPO_GET_FR_CAPTCHA_CHALLENGE_WINDOW,
|
|
56
60
|
limit: process.env.PROSOPO_GET_FR_CAPTCHA_CHALLENGE_LIMIT
|
package/dist/cjs/argv.cjs
CHANGED
|
@@ -4,6 +4,8 @@ const common = require("@prosopo/common");
|
|
|
4
4
|
const yargs = require("yargs");
|
|
5
5
|
const helpers = require("yargs/helpers");
|
|
6
6
|
require("./commands/index.cjs");
|
|
7
|
+
const ensureIndexes = require("./commands/ensureIndexes.cjs");
|
|
8
|
+
const ensureExternalIndexes = require("./commands/ensureExternalIndexes.cjs");
|
|
7
9
|
const providerSetDataset = require("./commands/providerSetDataset.cjs");
|
|
8
10
|
const storeCaptchasExternally = require("./commands/storeCaptchasExternally.cjs");
|
|
9
11
|
const siteKeyRegister = require("./commands/siteKeyRegister.cjs");
|
|
@@ -11,6 +13,8 @@ const siteKeyRegisterApi = require("./commands/siteKeyRegisterApi.cjs");
|
|
|
11
13
|
const version = require("./commands/version.cjs");
|
|
12
14
|
function getCommands(pair, config, authAccount, logger) {
|
|
13
15
|
return [
|
|
16
|
+
ensureIndexes(pair, config, { logger }),
|
|
17
|
+
ensureExternalIndexes(pair, config, { logger }),
|
|
14
18
|
providerSetDataset(pair, config, { logger }),
|
|
15
19
|
storeCaptchasExternally(pair, config, { logger }),
|
|
16
20
|
siteKeyRegister.default(pair, config, { logger }),
|
package/dist/cjs/cli.cjs
CHANGED
|
@@ -8,19 +8,11 @@ const util = require("@prosopo/util");
|
|
|
8
8
|
const argv = require("./argv.cjs");
|
|
9
9
|
const prosopo_config = require("./prosopo.config.cjs");
|
|
10
10
|
const reloader = require("./reloader.cjs");
|
|
11
|
+
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
11
12
|
const log = common.getLogger(common.LogLevel.enum.info, "CLI");
|
|
12
13
|
async function main() {
|
|
13
14
|
const envPath = dotenv.loadEnv();
|
|
14
15
|
const config = prosopo_config();
|
|
15
|
-
if (config.devOnlyWatchEvents) {
|
|
16
|
-
log.warn(() => ({
|
|
17
|
-
msg: `
|
|
18
|
-
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
|
|
19
|
-
EVENT TRACKING ON. IF NOT DEVELOPMENT, PLEASE STOP, CHANGE THE ENVIRONMENT, AND RESTART
|
|
20
|
-
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
|
|
21
|
-
`
|
|
22
|
-
}));
|
|
23
|
-
}
|
|
24
16
|
const pair = keyring.getPair(config.account.secret, config.account.address);
|
|
25
17
|
const authAccount = keyring.getPair(
|
|
26
18
|
config.authAccount.secret,
|
|
@@ -42,7 +34,7 @@ async function main() {
|
|
|
42
34
|
process.exit(0);
|
|
43
35
|
}
|
|
44
36
|
}
|
|
45
|
-
if (util.isMain(
|
|
37
|
+
if (util.isMain(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("cli.cjs", document.baseURI).href, "provider")) {
|
|
46
38
|
locale.loadI18next(true).then(() => {
|
|
47
39
|
main().then(() => {
|
|
48
40
|
log.info(() => ({ msg: "Running main process..." }));
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const common = require("@prosopo/common");
|
|
3
|
+
const env = require("@prosopo/env");
|
|
4
|
+
const provider = require("@prosopo/provider");
|
|
5
|
+
const commandEnsureExternalIndexes = (pair, config, cmdArgs) => {
|
|
6
|
+
const logger = cmdArgs?.logger || common.getLogger(common.LogLevel.enum.info, "cli.ensure_external_indexes");
|
|
7
|
+
return {
|
|
8
|
+
command: "ensure_external_indexes",
|
|
9
|
+
describe: "Ensure indexes for external database",
|
|
10
|
+
handler: async () => {
|
|
11
|
+
try {
|
|
12
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
13
|
+
await env$1.isReady();
|
|
14
|
+
const tasks = new provider.Tasks(env$1);
|
|
15
|
+
if (!env$1.config.mongoCaptchaUri) {
|
|
16
|
+
throw new Error("mongoCaptchaUri not set in config");
|
|
17
|
+
}
|
|
18
|
+
await tasks.clientTaskManager.getCaptchaDB(env$1.config.mongoCaptchaUri).ensureIndexes().catch((err) => {
|
|
19
|
+
env$1.logger.error(() => ({ err }));
|
|
20
|
+
});
|
|
21
|
+
} catch (err) {
|
|
22
|
+
logger.error(() => ({ err }));
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
middlewares: []
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
module.exports = commandEnsureExternalIndexes;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const common = require("@prosopo/common");
|
|
3
|
+
const env = require("@prosopo/env");
|
|
4
|
+
const provider = require("@prosopo/provider");
|
|
5
|
+
const commandEnsureIndexes = (pair, config, cmdArgs) => {
|
|
6
|
+
const logger = cmdArgs?.logger || common.getLogger(common.LogLevel.enum.info, "cli.ensure_indexes");
|
|
7
|
+
return {
|
|
8
|
+
command: "ensure_indexes",
|
|
9
|
+
describe: "Ensure indexes for internal database",
|
|
10
|
+
handler: async () => {
|
|
11
|
+
try {
|
|
12
|
+
const env$1 = new env.ProviderEnvironment(config, pair);
|
|
13
|
+
await env$1.isReady();
|
|
14
|
+
const tasks = new provider.Tasks(env$1);
|
|
15
|
+
if (!env$1.config.mongoCaptchaUri) {
|
|
16
|
+
throw new Error("mongoCaptchaUri not set in config");
|
|
17
|
+
}
|
|
18
|
+
await tasks.db.ensureIndexes();
|
|
19
|
+
} catch (err) {
|
|
20
|
+
logger.error(() => ({ err }));
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
middlewares: []
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
module.exports = commandEnsureIndexes;
|
|
@@ -5,8 +5,12 @@ const storeCaptchasExternally = require("./storeCaptchasExternally.cjs");
|
|
|
5
5
|
const version = require("./version.cjs");
|
|
6
6
|
const siteKeyRegister = require("./siteKeyRegister.cjs");
|
|
7
7
|
const siteKeyRegisterApi = require("./siteKeyRegisterApi.cjs");
|
|
8
|
+
const ensureExternalIndexes = require("./ensureExternalIndexes.cjs");
|
|
9
|
+
const ensureIndexes = require("./ensureIndexes.cjs");
|
|
8
10
|
exports.commandProviderSetDataset = providerSetDataset;
|
|
9
11
|
exports.commandStoreCaptchasExternally = storeCaptchasExternally;
|
|
10
12
|
exports.commandVersion = version;
|
|
11
13
|
exports.commandSiteKeyRegister = siteKeyRegister.default;
|
|
12
14
|
exports.commandSiteKeyRegisterApi = siteKeyRegisterApi;
|
|
15
|
+
exports.commandEnsureExternalIndexes = ensureExternalIndexes;
|
|
16
|
+
exports.commandEnsureIndexes = ensureIndexes;
|
|
@@ -68,7 +68,8 @@ const commandSiteKeyRegister = (pair, config, cmdArgs) => {
|
|
|
68
68
|
frictionlessThreshold: frictionless_threshold,
|
|
69
69
|
domains: domains || [],
|
|
70
70
|
powDifficulty: pow_difficulty,
|
|
71
|
-
imageThreshold: image_threshold
|
|
71
|
+
imageThreshold: image_threshold,
|
|
72
|
+
disallowWebView: false
|
|
72
73
|
});
|
|
73
74
|
logger.info(() => ({
|
|
74
75
|
data: { sitekey },
|
|
@@ -74,7 +74,8 @@ const commandSiteKeyRegisterApi = (pair, authAccount, config, cmdArgs) => {
|
|
|
74
74
|
frictionlessThreshold: frictionless_threshold,
|
|
75
75
|
domains: domains || [],
|
|
76
76
|
powDifficulty: pow_difficulty,
|
|
77
|
-
imageThreshold: image_threshold
|
|
77
|
+
imageThreshold: image_threshold,
|
|
78
|
+
disallowWebView: false
|
|
78
79
|
},
|
|
79
80
|
timestamp,
|
|
80
81
|
signature
|
|
@@ -3,6 +3,7 @@ const common = require("@prosopo/common");
|
|
|
3
3
|
const types = require("@prosopo/types");
|
|
4
4
|
const RateLimiter = require("./RateLimiter.cjs");
|
|
5
5
|
const process_env = require("./process.env.cjs");
|
|
6
|
+
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
6
7
|
function getMongoURI() {
|
|
7
8
|
const protocol = process.env.PROSOPO_DATABASE_PROTOCOL || "mongodb";
|
|
8
9
|
const mongoSrv = protocol === "mongodb+srv";
|
|
@@ -24,9 +25,14 @@ const getLRules = () => {
|
|
|
24
25
|
return {};
|
|
25
26
|
}
|
|
26
27
|
};
|
|
28
|
+
const getHost = () => {
|
|
29
|
+
const importMeta = { url: typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("prosopo.config.cjs", document.baseURI).href };
|
|
30
|
+
return process.env.CADDY_DOMAIN || importMeta.env?.VITE_CADDY_DOMAIN;
|
|
31
|
+
};
|
|
27
32
|
function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER", admin = "ADMIN") {
|
|
28
33
|
return types.ProsopoConfigSchema.parse({
|
|
29
34
|
logLevel: common.parseLogLevel(process.env.PROSOPO_LOG_LEVEL, "info"),
|
|
35
|
+
host: getHost(),
|
|
30
36
|
defaultEnvironment: process.env.PROSOPO_DEFAULT_ENVIRONMENT ? types.EnvironmentTypesSchema.parse(process.env.PROSOPO_DEFAULT_ENVIRONMENT) : types.EnvironmentTypesSchema.enum.development,
|
|
31
37
|
account: {
|
|
32
38
|
address: process_env.getAddress(who),
|
|
@@ -61,7 +67,8 @@ function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER",
|
|
|
61
67
|
captchas: captchaServeConfig,
|
|
62
68
|
penalties: types.FrictionlessPenalties.parse({
|
|
63
69
|
PENALTY_OLD_TIMESTAMP: process.env.PENALTY_OLD_TIMESTAMP,
|
|
64
|
-
PENALTY_ACCESS_RULE: process.env.PENALTY_ACCESS_RULE
|
|
70
|
+
PENALTY_ACCESS_RULE: process.env.PENALTY_ACCESS_RULE,
|
|
71
|
+
PENALTY_UNVERIFIED_HOST: process.env.PENALTY_UNVERIFIED_HOST
|
|
65
72
|
}),
|
|
66
73
|
mongoEventsUri: process.env.PROSOPO_MONGO_EVENTS_URI || "",
|
|
67
74
|
mongoCaptchaUri: process.env.PROSOPO_MONGO_CAPTCHA_URI || "",
|
|
@@ -85,6 +92,10 @@ function getConfig(captchaSolutionsConfig, captchaServeConfig, who = "PROVIDER",
|
|
|
85
92
|
address: process_env.getAddress(admin),
|
|
86
93
|
password: process_env.getPassword(admin),
|
|
87
94
|
secret: process_env.getSecret(admin)
|
|
95
|
+
},
|
|
96
|
+
ipApi: {
|
|
97
|
+
apiKey: process.env.PROSOPO_IPAPI_KEY,
|
|
98
|
+
baseUrl: process.env.PROSOPO_IPAPI_URL
|
|
88
99
|
}
|
|
89
100
|
});
|
|
90
101
|
}
|
package/dist/cjs/reloader.cjs
CHANGED
|
@@ -22,7 +22,6 @@ class ReloadingAPI {
|
|
|
22
22
|
}
|
|
23
23
|
async start(reloadEnv = false) {
|
|
24
24
|
log.info(() => ({ msg: "Starting API" }));
|
|
25
|
-
this._envWatcher = await this._watchEnv();
|
|
26
25
|
dotenv.loadEnv();
|
|
27
26
|
if (!this._env || reloadEnv) {
|
|
28
27
|
this._env = new env.ProviderEnvironment(
|
|
@@ -33,6 +32,9 @@ class ReloadingAPI {
|
|
|
33
32
|
}
|
|
34
33
|
await this.env.isReady();
|
|
35
34
|
this.api = await start.start(this.env, !!this._processedArgs.adminApi);
|
|
35
|
+
if (process.env.NODE_ENV === "development") {
|
|
36
|
+
this._envWatcher = await this._watchEnv();
|
|
37
|
+
}
|
|
36
38
|
}
|
|
37
39
|
async stop() {
|
|
38
40
|
log.info(() => ({ msg: "Stopping API" }));
|
|
@@ -43,7 +45,7 @@ class ReloadingAPI {
|
|
|
43
45
|
});
|
|
44
46
|
}
|
|
45
47
|
async _watchEnv() {
|
|
46
|
-
return fs.
|
|
48
|
+
return fs.watch(this._envPath, async () => {
|
|
47
49
|
log.info(() => ({
|
|
48
50
|
data: { restarting: this._restarting },
|
|
49
51
|
msg: "env file change detected. Restarting"
|
package/dist/cjs/start.cjs
CHANGED
|
@@ -8,7 +8,7 @@ const keyring = require("@prosopo/keyring");
|
|
|
8
8
|
const locale = require("@prosopo/locale");
|
|
9
9
|
const provider = require("@prosopo/provider");
|
|
10
10
|
const types = require("@prosopo/types");
|
|
11
|
-
const
|
|
11
|
+
const api = require("@prosopo/user-access-policy/api");
|
|
12
12
|
const cors = require("cors");
|
|
13
13
|
const express = require("express");
|
|
14
14
|
const rateLimit = require("express-rate-limit");
|
|
@@ -27,8 +27,9 @@ async function startApi(env2, admin = false, port) {
|
|
|
27
27
|
const apiEndpointAdapter = apiExpressRouter.createApiExpressDefaultEndpointAdapter(
|
|
28
28
|
common.parseLogLevel(env2.config.logLevel)
|
|
29
29
|
);
|
|
30
|
-
const apiRuleRoutesProvider =
|
|
31
|
-
env2.getDb().getUserAccessRulesStorage()
|
|
30
|
+
const apiRuleRoutesProvider = new api.AccessRuleApiRoutes(
|
|
31
|
+
env2.getDb().getUserAccessRulesStorage(),
|
|
32
|
+
env2.logger
|
|
32
33
|
);
|
|
33
34
|
const apiAdminRoutesProvider = provider.createApiAdminRoutesProvider(env2);
|
|
34
35
|
const clientPathsExcludingVerify = getClientApiPathsExcludingVerify();
|
|
@@ -36,35 +37,29 @@ async function startApi(env2, admin = false, port) {
|
|
|
36
37
|
msg: "Adding headerCheckMiddleware",
|
|
37
38
|
paths: clientPathsExcludingVerify
|
|
38
39
|
}));
|
|
39
|
-
apiApp.set(
|
|
40
|
-
"trust proxy",
|
|
41
|
-
env2.config.proxyCount
|
|
42
|
-
);
|
|
40
|
+
apiApp.set("trust proxy", 1);
|
|
43
41
|
apiApp.use(cors());
|
|
44
42
|
apiApp.use(express.json({ limit: "50mb" }));
|
|
45
|
-
apiApp.use(provider.publicRouter());
|
|
43
|
+
apiApp.use(provider.publicRouter(env2));
|
|
46
44
|
const i18Middleware = await locale.i18nMiddleware({});
|
|
47
45
|
apiApp.use(provider.robotsMiddleware());
|
|
48
46
|
apiApp.use(provider.ignoreMiddleware());
|
|
49
47
|
apiApp.use(apiExpressRouter.requestLoggerMiddleware(env2));
|
|
50
48
|
apiApp.use(i18Middleware);
|
|
51
49
|
apiApp.use(provider.ja4Middleware(env2));
|
|
52
|
-
apiApp.use(provider.prosopoVerifyRouter(env2));
|
|
53
|
-
apiApp.use(provider.blockMiddleware(env2));
|
|
54
50
|
apiApp.use(clientPathsExcludingVerify, provider.headerCheckMiddleware(env2));
|
|
55
|
-
apiApp.use(
|
|
56
|
-
apiApp.use(provider.prosopoRouter(env2));
|
|
51
|
+
apiApp.use(provider.prosopoVerifyRouter(env2));
|
|
57
52
|
env2.logger.info(() => ({ msg: "Enabling admin auth middleware" }));
|
|
58
53
|
apiApp.use(
|
|
59
54
|
"/v1/prosopo/provider/admin",
|
|
60
55
|
apiExpressRouter.authMiddleware(env2.pair, env2.authAccount)
|
|
61
56
|
);
|
|
57
|
+
apiApp.use(provider.blockMiddleware(env2));
|
|
58
|
+
apiApp.use("/v1/prosopo/provider/client/", provider.domainMiddleware(env2));
|
|
59
|
+
apiApp.use(provider.prosopoRouter(env2));
|
|
62
60
|
const userAccessRuleRoutes = apiRuleRoutesProvider.getRoutes();
|
|
63
|
-
for (const userAccessRuleRoute
|
|
64
|
-
apiApp.use(
|
|
65
|
-
userAccessRuleRoute.path,
|
|
66
|
-
apiExpressRouter.authMiddleware(env2.pair, env2.authAccount)
|
|
67
|
-
);
|
|
61
|
+
for (const userAccessRuleRoute in userAccessRuleRoutes) {
|
|
62
|
+
apiApp.use(userAccessRuleRoute, apiExpressRouter.authMiddleware(env2.pair, env2.authAccount));
|
|
68
63
|
}
|
|
69
64
|
apiApp.use(
|
|
70
65
|
apiExpressRouter.apiExpressRouterFactory.createRouter(
|
|
@@ -83,7 +78,7 @@ async function startApi(env2, admin = false, port) {
|
|
|
83
78
|
)
|
|
84
79
|
);
|
|
85
80
|
const configRateLimits = env2.config.rateLimits;
|
|
86
|
-
const rateLimits = { ...configRateLimits, ...
|
|
81
|
+
const rateLimits = { ...configRateLimits, ...api.getExpressApiRuleRateLimits() };
|
|
87
82
|
for (const [path, limit] of Object.entries(rateLimits)) {
|
|
88
83
|
const enumPath = path;
|
|
89
84
|
apiApp.use(enumPath, rateLimit(limit));
|
|
@@ -111,7 +106,12 @@ async function start(env$1, admin, port) {
|
|
|
111
106
|
}
|
|
112
107
|
env$1 = new env.ProviderEnvironment(config, pair, authAccount);
|
|
113
108
|
} else {
|
|
114
|
-
env$1.logger.debug(() => ({
|
|
109
|
+
env$1.logger.debug(() => ({
|
|
110
|
+
msg: "Env already defined",
|
|
111
|
+
data: {
|
|
112
|
+
config: env$1?.config
|
|
113
|
+
}
|
|
114
|
+
}));
|
|
115
115
|
}
|
|
116
116
|
await env$1.isReady();
|
|
117
117
|
env$1.cleanup();
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
CHANGED
|
@@ -11,15 +11,6 @@ const log = getLogger(LogLevel.enum.info, "CLI");
|
|
|
11
11
|
async function main() {
|
|
12
12
|
const envPath = loadEnv();
|
|
13
13
|
const config = getConfig();
|
|
14
|
-
if (config.devOnlyWatchEvents) {
|
|
15
|
-
log.warn(() => ({
|
|
16
|
-
msg: `
|
|
17
|
-
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
|
|
18
|
-
EVENT TRACKING ON. IF NOT DEVELOPMENT, PLEASE STOP, CHANGE THE ENVIRONMENT, AND RESTART
|
|
19
|
-
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
|
|
20
|
-
`
|
|
21
|
-
}));
|
|
22
|
-
}
|
|
23
14
|
const pair = getPair(config.account.secret, config.account.address);
|
|
24
15
|
const authAccount = getPair(
|
|
25
16
|
config.authAccount.secret,
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAaA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAC5C,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEjD,KAAK,UAAU,IAAI;IAClB,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;IAE1B,MAAM,MAAM,GAAwB,SAAS,EAAE,CAAC;IAEhD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,OAAO,CAC1B,MAAM,CAAC,WAAW,CAAC,MAAM,EACzB,MAAM,CAAC,WAAW,CAAC,OAAO,CAC1B,CAAC;IAEF,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAE1D,MAAM,aAAa,GAAG,MAAM,WAAW,CACtC,OAAO,CAAC,IAAI,EACZ,IAAI,EACJ,WAAW,EACX,MAAM,CACN,CAAC;IAEF,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,aAAa,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC;aACvE,KAAK,EAAE;aACP,IAAI,CAAC,GAAG,EAAE;YACV,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC;AAGD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;IACzC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QAC3B,IAAI,EAAE;aACJ,IAAI,CAAC,GAAG,EAAE;YACV,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAChB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Logger } from "@prosopo/common";
|
|
2
|
+
import type { KeyringPair } from "@prosopo/types";
|
|
3
|
+
import type { ProsopoConfigOutput } from "@prosopo/types";
|
|
4
|
+
declare const _default: (pair: KeyringPair, config: ProsopoConfigOutput, cmdArgs?: {
|
|
5
|
+
logger?: Logger;
|
|
6
|
+
}) => {
|
|
7
|
+
command: string;
|
|
8
|
+
describe: string;
|
|
9
|
+
handler: () => Promise<void>;
|
|
10
|
+
middlewares: never[];
|
|
11
|
+
};
|
|
12
|
+
export default _default;
|
|
13
|
+
//# sourceMappingURL=ensureExternalIndexes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensureExternalIndexes.d.ts","sourceRoot":"","sources":["../../src/commands/ensureExternalIndexes.ts"],"names":[],"mappings":"AAcA,OAAO,EAAY,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;+BAGnD,WAAW,UACT,mBAAmB,YACjB;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;AAH9B,wBAgCE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { getLogger, LogLevel } from "@prosopo/common";
|
|
2
|
+
import { ProviderEnvironment } from "@prosopo/env";
|
|
3
|
+
import { Tasks } from "@prosopo/provider";
|
|
4
|
+
const commandEnsureExternalIndexes = (pair, config, cmdArgs) => {
|
|
5
|
+
const logger = cmdArgs?.logger || getLogger(LogLevel.enum.info, "cli.ensure_external_indexes");
|
|
6
|
+
return {
|
|
7
|
+
command: "ensure_external_indexes",
|
|
8
|
+
describe: "Ensure indexes for external database",
|
|
9
|
+
handler: async () => {
|
|
10
|
+
try {
|
|
11
|
+
const env = new ProviderEnvironment(config, pair);
|
|
12
|
+
await env.isReady();
|
|
13
|
+
const tasks = new Tasks(env);
|
|
14
|
+
if (!env.config.mongoCaptchaUri) {
|
|
15
|
+
throw new Error("mongoCaptchaUri not set in config");
|
|
16
|
+
}
|
|
17
|
+
await tasks.clientTaskManager.getCaptchaDB(env.config.mongoCaptchaUri).ensureIndexes().catch((err) => {
|
|
18
|
+
env.logger.error(() => ({ err }));
|
|
19
|
+
});
|
|
20
|
+
} catch (err) {
|
|
21
|
+
logger.error(() => ({ err }));
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
middlewares: []
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export {
|
|
28
|
+
commandEnsureExternalIndexes as default
|
|
29
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensureExternalIndexes.js","sourceRoot":"","sources":["../../src/commands/ensureExternalIndexes.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,eAAe,CACd,IAAiB,EACjB,MAA2B,EAC3B,OAA6B,EAC5B,EAAE;IACH,MAAM,MAAM,GACX,OAAO,EAAE,MAAM;QACf,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;IAE9D,OAAO;QACN,OAAO,EAAE,yBAAyB;QAClC,QAAQ,EAAE,sCAAsC;QAChD,OAAO,EAAE,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACtD,CAAC;gBACD,MAAM,KAAK,CAAC,iBAAiB;qBAC3B,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC;qBACxC,aAAa,EAAE;qBACf,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACd,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACnC,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;QACD,WAAW,EAAE,EAAE;KACf,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type Logger } from "@prosopo/common";
|
|
2
|
+
import type { KeyringPair } from "@prosopo/types";
|
|
3
|
+
import type { ProsopoConfigOutput } from "@prosopo/types";
|
|
4
|
+
declare const _default: (pair: KeyringPair, config: ProsopoConfigOutput, cmdArgs?: {
|
|
5
|
+
logger?: Logger;
|
|
6
|
+
}) => {
|
|
7
|
+
command: string;
|
|
8
|
+
describe: string;
|
|
9
|
+
handler: () => Promise<void>;
|
|
10
|
+
middlewares: never[];
|
|
11
|
+
};
|
|
12
|
+
export default _default;
|
|
13
|
+
//# sourceMappingURL=ensureIndexes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensureIndexes.d.ts","sourceRoot":"","sources":["../../src/commands/ensureIndexes.ts"],"names":[],"mappings":"AAcA,OAAO,EAAY,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AAGnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;+BAGnD,WAAW,UACT,mBAAmB,YACjB;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;AAH9B,wBA0BE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { getLogger, LogLevel } from "@prosopo/common";
|
|
2
|
+
import { ProviderEnvironment } from "@prosopo/env";
|
|
3
|
+
import { Tasks } from "@prosopo/provider";
|
|
4
|
+
const commandEnsureIndexes = (pair, config, cmdArgs) => {
|
|
5
|
+
const logger = cmdArgs?.logger || getLogger(LogLevel.enum.info, "cli.ensure_indexes");
|
|
6
|
+
return {
|
|
7
|
+
command: "ensure_indexes",
|
|
8
|
+
describe: "Ensure indexes for internal database",
|
|
9
|
+
handler: async () => {
|
|
10
|
+
try {
|
|
11
|
+
const env = new ProviderEnvironment(config, pair);
|
|
12
|
+
await env.isReady();
|
|
13
|
+
const tasks = new Tasks(env);
|
|
14
|
+
if (!env.config.mongoCaptchaUri) {
|
|
15
|
+
throw new Error("mongoCaptchaUri not set in config");
|
|
16
|
+
}
|
|
17
|
+
await tasks.db.ensureIndexes();
|
|
18
|
+
} catch (err) {
|
|
19
|
+
logger.error(() => ({ err }));
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
middlewares: []
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export {
|
|
26
|
+
commandEnsureIndexes as default
|
|
27
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensureIndexes.js","sourceRoot":"","sources":["../../src/commands/ensureIndexes.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,QAAQ,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAI1C,eAAe,CACd,IAAiB,EACjB,MAA2B,EAC3B,OAA6B,EAC5B,EAAE;IACH,MAAM,MAAM,GACX,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IAExE,OAAO;QACN,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,sCAAsC;QAChD,OAAO,EAAE,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACtD,CAAC;gBACD,MAAM,KAAK,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;QACD,WAAW,EAAE,EAAE;KACf,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { default as commandProviderSetDataset } from "./providerSetDataset.js";
|
|
2
|
+
export { default as commandStoreCaptchasExternally } from "./storeCaptchasExternally.js";
|
|
3
|
+
export { default as commandVersion } from "./version.js";
|
|
4
|
+
export { default as commandSiteKeyRegister } from "./siteKeyRegister.js";
|
|
5
|
+
export { default as commandSiteKeyRegisterApi } from "./siteKeyRegisterApi.js";
|
|
6
|
+
export { default as commandEnsureExternalIndexes } from "./ensureExternalIndexes.js";
|
|
7
|
+
export { default as commandEnsureIndexes } from "./ensureIndexes.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -3,7 +3,11 @@ import { default as default3 } from "./storeCaptchasExternally.js";
|
|
|
3
3
|
import { default as default4 } from "./version.js";
|
|
4
4
|
import { default as default5 } from "./siteKeyRegister.js";
|
|
5
5
|
import { default as default6 } from "./siteKeyRegisterApi.js";
|
|
6
|
+
import { default as default7 } from "./ensureExternalIndexes.js";
|
|
7
|
+
import { default as default8 } from "./ensureIndexes.js";
|
|
6
8
|
export {
|
|
9
|
+
default7 as commandEnsureExternalIndexes,
|
|
10
|
+
default8 as commandEnsureIndexes,
|
|
7
11
|
default2 as commandProviderSetDataset,
|
|
8
12
|
default5 as commandSiteKeyRegister,
|
|
9
13
|
default6 as commandSiteKeyRegisterApi,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Logger } from "@prosopo/common";
|
|
2
|
+
import type { KeyringPair, ProsopoConfigOutput } from "@prosopo/types";
|
|
3
|
+
import type { Db } from "mongodb";
|
|
4
|
+
export declare const getDb: (pair: KeyringPair, config: ProsopoConfigOutput, uri: string, logger: Logger) => Promise<Db>;
|
|
5
|
+
//# sourceMappingURL=getDb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDb.d.ts","sourceRoot":"","sources":["../../../src/commands/migrateIpInCaptchaRecords/getDb.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAGlC,eAAO,MAAM,KAAK,SACX,WAAW,UACT,mBAAmB,OACtB,MAAM,UACH,MAAM,KACZ,OAAO,CAAC,EAAE,CAsBZ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ProviderEnvironment } from "@prosopo/env";
|
|
2
|
+
import mongoose from "mongoose";
|
|
3
|
+
export const getDb = async (pair, config, uri, logger) => {
|
|
4
|
+
let db;
|
|
5
|
+
if (uri) {
|
|
6
|
+
logger.info(() => ({
|
|
7
|
+
msg: "Using DB connection from the URI",
|
|
8
|
+
}));
|
|
9
|
+
db = await getByUri(uri);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
logger.info(() => ({
|
|
13
|
+
msg: "Using DB connection from the config",
|
|
14
|
+
}));
|
|
15
|
+
db = await getByConfig(pair, config);
|
|
16
|
+
}
|
|
17
|
+
if (db) {
|
|
18
|
+
return db;
|
|
19
|
+
}
|
|
20
|
+
throw new Error("Db connection cannot be established");
|
|
21
|
+
};
|
|
22
|
+
const getByUri = async (uri) => {
|
|
23
|
+
await mongoose.connect(uri);
|
|
24
|
+
return mongoose.connection.db;
|
|
25
|
+
};
|
|
26
|
+
const getByConfig = async (pair, config) => {
|
|
27
|
+
const env = new ProviderEnvironment(config, pair);
|
|
28
|
+
await env.isReady();
|
|
29
|
+
return env.db?.getConnection()?.db;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=getDb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDb.js","sourceRoot":"","sources":["../../../src/commands/migrateIpInCaptchaRecords/getDb.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EACzB,IAAiB,EACjB,MAA2B,EAC3B,GAAW,EACX,MAAc,EACA,EAAE;IAChB,IAAI,EAAkB,CAAC;IAEvB,IAAI,GAAG,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,kCAAkC;SACvC,CAAC,CAAC,CAAC;QAEJ,EAAE,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAClB,GAAG,EAAE,qCAAqC;SAC1C,CAAC,CAAC,CAAC;QAEJ,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,EAAE,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAW,EAA2B,EAAE;IAC/D,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EACxB,IAAiB,EACjB,MAA2B,EACD,EAAE;IAC5B,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAElD,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IAEpB,OAAO,GAAG,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;AACpC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrateIpField.d.ts","sourceRoot":"","sources":["../../../src/commands/migrateIpInCaptchaRecords/migrateIpField.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAI9C,OAAO,EAAE,KAAK,EAAE,EAAc,MAAM,SAAS,CAAC;AAK9C,eAAO,MAAM,cAAc,OACtB,EAAE,wBACgB,MAAM,EAAE,UACtB,MAAM,kBAMd,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { getCompositeIpAddress } from "@prosopo/provider";
|
|
2
|
+
import { IpAddressType } from "@prosopo/types-database";
|
|
3
|
+
import { Address6 } from "ip-address";
|
|
4
|
+
import { Decimal128 } from "mongodb";
|
|
5
|
+
const MAX_IPV4_NUMERIC = 4294967295;
|
|
6
|
+
const BATCH_SIZE = 100_000;
|
|
7
|
+
export const migrateIpField = async (db, collectionsToUpgrade, logger) => {
|
|
8
|
+
for (const collection of collectionsToUpgrade) {
|
|
9
|
+
await migrateV4Records(db, collection, logger);
|
|
10
|
+
await migrateV6Records(db, collection, logger);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const migrateV4Records = async (db, collection, logger) => {
|
|
14
|
+
const searchArgs = {
|
|
15
|
+
ipAddress: {
|
|
16
|
+
$type: "number",
|
|
17
|
+
$lte: Number(MAX_IPV4_NUMERIC),
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
let totalModified = 0;
|
|
21
|
+
let processed = 0;
|
|
22
|
+
const count = await db.collection(collection).countDocuments(searchArgs);
|
|
23
|
+
while (true) {
|
|
24
|
+
const docs = await db
|
|
25
|
+
.collection(collection)
|
|
26
|
+
.find(searchArgs, { projection: { ipAddress: 1 } })
|
|
27
|
+
.limit(BATCH_SIZE)
|
|
28
|
+
.toArray();
|
|
29
|
+
if (docs.length === 0)
|
|
30
|
+
break;
|
|
31
|
+
const operations = docs.map((doc) => ({
|
|
32
|
+
updateOne: {
|
|
33
|
+
filter: { _id: doc._id },
|
|
34
|
+
update: {
|
|
35
|
+
$set: {
|
|
36
|
+
ipAddress: {
|
|
37
|
+
lower: doc.ipAddress,
|
|
38
|
+
type: IpAddressType.v4,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
}));
|
|
44
|
+
const bulkResult = await db
|
|
45
|
+
.collection(collection)
|
|
46
|
+
.bulkWrite(operations, { ordered: false });
|
|
47
|
+
totalModified += bulkResult?.modifiedCount || 0;
|
|
48
|
+
processed += docs.length;
|
|
49
|
+
logger.info(() => ({
|
|
50
|
+
msg: `Migrated v4 batch (${docs.length}) [${processed}/${count}] in "${collection}"`,
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
logger.info(() => ({
|
|
54
|
+
msg: `Migrated ${count} v4 records (${totalModified} modified) in "${collection}" collection`,
|
|
55
|
+
}));
|
|
56
|
+
};
|
|
57
|
+
const migrateV6Records = async (db, collection, logger) => {
|
|
58
|
+
const searchArgs = {
|
|
59
|
+
ipAddress: {
|
|
60
|
+
$type: "number",
|
|
61
|
+
$gt: Number(MAX_IPV4_NUMERIC),
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
let totalModified = 0;
|
|
65
|
+
let processed = 0;
|
|
66
|
+
const count = await db.collection(collection).countDocuments(searchArgs);
|
|
67
|
+
while (true) {
|
|
68
|
+
const docs = await db
|
|
69
|
+
.collection(collection)
|
|
70
|
+
.find(searchArgs, { projection: { ipAddress: 1 } })
|
|
71
|
+
.limit(BATCH_SIZE)
|
|
72
|
+
.toArray();
|
|
73
|
+
if (docs.length === 0)
|
|
74
|
+
break;
|
|
75
|
+
const operations = docs.map((doc) => {
|
|
76
|
+
const ipAddress = Address6.fromBigInt(BigInt(doc.ipAddress));
|
|
77
|
+
const compositeIpAddress = getCompositeIpAddress(ipAddress);
|
|
78
|
+
return {
|
|
79
|
+
updateOne: {
|
|
80
|
+
filter: { _id: doc._id },
|
|
81
|
+
update: {
|
|
82
|
+
$set: {
|
|
83
|
+
ipAddress: {
|
|
84
|
+
lower: Decimal128.fromString(compositeIpAddress.lower.toString()),
|
|
85
|
+
upper: Decimal128.fromString((compositeIpAddress.upper || 0n).toString()),
|
|
86
|
+
type: IpAddressType.v6,
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
const bulkResult = await db
|
|
94
|
+
.collection(collection)
|
|
95
|
+
.bulkWrite(operations, { ordered: false });
|
|
96
|
+
totalModified += bulkResult?.modifiedCount || 0;
|
|
97
|
+
processed += docs.length;
|
|
98
|
+
logger.info(() => ({
|
|
99
|
+
msg: `Migrated v6 batch (${docs.length}) [${processed}/${count}] in "${collection}"`,
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
logger.info(() => ({
|
|
103
|
+
msg: `Migrated ${count} v6 records (${totalModified} modified) in "${collection}"`,
|
|
104
|
+
}));
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=migrateIpField.js.map
|