@multiplayer-app/ai-agent-mongo 0.1.0-beta.5 → 0.1.0-beta.51

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 (139) hide show
  1. package/dist/cjs/__tests__/helpers.cjs +1 -0
  2. package/dist/cjs/__tests__/helpers.cjs.map +1 -1
  3. package/dist/cjs/__tests__/helpers.d.ts.map +1 -1
  4. package/dist/cjs/__tests__/repositories/MongoActivityRepository.test.cjs +365 -0
  5. package/dist/cjs/__tests__/repositories/MongoActivityRepository.test.cjs.map +1 -0
  6. package/dist/cjs/__tests__/repositories/MongoActivityRepository.test.d.ts +2 -0
  7. package/dist/cjs/__tests__/repositories/MongoActivityRepository.test.d.ts.map +1 -0
  8. package/dist/cjs/__tests__/repositories/MongoAgentChatRepository.test.cjs +2 -58
  9. package/dist/cjs/__tests__/repositories/MongoAgentChatRepository.test.cjs.map +1 -1
  10. package/dist/cjs/__tests__/repositories/MongoAgentConfigRepository.test.cjs +67 -0
  11. package/dist/cjs/__tests__/repositories/MongoAgentConfigRepository.test.cjs.map +1 -0
  12. package/dist/cjs/__tests__/repositories/MongoAgentConfigRepository.test.d.ts +2 -0
  13. package/dist/cjs/__tests__/repositories/MongoAgentConfigRepository.test.d.ts.map +1 -0
  14. package/dist/cjs/__tests__/repositories/MongoAgentMessageRepository.test.cjs +84 -0
  15. package/dist/cjs/__tests__/repositories/MongoAgentMessageRepository.test.cjs.map +1 -1
  16. package/dist/cjs/__tests__/schemas/AgentConfigPreferenceSchema.test.cjs +62 -0
  17. package/dist/cjs/__tests__/schemas/AgentConfigPreferenceSchema.test.cjs.map +1 -0
  18. package/dist/cjs/__tests__/schemas/AgentConfigPreferenceSchema.test.d.ts +2 -0
  19. package/dist/cjs/__tests__/schemas/AgentConfigPreferenceSchema.test.d.ts.map +1 -0
  20. package/dist/cjs/index.cjs +7 -1
  21. package/dist/cjs/index.cjs.map +1 -1
  22. package/dist/cjs/index.d.ts +3 -0
  23. package/dist/cjs/index.d.ts.map +1 -1
  24. package/dist/cjs/mongo/index.cjs +2 -17
  25. package/dist/cjs/mongo/index.cjs.map +1 -1
  26. package/dist/cjs/mongo/index.d.ts +0 -3
  27. package/dist/cjs/mongo/index.d.ts.map +1 -1
  28. package/dist/cjs/repositories/MongoActivityRepository.cjs +403 -0
  29. package/dist/cjs/repositories/MongoActivityRepository.cjs.map +1 -0
  30. package/dist/cjs/repositories/MongoActivityRepository.d.ts +64 -0
  31. package/dist/cjs/repositories/MongoActivityRepository.d.ts.map +1 -0
  32. package/dist/cjs/repositories/MongoAgentChatRepository.cjs +22 -131
  33. package/dist/cjs/repositories/MongoAgentChatRepository.cjs.map +1 -1
  34. package/dist/cjs/repositories/MongoAgentChatRepository.d.ts +4 -14
  35. package/dist/cjs/repositories/MongoAgentChatRepository.d.ts.map +1 -1
  36. package/dist/cjs/repositories/MongoAgentConfigRepository.cjs +126 -0
  37. package/dist/cjs/repositories/MongoAgentConfigRepository.cjs.map +1 -0
  38. package/dist/cjs/repositories/MongoAgentConfigRepository.d.ts +25 -0
  39. package/dist/cjs/repositories/MongoAgentConfigRepository.d.ts.map +1 -0
  40. package/dist/cjs/repositories/MongoAgentMessageRepository.cjs +53 -2
  41. package/dist/cjs/repositories/MongoAgentMessageRepository.cjs.map +1 -1
  42. package/dist/cjs/repositories/MongoAgentMessageRepository.d.ts +11 -2
  43. package/dist/cjs/repositories/MongoAgentMessageRepository.d.ts.map +1 -1
  44. package/dist/cjs/repositories/index.cjs +2 -0
  45. package/dist/cjs/repositories/index.cjs.map +1 -1
  46. package/dist/cjs/repositories/index.d.ts +2 -0
  47. package/dist/cjs/repositories/index.d.ts.map +1 -1
  48. package/dist/cjs/schemas/ActivitySchema.cjs +34 -0
  49. package/dist/cjs/schemas/ActivitySchema.cjs.map +1 -0
  50. package/dist/cjs/schemas/ActivitySchema.d.ts +30 -0
  51. package/dist/cjs/schemas/ActivitySchema.d.ts.map +1 -0
  52. package/dist/cjs/schemas/AgentChatSchema.cjs +1 -1
  53. package/dist/cjs/schemas/AgentChatSchema.cjs.map +1 -1
  54. package/dist/cjs/schemas/AgentConfigPreferenceSchema.cjs +24 -0
  55. package/dist/cjs/schemas/AgentConfigPreferenceSchema.cjs.map +1 -0
  56. package/dist/cjs/schemas/AgentConfigPreferenceSchema.d.ts +24 -0
  57. package/dist/cjs/schemas/AgentConfigPreferenceSchema.d.ts.map +1 -0
  58. package/dist/cjs/schemas/AgentMessageSchema.cjs +7 -4
  59. package/dist/cjs/schemas/AgentMessageSchema.cjs.map +1 -1
  60. package/dist/cjs/schemas/AgentMessageSchema.d.ts.map +1 -1
  61. package/dist/cjs/schemas/index.cjs +2 -0
  62. package/dist/cjs/schemas/index.cjs.map +1 -1
  63. package/dist/cjs/schemas/index.d.ts +2 -0
  64. package/dist/cjs/schemas/index.d.ts.map +1 -1
  65. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  66. package/dist/esm/__tests__/helpers.d.ts.map +1 -1
  67. package/dist/esm/__tests__/helpers.js +1 -0
  68. package/dist/esm/__tests__/helpers.js.map +1 -1
  69. package/dist/esm/__tests__/repositories/MongoActivityRepository.test.d.ts +2 -0
  70. package/dist/esm/__tests__/repositories/MongoActivityRepository.test.d.ts.map +1 -0
  71. package/dist/esm/__tests__/repositories/MongoActivityRepository.test.js +363 -0
  72. package/dist/esm/__tests__/repositories/MongoActivityRepository.test.js.map +1 -0
  73. package/dist/esm/__tests__/repositories/MongoAgentChatRepository.test.js +2 -58
  74. package/dist/esm/__tests__/repositories/MongoAgentChatRepository.test.js.map +1 -1
  75. package/dist/esm/__tests__/repositories/MongoAgentConfigRepository.test.d.ts +2 -0
  76. package/dist/esm/__tests__/repositories/MongoAgentConfigRepository.test.d.ts.map +1 -0
  77. package/dist/esm/__tests__/repositories/MongoAgentConfigRepository.test.js +65 -0
  78. package/dist/esm/__tests__/repositories/MongoAgentConfigRepository.test.js.map +1 -0
  79. package/dist/esm/__tests__/repositories/MongoAgentMessageRepository.test.js +84 -0
  80. package/dist/esm/__tests__/repositories/MongoAgentMessageRepository.test.js.map +1 -1
  81. package/dist/esm/__tests__/schemas/AgentConfigPreferenceSchema.test.d.ts +2 -0
  82. package/dist/esm/__tests__/schemas/AgentConfigPreferenceSchema.test.d.ts.map +1 -0
  83. package/dist/esm/__tests__/schemas/AgentConfigPreferenceSchema.test.js +60 -0
  84. package/dist/esm/__tests__/schemas/AgentConfigPreferenceSchema.test.js.map +1 -0
  85. package/dist/esm/index.d.ts +3 -0
  86. package/dist/esm/index.d.ts.map +1 -1
  87. package/dist/esm/index.js +3 -0
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/mongo/index.d.ts +0 -3
  90. package/dist/esm/mongo/index.d.ts.map +1 -1
  91. package/dist/esm/mongo/index.js +1 -16
  92. package/dist/esm/mongo/index.js.map +1 -1
  93. package/dist/esm/repositories/MongoActivityRepository.d.ts +64 -0
  94. package/dist/esm/repositories/MongoActivityRepository.d.ts.map +1 -0
  95. package/dist/esm/repositories/MongoActivityRepository.js +398 -0
  96. package/dist/esm/repositories/MongoActivityRepository.js.map +1 -0
  97. package/dist/esm/repositories/MongoAgentChatRepository.d.ts +4 -14
  98. package/dist/esm/repositories/MongoAgentChatRepository.d.ts.map +1 -1
  99. package/dist/esm/repositories/MongoAgentChatRepository.js +22 -131
  100. package/dist/esm/repositories/MongoAgentChatRepository.js.map +1 -1
  101. package/dist/esm/repositories/MongoAgentConfigRepository.d.ts +25 -0
  102. package/dist/esm/repositories/MongoAgentConfigRepository.d.ts.map +1 -0
  103. package/dist/esm/repositories/MongoAgentConfigRepository.js +122 -0
  104. package/dist/esm/repositories/MongoAgentConfigRepository.js.map +1 -0
  105. package/dist/esm/repositories/MongoAgentMessageRepository.d.ts +11 -2
  106. package/dist/esm/repositories/MongoAgentMessageRepository.d.ts.map +1 -1
  107. package/dist/esm/repositories/MongoAgentMessageRepository.js +53 -2
  108. package/dist/esm/repositories/MongoAgentMessageRepository.js.map +1 -1
  109. package/dist/esm/repositories/index.d.ts +2 -0
  110. package/dist/esm/repositories/index.d.ts.map +1 -1
  111. package/dist/esm/repositories/index.js +2 -0
  112. package/dist/esm/repositories/index.js.map +1 -1
  113. package/dist/esm/schemas/ActivitySchema.d.ts +30 -0
  114. package/dist/esm/schemas/ActivitySchema.d.ts.map +1 -0
  115. package/dist/esm/schemas/ActivitySchema.js +31 -0
  116. package/dist/esm/schemas/ActivitySchema.js.map +1 -0
  117. package/dist/esm/schemas/AgentChatSchema.js +1 -1
  118. package/dist/esm/schemas/AgentChatSchema.js.map +1 -1
  119. package/dist/esm/schemas/AgentConfigPreferenceSchema.d.ts +24 -0
  120. package/dist/esm/schemas/AgentConfigPreferenceSchema.d.ts.map +1 -0
  121. package/dist/esm/schemas/AgentConfigPreferenceSchema.js +21 -0
  122. package/dist/esm/schemas/AgentConfigPreferenceSchema.js.map +1 -0
  123. package/dist/esm/schemas/AgentMessageSchema.d.ts.map +1 -1
  124. package/dist/esm/schemas/AgentMessageSchema.js +7 -4
  125. package/dist/esm/schemas/AgentMessageSchema.js.map +1 -1
  126. package/dist/esm/schemas/index.d.ts +2 -0
  127. package/dist/esm/schemas/index.d.ts.map +1 -1
  128. package/dist/esm/schemas/index.js +2 -0
  129. package/dist/esm/schemas/index.js.map +1 -1
  130. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  131. package/package.json +42 -44
  132. package/dist/cjs/mongo/encryption.cjs +0 -149
  133. package/dist/cjs/mongo/encryption.cjs.map +0 -1
  134. package/dist/cjs/mongo/encryption.d.ts +0 -66
  135. package/dist/cjs/mongo/encryption.d.ts.map +0 -1
  136. package/dist/esm/mongo/encryption.d.ts +0 -66
  137. package/dist/esm/mongo/encryption.d.ts.map +0 -1
  138. package/dist/esm/mongo/encryption.js +0 -140
  139. package/dist/esm/mongo/encryption.js.map +0 -1
package/package.json CHANGED
@@ -1,46 +1,44 @@
1
1
  {
2
- "name": "@multiplayer-app/ai-agent-mongo",
3
- "version": "0.1.0-beta.5",
4
- "description": "Shared MongoDB schemas and connection for Multiplayer AI agent services",
5
- "type": "module",
6
- "main": "./dist/cjs/index.cjs",
7
- "module": "./dist/esm/index.js",
8
- "types": "./dist/esm/index.d.ts",
9
-
10
- "exports": {
11
- ".": {
12
- "require": "./dist/cjs/index.cjs",
13
- "import": "./dist/esm/index.js",
14
- "types": "./dist/esm/index.d.ts"
15
- }
16
- },
17
- "files": [
18
- "dist",
19
- "README.md"
20
- ],
21
- "scripts": {
22
- "build": "rm -rf dist && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json",
23
- "test": "vitest run",
24
- "test:watch": "vitest",
25
- "test:coverage": "vitest run --coverage"
26
- },
27
- "license": "MIT",
28
- "dependencies": {
29
- "@multiplayer-app/ai-agent-types": "0.1.0-beta.5",
30
- "@multiplayer-app/ai-agent-db": "0.1.0-beta.5",
31
- "mongoose": "^8.0.0",
32
- "mongodb": "^6.0.0",
33
- "mongodb-client-encryption": "^6.0.0"
34
- },
35
- "devDependencies": {
36
- "typescript": "5.9.3",
37
- "@types/mongoose": "^5.11.97",
38
- "vitest": "^2.0.0",
39
- "@vitest/coverage-v8": "^2.0.0",
40
- "mongodb-memory-server": "^10.1.0",
41
- "@types/node": "^20.16.0"
42
- },
43
- "publishConfig": {
44
- "access": "public"
2
+ "name": "@multiplayer-app/ai-agent-mongo",
3
+ "version": "0.1.0-beta.51",
4
+ "description": "Shared MongoDB schemas and connection for Multiplayer AI agent services",
5
+ "type": "module",
6
+ "main": "./dist/cjs/index.cjs",
7
+ "module": "./dist/esm/index.js",
8
+ "types": "./dist/esm/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "require": "./dist/cjs/index.cjs",
12
+ "import": "./dist/esm/index.js",
13
+ "types": "./dist/esm/index.d.ts"
45
14
  }
46
- }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "scripts": {
21
+ "build": "rm -rf dist && tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
+ "test:coverage": "vitest run --coverage"
25
+ },
26
+ "license": "MIT",
27
+ "dependencies": {
28
+ "@multiplayer-app/ai-agent-types": "0.1.0-beta.51",
29
+ "@multiplayer-app/ai-agent-db": "0.1.0-beta.51",
30
+ "mongoose": "^8.0.0",
31
+ "mongodb": "^6.0.0"
32
+ },
33
+ "devDependencies": {
34
+ "typescript": "5.9.3",
35
+ "@types/mongoose": "^5.11.97",
36
+ "vitest": "^2.0.0",
37
+ "@vitest/coverage-v8": "^2.0.0",
38
+ "mongodb-memory-server": "^10.1.0",
39
+ "@types/node": "^20.16.0"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ }
44
+ }
@@ -1,149 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEncryptionSchemaMap = exports.getKeyId = exports.disconnect = exports.connect = exports.keyVaultNamespace = exports.kmsProviders = exports.decrypt = exports.encrypt = void 0;
4
- const mongodb_1 = require("mongodb");
5
- const logger_1 = require("./logger.cjs");
6
- const config_1 = require("./config.cjs");
7
- const logger = (0, logger_1.getLogger)();
8
- let dataKeyId;
9
- const MONGODB_URI_MASKED = config_1.MONGODB_URI?.replace(/:\/\/(.*):(.*)@/, '://***:***@');
10
- const encryptionAlgorythm = 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic';
11
- const encrypt = (data) => clientEncryption.encrypt(data, {
12
- algorithm: encryptionAlgorythm,
13
- keyId: dataKeyId,
14
- });
15
- exports.encrypt = encrypt;
16
- const decrypt = (data) => clientEncryption.decrypt(data);
17
- exports.decrypt = decrypt;
18
- exports.kmsProviders = {};
19
- let keyProvider;
20
- let masterKey;
21
- if (config_1.MONGODB_ENCRYPTION_MASTER_KEY_PROVIDER === 'local') {
22
- keyProvider = 'local';
23
- const arr = [];
24
- for (let i = 0; i < 96; ++i) {
25
- arr.push(i);
26
- }
27
- const key = Buffer.from(arr);
28
- exports.kmsProviders.local = { key };
29
- }
30
- else {
31
- exports.kmsProviders.aws = {};
32
- keyProvider = 'aws';
33
- masterKey = {
34
- key: config_1.AWS_KMS_KEY_ARN,
35
- region: config_1.AWS_REGION,
36
- };
37
- }
38
- exports.keyVaultNamespace = `${config_1.MONGODB_ENCRYPTION_KEY_VAULT_DB_NAME}.${config_1.MONGODB_ENCRYPTION_KEY_VAULT_COLLECTION_NAME}`;
39
- let unencryptedClient;
40
- let clientEncryption;
41
- const connect = async () => {
42
- if (!unencryptedClient) {
43
- unencryptedClient = await new mongodb_1.MongoClient(config_1.MONGODB_URI).connect();
44
- unencryptedClient.on('connectionReady', () => {
45
- logger.info(`[MONGO] Unencrypted Client Connected to ${MONGODB_URI_MASKED}`);
46
- });
47
- unencryptedClient.on('connectionClosed', () => {
48
- logger.info(`[MONGO] Unencrypted Client disconnected from ${MONGODB_URI_MASKED}`);
49
- });
50
- clientEncryption = new mongodb_1.ClientEncryption(unencryptedClient, {
51
- kmsProviders: exports.kmsProviders,
52
- keyVaultNamespace: exports.keyVaultNamespace,
53
- });
54
- }
55
- return true;
56
- };
57
- exports.connect = connect;
58
- const disconnect = async () => {
59
- if (unencryptedClient) {
60
- await unencryptedClient.close();
61
- }
62
- };
63
- exports.disconnect = disconnect;
64
- const getKeyId = async () => {
65
- logger.info(`[MONGO] Using key provider: ${keyProvider}`);
66
- dataKeyId = await unencryptedClient
67
- .db(config_1.MONGODB_ENCRYPTION_KEY_VAULT_DB_NAME)
68
- .collection(config_1.MONGODB_ENCRYPTION_KEY_VAULT_COLLECTION_NAME)
69
- .findOne({
70
- keyAltNames: config_1.MONGODB_ENCRYPTION_DEK_NAME,
71
- 'masterKey.provider': keyProvider,
72
- });
73
- if (dataKeyId === null) {
74
- logger.info('[MONGO] Creating new DEK');
75
- dataKeyId = await clientEncryption
76
- .createDataKey(keyProvider, {
77
- keyAltNames: [config_1.MONGODB_ENCRYPTION_DEK_NAME],
78
- masterKey,
79
- });
80
- }
81
- else {
82
- logger.info('[MONGO] Found existing DEK');
83
- dataKeyId = dataKeyId._id;
84
- }
85
- return dataKeyId;
86
- };
87
- exports.getKeyId = getKeyId;
88
- const getEncryptionSchemaMap = (encryptionKeyId) => {
89
- const schemaMap = {
90
- [`${config_1.MONGODB_DB_NAME}.integrations`]: {
91
- bsonType: 'object',
92
- properties: {
93
- metadata: {
94
- bsonType: 'object',
95
- properties: {
96
- accessToken: {
97
- encrypt: {
98
- bsonType: 'string',
99
- keyId: [encryptionKeyId],
100
- algorithm: encryptionAlgorythm,
101
- },
102
- },
103
- refreshToken: {
104
- encrypt: {
105
- bsonType: 'string',
106
- keyId: [encryptionKeyId],
107
- algorithm: encryptionAlgorythm,
108
- },
109
- },
110
- apiKey: {
111
- encrypt: {
112
- bsonType: 'string',
113
- keyId: [encryptionKeyId],
114
- algorithm: encryptionAlgorythm,
115
- },
116
- },
117
- },
118
- },
119
- },
120
- },
121
- [`${config_1.MONGODB_DB_NAME}.workspace-users`]: {
122
- bsonType: 'object',
123
- properties: {
124
- googleWorkspaceToken: {
125
- bsonType: 'object',
126
- properties: {
127
- access_token: {
128
- encrypt: {
129
- bsonType: 'string',
130
- keyId: [encryptionKeyId],
131
- algorithm: encryptionAlgorythm,
132
- },
133
- },
134
- refresh_token: {
135
- encrypt: {
136
- bsonType: 'string',
137
- keyId: [encryptionKeyId],
138
- algorithm: encryptionAlgorythm,
139
- },
140
- },
141
- },
142
- },
143
- },
144
- },
145
- };
146
- return schemaMap;
147
- };
148
- exports.getEncryptionSchemaMap = getEncryptionSchemaMap;
149
- //# sourceMappingURL=encryption.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../../src/mongo/encryption.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- export declare const encrypt: (data: any) => Promise<import("bson").Binary>;
2
- export declare const decrypt: (data: any) => Promise<any>;
3
- export declare const kmsProviders: any;
4
- export declare const keyVaultNamespace: string;
5
- export declare const connect: () => Promise<boolean>;
6
- export declare const disconnect: () => Promise<void>;
7
- export declare const getKeyId: () => Promise<any>;
8
- export declare const getEncryptionSchemaMap: (encryptionKeyId: any) => {
9
- [x: string]: {
10
- bsonType: string;
11
- properties: {
12
- metadata: {
13
- bsonType: string;
14
- properties: {
15
- accessToken: {
16
- encrypt: {
17
- bsonType: string;
18
- keyId: any[];
19
- algorithm: string;
20
- };
21
- };
22
- refreshToken: {
23
- encrypt: {
24
- bsonType: string;
25
- keyId: any[];
26
- algorithm: string;
27
- };
28
- };
29
- apiKey: {
30
- encrypt: {
31
- bsonType: string;
32
- keyId: any[];
33
- algorithm: string;
34
- };
35
- };
36
- };
37
- };
38
- googleWorkspaceToken?: undefined;
39
- };
40
- } | {
41
- bsonType: string;
42
- properties: {
43
- googleWorkspaceToken: {
44
- bsonType: string;
45
- properties: {
46
- access_token: {
47
- encrypt: {
48
- bsonType: string;
49
- keyId: any[];
50
- algorithm: string;
51
- };
52
- };
53
- refresh_token: {
54
- encrypt: {
55
- bsonType: string;
56
- keyId: any[];
57
- algorithm: string;
58
- };
59
- };
60
- };
61
- };
62
- metadata?: undefined;
63
- };
64
- };
65
- };
66
- //# sourceMappingURL=encryption.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../../src/mongo/encryption.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,OAAO,GAAI,SAAI,mCAM3B,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,SAAI,iBAAmC,CAAA;AAE/D,eAAO,MAAM,YAAY,EAAE,GAAQ,CAAA;AAuBnC,eAAO,MAAM,iBAAiB,QAA4F,CAAA;AAM1H,eAAO,MAAM,OAAO,wBAsBnB,CAAA;AAED,eAAO,MAAM,UAAU,qBAItB,CAAA;AAED,eAAO,MAAM,QAAQ,oBA4BpB,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,oBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DrD,CAAA"}
@@ -1,66 +0,0 @@
1
- export declare const encrypt: (data: any) => Promise<import("bson").Binary>;
2
- export declare const decrypt: (data: any) => Promise<any>;
3
- export declare const kmsProviders: any;
4
- export declare const keyVaultNamespace: string;
5
- export declare const connect: () => Promise<boolean>;
6
- export declare const disconnect: () => Promise<void>;
7
- export declare const getKeyId: () => Promise<any>;
8
- export declare const getEncryptionSchemaMap: (encryptionKeyId: any) => {
9
- [x: string]: {
10
- bsonType: string;
11
- properties: {
12
- metadata: {
13
- bsonType: string;
14
- properties: {
15
- accessToken: {
16
- encrypt: {
17
- bsonType: string;
18
- keyId: any[];
19
- algorithm: string;
20
- };
21
- };
22
- refreshToken: {
23
- encrypt: {
24
- bsonType: string;
25
- keyId: any[];
26
- algorithm: string;
27
- };
28
- };
29
- apiKey: {
30
- encrypt: {
31
- bsonType: string;
32
- keyId: any[];
33
- algorithm: string;
34
- };
35
- };
36
- };
37
- };
38
- googleWorkspaceToken?: undefined;
39
- };
40
- } | {
41
- bsonType: string;
42
- properties: {
43
- googleWorkspaceToken: {
44
- bsonType: string;
45
- properties: {
46
- access_token: {
47
- encrypt: {
48
- bsonType: string;
49
- keyId: any[];
50
- algorithm: string;
51
- };
52
- };
53
- refresh_token: {
54
- encrypt: {
55
- bsonType: string;
56
- keyId: any[];
57
- algorithm: string;
58
- };
59
- };
60
- };
61
- };
62
- metadata?: undefined;
63
- };
64
- };
65
- };
66
- //# sourceMappingURL=encryption.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../../src/mongo/encryption.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,OAAO,GAAI,SAAI,mCAM3B,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,SAAI,iBAAmC,CAAA;AAE/D,eAAO,MAAM,YAAY,EAAE,GAAQ,CAAA;AAuBnC,eAAO,MAAM,iBAAiB,QAA4F,CAAA;AAM1H,eAAO,MAAM,OAAO,wBAsBnB,CAAA;AAED,eAAO,MAAM,UAAU,qBAItB,CAAA;AAED,eAAO,MAAM,QAAQ,oBA4BpB,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAI,oBAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DrD,CAAA"}
@@ -1,140 +0,0 @@
1
- import { MongoClient, ClientEncryption } from 'mongodb';
2
- import { getLogger } from './logger';
3
- import { MONGODB_DB_NAME, MONGODB_URI, MONGODB_ENCRYPTION_KEY_VAULT_DB_NAME, MONGODB_ENCRYPTION_KEY_VAULT_COLLECTION_NAME, MONGODB_ENCRYPTION_DEK_NAME, MONGODB_ENCRYPTION_MASTER_KEY_PROVIDER, AWS_KMS_KEY_ARN, AWS_REGION, } from './config';
4
- const logger = getLogger();
5
- let dataKeyId;
6
- const MONGODB_URI_MASKED = MONGODB_URI?.replace(/:\/\/(.*):(.*)@/, '://***:***@');
7
- const encryptionAlgorythm = 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic';
8
- export const encrypt = (data) => clientEncryption.encrypt(data, {
9
- algorithm: encryptionAlgorythm,
10
- keyId: dataKeyId,
11
- });
12
- export const decrypt = (data) => clientEncryption.decrypt(data);
13
- export const kmsProviders = {};
14
- let keyProvider;
15
- let masterKey;
16
- if (MONGODB_ENCRYPTION_MASTER_KEY_PROVIDER === 'local') {
17
- keyProvider = 'local';
18
- const arr = [];
19
- for (let i = 0; i < 96; ++i) {
20
- arr.push(i);
21
- }
22
- const key = Buffer.from(arr);
23
- kmsProviders.local = { key };
24
- }
25
- else {
26
- kmsProviders.aws = {};
27
- keyProvider = 'aws';
28
- masterKey = {
29
- key: AWS_KMS_KEY_ARN,
30
- region: AWS_REGION,
31
- };
32
- }
33
- export const keyVaultNamespace = `${MONGODB_ENCRYPTION_KEY_VAULT_DB_NAME}.${MONGODB_ENCRYPTION_KEY_VAULT_COLLECTION_NAME}`;
34
- let unencryptedClient;
35
- let clientEncryption;
36
- export const connect = async () => {
37
- if (!unencryptedClient) {
38
- unencryptedClient = await new MongoClient(MONGODB_URI).connect();
39
- unencryptedClient.on('connectionReady', () => {
40
- logger.info(`[MONGO] Unencrypted Client Connected to ${MONGODB_URI_MASKED}`);
41
- });
42
- unencryptedClient.on('connectionClosed', () => {
43
- logger.info(`[MONGO] Unencrypted Client disconnected from ${MONGODB_URI_MASKED}`);
44
- });
45
- clientEncryption = new ClientEncryption(unencryptedClient, {
46
- kmsProviders,
47
- keyVaultNamespace,
48
- });
49
- }
50
- return true;
51
- };
52
- export const disconnect = async () => {
53
- if (unencryptedClient) {
54
- await unencryptedClient.close();
55
- }
56
- };
57
- export const getKeyId = async () => {
58
- logger.info(`[MONGO] Using key provider: ${keyProvider}`);
59
- dataKeyId = await unencryptedClient
60
- .db(MONGODB_ENCRYPTION_KEY_VAULT_DB_NAME)
61
- .collection(MONGODB_ENCRYPTION_KEY_VAULT_COLLECTION_NAME)
62
- .findOne({
63
- keyAltNames: MONGODB_ENCRYPTION_DEK_NAME,
64
- 'masterKey.provider': keyProvider,
65
- });
66
- if (dataKeyId === null) {
67
- logger.info('[MONGO] Creating new DEK');
68
- dataKeyId = await clientEncryption
69
- .createDataKey(keyProvider, {
70
- keyAltNames: [MONGODB_ENCRYPTION_DEK_NAME],
71
- masterKey,
72
- });
73
- }
74
- else {
75
- logger.info('[MONGO] Found existing DEK');
76
- dataKeyId = dataKeyId._id;
77
- }
78
- return dataKeyId;
79
- };
80
- export const getEncryptionSchemaMap = (encryptionKeyId) => {
81
- const schemaMap = {
82
- [`${MONGODB_DB_NAME}.integrations`]: {
83
- bsonType: 'object',
84
- properties: {
85
- metadata: {
86
- bsonType: 'object',
87
- properties: {
88
- accessToken: {
89
- encrypt: {
90
- bsonType: 'string',
91
- keyId: [encryptionKeyId],
92
- algorithm: encryptionAlgorythm,
93
- },
94
- },
95
- refreshToken: {
96
- encrypt: {
97
- bsonType: 'string',
98
- keyId: [encryptionKeyId],
99
- algorithm: encryptionAlgorythm,
100
- },
101
- },
102
- apiKey: {
103
- encrypt: {
104
- bsonType: 'string',
105
- keyId: [encryptionKeyId],
106
- algorithm: encryptionAlgorythm,
107
- },
108
- },
109
- },
110
- },
111
- },
112
- },
113
- [`${MONGODB_DB_NAME}.workspace-users`]: {
114
- bsonType: 'object',
115
- properties: {
116
- googleWorkspaceToken: {
117
- bsonType: 'object',
118
- properties: {
119
- access_token: {
120
- encrypt: {
121
- bsonType: 'string',
122
- keyId: [encryptionKeyId],
123
- algorithm: encryptionAlgorythm,
124
- },
125
- },
126
- refresh_token: {
127
- encrypt: {
128
- bsonType: 'string',
129
- keyId: [encryptionKeyId],
130
- algorithm: encryptionAlgorythm,
131
- },
132
- },
133
- },
134
- },
135
- },
136
- },
137
- };
138
- return schemaMap;
139
- };
140
- //# sourceMappingURL=encryption.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../../src/mongo/encryption.ts"],"names":[],"mappings":"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"}