@multiplayer-app/ai-agent-mongo 0.1.0-beta.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/README.md +330 -0
- package/dist/__tests__/helpers.d.ts +22 -0
- package/dist/__tests__/helpers.d.ts.map +1 -0
- package/dist/__tests__/helpers.js +75 -0
- package/dist/__tests__/helpers.js.map +1 -0
- package/dist/__tests__/repositories/MongoAgentChatRepository.test.d.ts +2 -0
- package/dist/__tests__/repositories/MongoAgentChatRepository.test.d.ts.map +1 -0
- package/dist/__tests__/repositories/MongoAgentChatRepository.test.js +249 -0
- package/dist/__tests__/repositories/MongoAgentChatRepository.test.js.map +1 -0
- package/dist/__tests__/repositories/MongoAgentMessageRepository.test.d.ts +2 -0
- package/dist/__tests__/repositories/MongoAgentMessageRepository.test.d.ts.map +1 -0
- package/dist/__tests__/repositories/MongoAgentMessageRepository.test.js +311 -0
- package/dist/__tests__/repositories/MongoAgentMessageRepository.test.js.map +1 -0
- package/dist/__tests__/schemas/AgentChatSchema.test.d.ts +2 -0
- package/dist/__tests__/schemas/AgentChatSchema.test.d.ts.map +1 -0
- package/dist/__tests__/schemas/AgentChatSchema.test.js +120 -0
- package/dist/__tests__/schemas/AgentChatSchema.test.js.map +1 -0
- package/dist/__tests__/schemas/AgentMessageSchema.test.d.ts +2 -0
- package/dist/__tests__/schemas/AgentMessageSchema.test.d.ts.map +1 -0
- package/dist/__tests__/schemas/AgentMessageSchema.test.js +293 -0
- package/dist/__tests__/schemas/AgentMessageSchema.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +25 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mongo/config.d.ts +10 -0
- package/dist/mongo/config.d.ts.map +1 -0
- package/dist/mongo/config.js +10 -0
- package/dist/mongo/config.js.map +1 -0
- package/dist/mongo/encryption.d.ts +66 -0
- package/dist/mongo/encryption.d.ts.map +1 -0
- package/dist/mongo/encryption.js +140 -0
- package/dist/mongo/encryption.js.map +1 -0
- package/dist/mongo/index.d.ts +25 -0
- package/dist/mongo/index.d.ts.map +1 -0
- package/dist/mongo/index.js +72 -0
- package/dist/mongo/index.js.map +1 -0
- package/dist/mongo/logger.d.ts +31 -0
- package/dist/mongo/logger.d.ts.map +1 -0
- package/dist/mongo/logger.js +36 -0
- package/dist/mongo/logger.js.map +1 -0
- package/dist/repositories/MongoAgentChatRepository.d.ts +37 -0
- package/dist/repositories/MongoAgentChatRepository.d.ts.map +1 -0
- package/dist/repositories/MongoAgentChatRepository.js +235 -0
- package/dist/repositories/MongoAgentChatRepository.js.map +1 -0
- package/dist/repositories/MongoAgentMessageRepository.d.ts +24 -0
- package/dist/repositories/MongoAgentMessageRepository.d.ts.map +1 -0
- package/dist/repositories/MongoAgentMessageRepository.js +140 -0
- package/dist/repositories/MongoAgentMessageRepository.js.map +1 -0
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +3 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/schemas/AgentChatSchema.d.ts +29 -0
- package/dist/schemas/AgentChatSchema.d.ts.map +1 -0
- package/dist/schemas/AgentChatSchema.js +26 -0
- package/dist/schemas/AgentChatSchema.js.map +1 -0
- package/dist/schemas/AgentMessageSchema.d.ts +30 -0
- package/dist/schemas/AgentMessageSchema.d.ts.map +1 -0
- package/dist/schemas/AgentMessageSchema.js +54 -0
- package/dist/schemas/AgentMessageSchema.js.map +1 -0
- package/dist/schemas/index.d.ts +3 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +3 -0
- package/dist/schemas/index.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,140 @@
|
|
|
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 === null || MONGODB_URI === void 0 ? void 0 : 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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../../src/mongo/encryption.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import Mongoose from 'mongoose';
|
|
2
|
+
import * as _Config from './config';
|
|
3
|
+
import * as _encryption from './encryption';
|
|
4
|
+
export declare const encryption: typeof _encryption;
|
|
5
|
+
export declare const mongoose: typeof Mongoose;
|
|
6
|
+
export declare const ObjectId: typeof Mongoose.Types.ObjectId;
|
|
7
|
+
export type ObjectId = Mongoose.Types.ObjectId;
|
|
8
|
+
export type { Document } from 'mongoose';
|
|
9
|
+
export { type Binary } from 'bson';
|
|
10
|
+
export declare const Schema: typeof Mongoose.Schema;
|
|
11
|
+
export declare const Model: Mongoose.Model<any, {}, {}, {}, any, any>;
|
|
12
|
+
export declare const Config: typeof _Config;
|
|
13
|
+
export declare const connected: () => boolean;
|
|
14
|
+
declare const _default: {
|
|
15
|
+
encryption: typeof _encryption;
|
|
16
|
+
connect: () => Promise<void>;
|
|
17
|
+
disconnect: () => Promise<void>;
|
|
18
|
+
connected: () => boolean;
|
|
19
|
+
mongoose: typeof Mongoose;
|
|
20
|
+
ObjectId: typeof Mongoose.Types.ObjectId;
|
|
21
|
+
Schema: typeof Mongoose.Schema;
|
|
22
|
+
Model: Mongoose.Model<any, {}, {}, {}, any, any>;
|
|
23
|
+
};
|
|
24
|
+
export default _default;
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mongo/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAA4B,MAAM,UAAU,CAAA;AAEnD,OAAO,KAAK,OAAO,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,WAAW,MAAM,cAAc,CAAA;AAI3C,eAAO,MAAM,UAAU,oBAAc,CAAA;AAIrC,eAAO,MAAM,QAAQ,iBAAW,CAAA;AAEhC,eAAO,MAAM,QAAQ,gCAA0B,CAAA;AAE/C,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAA;AAE9C,YAAY,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAA;AAElC,eAAO,MAAM,MAAM,wBAAkB,CAAA;AAErC,eAAO,MAAM,KAAK,2CAAiB,CAAA;AAEnC,eAAO,MAAM,MAAM,gBAAU,CAAA;AAmD7B,eAAO,MAAM,SAAS,eAA6C,CAAA;;;;;;;;;;;AAUnE,wBASC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import Mongoose from 'mongoose';
|
|
3
|
+
import { getLogger } from './logger';
|
|
4
|
+
import * as _Config from './config';
|
|
5
|
+
import * as _encryption from './encryption';
|
|
6
|
+
const logger = getLogger();
|
|
7
|
+
export const encryption = _encryption;
|
|
8
|
+
const MONGODB_URI_MASKED = (_a = _Config.MONGODB_URI) === null || _a === void 0 ? void 0 : _a.replace(/:\/\/(.*):(.*)@/, '://***:***@');
|
|
9
|
+
export const mongoose = Mongoose;
|
|
10
|
+
export const ObjectId = Mongoose.Types.ObjectId;
|
|
11
|
+
export const Schema = Mongoose.Schema;
|
|
12
|
+
export const Model = Mongoose.Model;
|
|
13
|
+
export const Config = _Config;
|
|
14
|
+
Mongoose.set('debug', _Config.MONGO_DEBUG);
|
|
15
|
+
Mongoose.connection.on('connected', () => {
|
|
16
|
+
logger.info(`[MONGO] Connected to ${MONGODB_URI_MASKED}`);
|
|
17
|
+
});
|
|
18
|
+
Mongoose.connection.on('error', error => {
|
|
19
|
+
logger.error(error, `[MONGO] Connection to MongoDB failed: ${error.message}`);
|
|
20
|
+
});
|
|
21
|
+
Mongoose.connection.on('reconnected', () => {
|
|
22
|
+
logger.info(`[MONGO] Reconnected to ${MONGODB_URI_MASKED}`);
|
|
23
|
+
});
|
|
24
|
+
Mongoose.connection.on('disconnected', () => {
|
|
25
|
+
logger.info(`[MONGO] Disconnected from ${MONGODB_URI_MASKED}`);
|
|
26
|
+
});
|
|
27
|
+
Mongoose.connection.on('close', () => {
|
|
28
|
+
logger.info(`[MONGO] Connection closed ${MONGODB_URI_MASKED}`);
|
|
29
|
+
});
|
|
30
|
+
Mongoose.connection.on('reconnectFailed', () => {
|
|
31
|
+
logger.error(`[MONGO] Reconnect Failed ${MONGODB_URI_MASKED}`);
|
|
32
|
+
});
|
|
33
|
+
const connect = async () => {
|
|
34
|
+
await encryption.connect();
|
|
35
|
+
const encryptionKeyId = await encryption.getKeyId();
|
|
36
|
+
const options = {
|
|
37
|
+
autoIndex: true,
|
|
38
|
+
connectTimeoutMS: 10000,
|
|
39
|
+
socketTimeoutMS: 25000,
|
|
40
|
+
minPoolSize: 3,
|
|
41
|
+
autoEncryption: {
|
|
42
|
+
bypassAutoEncryption: true,
|
|
43
|
+
keyVaultNamespace: encryption.keyVaultNamespace,
|
|
44
|
+
kmsProviders: encryption.kmsProviders,
|
|
45
|
+
schemaMap: encryption.getEncryptionSchemaMap(encryptionKeyId),
|
|
46
|
+
extraOptions: {
|
|
47
|
+
mongocryptdURI: Config.MONGODB_URI,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
await Mongoose.connect(_Config.MONGODB_URI, options);
|
|
52
|
+
};
|
|
53
|
+
export const connected = () => Mongoose.connection.readyState === 1;
|
|
54
|
+
const disconnect = async () => {
|
|
55
|
+
if (!connected())
|
|
56
|
+
return;
|
|
57
|
+
await Promise.allSettled([
|
|
58
|
+
Mongoose.connection.close(),
|
|
59
|
+
encryption.disconnect(),
|
|
60
|
+
]);
|
|
61
|
+
};
|
|
62
|
+
export default {
|
|
63
|
+
encryption,
|
|
64
|
+
connect,
|
|
65
|
+
disconnect,
|
|
66
|
+
connected,
|
|
67
|
+
mongoose,
|
|
68
|
+
ObjectId: Mongoose.Types.ObjectId,
|
|
69
|
+
Schema: Mongoose.Schema,
|
|
70
|
+
Model: Mongoose.Model,
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mongo/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger interface for MongoDB operations.
|
|
3
|
+
* Compatible with most common Node.js loggers (pino, winston, bunyan, etc.)
|
|
4
|
+
*/
|
|
5
|
+
export interface MongoLogger {
|
|
6
|
+
info(message: string): void;
|
|
7
|
+
error(errorOrMessage: Error | unknown | string, message?: string): void;
|
|
8
|
+
warn?(message: string): void;
|
|
9
|
+
debug?(message: string): void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Sets a custom logger for MongoDB operations.
|
|
13
|
+
* If not called, all logging is silently discarded.
|
|
14
|
+
*
|
|
15
|
+
* @param customLogger - Logger instance implementing MongoLogger interface
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { setLogger } from '@multiplayer-app/ai-agent-mongo';
|
|
20
|
+
* import pino from 'pino';
|
|
21
|
+
*
|
|
22
|
+
* setLogger(pino());
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function setLogger(customLogger: MongoLogger): void;
|
|
26
|
+
/**
|
|
27
|
+
* Gets the current logger instance.
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export declare function getLogger(): MongoLogger;
|
|
31
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/mongo/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,cAAc,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAeD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAEzD;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,WAAW,CAEvC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* No-op logger that discards all log messages.
|
|
3
|
+
* Used as default when no logger is provided.
|
|
4
|
+
*/
|
|
5
|
+
const noOpLogger = {
|
|
6
|
+
info: () => { },
|
|
7
|
+
error: () => { },
|
|
8
|
+
warn: () => { },
|
|
9
|
+
debug: () => { },
|
|
10
|
+
};
|
|
11
|
+
let logger = noOpLogger;
|
|
12
|
+
/**
|
|
13
|
+
* Sets a custom logger for MongoDB operations.
|
|
14
|
+
* If not called, all logging is silently discarded.
|
|
15
|
+
*
|
|
16
|
+
* @param customLogger - Logger instance implementing MongoLogger interface
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { setLogger } from '@multiplayer-app/ai-agent-mongo';
|
|
21
|
+
* import pino from 'pino';
|
|
22
|
+
*
|
|
23
|
+
* setLogger(pino());
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function setLogger(customLogger) {
|
|
27
|
+
logger = customLogger;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Gets the current logger instance.
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export function getLogger() {
|
|
34
|
+
return logger;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/mongo/logger.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,UAAU,GAAgB;IAC9B,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;IACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;CAChB,CAAC;AAEF,IAAI,MAAM,GAAgB,UAAU,CAAC;AAErC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,SAAS,CAAC,YAAyB;IACjD,MAAM,GAAG,YAAY,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AgentChat, AgentChatResponse } from '@multiplayer-app/ai-agent-types';
|
|
2
|
+
import { SortOrder } from '@multiplayer-app/ai-agent-types';
|
|
3
|
+
import type { AgentChatRepository } from '@multiplayer-app/ai-agent-db';
|
|
4
|
+
/**
|
|
5
|
+
* MongoDB implementation of AgentChatRepository
|
|
6
|
+
*/
|
|
7
|
+
export declare class MongoAgentChatRepository implements AgentChatRepository {
|
|
8
|
+
findById(id: string): Promise<AgentChat | null>;
|
|
9
|
+
find(filter?: Partial<AgentChat>, options?: {
|
|
10
|
+
sort?: {
|
|
11
|
+
field: string;
|
|
12
|
+
order: SortOrder;
|
|
13
|
+
};
|
|
14
|
+
limit?: number;
|
|
15
|
+
}): Promise<AgentChat[]>;
|
|
16
|
+
findOne(filter: Partial<AgentChat>): Promise<AgentChat | null>;
|
|
17
|
+
create(entity: Omit<AgentChat, 'id' | 'createdAt' | 'updatedAt'>): Promise<AgentChat>;
|
|
18
|
+
update(id: string, updates: Partial<Omit<AgentChat, 'id' | 'createdAt'>>): Promise<AgentChat | null>;
|
|
19
|
+
delete(id: string): Promise<boolean>;
|
|
20
|
+
exists(id: string): Promise<boolean>;
|
|
21
|
+
count(filter?: Partial<AgentChat>): Promise<number>;
|
|
22
|
+
findByUserId(userId: string): Promise<AgentChat[]>;
|
|
23
|
+
findByContextKey(contextKey: string): Promise<AgentChat[]>;
|
|
24
|
+
findByUserIdAndContextKey(userId: string, contextKey: string): Promise<AgentChat[]>;
|
|
25
|
+
findGuestChatsByContextKey(contextKey: string): Promise<AgentChat[]>;
|
|
26
|
+
updateTitle(id: string, title: string): Promise<AgentChat | null>;
|
|
27
|
+
deleteByUserId(userId: string): Promise<number>;
|
|
28
|
+
deleteByContextKey(contextKey: string): Promise<number>;
|
|
29
|
+
findWithMessages(filter?: Partial<AgentChat>, options?: {
|
|
30
|
+
sort?: {
|
|
31
|
+
field: string;
|
|
32
|
+
order: SortOrder;
|
|
33
|
+
};
|
|
34
|
+
limit?: number;
|
|
35
|
+
}): Promise<AgentChatResponse[]>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=MongoAgentChatRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoAgentChatRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/MongoAgentChatRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAY,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AA0BxE;;GAEG;AACH,qBAAa,wBAAyB,YAAW,mBAAmB;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAK/C,IAAI,CACR,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAC3B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,SAAS,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACvE,OAAO,CAAC,SAAS,EAAE,CAAC;IA4BjB,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAa9D,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAgBrF,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAUpG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUpC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAcnD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKlD,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAK1D,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKnF,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAQpE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAUjE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/C,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvD,gBAAgB,CACpB,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,EAC3B,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,SAAS,CAAA;SAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GACvE,OAAO,CAAC,iBAAiB,EAAE,CAAC;CA2GhC"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { ChatType, SortOrder } from '@multiplayer-app/ai-agent-types';
|
|
2
|
+
import { AgentChatModel } from '../schemas/AgentChatSchema';
|
|
3
|
+
import { AgentMessageModel } from '../schemas/AgentMessageSchema';
|
|
4
|
+
import { ObjectId } from '../mongo';
|
|
5
|
+
/**
|
|
6
|
+
* Helper function to convert Mongoose document to AgentChat type
|
|
7
|
+
*/
|
|
8
|
+
function toAgentChat(doc) {
|
|
9
|
+
if (!doc)
|
|
10
|
+
return null;
|
|
11
|
+
const chat = doc.toObject ? doc.toObject() : doc;
|
|
12
|
+
return {
|
|
13
|
+
id: doc._id.toString(),
|
|
14
|
+
title: chat.title,
|
|
15
|
+
type: chat.type || ChatType.Chat,
|
|
16
|
+
status: chat.status,
|
|
17
|
+
contextKey: chat.contextKey,
|
|
18
|
+
model: chat.model,
|
|
19
|
+
createdAt: chat.createdAt,
|
|
20
|
+
updatedAt: chat.updatedAt,
|
|
21
|
+
metadata: chat.metadata,
|
|
22
|
+
userId: chat.userId
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* MongoDB implementation of AgentChatRepository
|
|
27
|
+
*/
|
|
28
|
+
export class MongoAgentChatRepository {
|
|
29
|
+
async findById(id) {
|
|
30
|
+
const doc = await AgentChatModel.findById(id).exec();
|
|
31
|
+
return toAgentChat(doc);
|
|
32
|
+
}
|
|
33
|
+
async find(filter, options) {
|
|
34
|
+
const query = {};
|
|
35
|
+
if (filter) {
|
|
36
|
+
if (filter.id) {
|
|
37
|
+
query._id = filter.id;
|
|
38
|
+
delete filter.id;
|
|
39
|
+
}
|
|
40
|
+
Object.assign(query, filter);
|
|
41
|
+
}
|
|
42
|
+
let queryBuilder = AgentChatModel.find(query);
|
|
43
|
+
// Apply sorting
|
|
44
|
+
if (options === null || options === void 0 ? void 0 : options.sort) {
|
|
45
|
+
const sortOrder = options.sort.order === SortOrder.Asc ? 1 : -1;
|
|
46
|
+
queryBuilder = queryBuilder.sort({ [options.sort.field]: sortOrder });
|
|
47
|
+
}
|
|
48
|
+
// Apply limit
|
|
49
|
+
if (options === null || options === void 0 ? void 0 : options.limit) {
|
|
50
|
+
queryBuilder = queryBuilder.limit(options.limit);
|
|
51
|
+
}
|
|
52
|
+
const docs = await queryBuilder.exec();
|
|
53
|
+
return docs.map(doc => toAgentChat(doc)).filter(Boolean);
|
|
54
|
+
}
|
|
55
|
+
async findOne(filter) {
|
|
56
|
+
const query = {};
|
|
57
|
+
if (filter.id) {
|
|
58
|
+
query._id = filter.id;
|
|
59
|
+
delete filter.id;
|
|
60
|
+
}
|
|
61
|
+
Object.assign(query, filter);
|
|
62
|
+
const doc = await AgentChatModel.findOne(query).exec();
|
|
63
|
+
return toAgentChat(doc);
|
|
64
|
+
}
|
|
65
|
+
async create(entity) {
|
|
66
|
+
const now = new Date().toISOString();
|
|
67
|
+
const doc = new AgentChatModel({
|
|
68
|
+
...entity,
|
|
69
|
+
createdAt: now,
|
|
70
|
+
updatedAt: now,
|
|
71
|
+
});
|
|
72
|
+
const saved = await doc.save();
|
|
73
|
+
const result = toAgentChat(saved);
|
|
74
|
+
if (!result) {
|
|
75
|
+
throw new Error('Failed to create chat');
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
async update(id, updates) {
|
|
80
|
+
const doc = await AgentChatModel.findByIdAndUpdate(id, { $set: { ...updates, updatedAt: new Date().toISOString() } }, { new: true }).exec();
|
|
81
|
+
return toAgentChat(doc);
|
|
82
|
+
}
|
|
83
|
+
async delete(id) {
|
|
84
|
+
// Delete all related messages first
|
|
85
|
+
await AgentMessageModel.deleteMany({ chat: id }).exec();
|
|
86
|
+
// Then delete the chat
|
|
87
|
+
const result = await AgentChatModel.findByIdAndDelete(id).exec();
|
|
88
|
+
return !!result;
|
|
89
|
+
}
|
|
90
|
+
async exists(id) {
|
|
91
|
+
const count = await AgentChatModel.countDocuments({ _id: id }).exec();
|
|
92
|
+
return count > 0;
|
|
93
|
+
}
|
|
94
|
+
async count(filter) {
|
|
95
|
+
const query = {};
|
|
96
|
+
if (filter) {
|
|
97
|
+
if (filter.id) {
|
|
98
|
+
query._id = filter.id;
|
|
99
|
+
delete filter.id;
|
|
100
|
+
}
|
|
101
|
+
Object.assign(query, filter);
|
|
102
|
+
}
|
|
103
|
+
return AgentChatModel.countDocuments(query).exec();
|
|
104
|
+
}
|
|
105
|
+
async findByUserId(userId) {
|
|
106
|
+
const docs = await AgentChatModel.find({ userId }).exec();
|
|
107
|
+
return docs.map(doc => toAgentChat(doc)).filter(Boolean);
|
|
108
|
+
}
|
|
109
|
+
async findByContextKey(contextKey) {
|
|
110
|
+
const docs = await AgentChatModel.find({ contextKey }).exec();
|
|
111
|
+
return docs.map(doc => toAgentChat(doc)).filter(Boolean);
|
|
112
|
+
}
|
|
113
|
+
async findByUserIdAndContextKey(userId, contextKey) {
|
|
114
|
+
const docs = await AgentChatModel.find({ userId, contextKey }).exec();
|
|
115
|
+
return docs.map(doc => toAgentChat(doc)).filter(Boolean);
|
|
116
|
+
}
|
|
117
|
+
async findGuestChatsByContextKey(contextKey) {
|
|
118
|
+
const docs = await AgentChatModel.find({
|
|
119
|
+
contextKey,
|
|
120
|
+
userId: { $exists: false }
|
|
121
|
+
}).exec();
|
|
122
|
+
return docs.map(doc => toAgentChat(doc)).filter(Boolean);
|
|
123
|
+
}
|
|
124
|
+
async updateTitle(id, title) {
|
|
125
|
+
const doc = await AgentChatModel.findByIdAndUpdate(id, { $set: { title, updatedAt: new Date().toISOString() } }, { new: true }).exec();
|
|
126
|
+
return toAgentChat(doc);
|
|
127
|
+
}
|
|
128
|
+
async deleteByUserId(userId) {
|
|
129
|
+
const result = await AgentChatModel.deleteMany({ userId }).exec();
|
|
130
|
+
return result.deletedCount || 0;
|
|
131
|
+
}
|
|
132
|
+
async deleteByContextKey(contextKey) {
|
|
133
|
+
const result = await AgentChatModel.deleteMany({ contextKey }).exec();
|
|
134
|
+
return result.deletedCount || 0;
|
|
135
|
+
}
|
|
136
|
+
async findWithMessages(filter, options) {
|
|
137
|
+
// Build match stage for filtering
|
|
138
|
+
const matchStage = {};
|
|
139
|
+
if (filter) {
|
|
140
|
+
if (filter.id) {
|
|
141
|
+
matchStage._id = new ObjectId(filter.id);
|
|
142
|
+
}
|
|
143
|
+
if (filter.userId !== undefined) {
|
|
144
|
+
matchStage.userId = filter.userId;
|
|
145
|
+
}
|
|
146
|
+
if (filter.contextKey !== undefined) {
|
|
147
|
+
matchStage.contextKey = filter.contextKey;
|
|
148
|
+
}
|
|
149
|
+
if (filter.type !== undefined) {
|
|
150
|
+
matchStage.type = filter.type;
|
|
151
|
+
}
|
|
152
|
+
if (filter.status !== undefined) {
|
|
153
|
+
matchStage.status = filter.status;
|
|
154
|
+
}
|
|
155
|
+
if (filter.model !== undefined) {
|
|
156
|
+
matchStage.model = filter.model;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// Build aggregation pipeline
|
|
160
|
+
const pipeline = [
|
|
161
|
+
{ $match: matchStage }
|
|
162
|
+
];
|
|
163
|
+
// Add sort stage before lookup (for better performance)
|
|
164
|
+
if (options === null || options === void 0 ? void 0 : options.sort) {
|
|
165
|
+
const sortField = options.sort.field === 'id' ? '_id' : options.sort.field;
|
|
166
|
+
const sortOrder = options.sort.order === SortOrder.Asc ? 1 : -1;
|
|
167
|
+
pipeline.push({ $sort: { [sortField]: sortOrder } });
|
|
168
|
+
}
|
|
169
|
+
// Add limit before lookup if specified (for better performance)
|
|
170
|
+
if (options === null || options === void 0 ? void 0 : options.limit) {
|
|
171
|
+
pipeline.push({ $limit: options.limit });
|
|
172
|
+
}
|
|
173
|
+
// Lookup messages
|
|
174
|
+
pipeline.push({
|
|
175
|
+
$lookup: {
|
|
176
|
+
from: 'agentmessages',
|
|
177
|
+
localField: '_id',
|
|
178
|
+
foreignField: 'chat',
|
|
179
|
+
as: 'messages'
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
// Transform messages
|
|
183
|
+
pipeline.push({
|
|
184
|
+
$addFields: {
|
|
185
|
+
messages: {
|
|
186
|
+
$map: {
|
|
187
|
+
input: { $sortArray: { input: '$messages', sortBy: { createdAt: 1 } } },
|
|
188
|
+
as: 'msg',
|
|
189
|
+
in: {
|
|
190
|
+
id: { $toString: '$$msg._id' },
|
|
191
|
+
chat: { $toString: '$$msg.chat' },
|
|
192
|
+
role: '$$msg.role',
|
|
193
|
+
content: '$$msg.content',
|
|
194
|
+
createdAt: '$$msg.createdAt',
|
|
195
|
+
toolCalls: { $ifNull: ['$$msg.toolCalls', []] },
|
|
196
|
+
attachments: { $ifNull: ['$$msg.attachments', []] },
|
|
197
|
+
annotations: '$$msg.annotations'
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
// Project final shape
|
|
204
|
+
pipeline.push({
|
|
205
|
+
$project: {
|
|
206
|
+
id: { $toString: '$_id' },
|
|
207
|
+
title: 1,
|
|
208
|
+
type: { $ifNull: ['$type', ChatType.Chat] },
|
|
209
|
+
status: 1,
|
|
210
|
+
contextKey: 1,
|
|
211
|
+
model: 1,
|
|
212
|
+
createdAt: 1,
|
|
213
|
+
updatedAt: 1,
|
|
214
|
+
metadata: 1,
|
|
215
|
+
userId: 1,
|
|
216
|
+
messages: 1
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
const results = await AgentChatModel.aggregate(pipeline).exec();
|
|
220
|
+
return results.map((result) => ({
|
|
221
|
+
id: result.id,
|
|
222
|
+
title: result.title,
|
|
223
|
+
type: result.type || ChatType.Chat,
|
|
224
|
+
status: result.status,
|
|
225
|
+
contextKey: result.contextKey,
|
|
226
|
+
model: result.model,
|
|
227
|
+
createdAt: result.createdAt,
|
|
228
|
+
updatedAt: result.updatedAt,
|
|
229
|
+
metadata: result.metadata,
|
|
230
|
+
userId: result.userId,
|
|
231
|
+
messages: result.messages || []
|
|
232
|
+
}));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=MongoAgentChatRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoAgentChatRepository.js","sourceRoot":"","sources":["../../src/repositories/MongoAgentChatRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AgentMessage, MessageRole } from '@multiplayer-app/ai-agent-types';
|
|
2
|
+
import type { AgentMessageRepository } from '@multiplayer-app/ai-agent-db';
|
|
3
|
+
/**
|
|
4
|
+
* MongoDB implementation of AgentMessageRepository
|
|
5
|
+
*/
|
|
6
|
+
export declare class MongoAgentMessageRepository implements AgentMessageRepository {
|
|
7
|
+
findById(id: string): Promise<AgentMessage | null>;
|
|
8
|
+
find(filter?: Partial<AgentMessage>): Promise<AgentMessage[]>;
|
|
9
|
+
findOne(filter: Partial<AgentMessage>): Promise<AgentMessage | null>;
|
|
10
|
+
create(entity: Omit<AgentMessage, 'id' | 'createdAt'>, id?: string): Promise<AgentMessage>;
|
|
11
|
+
update(id: string, updates: Partial<Omit<AgentMessage, 'id' | 'createdAt'>>): Promise<AgentMessage | null>;
|
|
12
|
+
delete(id: string): Promise<boolean>;
|
|
13
|
+
exists(id: string): Promise<boolean>;
|
|
14
|
+
count(filter?: Partial<AgentMessage>): Promise<number>;
|
|
15
|
+
findByChatId(chatId: string): Promise<AgentMessage[]>;
|
|
16
|
+
findByRole(role: MessageRole): Promise<AgentMessage[]>;
|
|
17
|
+
findByChatIdAndRole(chatId: string, role?: MessageRole): Promise<AgentMessage[]>;
|
|
18
|
+
findWithToolCalls(chatId?: string): Promise<AgentMessage[]>;
|
|
19
|
+
findWithAttachments(chatId?: string): Promise<AgentMessage[]>;
|
|
20
|
+
deleteByChatId(chatId: string): Promise<number>;
|
|
21
|
+
deleteByRole(role: MessageRole): Promise<number>;
|
|
22
|
+
deleteByChatIdAndRole(chatId: string, role: MessageRole): Promise<number>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=MongoAgentMessageRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoAgentMessageRepository.d.ts","sourceRoot":"","sources":["../../src/repositories/MongoAgentMessageRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AA0B3E;;GAEG;AACH,qBAAa,2BAA4B,YAAW,sBAAsB;IAClE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAKlD,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAe7D,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAapE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAgB1F,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAU1G,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IActD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKrD,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKtD,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAShF,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAa3D,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAa7D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/C,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhD,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CAIhF"}
|