mongo-data-anonymizer 0.2.1 → 0.3.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/README.md +268 -18
- package/dist/anonymization/anonymize.d.ts +50 -8
- package/dist/anonymization/anonymize.js +747 -96
- package/dist/anonymization/anonymize.js.map +1 -1
- package/dist/anonymization/collections.d.ts +12 -0
- package/dist/anonymization/collections.js +14 -0
- package/dist/anonymization/collections.js.map +1 -0
- package/dist/anonymization/database.d.ts +69 -9
- package/dist/anonymization/database.js +233 -61
- package/dist/anonymization/database.js.map +1 -1
- package/dist/anonymization/randomizer.d.ts +8 -0
- package/dist/anonymization/randomizer.js +32 -0
- package/dist/anonymization/randomizer.js.map +1 -0
- package/dist/anonymization/rules.d.ts +60 -0
- package/dist/anonymization/rules.js +193 -0
- package/dist/anonymization/rules.js.map +1 -0
- package/dist/cli.js +11 -4
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.js +182 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +7 -0
- package/dist/logger.js +14 -0
- package/dist/logger.js.map +1 -0
- package/dist/progress.d.ts +25 -0
- package/dist/progress.js +74 -0
- package/dist/progress.js.map +1 -0
- package/dist/run.d.ts +62 -0
- package/dist/run.js +365 -0
- package/dist/run.js.map +1 -0
- package/package.json +43 -29
- package/.eslintignore +0 -1
- package/.eslintrc.js +0 -25
- package/.github/workflows/release.yml +0 -37
- package/.github/workflows/test.yml +0 -22
- package/.nvmrc +0 -1
- package/.prettierrc +0 -7
- package/dist/main.d.ts +0 -1
- package/dist/main.js +0 -95
- package/dist/main.js.map +0 -1
- package/dist/utils/field-utils.d.ts +0 -1
- package/dist/utils/field-utils.js +0 -18
- package/dist/utils/field-utils.js.map +0 -1
- package/jest.config.js +0 -8
- package/src/anonymization/anonymize.ts +0 -116
- package/src/anonymization/database.ts +0 -50
- package/src/cli.ts +0 -4
- package/src/main.ts +0 -98
- package/src/utils/field-utils.ts +0 -16
- package/test/anonymizer/anonymizer.test.ts +0 -164
- package/test/utils/field-utils.test.ts +0 -31
- package/tsconfig.json +0 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anonymize.js","sourceRoot":"","sources":["../../src/anonymization/anonymize.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"anonymize.js","sourceRoot":"","sources":["../../src/anonymization/anonymize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type CollectionAction = 'anonymize' | 'copy' | 'skip';
|
|
2
|
+
export interface CollectionSelection {
|
|
3
|
+
collectionList: string[];
|
|
4
|
+
ignoreCollections: string[];
|
|
5
|
+
copyNonAnonymized: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A collection is anonymized when it is not ignored and either no
|
|
9
|
+
* collection list was given or it is on that list. Anything else is copied
|
|
10
|
+
* as-is with `--copyNonAnonymized`, or skipped otherwise.
|
|
11
|
+
*/
|
|
12
|
+
export declare function decideCollectionAction(name: string, { collectionList, ignoreCollections, copyNonAnonymized }: CollectionSelection): CollectionAction;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A collection is anonymized when it is not ignored and either no
|
|
3
|
+
* collection list was given or it is on that list. Anything else is copied
|
|
4
|
+
* as-is with `--copyNonAnonymized`, or skipped otherwise.
|
|
5
|
+
*/
|
|
6
|
+
export function decideCollectionAction(name, { collectionList, ignoreCollections, copyNonAnonymized }) {
|
|
7
|
+
const selected = !ignoreCollections.includes(name) &&
|
|
8
|
+
(collectionList.length === 0 || collectionList.includes(name));
|
|
9
|
+
if (selected) {
|
|
10
|
+
return 'anonymize';
|
|
11
|
+
}
|
|
12
|
+
return copyNonAnonymized ? 'copy' : 'skip';
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=collections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/anonymization/collections.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAuB;IAE7E,MAAM,QAAQ,GACZ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjC,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjE,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7C,CAAC"}
|
|
@@ -1,13 +1,73 @@
|
|
|
1
|
+
import { type CreateIndexesOptions, type Db, type Document, type FindCursor, type IndexDescription } from 'mongodb';
|
|
2
|
+
export interface CollectionInfo {
|
|
3
|
+
name: string;
|
|
4
|
+
/** `collection`, `view` or `timeseries`. */
|
|
5
|
+
type: string;
|
|
6
|
+
options: Document;
|
|
7
|
+
/** Collection UUID (hex); views have none. */
|
|
8
|
+
uuid?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Prefix of the short-lived collections `writesReachSource` creates. */
|
|
11
|
+
export declare const PROBE_PREFIX = "anonymizer_probe_";
|
|
12
|
+
/**
|
|
13
|
+
* The database named in a MongoDB URI, e.g. `app` in
|
|
14
|
+
* `mongodb://user:pass@host:27017/app?authSource=admin`. Throws when the URI
|
|
15
|
+
* names none (the driver would then silently use `test`) or an invalid one.
|
|
16
|
+
*/
|
|
17
|
+
export declare function databaseNameFromUri(uri: string, label: string): string;
|
|
1
18
|
export declare class Database {
|
|
2
|
-
private
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
19
|
+
#private;
|
|
20
|
+
readonly label: string;
|
|
21
|
+
constructor(uri: string, label: string);
|
|
22
|
+
get db(): Db;
|
|
23
|
+
get name(): string;
|
|
7
24
|
connect(): Promise<void>;
|
|
8
25
|
close(): Promise<void>;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
26
|
+
/** User collections, views and time series collections; `system.*` and probes are left out. */
|
|
27
|
+
listCollections(): Promise<CollectionInfo[]>;
|
|
28
|
+
/** Probe collections left behind by an interrupted run. */
|
|
29
|
+
listProbes(): Promise<string[]>;
|
|
30
|
+
/** False when connected directly to a secondary, which may lag behind. */
|
|
31
|
+
isWritablePrimary(): Promise<boolean>;
|
|
32
|
+
/** Reads from the primary, so a collection created a moment ago is seen. */
|
|
33
|
+
collectionExists(name: string): Promise<boolean>;
|
|
34
|
+
dropCollection(name: string): Promise<void>;
|
|
35
|
+
createCollection(name: string, options: Document): Promise<void>;
|
|
36
|
+
find(name: string, batchSize: number): FindCursor<Document>;
|
|
37
|
+
/** The first `size` documents in natural order (cheap, unlike `$sample`); 0 means all. */
|
|
38
|
+
sample(name: string, size: number): FindCursor<Document>;
|
|
39
|
+
estimatedCount(name: string): Promise<number>;
|
|
40
|
+
insertMany(name: string, documents: Document[]): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Index specs, without the `_id` and clustered indexes (created with the
|
|
43
|
+
* collection) and without the server-populated fields that `createIndexes`
|
|
44
|
+
* rejects.
|
|
45
|
+
*/
|
|
46
|
+
listIndexes(name: string): Promise<IndexDescription[]>;
|
|
47
|
+
createIndexes(name: string, indexes: IndexDescription[], options: CreateIndexesOptions): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Whether index builds use a commit quorum: a replica set member, or a
|
|
50
|
+
* mongos routing to replica set shards.
|
|
51
|
+
*/
|
|
52
|
+
isReplicaSet(): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* Best-effort identity of the deployment: the normalized seed hosts from the
|
|
55
|
+
* URI plus, for replica sets, the member addresses the server reports.
|
|
56
|
+
*/
|
|
57
|
+
serverHosts(): Promise<Set<string>>;
|
|
13
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Read-only check whether both handles look like the same database: a
|
|
61
|
+
* collection UUID present on both sides (`uuid`), or the same database name
|
|
62
|
+
* on overlapping hosts (`hosts`). Both can also happen for different
|
|
63
|
+
* databases (a copy restored with --preserveUUID, identical docker stacks);
|
|
64
|
+
* `writesReachSource` is the conclusive check.
|
|
65
|
+
*/
|
|
66
|
+
export declare function looksLikeSameDatabase(a: Database, b: Database): Promise<'uuid' | 'hosts' | null>;
|
|
67
|
+
/**
|
|
68
|
+
* Creates an empty, uniquely named collection in `target` and checks whether
|
|
69
|
+
* it shows up in `source`, which is conclusive whatever the address used.
|
|
70
|
+
* When the source is a secondary reached directly, the lookup is retried for
|
|
71
|
+
* a few seconds to let the probe replicate. The probe is dropped right away.
|
|
72
|
+
*/
|
|
73
|
+
export declare function writesReachSource(source: Database, target: Database, warn: (message: string) => void): Promise<boolean>;
|
|
@@ -1,71 +1,243 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
this.uri = uri;
|
|
19
|
-
this.name = name;
|
|
20
|
-
this.client = null;
|
|
21
|
-
this.db = null;
|
|
22
|
-
}
|
|
23
|
-
connect() {
|
|
24
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
25
|
-
try {
|
|
26
|
-
log.info(`Connecting to ${this.name} database...`);
|
|
27
|
-
this.client = new mongodb_1.MongoClient(this.uri);
|
|
28
|
-
yield this.client.connect();
|
|
29
|
-
this.db = this.client.db();
|
|
30
|
-
log.info(`Successfully connected to ${this.name} database`);
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
throw new Error(`Failed to connect to ${this.name} database: ${error.message}`);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { setTimeout as delay } from 'node:timers/promises';
|
|
3
|
+
import { MongoClient, } from 'mongodb';
|
|
4
|
+
/** Prefix of the short-lived collections `writesReachSource` creates. */
|
|
5
|
+
export const PROBE_PREFIX = 'anonymizer_probe_';
|
|
6
|
+
/**
|
|
7
|
+
* The database named in a MongoDB URI, e.g. `app` in
|
|
8
|
+
* `mongodb://user:pass@host:27017/app?authSource=admin`. Throws when the URI
|
|
9
|
+
* names none (the driver would then silently use `test`) or an invalid one.
|
|
10
|
+
*/
|
|
11
|
+
export function databaseNameFromUri(uri, label) {
|
|
12
|
+
const rest = uri.replace(/^mongodb(\+srv)?:\/\//i, '');
|
|
13
|
+
const slash = rest.indexOf('/');
|
|
14
|
+
const raw = slash === -1 ? '' : (rest.slice(slash + 1).split('?')[0] ?? '');
|
|
15
|
+
let name;
|
|
16
|
+
try {
|
|
17
|
+
name = decodeURIComponent(raw);
|
|
36
18
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
40
|
-
yield ((_a = this === null || this === void 0 ? void 0 : this.client) === null || _a === void 0 ? void 0 : _a.close());
|
|
41
|
-
log.info(`Closed database connection`);
|
|
42
|
-
});
|
|
19
|
+
catch {
|
|
20
|
+
throw new Error(`The ${label} URI has an invalid database name "${raw}"`);
|
|
43
21
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
const collections = yield ((_a = this === null || this === void 0 ? void 0 : this.db) === null || _a === void 0 ? void 0 : _a.listCollections().toArray());
|
|
48
|
-
return collections ? collections.map((item) => item.name) : [];
|
|
49
|
-
});
|
|
22
|
+
if (!name) {
|
|
23
|
+
throw new Error(`The ${label} URI must name a database, e.g. mongodb://host:27017/mydb`);
|
|
50
24
|
}
|
|
51
|
-
|
|
52
|
-
|
|
25
|
+
if (/[/\\. "$*<>:|?]/.test(name)) {
|
|
26
|
+
throw new Error(`The ${label} URI has an invalid database name "${name}"`);
|
|
53
27
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
28
|
+
return name;
|
|
29
|
+
}
|
|
30
|
+
const LOOPBACK_HOSTS = new Set([
|
|
31
|
+
'localhost',
|
|
32
|
+
'127.0.0.1',
|
|
33
|
+
'[::1]',
|
|
34
|
+
'::1',
|
|
35
|
+
'0.0.0.0',
|
|
36
|
+
]);
|
|
37
|
+
export class Database {
|
|
38
|
+
label;
|
|
39
|
+
#client;
|
|
40
|
+
#db = null;
|
|
41
|
+
constructor(uri, label) {
|
|
42
|
+
this.label = label;
|
|
43
|
+
databaseNameFromUri(uri, label);
|
|
44
|
+
this.#client = new MongoClient(uri);
|
|
45
|
+
}
|
|
46
|
+
get db() {
|
|
47
|
+
if (!this.#db) {
|
|
48
|
+
throw new Error(`The ${this.label} database is not connected`);
|
|
49
|
+
}
|
|
50
|
+
return this.#db;
|
|
51
|
+
}
|
|
52
|
+
get name() {
|
|
53
|
+
return this.db.databaseName;
|
|
54
|
+
}
|
|
55
|
+
async connect() {
|
|
56
|
+
try {
|
|
57
|
+
await this.#client.connect();
|
|
58
|
+
this.#db = this.#client.db();
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
throw new Error(`Failed to connect to ${this.label} database: ${error.message}`, { cause: error });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async close() {
|
|
65
|
+
await this.#client.close();
|
|
66
|
+
}
|
|
67
|
+
/** User collections, views and time series collections; `system.*` and probes are left out. */
|
|
68
|
+
async listCollections() {
|
|
69
|
+
const collections = await this.db.listCollections().toArray();
|
|
70
|
+
return collections
|
|
71
|
+
.filter((info) => !info.name.startsWith('system.') &&
|
|
72
|
+
!info.name.startsWith(PROBE_PREFIX))
|
|
73
|
+
.map((info) => {
|
|
74
|
+
const { options, info: details } = info;
|
|
75
|
+
return {
|
|
76
|
+
name: info.name,
|
|
77
|
+
type: info.type ?? 'collection',
|
|
78
|
+
options: options ?? {},
|
|
79
|
+
uuid: details?.uuid?.toHexString(),
|
|
80
|
+
};
|
|
81
|
+
})
|
|
82
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
83
|
+
}
|
|
84
|
+
/** Probe collections left behind by an interrupted run. */
|
|
85
|
+
async listProbes() {
|
|
86
|
+
const probes = await this.db
|
|
87
|
+
.listCollections({ name: { $regex: `^${PROBE_PREFIX}` } }, { nameOnly: true })
|
|
88
|
+
.toArray();
|
|
89
|
+
return probes.map(({ name }) => name);
|
|
90
|
+
}
|
|
91
|
+
/** False when connected directly to a secondary, which may lag behind. */
|
|
92
|
+
async isWritablePrimary() {
|
|
93
|
+
try {
|
|
94
|
+
const hello = await this.db.admin().command({ hello: 1 });
|
|
95
|
+
return hello.isWritablePrimary !== false;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Reads from the primary, so a collection created a moment ago is seen. */
|
|
102
|
+
async collectionExists(name) {
|
|
103
|
+
const found = await this.db
|
|
104
|
+
.listCollections({ name }, { nameOnly: true, readPreference: 'primary' })
|
|
105
|
+
.toArray();
|
|
106
|
+
return found.length > 0;
|
|
107
|
+
}
|
|
108
|
+
async dropCollection(name) {
|
|
109
|
+
await this.db.collection(name).drop();
|
|
110
|
+
}
|
|
111
|
+
async createCollection(name, options) {
|
|
112
|
+
await this.db.createCollection(name, options);
|
|
60
113
|
}
|
|
61
|
-
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
114
|
+
find(name, batchSize) {
|
|
115
|
+
return this.db.collection(name).find({}, { batchSize });
|
|
116
|
+
}
|
|
117
|
+
/** The first `size` documents in natural order (cheap, unlike `$sample`); 0 means all. */
|
|
118
|
+
sample(name, size) {
|
|
119
|
+
return this.db.collection(name).find({}, { limit: size });
|
|
120
|
+
}
|
|
121
|
+
async estimatedCount(name) {
|
|
122
|
+
return this.db.collection(name).estimatedDocumentCount();
|
|
123
|
+
}
|
|
124
|
+
async insertMany(name, documents) {
|
|
125
|
+
if (documents.length > 0) {
|
|
126
|
+
await this.db.collection(name).insertMany(documents, { ordered: true });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Index specs, without the `_id` and clustered indexes (created with the
|
|
131
|
+
* collection) and without the server-populated fields that `createIndexes`
|
|
132
|
+
* rejects.
|
|
133
|
+
*/
|
|
134
|
+
async listIndexes(name) {
|
|
135
|
+
const indexes = await this.db.collection(name).listIndexes().toArray();
|
|
136
|
+
return indexes
|
|
137
|
+
.filter((index) => index.name !== '_id_' && index.clustered !== true)
|
|
138
|
+
.map(({ v: _v, ns: _ns, ...spec }) => spec);
|
|
139
|
+
}
|
|
140
|
+
async createIndexes(name, indexes, options) {
|
|
141
|
+
await this.db.collection(name).createIndexes(indexes, options);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Whether index builds use a commit quorum: a replica set member, or a
|
|
145
|
+
* mongos routing to replica set shards.
|
|
146
|
+
*/
|
|
147
|
+
async isReplicaSet() {
|
|
148
|
+
try {
|
|
149
|
+
const hello = await this.db.admin().command({ hello: 1 });
|
|
150
|
+
return typeof hello.setName === 'string' || hello.msg === 'isdbgrid';
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Best-effort identity of the deployment: the normalized seed hosts from the
|
|
158
|
+
* URI plus, for replica sets, the member addresses the server reports.
|
|
159
|
+
*/
|
|
160
|
+
async serverHosts() {
|
|
161
|
+
const options = this.#client.options;
|
|
162
|
+
const hosts = new Set(options.srvHost
|
|
163
|
+
? [`srv:${options.srvHost.toLowerCase()}`]
|
|
164
|
+
: options.hosts.map((host) => normalizeHost(host.toString())));
|
|
165
|
+
try {
|
|
166
|
+
const hello = await this.db.admin().command({ hello: 1 });
|
|
167
|
+
for (const member of [hello.me, ...(hello.hosts ?? [])]) {
|
|
168
|
+
if (typeof member === 'string')
|
|
169
|
+
hosts.add(normalizeHost(member));
|
|
66
170
|
}
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
// Not permitted / not supported: rely on the hosts from the URI.
|
|
174
|
+
}
|
|
175
|
+
return hosts;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function normalizeHost(host) {
|
|
179
|
+
const match = /^(.*):(\d+)$/.exec(host.toLowerCase());
|
|
180
|
+
const [name, port] = match
|
|
181
|
+
? [match[1] ?? '', match[2] ?? '']
|
|
182
|
+
: [host.toLowerCase(), '27017'];
|
|
183
|
+
return `${LOOPBACK_HOSTS.has(name) ? 'loopback' : name}:${port}`;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Read-only check whether both handles look like the same database: a
|
|
187
|
+
* collection UUID present on both sides (`uuid`), or the same database name
|
|
188
|
+
* on overlapping hosts (`hosts`). Both can also happen for different
|
|
189
|
+
* databases (a copy restored with --preserveUUID, identical docker stacks);
|
|
190
|
+
* `writesReachSource` is the conclusive check.
|
|
191
|
+
*/
|
|
192
|
+
export async function looksLikeSameDatabase(a, b) {
|
|
193
|
+
const [collectionsA, collectionsB] = await Promise.all([
|
|
194
|
+
a.listCollections(),
|
|
195
|
+
b.listCollections(),
|
|
196
|
+
]);
|
|
197
|
+
const uuidsB = new Set(collectionsB.map((info) => info.uuid).filter(Boolean));
|
|
198
|
+
if (collectionsA.some((info) => info.uuid && uuidsB.has(info.uuid))) {
|
|
199
|
+
return 'uuid';
|
|
200
|
+
}
|
|
201
|
+
if (a.name !== b.name) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
const [hostsA, hostsB] = await Promise.all([
|
|
205
|
+
a.serverHosts(),
|
|
206
|
+
b.serverHosts(),
|
|
207
|
+
]);
|
|
208
|
+
return [...hostsA].some((host) => hostsB.has(host)) ? 'hosts' : null;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Creates an empty, uniquely named collection in `target` and checks whether
|
|
212
|
+
* it shows up in `source`, which is conclusive whatever the address used.
|
|
213
|
+
* When the source is a secondary reached directly, the lookup is retried for
|
|
214
|
+
* a few seconds to let the probe replicate. The probe is dropped right away.
|
|
215
|
+
*/
|
|
216
|
+
export async function writesReachSource(source, target, warn) {
|
|
217
|
+
const probe = `${PROBE_PREFIX}${randomBytes(8).toString('hex')}`;
|
|
218
|
+
try {
|
|
219
|
+
await target.createCollection(probe, {});
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
throw new Error(`Could not create the probe collection ${probe} in the target to check that it is not the source (the target user needs permission to create and drop collections): ${error.message}`, { cause: error });
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
const attempts = (await source.isWritablePrimary()) ? 1 : 25;
|
|
226
|
+
for (let attempt = 1; attempt <= attempts; attempt++) {
|
|
227
|
+
if (await source.collectionExists(probe))
|
|
228
|
+
return true;
|
|
229
|
+
if (attempt < attempts)
|
|
230
|
+
await delay(200);
|
|
231
|
+
}
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
throw new Error(`Could not look for the probe collection ${probe} in the source: ${error.message}`, { cause: error });
|
|
236
|
+
}
|
|
237
|
+
finally {
|
|
238
|
+
await target.dropCollection(probe).catch((error) => {
|
|
239
|
+
warn(`Could not drop the probe collection ${probe} from the target; drop it by hand: ${error.message}`);
|
|
67
240
|
});
|
|
68
241
|
}
|
|
69
242
|
}
|
|
70
|
-
exports.Database = Database;
|
|
71
243
|
//# sourceMappingURL=database.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/anonymization/database.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/anonymization/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Randomizer } from '@faker-js/faker';
|
|
2
|
+
/**
|
|
3
|
+
* A small, fast PRNG (sfc32) for faker. The anonymizer re-seeds faker for
|
|
4
|
+
* every value; faker's default Mersenne Twister takes ~25 µs to re-seed,
|
|
5
|
+
* which dominated anonymization time. sfc32 takes its four 32-bit words of
|
|
6
|
+
* state straight from the seed (the HMAC digest), so re-seeding is nearly free.
|
|
7
|
+
*/
|
|
8
|
+
export declare function sfc32Randomizer(): Randomizer;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small, fast PRNG (sfc32) for faker. The anonymizer re-seeds faker for
|
|
3
|
+
* every value; faker's default Mersenne Twister takes ~25 µs to re-seed,
|
|
4
|
+
* which dominated anonymization time. sfc32 takes its four 32-bit words of
|
|
5
|
+
* state straight from the seed (the HMAC digest), so re-seeding is nearly free.
|
|
6
|
+
*/
|
|
7
|
+
export function sfc32Randomizer() {
|
|
8
|
+
let a = 0;
|
|
9
|
+
let b = 0;
|
|
10
|
+
let c = 0;
|
|
11
|
+
let d = 1;
|
|
12
|
+
const next = () => {
|
|
13
|
+
const t = (((a + b) | 0) + d) | 0;
|
|
14
|
+
d = (d + 1) | 0;
|
|
15
|
+
a = b ^ (b >>> 9);
|
|
16
|
+
b = (c + (c << 3)) | 0;
|
|
17
|
+
c = (c << 21) | (c >>> 11);
|
|
18
|
+
c = (c + t) | 0;
|
|
19
|
+
return (t >>> 0) / 4294967296;
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
next,
|
|
23
|
+
seed(seed) {
|
|
24
|
+
const words = Array.isArray(seed) ? seed : [seed];
|
|
25
|
+
[a = 0, b = 0, c = 0, d = 1] = words.map((word) => word | 0);
|
|
26
|
+
// Mix the state so that similar seeds don't give similar first values.
|
|
27
|
+
for (let i = 0; i < 12; i++)
|
|
28
|
+
next();
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=randomizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"randomizer.js","sourceRoot":"","sources":["../../src/anonymization/randomizer.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,MAAM,IAAI,GAAG,GAAW,EAAE;QACxB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAChC,CAAC,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,IAAI,CAAC,IAAuB;YAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC7D,uEAAuE;YACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;gBAAE,IAAI,EAAE,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A field rule, as written on the command line:
|
|
3
|
+
*
|
|
4
|
+
* [collection.]field[:replacement]
|
|
5
|
+
*
|
|
6
|
+
* `collection` is everything before the last `.` (collection names may
|
|
7
|
+
* contain dots), `replacement` is everything after the first `:` (so it may
|
|
8
|
+
* itself contain `:`, e.g. a URL). `field` may contain `*` wildcards.
|
|
9
|
+
*/
|
|
10
|
+
export interface FieldRule {
|
|
11
|
+
collection: string | null;
|
|
12
|
+
/** Lower-cased field name or pattern; matched case-insensitively against keys at any depth. */
|
|
13
|
+
field: string;
|
|
14
|
+
replacement: string | null;
|
|
15
|
+
/** Set when `field` contains `*`. */
|
|
16
|
+
pattern: RegExp | null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Fields anonymized when --fieldList doesn't replace them. Patterns end in
|
|
20
|
+
* the personal word, so `orderEmail` matches `*email` but `emailTemplate`
|
|
21
|
+
* and `emailVerified` don't.
|
|
22
|
+
*/
|
|
23
|
+
export declare const DEFAULT_FIELDS: string[];
|
|
24
|
+
/**
|
|
25
|
+
* How keys and rule fields are compared: case-insensitively and ignoring
|
|
26
|
+
* `_` and `-`, so `first_name`, `first-name` and `firstName` are the same key.
|
|
27
|
+
*/
|
|
28
|
+
export declare function normalizeKey(key: string): string;
|
|
29
|
+
export declare function parseFieldRule(rule: string): FieldRule;
|
|
30
|
+
/**
|
|
31
|
+
* Resolves the `--fieldList` option against the default fields.
|
|
32
|
+
*
|
|
33
|
+
* Every item may carry its own modifier:
|
|
34
|
+
* - `field` : explicit field; if any are given, they replace the defaults
|
|
35
|
+
* - `+field` : added to the list
|
|
36
|
+
* - `-field` : removed from the list
|
|
37
|
+
*
|
|
38
|
+
* So `+age,-*email` means "the defaults, plus age, minus *email". A removal
|
|
39
|
+
* must name an existing rule exactly; anything else is an error rather than
|
|
40
|
+
* a silent no-op.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getFieldList(fieldListOption: string | undefined, defaultFields?: string[]): string[];
|
|
43
|
+
/**
|
|
44
|
+
* The rules that apply to one collection. Lookup order: the collection's own
|
|
45
|
+
* rules before global ones, and within each, an exact field name before a
|
|
46
|
+
* pattern. So `users.*name:REDACTED` overrides a global `name`.
|
|
47
|
+
*/
|
|
48
|
+
export declare class CollectionRules {
|
|
49
|
+
#private;
|
|
50
|
+
constructor(rules: FieldRule[]);
|
|
51
|
+
/** The rule for a document key, if any. */
|
|
52
|
+
match(key: string): FieldRule | undefined;
|
|
53
|
+
/** Field names and patterns, for reports. */
|
|
54
|
+
get fields(): string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Rules that apply to a collection: its own rules, then the global ones, so
|
|
58
|
+
* a collection-scoped rule takes precedence over a global rule.
|
|
59
|
+
*/
|
|
60
|
+
export declare function rulesForCollection(rules: FieldRule[], collectionName: string): CollectionRules;
|