mongo-data-anonymizer 0.2.0 → 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.
Files changed (55) hide show
  1. package/README.md +268 -18
  2. package/dist/anonymization/anonymize.d.ts +50 -8
  3. package/dist/anonymization/anonymize.js +747 -96
  4. package/dist/anonymization/anonymize.js.map +1 -1
  5. package/dist/anonymization/collections.d.ts +12 -0
  6. package/dist/anonymization/collections.js +14 -0
  7. package/dist/anonymization/collections.js.map +1 -0
  8. package/dist/anonymization/database.d.ts +69 -9
  9. package/dist/anonymization/database.js +233 -61
  10. package/dist/anonymization/database.js.map +1 -1
  11. package/dist/anonymization/randomizer.d.ts +8 -0
  12. package/dist/anonymization/randomizer.js +32 -0
  13. package/dist/anonymization/randomizer.js.map +1 -0
  14. package/dist/anonymization/rules.d.ts +60 -0
  15. package/dist/anonymization/rules.js +193 -0
  16. package/dist/anonymization/rules.js.map +1 -0
  17. package/dist/cli.js +11 -4
  18. package/dist/cli.js.map +1 -1
  19. package/dist/config.d.ts +7 -0
  20. package/dist/config.js +182 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/index.d.ts +5 -0
  23. package/dist/index.js +6 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/logger.d.ts +7 -0
  26. package/dist/logger.js +14 -0
  27. package/dist/logger.js.map +1 -0
  28. package/dist/progress.d.ts +25 -0
  29. package/dist/progress.js +74 -0
  30. package/dist/progress.js.map +1 -0
  31. package/dist/run.d.ts +62 -0
  32. package/dist/run.js +365 -0
  33. package/dist/run.js.map +1 -0
  34. package/package.json +48 -30
  35. package/.eslintignore +0 -1
  36. package/.eslintrc.js +0 -25
  37. package/.github/workflows/release.yml +0 -37
  38. package/.github/workflows/test.yml +0 -22
  39. package/.nvmrc +0 -1
  40. package/.prettierrc +0 -7
  41. package/dist/main.d.ts +0 -1
  42. package/dist/main.js +0 -95
  43. package/dist/main.js.map +0 -1
  44. package/dist/utils/field-utils.d.ts +0 -1
  45. package/dist/utils/field-utils.js +0 -18
  46. package/dist/utils/field-utils.js.map +0 -1
  47. package/jest.config.js +0 -8
  48. package/src/anonymization/anonymize.ts +0 -116
  49. package/src/anonymization/database.ts +0 -50
  50. package/src/cli.ts +0 -4
  51. package/src/main.ts +0 -98
  52. package/src/utils/field-utils.ts +0 -16
  53. package/test/anonymizer/anonymizer.test.ts +0 -164
  54. package/test/utils/field-utils.test.ts +0 -31
  55. 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 uri;
3
- private name;
4
- private client;
5
- private db;
6
- constructor(uri: string, name: string);
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
- getCollections(): Promise<string[]>;
10
- getCursor(collectionName: string): import("mongodb").FindCursor<import("mongodb").WithId<import("bson").Document>> | null;
11
- insertAnonymizedBatch(collectionName: string, anonymizedBatch: any[]): Promise<void>;
12
- dropCollectionIfExists(collectionName: string): Promise<void>;
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
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.Database = void 0;
13
- const mongodb_1 = require("mongodb");
14
- const bunyan = require("bunyan");
15
- const log = bunyan.createLogger({ name: "DatabaseHandler" });
16
- class Database {
17
- constructor(uri, name) {
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
- close() {
38
- var _a;
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
- getCollections() {
45
- var _a;
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
- getCursor(collectionName) {
52
- return this.db ? this.db.collection(collectionName).find() : null;
25
+ if (/[/\\. "$*<>:|?]/.test(name)) {
26
+ throw new Error(`The ${label} URI has an invalid database name "${name}"`);
53
27
  }
54
- insertAnonymizedBatch(collectionName, anonymizedBatch) {
55
- return __awaiter(this, void 0, void 0, function* () {
56
- if (this.db) {
57
- yield this.db.collection(collectionName).insertMany(anonymizedBatch);
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
- dropCollectionIfExists(collectionName) {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- if (this.db && (yield this.db.collection(collectionName).countDocuments()) > 0) {
64
- yield this.db.collection(collectionName).drop();
65
- log.info(`Dropped existing collection: ${collectionName}`);
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":";;;;;;;;;;;;AAAA,qCAA0C;AAC1C,iCAAiC;AAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAE7D,MAAa,QAAQ;IAIjB,YAAoB,GAAW,EAAU,IAAY;QAAjC,QAAG,GAAH,GAAG,CAAQ;QAAU,SAAI,GAAJ,IAAI,CAAQ;QAH7C,WAAM,GAAuB,IAAI,CAAC;QAClC,OAAE,GAAc,IAAI,CAAC;IAE2B,CAAC;IAEnD,OAAO;;YACT,IAAI;gBACA,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC;gBACnD,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBAC3B,GAAG,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC;aAC/D;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,cAAe,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;aAC9F;QACL,CAAC;KAAA;IAEK,KAAK;;;YACP,MAAM,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,0CAAE,KAAK,EAAE,CAAA,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;;KAC1C;IAEK,cAAc;;;YAChB,MAAM,WAAW,GAAG,MAAM,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,0CAAE,eAAe,GAAG,OAAO,EAAE,CAAA,CAAC;YAChE,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;;KAClE;IAED,SAAS,CAAC,cAAsB;QAC5B,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC;IAEK,qBAAqB,CAAC,cAAsB,EAAE,eAAsB;;YACtE,IAAI,IAAI,CAAC,EAAE,EAAE;gBACT,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;aACxE;QACL,CAAC;KAAA;IAEK,sBAAsB,CAAC,cAAsB;;YAC/C,IAAI,IAAI,CAAC,EAAE,IAAI,CAAA,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,cAAc,EAAE,IAAG,CAAC,EAAE;gBAC1E,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChD,GAAG,CAAC,IAAI,CAAC,gCAAgC,cAAc,EAAE,CAAC,CAAC;aAC9D;QACL,CAAC;KAAA;CACJ;AA5CD,4BA4CC"}
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;