@prosopo/cli 3.4.6 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +179 -0
- package/dist/RateLimiter.js +4 -0
- package/dist/argv.js +0 -2
- package/dist/bundle/i18nBackend-D6GWR1ra.js +5260 -0
- package/dist/bundle/provider.cli.bundle.js +116378 -0
- package/dist/cjs/RateLimiter.cjs +4 -0
- package/dist/cjs/argv.cjs +0 -2
- package/dist/cjs/cli.cjs +2 -10
- package/dist/cjs/commands/siteKeyRegister.cjs +6 -1
- package/dist/cjs/commands/siteKeyRegisterApi.cjs +6 -1
- package/dist/cjs/start.cjs +20 -10
- package/dist/cli.js +0 -9
- package/dist/commands/siteKeyRegister.js +7 -2
- package/dist/commands/siteKeyRegisterApi.js +7 -2
- package/dist/start.js +20 -10
- package/package.json +23 -25
- package/dist/cjs/commands/migrateIpInCaptchaRecords/getDb.cjs +0 -32
- package/dist/cjs/commands/migrateIpInCaptchaRecords/migrateIpField.cjs +0 -98
- package/dist/cjs/commands/migrateIpInCaptchaRecords/migrateIpInCaptchaRecords.cjs +0 -56
- package/dist/commands/migrateIpInCaptchaRecords/getDb.js +0 -32
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpField.js +0 -98
- package/dist/commands/migrateIpInCaptchaRecords/migrateIpInCaptchaRecords.js +0 -39
|
@@ -1,98 +0,0 @@
|
|
|
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 = 1e5;
|
|
7
|
-
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.collection(collection).find(searchArgs, { projection: { ipAddress: 1 } }).limit(BATCH_SIZE).toArray();
|
|
25
|
-
if (docs.length === 0) break;
|
|
26
|
-
const operations = docs.map((doc) => ({
|
|
27
|
-
updateOne: {
|
|
28
|
-
filter: { _id: doc._id },
|
|
29
|
-
update: {
|
|
30
|
-
$set: {
|
|
31
|
-
ipAddress: {
|
|
32
|
-
lower: doc.ipAddress,
|
|
33
|
-
type: IpAddressType.v4
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}));
|
|
39
|
-
const bulkResult = await db.collection(collection).bulkWrite(operations, { ordered: false });
|
|
40
|
-
totalModified += bulkResult?.modifiedCount || 0;
|
|
41
|
-
processed += docs.length;
|
|
42
|
-
logger.info(() => ({
|
|
43
|
-
msg: `Migrated v4 batch (${docs.length}) [${processed}/${count}] in "${collection}"`
|
|
44
|
-
}));
|
|
45
|
-
}
|
|
46
|
-
logger.info(() => ({
|
|
47
|
-
msg: `Migrated ${count} v4 records (${totalModified} modified) in "${collection}" collection`
|
|
48
|
-
}));
|
|
49
|
-
};
|
|
50
|
-
const migrateV6Records = async (db, collection, logger) => {
|
|
51
|
-
const searchArgs = {
|
|
52
|
-
ipAddress: {
|
|
53
|
-
$type: "number",
|
|
54
|
-
$gt: Number(MAX_IPV4_NUMERIC)
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
let totalModified = 0;
|
|
58
|
-
let processed = 0;
|
|
59
|
-
const count = await db.collection(collection).countDocuments(searchArgs);
|
|
60
|
-
while (true) {
|
|
61
|
-
const docs = await db.collection(collection).find(searchArgs, { projection: { ipAddress: 1 } }).limit(BATCH_SIZE).toArray();
|
|
62
|
-
if (docs.length === 0) break;
|
|
63
|
-
const operations = docs.map((doc) => {
|
|
64
|
-
const ipAddress = Address6.fromBigInt(BigInt(doc.ipAddress));
|
|
65
|
-
const compositeIpAddress = getCompositeIpAddress(ipAddress);
|
|
66
|
-
return {
|
|
67
|
-
updateOne: {
|
|
68
|
-
filter: { _id: doc._id },
|
|
69
|
-
update: {
|
|
70
|
-
$set: {
|
|
71
|
-
ipAddress: {
|
|
72
|
-
lower: Decimal128.fromString(
|
|
73
|
-
compositeIpAddress.lower.toString()
|
|
74
|
-
),
|
|
75
|
-
upper: Decimal128.fromString(
|
|
76
|
-
(compositeIpAddress.upper || 0n).toString()
|
|
77
|
-
),
|
|
78
|
-
type: IpAddressType.v6
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
});
|
|
85
|
-
const bulkResult = await db.collection(collection).bulkWrite(operations, { ordered: false });
|
|
86
|
-
totalModified += bulkResult?.modifiedCount || 0;
|
|
87
|
-
processed += docs.length;
|
|
88
|
-
logger.info(() => ({
|
|
89
|
-
msg: `Migrated v6 batch (${docs.length}) [${processed}/${count}] in "${collection}"`
|
|
90
|
-
}));
|
|
91
|
-
}
|
|
92
|
-
logger.info(() => ({
|
|
93
|
-
msg: `Migrated ${count} v6 records (${totalModified} modified) in "${collection}"`
|
|
94
|
-
}));
|
|
95
|
-
};
|
|
96
|
-
export {
|
|
97
|
-
migrateIpField
|
|
98
|
-
};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { getLogger, LogLevel } from "@prosopo/common";
|
|
2
|
-
import * as z from "zod";
|
|
3
|
-
import { getDb } from "./getDb.js";
|
|
4
|
-
import { migrateIpField } from "./migrateIpField.js";
|
|
5
|
-
const collectionsToUpgrade = [
|
|
6
|
-
"powcaptchas",
|
|
7
|
-
"usercommitments",
|
|
8
|
-
"frictionlesstokens",
|
|
9
|
-
"pendings"
|
|
10
|
-
];
|
|
11
|
-
const migrateIpInCaptchaRecordsCommand = (pair, config, logger) => {
|
|
12
|
-
logger = logger || getLogger(LogLevel.enum.info, "cli.migrate_ip_in_captcha_records");
|
|
13
|
-
return {
|
|
14
|
-
command: "migrateIpInCaptchaRecords",
|
|
15
|
-
describe: "Migrate IP addresses in captcha records",
|
|
16
|
-
builder: (yargs) => yargs.option("uri", {
|
|
17
|
-
type: "string",
|
|
18
|
-
desc: "DB Uri. When skipped, used the default connection based on the current environment"
|
|
19
|
-
}),
|
|
20
|
-
handler: async (argv) => {
|
|
21
|
-
const uri = z.string().parse(argv.uri || "");
|
|
22
|
-
try {
|
|
23
|
-
const db = await getDb(pair, config, uri, logger);
|
|
24
|
-
await migrateIpField(db, collectionsToUpgrade, logger);
|
|
25
|
-
logger.info(() => ({
|
|
26
|
-
msg: "migration completed"
|
|
27
|
-
}));
|
|
28
|
-
} catch (err) {
|
|
29
|
-
logger.error(() => ({
|
|
30
|
-
err,
|
|
31
|
-
msg: "Error migrating captcha records"
|
|
32
|
-
}));
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
export {
|
|
38
|
-
migrateIpInCaptchaRecordsCommand
|
|
39
|
-
};
|