@edirect/mongo 11.0.8 → 11.0.9
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/dist/cjs/README.md +13 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/src/aws.js +36 -0
- package/dist/cjs/src/index.js +4 -0
- package/dist/cjs/src/mongo.module.js +16 -0
- package/dist/cjs/src/mongo.providers.js +25 -0
- package/dist/cjs/types/src/aws.d.ts +5 -0
- package/dist/cjs/types/src/aws.d.ts.map +1 -0
- package/dist/cjs/types/src/index.d.ts +2 -0
- package/dist/cjs/types/src/index.d.ts.map +1 -0
- package/dist/cjs/types/src/mongo.module.d.ts +3 -0
- package/dist/cjs/types/src/mongo.module.d.ts.map +1 -0
- package/dist/cjs/types/src/mongo.providers.d.ts +3 -0
- package/dist/cjs/types/src/mongo.providers.d.ts.map +1 -0
- package/dist/esm/README.md +13 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/src/aws.js +31 -0
- package/dist/esm/src/index.js +1 -0
- package/dist/esm/src/mongo.module.js +13 -0
- package/dist/esm/src/mongo.providers.js +22 -0
- package/dist/esm/types/src/aws.d.ts +5 -0
- package/dist/esm/types/src/aws.d.ts.map +1 -0
- package/dist/esm/types/src/index.d.ts +2 -0
- package/dist/esm/types/src/index.d.ts.map +1 -0
- package/dist/esm/types/src/mongo.module.d.ts +3 -0
- package/dist/esm/types/src/mongo.module.d.ts.map +1 -0
- package/dist/esm/types/src/mongo.providers.d.ts +3 -0
- package/dist/esm/types/src/mongo.providers.d.ts.map +1 -0
- package/dist/package.json +1 -1
- package/dist/src/aws.js +6 -5
- package/dist/src/mongo.providers.js +9 -11
- package/package.json +46 -8
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateConnectionString = exports.generateAwsCredentials = exports.shouldAssumeRole = void 0;
|
|
4
|
+
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
5
|
+
const MONGODB_AWS_ROLE_ARN = process.env.MONGODB_AWS_ROLE_ARN;
|
|
6
|
+
const AWS_WEB_IDENTITY_TOKEN_FILE = process.env.AWS_WEB_IDENTITY_TOKEN_FILE;
|
|
7
|
+
exports.shouldAssumeRole = MONGODB_AWS_ROLE_ARN && AWS_WEB_IDENTITY_TOKEN_FILE;
|
|
8
|
+
const generateAwsCredentials = async () => {
|
|
9
|
+
if (exports.shouldAssumeRole) {
|
|
10
|
+
return (0, credential_providers_1.fromNodeProviderChain)({
|
|
11
|
+
roleArn: MONGODB_AWS_ROLE_ARN,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
return (0, credential_providers_1.fromNodeProviderChain)();
|
|
15
|
+
};
|
|
16
|
+
exports.generateAwsCredentials = generateAwsCredentials;
|
|
17
|
+
const generateConnectionString = async (cnn) => {
|
|
18
|
+
if (!cnn) {
|
|
19
|
+
throw new Error('MongoDB connection string is not defined');
|
|
20
|
+
}
|
|
21
|
+
if (exports.shouldAssumeRole) {
|
|
22
|
+
const credentials = await (0, exports.generateAwsCredentials)();
|
|
23
|
+
if (credentials) {
|
|
24
|
+
const url = new URL(cnn);
|
|
25
|
+
url.username = credentials.accessKeyId || '';
|
|
26
|
+
url.password = credentials.secretAccessKey || '';
|
|
27
|
+
if (credentials.sessionToken) {
|
|
28
|
+
url.searchParams.set('authMechanismProperties', `AWS_SESSION_TOKEN:${credentials.sessionToken}`);
|
|
29
|
+
}
|
|
30
|
+
return url.toString();
|
|
31
|
+
}
|
|
32
|
+
throw new Error('Failed to assume role with web identity');
|
|
33
|
+
}
|
|
34
|
+
return cnn;
|
|
35
|
+
};
|
|
36
|
+
exports.generateConnectionString = generateConnectionString;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MongoModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const mongo_providers_1 = require("./mongo.providers");
|
|
7
|
+
let MongoModule = class MongoModule {
|
|
8
|
+
};
|
|
9
|
+
exports.MongoModule = MongoModule;
|
|
10
|
+
exports.MongoModule = MongoModule = tslib_1.__decorate([
|
|
11
|
+
(0, common_1.Global)(),
|
|
12
|
+
(0, common_1.Module)({
|
|
13
|
+
providers: [...mongo_providers_1.MongoProviders],
|
|
14
|
+
exports: [...mongo_providers_1.MongoProviders],
|
|
15
|
+
})
|
|
16
|
+
], MongoModule);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MongoProviders = void 0;
|
|
4
|
+
const mongoose_1 = require("mongoose");
|
|
5
|
+
const config_1 = require("@edirect/config");
|
|
6
|
+
const aws_1 = require("./aws");
|
|
7
|
+
const isNotProductionOrLive = (nodeEnv) => nodeEnv !== 'production' && nodeEnv !== 'live';
|
|
8
|
+
const mongoUrl = (configService) => configService.get('MONGO_URL') ?? configService.get('MONGODB_URI');
|
|
9
|
+
exports.MongoProviders = [
|
|
10
|
+
{
|
|
11
|
+
provide: 'MONGO_CONNECTION',
|
|
12
|
+
useFactory: async (configService) => (0, mongoose_1.connect)(await (0, aws_1.generateConnectionString)(mongoUrl(configService)), {
|
|
13
|
+
...(isNotProductionOrLive(configService.get('NODE_ENV')) && {
|
|
14
|
+
minPoolSize: 0,
|
|
15
|
+
maxPoolSize: 10,
|
|
16
|
+
...((mongoUrl(configService) ?? '').includes('MONGODB-AWS') && {
|
|
17
|
+
authMechanismProperties: {
|
|
18
|
+
AWS_CREDENTIAL_PROVIDER: aws_1.generateAwsCredentials,
|
|
19
|
+
},
|
|
20
|
+
}),
|
|
21
|
+
}),
|
|
22
|
+
}),
|
|
23
|
+
inject: [config_1.ConfigService],
|
|
24
|
+
},
|
|
25
|
+
];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AWSCredentials } from 'mongodb';
|
|
2
|
+
export declare const shouldAssumeRole: string | undefined;
|
|
3
|
+
export declare const generateAwsCredentials: () => Promise<AWSCredentials | undefined>;
|
|
4
|
+
export declare const generateConnectionString: (cnn: string | undefined) => Promise<string>;
|
|
5
|
+
//# sourceMappingURL=aws.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../../src/aws.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKzC,eAAO,MAAM,gBAAgB,oBACwB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,QAAa,OAAO,CACrD,cAAc,GAAG,SAAS,CAQ3B,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,KAAK,MAAM,GAAG,SAAS,KACtB,OAAO,CAAC,MAAM,CAqBhB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo.module.d.ts","sourceRoot":"","sources":["../../../../src/mongo.module.ts"],"names":[],"mappings":"AAIA,qBAKa,WAAW;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo.providers.d.ts","sourceRoot":"","sources":["../../../../src/mongo.providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAU1C,eAAO,MAAM,cAAc,EAAE,QAAQ,EAiBpC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
2
|
+
const MONGODB_AWS_ROLE_ARN = process.env.MONGODB_AWS_ROLE_ARN;
|
|
3
|
+
const AWS_WEB_IDENTITY_TOKEN_FILE = process.env.AWS_WEB_IDENTITY_TOKEN_FILE;
|
|
4
|
+
export const shouldAssumeRole = MONGODB_AWS_ROLE_ARN && AWS_WEB_IDENTITY_TOKEN_FILE;
|
|
5
|
+
export const generateAwsCredentials = async () => {
|
|
6
|
+
if (shouldAssumeRole) {
|
|
7
|
+
return fromNodeProviderChain({
|
|
8
|
+
roleArn: MONGODB_AWS_ROLE_ARN,
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
return fromNodeProviderChain();
|
|
12
|
+
};
|
|
13
|
+
export const generateConnectionString = async (cnn) => {
|
|
14
|
+
if (!cnn) {
|
|
15
|
+
throw new Error('MongoDB connection string is not defined');
|
|
16
|
+
}
|
|
17
|
+
if (shouldAssumeRole) {
|
|
18
|
+
const credentials = await generateAwsCredentials();
|
|
19
|
+
if (credentials) {
|
|
20
|
+
const url = new URL(cnn);
|
|
21
|
+
url.username = credentials.accessKeyId || '';
|
|
22
|
+
url.password = credentials.secretAccessKey || '';
|
|
23
|
+
if (credentials.sessionToken) {
|
|
24
|
+
url.searchParams.set('authMechanismProperties', `AWS_SESSION_TOKEN:${credentials.sessionToken}`);
|
|
25
|
+
}
|
|
26
|
+
return url.toString();
|
|
27
|
+
}
|
|
28
|
+
throw new Error('Failed to assume role with web identity');
|
|
29
|
+
}
|
|
30
|
+
return cnn;
|
|
31
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './mongo.module';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Global, Module } from '@nestjs/common';
|
|
3
|
+
import { MongoProviders } from './mongo.providers';
|
|
4
|
+
let MongoModule = class MongoModule {
|
|
5
|
+
};
|
|
6
|
+
MongoModule = __decorate([
|
|
7
|
+
Global(),
|
|
8
|
+
Module({
|
|
9
|
+
providers: [...MongoProviders],
|
|
10
|
+
exports: [...MongoProviders],
|
|
11
|
+
})
|
|
12
|
+
], MongoModule);
|
|
13
|
+
export { MongoModule };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { connect } from 'mongoose';
|
|
2
|
+
import { ConfigService } from '@edirect/config';
|
|
3
|
+
import { generateAwsCredentials, generateConnectionString } from './aws';
|
|
4
|
+
const isNotProductionOrLive = (nodeEnv) => nodeEnv !== 'production' && nodeEnv !== 'live';
|
|
5
|
+
const mongoUrl = (configService) => configService.get('MONGO_URL') ?? configService.get('MONGODB_URI');
|
|
6
|
+
export const MongoProviders = [
|
|
7
|
+
{
|
|
8
|
+
provide: 'MONGO_CONNECTION',
|
|
9
|
+
useFactory: async (configService) => connect(await generateConnectionString(mongoUrl(configService)), {
|
|
10
|
+
...(isNotProductionOrLive(configService.get('NODE_ENV')) && {
|
|
11
|
+
minPoolSize: 0,
|
|
12
|
+
maxPoolSize: 10,
|
|
13
|
+
...((mongoUrl(configService) ?? '').includes('MONGODB-AWS') && {
|
|
14
|
+
authMechanismProperties: {
|
|
15
|
+
AWS_CREDENTIAL_PROVIDER: generateAwsCredentials,
|
|
16
|
+
},
|
|
17
|
+
}),
|
|
18
|
+
}),
|
|
19
|
+
}),
|
|
20
|
+
inject: [ConfigService],
|
|
21
|
+
},
|
|
22
|
+
];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AWSCredentials } from 'mongodb';
|
|
2
|
+
export declare const shouldAssumeRole: string | undefined;
|
|
3
|
+
export declare const generateAwsCredentials: () => Promise<AWSCredentials | undefined>;
|
|
4
|
+
export declare const generateConnectionString: (cnn: string | undefined) => Promise<string>;
|
|
5
|
+
//# sourceMappingURL=aws.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../../../src/aws.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAKzC,eAAO,MAAM,gBAAgB,oBACwB,CAAC;AAEtD,eAAO,MAAM,sBAAsB,QAAa,OAAO,CACrD,cAAc,GAAG,SAAS,CAQ3B,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,KAAK,MAAM,GAAG,SAAS,KACtB,OAAO,CAAC,MAAM,CAqBhB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo.module.d.ts","sourceRoot":"","sources":["../../../../src/mongo.module.ts"],"names":[],"mappings":"AAIA,qBAKa,WAAW;CAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo.providers.d.ts","sourceRoot":"","sources":["../../../../src/mongo.providers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAU1C,eAAO,MAAM,cAAc,EAAE,QAAQ,EAiBpC,CAAC"}
|
package/dist/package.json
CHANGED
package/dist/src/aws.js
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
1
2
|
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
|
|
2
3
|
const MONGODB_AWS_ROLE_ARN = process.env.MONGODB_AWS_ROLE_ARN;
|
|
3
4
|
const AWS_WEB_IDENTITY_TOKEN_FILE = process.env.AWS_WEB_IDENTITY_TOKEN_FILE;
|
|
4
5
|
export const shouldAssumeRole = MONGODB_AWS_ROLE_ARN && AWS_WEB_IDENTITY_TOKEN_FILE;
|
|
5
|
-
export const generateAwsCredentials =
|
|
6
|
+
export const generateAwsCredentials = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
6
7
|
if (shouldAssumeRole) {
|
|
7
8
|
return fromNodeProviderChain({
|
|
8
9
|
roleArn: MONGODB_AWS_ROLE_ARN,
|
|
9
10
|
});
|
|
10
11
|
}
|
|
11
12
|
return fromNodeProviderChain();
|
|
12
|
-
};
|
|
13
|
-
export const generateConnectionString =
|
|
13
|
+
});
|
|
14
|
+
export const generateConnectionString = (cnn) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
15
|
if (!cnn) {
|
|
15
16
|
throw new Error('MongoDB connection string is not defined');
|
|
16
17
|
}
|
|
17
18
|
if (shouldAssumeRole) {
|
|
18
|
-
const credentials =
|
|
19
|
+
const credentials = yield generateAwsCredentials();
|
|
19
20
|
if (credentials) {
|
|
20
21
|
const url = new URL(cnn);
|
|
21
22
|
url.username = credentials.accessKeyId || '';
|
|
@@ -28,4 +29,4 @@ export const generateConnectionString = async (cnn) => {
|
|
|
28
29
|
throw new Error('Failed to assume role with web identity');
|
|
29
30
|
}
|
|
30
31
|
return cnn;
|
|
31
|
-
};
|
|
32
|
+
});
|
|
@@ -1,21 +1,19 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
1
2
|
import { connect } from 'mongoose';
|
|
2
3
|
import { ConfigService } from '@edirect/config';
|
|
3
4
|
import { generateAwsCredentials, generateConnectionString } from './aws';
|
|
4
5
|
const isNotProductionOrLive = (nodeEnv) => nodeEnv !== 'production' && nodeEnv !== 'live';
|
|
5
|
-
const mongoUrl = (configService) => configService.get('MONGO_URL')
|
|
6
|
+
const mongoUrl = (configService) => { var _a; return (_a = configService.get('MONGO_URL')) !== null && _a !== void 0 ? _a : configService.get('MONGODB_URI'); };
|
|
6
7
|
export const MongoProviders = [
|
|
7
8
|
{
|
|
8
9
|
provide: 'MONGO_CONNECTION',
|
|
9
|
-
useFactory:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
},
|
|
17
|
-
}),
|
|
18
|
-
}),
|
|
10
|
+
useFactory: (configService) => __awaiter(void 0, void 0, void 0, function* () {
|
|
11
|
+
var _a;
|
|
12
|
+
return connect(yield generateConnectionString(mongoUrl(configService)), Object.assign({}, (isNotProductionOrLive(configService.get('NODE_ENV')) && Object.assign({ minPoolSize: 0, maxPoolSize: 10 }, (((_a = mongoUrl(configService)) !== null && _a !== void 0 ? _a : '').includes('MONGODB-AWS') && {
|
|
13
|
+
authMechanismProperties: {
|
|
14
|
+
AWS_CREDENTIAL_PROVIDER: generateAwsCredentials,
|
|
15
|
+
},
|
|
16
|
+
})))));
|
|
19
17
|
}),
|
|
20
18
|
inject: [ConfigService],
|
|
21
19
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edirect/mongo",
|
|
3
|
-
"version": "11.0.
|
|
3
|
+
"version": "11.0.9",
|
|
4
4
|
"packageScope": "@edirect",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -25,22 +25,60 @@
|
|
|
25
25
|
"mongoose": "^8.17.1",
|
|
26
26
|
"@nestjs/common": "^11.1.6",
|
|
27
27
|
"tslib": "^2.3.0",
|
|
28
|
-
"@edirect/config": "11.0.
|
|
28
|
+
"@edirect/config": "11.0.9"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@nx/rollup": "21.3.11"
|
|
32
32
|
},
|
|
33
33
|
"nx": {
|
|
34
|
+
"name": "@edirect/mongo",
|
|
34
35
|
"targets": {
|
|
35
|
-
"build": {
|
|
36
|
+
"build:esm": {
|
|
37
|
+
"executor": "@nx/js:tsc",
|
|
38
|
+
"options": {
|
|
39
|
+
"main": "{projectRoot}/src/index.ts",
|
|
40
|
+
"tsConfig": "{projectRoot}/tsconfig.esm.json",
|
|
41
|
+
"outputPath": "{projectRoot}/dist/esm",
|
|
42
|
+
"assets": [
|
|
43
|
+
"{projectRoot}/package.json",
|
|
44
|
+
"{projectRoot}/README.md"
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"build:cjs": {
|
|
36
49
|
"executor": "@nx/js:tsc",
|
|
50
|
+
"options": {
|
|
51
|
+
"main": "{projectRoot}/src/index.ts",
|
|
52
|
+
"tsConfig": "{projectRoot}/tsconfig.cjs.json",
|
|
53
|
+
"outputPath": "{projectRoot}/dist/cjs",
|
|
54
|
+
"assets": [
|
|
55
|
+
"{projectRoot}/package.json",
|
|
56
|
+
"{projectRoot}/README.md"
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"gen-pkg-json": {
|
|
61
|
+
"executor": "nx:run-commands",
|
|
62
|
+
"options": {
|
|
63
|
+
"cwd": "{projectRoot}",
|
|
64
|
+
"commands": [
|
|
65
|
+
"node -e \"const fs=require('fs');fs.mkdirSync('dist/esm',{recursive:true});fs.mkdirSync('dist/cjs',{recursive:true});fs.writeFileSync('dist/esm/package.json',JSON.stringify({type:'module'},null,2));fs.writeFileSync('dist/cjs/package.json',JSON.stringify({type:'commonjs'},null,2));\""
|
|
66
|
+
]
|
|
67
|
+
},
|
|
37
68
|
"outputs": [
|
|
38
|
-
"{
|
|
39
|
-
|
|
69
|
+
"{projectRoot}/dist/esm/package.json",
|
|
70
|
+
"{projectRoot}/dist/cjs/package.json"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"build": {
|
|
74
|
+
"executor": "nx:run-commands",
|
|
40
75
|
"options": {
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
|
|
76
|
+
"commands": [
|
|
77
|
+
"nx build:esm @edirect/mongo",
|
|
78
|
+
"nx build:cjs @edirect/mongo",
|
|
79
|
+
"nx gen-pkg-json @edirect/mongo"
|
|
80
|
+
],
|
|
81
|
+
"parallel": false
|
|
44
82
|
}
|
|
45
83
|
}
|
|
46
84
|
}
|