@prosopo/database 3.15.0 → 3.15.1
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/.turbo/turbo-build$colon$cjs.log +7 -6
- package/.turbo/turbo-build$colon$tsc.log +16 -16
- package/.turbo/turbo-build.log +7 -6
- package/CHANGELOG.md +24 -0
- package/dist/base/mongo.d.ts.map +1 -1
- package/dist/base/mongo.js +14 -8
- package/dist/base/mongo.js.map +1 -1
- package/dist/cjs/base/mongo.cjs +14 -8
- package/dist/cjs/databases/captcha.cjs +3 -4
- package/dist/cjs/index.cjs +3 -0
- package/dist/cjs/mongooseOptions.cjs +67 -0
- package/dist/databases/captcha.js +1 -1
- package/dist/databases/captcha.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/mongooseOptions.d.ts +11 -0
- package/dist/mongooseOptions.d.ts.map +1 -0
- package/dist/mongooseOptions.js +67 -0
- package/dist/mongooseOptions.js.map +1 -0
- package/dist/tests/mongoGlobalSetup.d.ts +2 -0
- package/dist/tests/mongoGlobalSetup.d.ts.map +1 -0
- package/dist/tests/mongoGlobalSetup.js +5 -0
- package/dist/tests/mongoGlobalSetup.js.map +1 -0
- package/dist/tests/mongooseOptions.unit.test.d.ts +2 -0
- package/dist/tests/mongooseOptions.unit.test.d.ts.map +1 -0
- package/dist/tests/mongooseOptions.unit.test.js +157 -0
- package/dist/tests/mongooseOptions.unit.test.js.map +1 -0
- package/package.json +9 -9
- package/vite.test.config.ts +12 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/database@3.15.
|
|
2
|
+
> @prosopo/database@3.15.1 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -37,16 +37,17 @@ ViteCommonJSConfig: .
|
|
|
37
37
|
Bundle build started
|
|
38
38
|
transforming...
|
|
39
39
|
Build end
|
|
40
|
-
[32m✓[39m
|
|
40
|
+
[32m✓[39m 11 modules transformed.
|
|
41
41
|
rendering chunks...
|
|
42
42
|
[2mdist/cjs/[22m[36mbase/index.cjs [39m[1m[2m 0.28 kB[22m[1m[22m
|
|
43
43
|
[2mdist/cjs/[22m[36mbase/mongoMemory.cjs [39m[1m[2m 0.71 kB[22m[1m[22m
|
|
44
|
-
[2mdist/cjs/[22m[36mindex.cjs [39m[1m[2m 1.02 kB[22m[1m[22m
|
|
45
44
|
[2mdist/cjs/[22m[36mdatabases/index.cjs [39m[1m[2m 1.02 kB[22m[1m[22m
|
|
45
|
+
[2mdist/cjs/[22m[36mindex.cjs [39m[1m[2m 1.22 kB[22m[1m[22m
|
|
46
46
|
[2mdist/cjs/[22m[36mdatabases/client.cjs [39m[1m[2m 1.91 kB[22m[1m[22m
|
|
47
|
+
[2mdist/cjs/[22m[36mmongooseOptions.cjs [39m[1m[2m 2.42 kB[22m[1m[22m
|
|
47
48
|
[2mdist/cjs/[22m[36mdatabases/centralDbStreamer.cjs [39m[1m[2m 4.20 kB[22m[1m[22m
|
|
48
|
-
[2mdist/cjs/[22m[36mbase/mongo.cjs [39m[1m[2m 4.
|
|
49
|
-
[2mdist/cjs/[22m[36mdatabases/captcha.cjs [39m[1m[2m 7.
|
|
49
|
+
[2mdist/cjs/[22m[36mbase/mongo.cjs [39m[1m[2m 4.79 kB[22m[1m[22m
|
|
50
|
+
[2mdist/cjs/[22m[36mdatabases/captcha.cjs [39m[1m[2m 7.54 kB[22m[1m[22m
|
|
50
51
|
[2mdist/cjs/[22m[36mredisCache.cjs [39m[1m[2m12.40 kB[22m[1m[22m
|
|
51
52
|
[2mdist/cjs/[22m[36mdatabases/provider.cjs [39m[1m[2m69.92 kB[22m[1m[22m
|
|
52
|
-
[32m✓ built in
|
|
53
|
+
[32m✓ built in 347ms[39m
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/database@3.15.
|
|
2
|
+
> @prosopo/database@3.15.1 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
3:25:03 PM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../locale/tsconfig.json
|
|
8
8
|
* ../util/tsconfig.json
|
|
@@ -17,31 +17,31 @@
|
|
|
17
17
|
* ../types-database/tsconfig.json
|
|
18
18
|
* tsconfig.json
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
3:25:03 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
3:25:03 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
3:25:03 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
3:25:03 PM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
3:25:03 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
3:25:03 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/procaptcha/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
3:25:03 PM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/error.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
3:25:03 PM - Project '../api-route/tsconfig.json' is up to date because newest input '../api-route/src/apiRoutes.ts' is older than output '../api-route/tsconfig.tsbuildinfo'
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
3:25:03 PM - Project '../redis-client/tsconfig.json' is up to date because newest input '../redis-client/src/redisClient.ts' is older than output '../redis-client/tsconfig.tsbuildinfo'
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
3:25:03 PM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
3:25:03 PM - Project '../user-access-policy/tsconfig.json' is up to date because newest input '../user-access-policy/src/ruleRecord.ts' is older than output '../user-access-policy/tsconfig.tsbuildinfo'
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
3:25:03 PM - Project '../types-database/tsconfig.json' is up to date because newest input '../types-database/src/types/captcha.ts' is older than output '../types-database/tsconfig.tsbuildinfo'
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
3:25:03 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
3:25:03 PM - Building project '/home/runner/work/captcha/captcha/packages/database/tsconfig.json'...
|
|
47
47
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/database@3.15.
|
|
2
|
+
> @prosopo/database@3.15.1 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/database@3.15.
|
|
6
|
+
> @prosopo/database@3.15.1 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -41,16 +41,17 @@ ViteEsmConfig: .
|
|
|
41
41
|
Bundle build started
|
|
42
42
|
transforming...
|
|
43
43
|
Build end
|
|
44
|
-
[32m✓[39m
|
|
44
|
+
[32m✓[39m 11 modules transformed.
|
|
45
45
|
rendering chunks...
|
|
46
46
|
[2mdist/[22m[36mbase/index.js [39m[1m[2m 0.15 kB[22m[1m[22m
|
|
47
47
|
[2mdist/[22m[36mbase/mongoMemory.js [39m[1m[2m 0.59 kB[22m[1m[22m
|
|
48
|
-
[2mdist/[22m[36mindex.js [39m[1m[2m 0.70 kB[22m[1m[22m
|
|
49
48
|
[2mdist/[22m[36mdatabases/index.js [39m[1m[2m 0.75 kB[22m[1m[22m
|
|
49
|
+
[2mdist/[22m[36mindex.js [39m[1m[2m 0.84 kB[22m[1m[22m
|
|
50
50
|
[2mdist/[22m[36mdatabases/client.js [39m[1m[2m 1.79 kB[22m[1m[22m
|
|
51
|
+
[2mdist/[22m[36mmongooseOptions.js [39m[1m[2m 2.28 kB[22m[1m[22m
|
|
51
52
|
[2mdist/[22m[36mdatabases/centralDbStreamer.js [39m[1m[2m 4.09 kB[22m[1m[22m
|
|
52
|
-
[2mdist/[22m[36mbase/mongo.js [39m[1m[2m 4.
|
|
53
|
-
[2mdist/[22m[36mdatabases/captcha.js [39m[1m[2m 7.
|
|
53
|
+
[2mdist/[22m[36mbase/mongo.js [39m[1m[2m 4.34 kB[22m[1m[22m
|
|
54
|
+
[2mdist/[22m[36mdatabases/captcha.js [39m[1m[2m 7.46 kB[22m[1m[22m
|
|
54
55
|
[2mdist/[22m[36mredisCache.js [39m[1m[2m12.30 kB[22m[1m[22m
|
|
55
56
|
[2mdist/[22m[36mdatabases/provider.js [39m[1m[2m69.72 kB[22m[1m[22m
|
|
56
57
|
[32m✓ built in 518ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @prosopo/database
|
|
2
2
|
|
|
3
|
+
## 3.15.1
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- 9fe3c06: make util fn for mongoose connection config, standardise mongoose connections
|
|
7
|
+
- 11f1e8c: Replace vague logger scopes (empty strings, import.meta.url, generic "CLI") with structured colon-delimited names following the convention package:subsystem:action.
|
|
8
|
+
- Updated dependencies [dfb0c53]
|
|
9
|
+
- Updated dependencies [7ebb78f]
|
|
10
|
+
- Updated dependencies [7daea2e]
|
|
11
|
+
- Updated dependencies [849af99]
|
|
12
|
+
- Updated dependencies [a5ba27b]
|
|
13
|
+
- Updated dependencies [948d36b]
|
|
14
|
+
- Updated dependencies [41e0e11]
|
|
15
|
+
- Updated dependencies [11f1e8c]
|
|
16
|
+
- Updated dependencies [3c80664]
|
|
17
|
+
- Updated dependencies [b166037]
|
|
18
|
+
- Updated dependencies [1111ff2]
|
|
19
|
+
- @prosopo/common@3.1.41
|
|
20
|
+
- @prosopo/logger@2.0.0
|
|
21
|
+
- @prosopo/user-access-policy@3.10.9
|
|
22
|
+
- @prosopo/util@3.3.2
|
|
23
|
+
- @prosopo/types@4.9.0
|
|
24
|
+
- @prosopo/redis-client@1.0.26
|
|
25
|
+
- @prosopo/types-database@4.11.1
|
|
26
|
+
|
|
3
27
|
## 3.15.0
|
|
4
28
|
### Minor Changes
|
|
5
29
|
|
package/dist/base/mongo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../../src/base/mongo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../../src/base/mongo.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,QAAQ,EAAE,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAcrD,qBAAa,aAAc,YAAW,SAAS;IAC9C,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,UAAS;IAClB,OAAO,CAAC,UAAU,CAAC,CAAgB;gBAGlC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM;IAgBhB,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,aAAa,IAAI,QAAQ,CAAC,UAAU;IAa9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8GxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO5B"}
|
package/dist/base/mongo.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { fileURLToPath } from "node:url";
|
|
1
2
|
import { ProsopoDBError } from "@prosopo/common";
|
|
2
3
|
import { getLogger } from "@prosopo/logger";
|
|
3
|
-
import { ServerApiVersion } from "mongodb";
|
|
4
4
|
import mongoose from "mongoose";
|
|
5
|
+
import { getMongoConnectionOptions } from "../mongooseOptions.js";
|
|
5
6
|
mongoose.set("strictQuery", false);
|
|
6
7
|
const DEFAULT_ENDPOINT = "mongodb://127.0.0.1:27017";
|
|
7
8
|
class MongoDatabase {
|
|
@@ -18,7 +19,7 @@ class MongoDatabase {
|
|
|
18
19
|
this._url = parsedUrl.toString();
|
|
19
20
|
this.safeURL = this.url.replace(/\w+:\w+/, "<Credentials>");
|
|
20
21
|
this.dbname = dbname || parsedUrl.pathname.replace("/", "");
|
|
21
|
-
this.logger = logger || getLogger("info",
|
|
22
|
+
this.logger = logger || getLogger("info", "database:mongo");
|
|
22
23
|
}
|
|
23
24
|
get url() {
|
|
24
25
|
return this._url;
|
|
@@ -56,12 +57,17 @@ class MongoDatabase {
|
|
|
56
57
|
return this.connecting;
|
|
57
58
|
}
|
|
58
59
|
this.connecting = new Promise((resolve, reject) => {
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
const appName = fileURLToPath(import.meta.url);
|
|
61
|
+
const connection = mongoose.createConnection(
|
|
62
|
+
this.url,
|
|
63
|
+
getMongoConnectionOptions({
|
|
64
|
+
url: this.url,
|
|
65
|
+
appName,
|
|
66
|
+
dbName: this.dbname,
|
|
67
|
+
maxPoolSize: 50,
|
|
68
|
+
minPoolSize: 5
|
|
69
|
+
})
|
|
70
|
+
);
|
|
65
71
|
const onConnected = () => {
|
|
66
72
|
this.logger.debug(() => ({
|
|
67
73
|
data: { mongoUrl: this.safeURL },
|
package/dist/base/mongo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../src/base/mongo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mongo.js","sourceRoot":"","sources":["../../src/base/mongo.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/base/mongo.cjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const node_url = require("node:url");
|
|
3
4
|
const common = require("@prosopo/common");
|
|
4
5
|
const logger = require("@prosopo/logger");
|
|
5
|
-
const mongodb = require("mongodb");
|
|
6
6
|
const mongoose = require("mongoose");
|
|
7
|
+
const mongooseOptions = require("../mongooseOptions.cjs");
|
|
7
8
|
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
8
9
|
mongoose.set("strictQuery", false);
|
|
9
10
|
const DEFAULT_ENDPOINT = "mongodb://127.0.0.1:27017";
|
|
@@ -21,7 +22,7 @@ class MongoDatabase {
|
|
|
21
22
|
this._url = parsedUrl.toString();
|
|
22
23
|
this.safeURL = this.url.replace(/\w+:\w+/, "<Credentials>");
|
|
23
24
|
this.dbname = dbname || parsedUrl.pathname.replace("/", "");
|
|
24
|
-
this.logger = logger$1 || logger.getLogger("info",
|
|
25
|
+
this.logger = logger$1 || logger.getLogger("info", "database:mongo");
|
|
25
26
|
}
|
|
26
27
|
get url() {
|
|
27
28
|
return this._url;
|
|
@@ -59,12 +60,17 @@ class MongoDatabase {
|
|
|
59
60
|
return this.connecting;
|
|
60
61
|
}
|
|
61
62
|
this.connecting = new Promise((resolve, reject) => {
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
const appName = node_url.fileURLToPath(typeof document === "undefined" ? require("url").pathToFileURL(__filename).href : _documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === "SCRIPT" && _documentCurrentScript.src || new URL("base/mongo.cjs", document.baseURI).href);
|
|
64
|
+
const connection = mongoose.createConnection(
|
|
65
|
+
this.url,
|
|
66
|
+
mongooseOptions.getMongoConnectionOptions({
|
|
67
|
+
url: this.url,
|
|
68
|
+
appName,
|
|
69
|
+
dbName: this.dbname,
|
|
70
|
+
maxPoolSize: 50,
|
|
71
|
+
minPoolSize: 5
|
|
72
|
+
})
|
|
73
|
+
);
|
|
68
74
|
const onConnected = () => {
|
|
69
75
|
this.logger.debug(() => ({
|
|
70
76
|
data: { mongoUrl: this.safeURL },
|
|
@@ -6,9 +6,8 @@ const typesDatabase = require("@prosopo/types-database");
|
|
|
6
6
|
const bson = require("bson");
|
|
7
7
|
require("../base/index.cjs");
|
|
8
8
|
const mongo = require("../base/mongo.cjs");
|
|
9
|
-
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
10
9
|
const isBsonLong = (value) => typeof value === "object" && value !== null && "_bsontype" in value && value._bsontype === "Long";
|
|
11
|
-
const logger = logger$1.getLogger("info",
|
|
10
|
+
const logger = logger$1.getLogger("info", "database:captcha");
|
|
12
11
|
var TableNames = /* @__PURE__ */ ((TableNames2) => {
|
|
13
12
|
TableNames2["frictionlessToken"] = "frictionlessToken";
|
|
14
13
|
TableNames2["session"] = "session";
|
|
@@ -133,8 +132,8 @@ class CaptchaDatabase extends mongo.MongoDatabase {
|
|
|
133
132
|
await this.connect();
|
|
134
133
|
if (sessionEvents.length) {
|
|
135
134
|
const result = await this.tables.session.bulkWrite(
|
|
136
|
-
sessionEvents.map((
|
|
137
|
-
const { _id, ...safeDoc } =
|
|
135
|
+
sessionEvents.map((document) => {
|
|
136
|
+
const { _id, ...safeDoc } = document;
|
|
138
137
|
return {
|
|
139
138
|
insertOne: {
|
|
140
139
|
document: CaptchaDatabase.normaliseDocCompositeIps(safeDoc)
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const makeDir = require("make-dir");
|
|
4
4
|
require("./base/index.cjs");
|
|
5
5
|
const index = require("./databases/index.cjs");
|
|
6
|
+
const mongooseOptions = require("./mongooseOptions.cjs");
|
|
6
7
|
const redisCache = require("./redisCache.cjs");
|
|
7
8
|
const mongo = require("./base/mongo.cjs");
|
|
8
9
|
const mongoMemory = require("./base/mongoMemory.cjs");
|
|
@@ -12,6 +13,8 @@ const centralDbStreamer = require("./databases/centralDbStreamer.cjs");
|
|
|
12
13
|
const client = require("./databases/client.cjs");
|
|
13
14
|
console.debug(makeDir);
|
|
14
15
|
exports.Databases = index.Databases;
|
|
16
|
+
exports.getMongoCompressors = mongooseOptions.getMongoCompressors;
|
|
17
|
+
exports.getMongoConnectionOptions = mongooseOptions.getMongoConnectionOptions;
|
|
15
18
|
exports.RedisWriteQueue = redisCache.RedisWriteQueue;
|
|
16
19
|
exports.MongoDatabase = mongo.MongoDatabase;
|
|
17
20
|
exports.MongoMemoryDatabase = mongoMemory.MongoMemoryDatabase;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const mongodb = require("mongodb");
|
|
4
|
+
const DEFAULT_COMPRESSORS = [
|
|
5
|
+
"zstd",
|
|
6
|
+
"snappy",
|
|
7
|
+
"zlib",
|
|
8
|
+
"none"
|
|
9
|
+
];
|
|
10
|
+
const getMongoCompressors = (url, compressors = DEFAULT_COMPRESSORS) => {
|
|
11
|
+
try {
|
|
12
|
+
const protocolIndex = url.indexOf("://");
|
|
13
|
+
const urlWithoutProtocol = protocolIndex !== -1 ? url.slice(protocolIndex + 3) : url;
|
|
14
|
+
if (urlWithoutProtocol.trim() === "") {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
const parsedUrl = new URL(`mongodb://${urlWithoutProtocol}`);
|
|
18
|
+
const hostname = parsedUrl.hostname;
|
|
19
|
+
const isLocalhost = hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]" || hostname === "::1";
|
|
20
|
+
if (isLocalhost) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
return hostname.includes(".") || hostname.includes(":") ? [...compressors] : [];
|
|
24
|
+
} catch {
|
|
25
|
+
return [...compressors];
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const getMongoConnectionOptions = (options) => {
|
|
29
|
+
const { url, appName, maxPoolSize = 10, minPoolSize = 0, dbName } = options;
|
|
30
|
+
if (!url || url.trim() === "") {
|
|
31
|
+
throw new Error(
|
|
32
|
+
"MongoDB connection URL is required and cannot be empty or whitespace-only"
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
const compressors = getMongoCompressors(url);
|
|
36
|
+
const connectionOptions = {
|
|
37
|
+
serverApi: {
|
|
38
|
+
version: mongodb.ServerApiVersion.v1,
|
|
39
|
+
// strict mode rejects any command outside the Stable API; leave it
|
|
40
|
+
// off so non-stable operations (index/admin commands etc.) keep working.
|
|
41
|
+
strict: false,
|
|
42
|
+
deprecationErrors: false
|
|
43
|
+
},
|
|
44
|
+
maxPoolSize,
|
|
45
|
+
// allow up to N connections at any given time. >1 connection allows parallel db operations
|
|
46
|
+
minPoolSize,
|
|
47
|
+
// pool may close idle connections down to this amount (0 = close all idle past maxIdleTimeMS)
|
|
48
|
+
maxConnecting: 2,
|
|
49
|
+
// maximum number of concurrent connection attempts
|
|
50
|
+
connectTimeoutMS: 1e4,
|
|
51
|
+
// max time to connect to the database
|
|
52
|
+
socketTimeoutMS: 3e4,
|
|
53
|
+
// max time to wait for a response from the database when doing an operation
|
|
54
|
+
maxIdleTimeMS: 3e5,
|
|
55
|
+
// max time spent idle before closing the connection
|
|
56
|
+
appName,
|
|
57
|
+
serverSelectionTimeoutMS: 2e4,
|
|
58
|
+
// max time to wait for a response from the database
|
|
59
|
+
compressors
|
|
60
|
+
};
|
|
61
|
+
if (dbName) {
|
|
62
|
+
connectionOptions.dbName = dbName;
|
|
63
|
+
}
|
|
64
|
+
return connectionOptions;
|
|
65
|
+
};
|
|
66
|
+
exports.getMongoCompressors = getMongoCompressors;
|
|
67
|
+
exports.getMongoConnectionOptions = getMongoConnectionOptions;
|
|
@@ -5,7 +5,7 @@ import { Decimal128, Long } from "bson";
|
|
|
5
5
|
import "../base/index.js";
|
|
6
6
|
import { MongoDatabase } from "../base/mongo.js";
|
|
7
7
|
const isBsonLong = (value) => typeof value === "object" && value !== null && "_bsontype" in value && value._bsontype === "Long";
|
|
8
|
-
const logger = getLogger("info",
|
|
8
|
+
const logger = getLogger("info", "database:captcha");
|
|
9
9
|
var TableNames = /* @__PURE__ */ ((TableNames2) => {
|
|
10
10
|
TableNames2["frictionlessToken"] = "frictionlessToken";
|
|
11
11
|
TableNames2["session"] = "session";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/databases/captcha.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAe,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAIN,4BAA4B,EAE5B,yBAAyB,EACzB,gCAAgC,GAGhC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAOxC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAW,EAAE,CAC9C,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,WAAW,IAAI,KAAK;IACnB,KAA+B,CAAC,SAAS,KAAK,MAAM,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../src/databases/captcha.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import makeDir from "make-dir";
|
|
2
2
|
import "./base/index.js";
|
|
3
3
|
import { Databases } from "./databases/index.js";
|
|
4
|
+
import { getMongoCompressors, getMongoConnectionOptions } from "./mongooseOptions.js";
|
|
4
5
|
import { RedisWriteQueue } from "./redisCache.js";
|
|
5
6
|
import { MongoDatabase } from "./base/mongo.js";
|
|
6
7
|
import { MongoMemoryDatabase } from "./base/mongoMemory.js";
|
|
@@ -17,5 +18,7 @@ export {
|
|
|
17
18
|
MongoDatabase,
|
|
18
19
|
MongoMemoryDatabase,
|
|
19
20
|
ProviderDatabase,
|
|
20
|
-
RedisWriteQueue
|
|
21
|
+
RedisWriteQueue,
|
|
22
|
+
getMongoCompressors,
|
|
23
|
+
getMongoConnectionOptions
|
|
21
24
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,OAAO,MAAM,UAAU,CAAC;AAE/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,OAAO,MAAM,UAAU,CAAC;AAE/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ConnectOptions } from "mongoose";
|
|
2
|
+
export type MongoCompressor = "zstd" | "none" | "snappy" | "zlib";
|
|
3
|
+
export declare const getMongoCompressors: (url: string, compressors?: MongoCompressor[]) => MongoCompressor[];
|
|
4
|
+
export declare const getMongoConnectionOptions: (options: {
|
|
5
|
+
url: string;
|
|
6
|
+
appName: string;
|
|
7
|
+
maxPoolSize?: number;
|
|
8
|
+
minPoolSize?: number;
|
|
9
|
+
dbName?: string;
|
|
10
|
+
}) => ConnectOptions;
|
|
11
|
+
//# sourceMappingURL=mongooseOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongooseOptions.d.ts","sourceRoot":"","sources":["../src/mongooseOptions.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAoBlE,eAAO,MAAM,mBAAmB,QAC1B,MAAM,gBACE,eAAe,EAAE,KAC5B,eAAe,EAuCjB,CAAC;AAaF,eAAO,MAAM,yBAAyB,YAAa;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,KAAG,cAmCH,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ServerApiVersion } from "mongodb";
|
|
2
|
+
const DEFAULT_COMPRESSORS = [
|
|
3
|
+
"zstd",
|
|
4
|
+
"snappy",
|
|
5
|
+
"zlib",
|
|
6
|
+
"none"
|
|
7
|
+
];
|
|
8
|
+
const getMongoCompressors = (url, compressors = DEFAULT_COMPRESSORS) => {
|
|
9
|
+
try {
|
|
10
|
+
const protocolIndex = url.indexOf("://");
|
|
11
|
+
const urlWithoutProtocol = protocolIndex !== -1 ? url.slice(protocolIndex + 3) : url;
|
|
12
|
+
if (urlWithoutProtocol.trim() === "") {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
const parsedUrl = new URL(`mongodb://${urlWithoutProtocol}`);
|
|
16
|
+
const hostname = parsedUrl.hostname;
|
|
17
|
+
const isLocalhost = hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]" || hostname === "::1";
|
|
18
|
+
if (isLocalhost) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
return hostname.includes(".") || hostname.includes(":") ? [...compressors] : [];
|
|
22
|
+
} catch {
|
|
23
|
+
return [...compressors];
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const getMongoConnectionOptions = (options) => {
|
|
27
|
+
const { url, appName, maxPoolSize = 10, minPoolSize = 0, dbName } = options;
|
|
28
|
+
if (!url || url.trim() === "") {
|
|
29
|
+
throw new Error(
|
|
30
|
+
"MongoDB connection URL is required and cannot be empty or whitespace-only"
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
const compressors = getMongoCompressors(url);
|
|
34
|
+
const connectionOptions = {
|
|
35
|
+
serverApi: {
|
|
36
|
+
version: ServerApiVersion.v1,
|
|
37
|
+
// strict mode rejects any command outside the Stable API; leave it
|
|
38
|
+
// off so non-stable operations (index/admin commands etc.) keep working.
|
|
39
|
+
strict: false,
|
|
40
|
+
deprecationErrors: false
|
|
41
|
+
},
|
|
42
|
+
maxPoolSize,
|
|
43
|
+
// allow up to N connections at any given time. >1 connection allows parallel db operations
|
|
44
|
+
minPoolSize,
|
|
45
|
+
// pool may close idle connections down to this amount (0 = close all idle past maxIdleTimeMS)
|
|
46
|
+
maxConnecting: 2,
|
|
47
|
+
// maximum number of concurrent connection attempts
|
|
48
|
+
connectTimeoutMS: 1e4,
|
|
49
|
+
// max time to connect to the database
|
|
50
|
+
socketTimeoutMS: 3e4,
|
|
51
|
+
// max time to wait for a response from the database when doing an operation
|
|
52
|
+
maxIdleTimeMS: 3e5,
|
|
53
|
+
// max time spent idle before closing the connection
|
|
54
|
+
appName,
|
|
55
|
+
serverSelectionTimeoutMS: 2e4,
|
|
56
|
+
// max time to wait for a response from the database
|
|
57
|
+
compressors
|
|
58
|
+
};
|
|
59
|
+
if (dbName) {
|
|
60
|
+
connectionOptions.dbName = dbName;
|
|
61
|
+
}
|
|
62
|
+
return connectionOptions;
|
|
63
|
+
};
|
|
64
|
+
export {
|
|
65
|
+
getMongoCompressors,
|
|
66
|
+
getMongoConnectionOptions
|
|
67
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongooseOptions.js","sourceRoot":"","sources":["../src/mongooseOptions.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAK3C,MAAM,mBAAmB,GAAsB;IAC9C,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;CACN,CAAC;AAaF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAClC,GAAW,EACX,cAAiC,mBAAmB,EAChC,EAAE;IACtB,IAAI,CAAC;QAEJ,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,kBAAkB,GACvB,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAI3D,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACtC,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,kBAAkB,EAAE,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;QAKpC,MAAM,WAAW,GAChB,QAAQ,KAAK,WAAW;YACxB,QAAQ,KAAK,WAAW;YACxB,QAAQ,KAAK,OAAO;YACpB,QAAQ,KAAK,KAAK,CAAC;QAEpB,IAAI,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACX,CAAC;QAKD,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;YACtD,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;YAClB,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAAC,MAAM,CAAC;QAER,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;IACzB,CAAC;AACF,CAAC,CAAC;AAaF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAMzC,EAAkB,EAAE;IACpB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE5E,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACd,2EAA2E,CAC3E,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAE7C,MAAM,iBAAiB,GAAmB;QACzC,SAAS,EAAE;YACV,OAAO,EAAE,gBAAgB,CAAC,EAAE;YAG5B,MAAM,EAAE,KAAK;YACb,iBAAiB,EAAE,KAAK;SACxB;QACD,WAAW;QACX,WAAW;QACX,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,KAAK;QACvB,eAAe,EAAE,KAAK;QACtB,aAAa,EAAE,MAAM;QACrB,OAAO;QACP,wBAAwB,EAAE,KAAK;QAC/B,WAAW;KACX,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACZ,iBAAiB,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC1B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoGlobalSetup.d.ts","sourceRoot":"","sources":["../../src/tests/mongoGlobalSetup.ts"],"names":[],"mappings":"AAsBA,wBAA8B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongoGlobalSetup.js","sourceRoot":"","sources":["../../src/tests/mongoGlobalSetup.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AASpD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,KAAK;IAClC,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongooseOptions.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/mongooseOptions.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { ServerApiVersion } from "mongodb";
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { getMongoCompressors, getMongoConnectionOptions, } from "../mongooseOptions.js";
|
|
4
|
+
const DEFAULT_COMPRESSORS = [
|
|
5
|
+
"zstd",
|
|
6
|
+
"snappy",
|
|
7
|
+
"zlib",
|
|
8
|
+
"none",
|
|
9
|
+
];
|
|
10
|
+
describe("getMongoCompressors", () => {
|
|
11
|
+
it("returns default compressors for remote domains", () => {
|
|
12
|
+
const urls = [
|
|
13
|
+
"mongodb://user:pass@example.com:27017/db",
|
|
14
|
+
"mongodb://abc.com/db",
|
|
15
|
+
"mongodb://x.y.com:27017/db",
|
|
16
|
+
"mongodb://cluster.mongodb.net/db",
|
|
17
|
+
"mongodb://subdomain.example.com/db",
|
|
18
|
+
];
|
|
19
|
+
for (const url of urls) {
|
|
20
|
+
expect(getMongoCompressors(url)).toEqual(DEFAULT_COMPRESSORS);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
it("returns empty array for local hostnames without dots", () => {
|
|
24
|
+
const urls = [
|
|
25
|
+
"mongodb://database:27017/db",
|
|
26
|
+
"mongodb://db/db",
|
|
27
|
+
"mongodb://mongo:27017/db",
|
|
28
|
+
"mongodb://container-name/db",
|
|
29
|
+
];
|
|
30
|
+
for (const url of urls) {
|
|
31
|
+
expect(getMongoCompressors(url)).toEqual([]);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
it("returns empty array for localhost variants", () => {
|
|
35
|
+
const urls = [
|
|
36
|
+
"mongodb://localhost:27017/db",
|
|
37
|
+
"mongodb://127.0.0.1:27017/db",
|
|
38
|
+
"mongodb://[::1]:27017/db",
|
|
39
|
+
];
|
|
40
|
+
for (const url of urls) {
|
|
41
|
+
expect(getMongoCompressors(url)).toEqual([]);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
it("returns compressors for IP addresses (treated as remote)", () => {
|
|
45
|
+
const urls = [
|
|
46
|
+
"mongodb://192.168.1.1:27017/db",
|
|
47
|
+
"mongodb://10.0.0.1/db",
|
|
48
|
+
"mongodb://172.16.0.1:27017/db",
|
|
49
|
+
];
|
|
50
|
+
for (const url of urls) {
|
|
51
|
+
expect(getMongoCompressors(url)).toEqual(DEFAULT_COMPRESSORS);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
it("returns compressors for IPv6 addresses (treated as remote)", () => {
|
|
55
|
+
const urls = [
|
|
56
|
+
"mongodb://[2001:0db8::1]:27017/db",
|
|
57
|
+
"mongodb://[2001:0db8:85a3::8a2e:0370:7334]/db",
|
|
58
|
+
"mongodb://[::ffff:192.168.1.1]:27017/db",
|
|
59
|
+
];
|
|
60
|
+
for (const url of urls) {
|
|
61
|
+
expect(getMongoCompressors(url)).toEqual(DEFAULT_COMPRESSORS);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
it("uses custom compressors when provided", () => {
|
|
65
|
+
const customCompressors = ["zstd", "snappy"];
|
|
66
|
+
const url = "mongodb://example.com:27017/db";
|
|
67
|
+
expect(getMongoCompressors(url, customCompressors)).toEqual(customCompressors);
|
|
68
|
+
});
|
|
69
|
+
it("returns empty array for local connections even with custom compressors", () => {
|
|
70
|
+
const customCompressors = ["zstd", "snappy"];
|
|
71
|
+
const url = "mongodb://localhost:27017/db";
|
|
72
|
+
expect(getMongoCompressors(url, customCompressors)).toEqual([]);
|
|
73
|
+
});
|
|
74
|
+
it("handles mongodb+srv:// URLs", () => {
|
|
75
|
+
const url = "mongodb+srv://cluster.mongodb.net/db";
|
|
76
|
+
expect(getMongoCompressors(url)).toEqual(DEFAULT_COMPRESSORS);
|
|
77
|
+
});
|
|
78
|
+
it("returns default compressors when the host cannot be parsed", () => {
|
|
79
|
+
const unparseableUrls = ["mongodb://::1:27017/db", "mongodb://[bad"];
|
|
80
|
+
for (const url of unparseableUrls) {
|
|
81
|
+
expect(getMongoCompressors(url)).toEqual(DEFAULT_COMPRESSORS);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
it("returns empty array for hostless URLs and bare single-label hosts", () => {
|
|
85
|
+
const urls = ["", "mongodb://", "not-a-url"];
|
|
86
|
+
for (const url of urls) {
|
|
87
|
+
expect(getMongoCompressors(url)).toEqual([]);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
it("handles URLs with authentication", () => {
|
|
91
|
+
const url = "mongodb://user:password@example.com:27017/db";
|
|
92
|
+
expect(getMongoCompressors(url)).toEqual(DEFAULT_COMPRESSORS);
|
|
93
|
+
});
|
|
94
|
+
it("handles URLs with query parameters", () => {
|
|
95
|
+
const url = "mongodb://example.com:27017/db?authSource=admin&retryWrites=true";
|
|
96
|
+
expect(getMongoCompressors(url)).toEqual(DEFAULT_COMPRESSORS);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe("getMongoConnectionOptions", () => {
|
|
100
|
+
const appName = "test-app";
|
|
101
|
+
it("throws on an empty or whitespace-only URL", () => {
|
|
102
|
+
expect(() => getMongoConnectionOptions({ url: "", appName })).toThrow(/cannot be empty/);
|
|
103
|
+
expect(() => getMongoConnectionOptions({ url: " ", appName })).toThrow(/cannot be empty/);
|
|
104
|
+
});
|
|
105
|
+
it("applies sensible defaults", () => {
|
|
106
|
+
const options = getMongoConnectionOptions({
|
|
107
|
+
url: "mongodb://example.com:27017/db",
|
|
108
|
+
appName,
|
|
109
|
+
});
|
|
110
|
+
expect(options.appName).toBe(appName);
|
|
111
|
+
expect(options.maxPoolSize).toBe(10);
|
|
112
|
+
expect(options.minPoolSize).toBe(0);
|
|
113
|
+
expect(options.serverApi).toEqual({
|
|
114
|
+
version: ServerApiVersion.v1,
|
|
115
|
+
strict: false,
|
|
116
|
+
deprecationErrors: false,
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
it("uses no compressors for localhost", () => {
|
|
120
|
+
const options = getMongoConnectionOptions({
|
|
121
|
+
url: "mongodb://localhost:27017/db",
|
|
122
|
+
appName,
|
|
123
|
+
});
|
|
124
|
+
expect(options.compressors).toEqual([]);
|
|
125
|
+
});
|
|
126
|
+
it("uses default compressors for a remote host", () => {
|
|
127
|
+
const options = getMongoConnectionOptions({
|
|
128
|
+
url: "mongodb://cluster.mongodb.net/db",
|
|
129
|
+
appName,
|
|
130
|
+
});
|
|
131
|
+
expect(options.compressors).toEqual(DEFAULT_COMPRESSORS);
|
|
132
|
+
});
|
|
133
|
+
it("applies pool size overrides", () => {
|
|
134
|
+
const options = getMongoConnectionOptions({
|
|
135
|
+
url: "mongodb://example.com:27017/db",
|
|
136
|
+
appName,
|
|
137
|
+
maxPoolSize: 50,
|
|
138
|
+
minPoolSize: 5,
|
|
139
|
+
});
|
|
140
|
+
expect(options.maxPoolSize).toBe(50);
|
|
141
|
+
expect(options.minPoolSize).toBe(5);
|
|
142
|
+
});
|
|
143
|
+
it("only sets dbName when provided", () => {
|
|
144
|
+
const withDbName = getMongoConnectionOptions({
|
|
145
|
+
url: "mongodb://example.com:27017/db",
|
|
146
|
+
appName,
|
|
147
|
+
dbName: "mydb",
|
|
148
|
+
});
|
|
149
|
+
expect(withDbName.dbName).toBe("mydb");
|
|
150
|
+
const withoutDbName = getMongoConnectionOptions({
|
|
151
|
+
url: "mongodb://example.com:27017/db",
|
|
152
|
+
appName,
|
|
153
|
+
});
|
|
154
|
+
expect(withoutDbName.dbName).toBeUndefined();
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
//# sourceMappingURL=mongooseOptions.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongooseOptions.unit.test.js","sourceRoot":"","sources":["../../src/tests/mongooseOptions.unit.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/database",
|
|
3
|
-
"version": "3.15.
|
|
3
|
+
"version": "3.15.1",
|
|
4
4
|
"description": "Prosopo database plugins for provider",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -38,13 +38,13 @@
|
|
|
38
38
|
"homepage": "https://github.com/prosopo/captcha#readme",
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@polkadot/util": "13.5.7",
|
|
41
|
-
"@prosopo/common": "3.1.
|
|
42
|
-
"@prosopo/logger": "
|
|
43
|
-
"@prosopo/redis-client": "1.0.
|
|
44
|
-
"@prosopo/types": "4.
|
|
45
|
-
"@prosopo/types-database": "4.11.
|
|
46
|
-
"@prosopo/user-access-policy": "3.10.
|
|
47
|
-
"@prosopo/util": "3.3.
|
|
41
|
+
"@prosopo/common": "3.1.41",
|
|
42
|
+
"@prosopo/logger": "2.0.0",
|
|
43
|
+
"@prosopo/redis-client": "1.0.26",
|
|
44
|
+
"@prosopo/types": "4.9.0",
|
|
45
|
+
"@prosopo/types-database": "4.11.1",
|
|
46
|
+
"@prosopo/user-access-policy": "3.10.9",
|
|
47
|
+
"@prosopo/util": "3.3.2",
|
|
48
48
|
"bson": "6.10.4",
|
|
49
49
|
"make-dir": "3.1.0",
|
|
50
50
|
"mongodb": "6.15.0",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"mongoose": "8.13.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@prosopo/config": "3.3.
|
|
55
|
+
"@prosopo/config": "3.3.4",
|
|
56
56
|
"@types/node": "22.10.2",
|
|
57
57
|
"@vitest/coverage-v8": "3.2.4",
|
|
58
58
|
"concurrently": "9.0.1",
|
package/vite.test.config.ts
CHANGED
|
@@ -12,7 +12,18 @@
|
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
14
|
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
15
16
|
import { ViteTestConfig } from "@prosopo/config";
|
|
16
17
|
process.env.NODE_ENV = "test";
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
const config = ViteTestConfig();
|
|
20
|
+
|
|
21
|
+
// Pre-download the mongod binary once, in the parent process, before the test
|
|
22
|
+
// forks spawn. Avoids the flaky concurrent-download lockfile race in
|
|
23
|
+
// mongodb-memory-server. See ./src/tests/mongoGlobalSetup.ts.
|
|
24
|
+
config.test = config.test || {};
|
|
25
|
+
config.test.globalSetup = [
|
|
26
|
+
fileURLToPath(new URL("./src/tests/mongoGlobalSetup.ts", import.meta.url)),
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
export default config;
|