@prosopo/database 3.14.7 → 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.
Files changed (40) hide show
  1. package/.turbo/turbo-build$colon$cjs.log +8 -7
  2. package/.turbo/turbo-build$colon$tsc.log +16 -16
  3. package/.turbo/turbo-build.log +9 -8
  4. package/CHANGELOG.md +67 -0
  5. package/dist/base/mongo.d.ts.map +1 -1
  6. package/dist/base/mongo.js +14 -8
  7. package/dist/base/mongo.js.map +1 -1
  8. package/dist/cjs/base/mongo.cjs +14 -8
  9. package/dist/cjs/databases/captcha.cjs +3 -4
  10. package/dist/cjs/databases/provider.cjs +10 -1
  11. package/dist/cjs/index.cjs +3 -0
  12. package/dist/cjs/mongooseOptions.cjs +67 -0
  13. package/dist/databases/captcha.js +1 -1
  14. package/dist/databases/captcha.js.map +1 -1
  15. package/dist/databases/provider.d.ts +1 -0
  16. package/dist/databases/provider.d.ts.map +1 -1
  17. package/dist/databases/provider.js +10 -1
  18. package/dist/databases/provider.js.map +1 -1
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +4 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/mongooseOptions.d.ts +11 -0
  24. package/dist/mongooseOptions.d.ts.map +1 -0
  25. package/dist/mongooseOptions.js +67 -0
  26. package/dist/mongooseOptions.js.map +1 -0
  27. package/dist/tests/integration/ipInfoPersistence.integration.test.js +0 -2
  28. package/dist/tests/integration/ipInfoPersistence.integration.test.js.map +1 -1
  29. package/dist/tests/integration/sessionRecordProjection.integration.test.js +1 -11
  30. package/dist/tests/integration/sessionRecordProjection.integration.test.js.map +1 -1
  31. package/dist/tests/mongoGlobalSetup.d.ts +2 -0
  32. package/dist/tests/mongoGlobalSetup.d.ts.map +1 -0
  33. package/dist/tests/mongoGlobalSetup.js +5 -0
  34. package/dist/tests/mongoGlobalSetup.js.map +1 -0
  35. package/dist/tests/mongooseOptions.unit.test.d.ts +2 -0
  36. package/dist/tests/mongooseOptions.unit.test.d.ts.map +1 -0
  37. package/dist/tests/mongooseOptions.unit.test.js +157 -0
  38. package/dist/tests/mongooseOptions.unit.test.js.map +1 -0
  39. package/package.json +9 -9
  40. package/vite.test.config.ts +12 -1
@@ -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":"AAaA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAEN,mBAAmB,EACnB,yBAAyB,GACzB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,mBAAmB,GAAsB;IAC9C,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;CACN,CAAC;AAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG;YACZ,0CAA0C;YAC1C,sBAAsB;YACtB,4BAA4B;YAC5B,kCAAkC;YAClC,oCAAoC;SACpC,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG;YACZ,6BAA6B;YAC7B,iBAAiB;YACjB,0BAA0B;YAC1B,6BAA6B;SAC7B,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG;YACZ,8BAA8B;YAC9B,8BAA8B;YAC9B,0BAA0B;SAC1B,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QACnE,MAAM,IAAI,GAAG;YACZ,gCAAgC;YAChC,uBAAuB;YACvB,+BAA+B;SAC/B,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACrE,MAAM,IAAI,GAAG;YACZ,mCAAmC;YACnC,+CAA+C;YAC/C,yCAAyC;SACzC,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAChD,MAAM,iBAAiB,GAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,gCAAgC,CAAC;QAC7C,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAC1D,iBAAiB,CACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QACjF,MAAM,iBAAiB,GAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,8BAA8B,CAAC;QAC3C,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACtC,MAAM,GAAG,GAAG,sCAAsC,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAGrE,MAAM,eAAe,GAAG,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;QACrE,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAG5E,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC3C,MAAM,GAAG,GAAG,8CAA8C,CAAC;QAC3D,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC7C,MAAM,GAAG,GACR,kEAAkE,CAAC;QACpE,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IAC1C,MAAM,OAAO,GAAG,UAAU,CAAC;IAE3B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CACpE,iBAAiB,CACjB,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CACvE,iBAAiB,CACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,yBAAyB,CAAC;YACzC,GAAG,EAAE,gCAAgC;YACrC,OAAO;SACP,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YACjC,OAAO,EAAE,gBAAgB,CAAC,EAAE;YAC5B,MAAM,EAAE,KAAK;YACb,iBAAiB,EAAE,KAAK;SACxB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC5C,MAAM,OAAO,GAAG,yBAAyB,CAAC;YACzC,GAAG,EAAE,8BAA8B;YACnC,OAAO;SACP,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,yBAAyB,CAAC;YACzC,GAAG,EAAE,kCAAkC;YACvC,OAAO;SACP,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACtC,MAAM,OAAO,GAAG,yBAAyB,CAAC;YACzC,GAAG,EAAE,gCAAgC;YACrC,OAAO;YACP,WAAW,EAAE,EAAE;YACf,WAAW,EAAE,CAAC;SACd,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACzC,MAAM,UAAU,GAAG,yBAAyB,CAAC;YAC5C,GAAG,EAAE,gCAAgC;YACrC,OAAO;YACP,MAAM,EAAE,MAAM;SACd,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAG,yBAAyB,CAAC;YAC/C,GAAG,EAAE,gCAAgC;YACrC,OAAO;SACP,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prosopo/database",
3
- "version": "3.14.7",
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.40",
42
- "@prosopo/logger": "1.0.4",
43
- "@prosopo/redis-client": "1.0.25",
44
- "@prosopo/types": "4.7.4",
45
- "@prosopo/types-database": "4.10.7",
46
- "@prosopo/user-access-policy": "3.10.7",
47
- "@prosopo/util": "3.3.1",
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.2",
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",
@@ -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
- export default ViteTestConfig();
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;