@sentropic/llm-mesh 0.12.0 → 0.13.2
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 +35 -1
- package/dist/auth.d.ts +8 -2
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +14 -0
- package/dist/auth.js.map +1 -1
- package/dist/enrollment/claude-code.d.ts +9 -0
- package/dist/enrollment/claude-code.d.ts.map +1 -0
- package/dist/enrollment/claude-code.js +18 -0
- package/dist/enrollment/claude-code.js.map +1 -0
- package/dist/enrollment/cloud-code.d.ts +36 -0
- package/dist/enrollment/cloud-code.d.ts.map +1 -0
- package/dist/enrollment/cloud-code.js +259 -0
- package/dist/enrollment/cloud-code.js.map +1 -0
- package/dist/enrollment/codex.d.ts +33 -0
- package/dist/enrollment/codex.d.ts.map +1 -0
- package/dist/enrollment/codex.js +222 -0
- package/dist/enrollment/codex.js.map +1 -0
- package/dist/enrollment/contracts.d.ts +86 -0
- package/dist/enrollment/contracts.d.ts.map +1 -0
- package/dist/enrollment/contracts.js +3 -0
- package/dist/enrollment/contracts.js.map +1 -0
- package/dist/enrollment/index.d.ts +2 -0
- package/dist/enrollment/index.d.ts.map +1 -0
- package/dist/enrollment/index.js +3 -0
- package/dist/enrollment/index.js.map +1 -0
- package/dist/enrollment/pkce.d.ts +18 -0
- package/dist/enrollment/pkce.d.ts.map +1 -0
- package/dist/enrollment/pkce.js +104 -0
- package/dist/enrollment/pkce.js.map +1 -0
- package/dist/node/index.d.ts +7 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +6 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/keyring/encrypted-file-keyring.d.ts +13 -0
- package/dist/node/keyring/encrypted-file-keyring.d.ts.map +1 -0
- package/dist/node/keyring/encrypted-file-keyring.js +134 -0
- package/dist/node/keyring/encrypted-file-keyring.js.map +1 -0
- package/dist/node/keyring/env-keyring.d.ts +11 -0
- package/dist/node/keyring/env-keyring.d.ts.map +1 -0
- package/dist/node/keyring/env-keyring.js +26 -0
- package/dist/node/keyring/env-keyring.js.map +1 -0
- package/dist/node/keyring/in-memory-keyring.d.ts +8 -0
- package/dist/node/keyring/in-memory-keyring.d.ts.map +1 -0
- package/dist/node/keyring/in-memory-keyring.js +13 -0
- package/dist/node/keyring/in-memory-keyring.js.map +1 -0
- package/dist/node/keyring/linux-secretstore-keyring.d.ts +10 -0
- package/dist/node/keyring/linux-secretstore-keyring.d.ts.map +1 -0
- package/dist/node/keyring/linux-secretstore-keyring.js +17 -0
- package/dist/node/keyring/linux-secretstore-keyring.js.map +1 -0
- package/dist/node/keyring/macos-keychain-keyring.d.ts +10 -0
- package/dist/node/keyring/macos-keychain-keyring.d.ts.map +1 -0
- package/dist/node/keyring/macos-keychain-keyring.js +17 -0
- package/dist/node/keyring/macos-keychain-keyring.js.map +1 -0
- package/dist/service/facade.d.ts +52 -0
- package/dist/service/facade.d.ts.map +1 -0
- package/dist/service/facade.js +53 -0
- package/dist/service/facade.js.map +1 -0
- package/dist/service/local-account-transport-service.d.ts +34 -0
- package/dist/service/local-account-transport-service.d.ts.map +1 -0
- package/dist/service/local-account-transport-service.js +263 -0
- package/dist/service/local-account-transport-service.js.map +1 -0
- package/dist/transport/cloud-code-transport.d.ts +26 -0
- package/dist/transport/cloud-code-transport.d.ts.map +1 -0
- package/dist/transport/cloud-code-transport.js +214 -0
- package/dist/transport/cloud-code-transport.js.map +1 -0
- package/package.json +18 -1
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { createCipheriv, createDecipheriv, createHash, randomBytes, } from 'node:crypto';
|
|
2
|
+
import { chmod, link, mkdir, readFile, rename, unlink, writeFile, } from 'node:fs/promises';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
const isErrorCode = (error, code) => typeof error === 'object' &&
|
|
6
|
+
error !== null &&
|
|
7
|
+
'code' in error &&
|
|
8
|
+
error.code === code;
|
|
9
|
+
export class EncryptedFileKeyring {
|
|
10
|
+
directory;
|
|
11
|
+
constructor(directory = process.env.SENTROPIC_LLM_MESH_KEYRING_DIR ??
|
|
12
|
+
join(homedir(), '.sentropic', 'llm-mesh-keyring')) {
|
|
13
|
+
this.directory = directory;
|
|
14
|
+
}
|
|
15
|
+
async getSecret(key) {
|
|
16
|
+
let raw;
|
|
17
|
+
try {
|
|
18
|
+
raw = await readFile(this.secretPath(key), 'utf8');
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (isErrorCode(error, 'ENOENT'))
|
|
22
|
+
return null;
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
const masterKey = await this.readMasterKey(false);
|
|
26
|
+
let record;
|
|
27
|
+
try {
|
|
28
|
+
record = JSON.parse(raw);
|
|
29
|
+
if (record.v !== 1 ||
|
|
30
|
+
typeof record.iv !== 'string' ||
|
|
31
|
+
typeof record.tag !== 'string' ||
|
|
32
|
+
typeof record.data !== 'string') {
|
|
33
|
+
throw new Error('invalid record');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
throw new Error(`Encrypted keyring record is corrupt for key '${key}'`);
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const decipher = createDecipheriv('aes-256-gcm', masterKey, Buffer.from(record.iv, 'base64'));
|
|
41
|
+
decipher.setAAD(Buffer.from(key, 'utf8'));
|
|
42
|
+
decipher.setAuthTag(Buffer.from(record.tag, 'base64'));
|
|
43
|
+
return Buffer.concat([
|
|
44
|
+
decipher.update(Buffer.from(record.data, 'base64')),
|
|
45
|
+
decipher.final(),
|
|
46
|
+
]).toString('utf8');
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
throw new Error(`Encrypted keyring authentication failed for key '${key}'`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async setSecret(key, secret) {
|
|
53
|
+
const masterKey = await this.readMasterKey(true);
|
|
54
|
+
const iv = randomBytes(12);
|
|
55
|
+
const cipher = createCipheriv('aes-256-gcm', masterKey, iv);
|
|
56
|
+
cipher.setAAD(Buffer.from(key, 'utf8'));
|
|
57
|
+
const encrypted = Buffer.concat([
|
|
58
|
+
cipher.update(Buffer.from(secret, 'utf8')),
|
|
59
|
+
cipher.final(),
|
|
60
|
+
]);
|
|
61
|
+
const record = {
|
|
62
|
+
v: 1,
|
|
63
|
+
iv: iv.toString('base64'),
|
|
64
|
+
tag: cipher.getAuthTag().toString('base64'),
|
|
65
|
+
data: encrypted.toString('base64'),
|
|
66
|
+
};
|
|
67
|
+
const destination = this.secretPath(key);
|
|
68
|
+
const temporary = `${destination}.${randomBytes(8).toString('hex')}.tmp`;
|
|
69
|
+
try {
|
|
70
|
+
await writeFile(temporary, JSON.stringify(record), { flag: 'wx', mode: 0o600 });
|
|
71
|
+
await rename(temporary, destination);
|
|
72
|
+
await chmod(destination, 0o600);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
await this.unlinkIfPresent(temporary);
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async deleteSecret(key) {
|
|
80
|
+
await this.unlinkIfPresent(this.secretPath(key));
|
|
81
|
+
}
|
|
82
|
+
secretPath(key) {
|
|
83
|
+
const filename = createHash('sha256').update(key).digest('hex');
|
|
84
|
+
return join(this.directory, `${filename}.json`);
|
|
85
|
+
}
|
|
86
|
+
async readMasterKey(create) {
|
|
87
|
+
await mkdir(this.directory, { recursive: true, mode: 0o700 });
|
|
88
|
+
await chmod(this.directory, 0o700);
|
|
89
|
+
const path = join(this.directory, '.key');
|
|
90
|
+
try {
|
|
91
|
+
return await this.loadAndValidateMasterKey(path);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
if (!isErrorCode(error, 'ENOENT') || !create) {
|
|
95
|
+
if (isErrorCode(error, 'ENOENT')) {
|
|
96
|
+
throw new Error('Encrypted keyring master key is missing');
|
|
97
|
+
}
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const candidate = randomBytes(32);
|
|
102
|
+
const temporary = join(this.directory, `.key.${randomBytes(8).toString('hex')}.tmp`);
|
|
103
|
+
await writeFile(temporary, candidate, { flag: 'wx', mode: 0o600 });
|
|
104
|
+
try {
|
|
105
|
+
await link(temporary, path);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (!isErrorCode(error, 'EEXIST'))
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
await this.unlinkIfPresent(temporary);
|
|
113
|
+
}
|
|
114
|
+
await chmod(path, 0o600);
|
|
115
|
+
return this.loadAndValidateMasterKey(path);
|
|
116
|
+
}
|
|
117
|
+
async loadAndValidateMasterKey(path) {
|
|
118
|
+
const masterKey = await readFile(path);
|
|
119
|
+
if (masterKey.length !== 32) {
|
|
120
|
+
throw new Error('Encrypted keyring master key is corrupt');
|
|
121
|
+
}
|
|
122
|
+
return masterKey;
|
|
123
|
+
}
|
|
124
|
+
async unlinkIfPresent(path) {
|
|
125
|
+
try {
|
|
126
|
+
await unlink(path);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (!isErrorCode(error, 'ENOENT'))
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=encrypted-file-keyring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encrypted-file-keyring.js","sourceRoot":"","sources":["../../../src/node/keyring/encrypted-file-keyring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { KeyringAdapter } from '../../service/facade.js';
|
|
2
|
+
export declare class EnvKeyring implements KeyringAdapter {
|
|
3
|
+
private readonly envPrefix;
|
|
4
|
+
private readonly memoryFallback;
|
|
5
|
+
constructor(envPrefix?: string);
|
|
6
|
+
private envKey;
|
|
7
|
+
getSecret(key: string): Promise<string | null>;
|
|
8
|
+
setSecret(key: string, secret: string): Promise<void>;
|
|
9
|
+
deleteSecret(key: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=env-keyring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-keyring.d.ts","sourceRoot":"","sources":["../../../src/node/keyring/env-keyring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBAAa,UAAW,YAAW,cAAc;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;gBAEhD,SAAS,SAAuB;IAI5C,OAAO,CAAC,MAAM;IAIR,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAQ9C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI/C"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export class EnvKeyring {
|
|
2
|
+
envPrefix;
|
|
3
|
+
memoryFallback = new Map();
|
|
4
|
+
constructor(envPrefix = 'SENTROPIC_KEYRING_') {
|
|
5
|
+
this.envPrefix = envPrefix;
|
|
6
|
+
}
|
|
7
|
+
envKey(key) {
|
|
8
|
+
return `${this.envPrefix}${key.replace(/[^a-zA-Z0-9_]/g, '_').toUpperCase()}`;
|
|
9
|
+
}
|
|
10
|
+
async getSecret(key) {
|
|
11
|
+
const envVal = process.env[this.envKey(key)] ?? process.env[key];
|
|
12
|
+
if (typeof envVal === 'string' && envVal.length > 0) {
|
|
13
|
+
return envVal;
|
|
14
|
+
}
|
|
15
|
+
return this.memoryFallback.get(key) ?? null;
|
|
16
|
+
}
|
|
17
|
+
async setSecret(key, secret) {
|
|
18
|
+
process.env[this.envKey(key)] = secret;
|
|
19
|
+
this.memoryFallback.set(key, secret);
|
|
20
|
+
}
|
|
21
|
+
async deleteSecret(key) {
|
|
22
|
+
delete process.env[this.envKey(key)];
|
|
23
|
+
this.memoryFallback.delete(key);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=env-keyring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-keyring.js","sourceRoot":"","sources":["../../../src/node/keyring/env-keyring.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACJ,SAAS,CAAS;IAClB,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5D,YAAY,SAAS,GAAG,oBAAoB;QAC1C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEO,MAAM,CAAC,GAAW;QACxB,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,MAAc;QACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { KeyringAdapter } from '../../service/facade.js';
|
|
2
|
+
export declare class InMemoryKeyring implements KeyringAdapter {
|
|
3
|
+
private readonly store;
|
|
4
|
+
getSecret(key: string): Promise<string | null>;
|
|
5
|
+
setSecret(key: string, secret: string): Promise<void>;
|
|
6
|
+
deleteSecret(key: string): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=in-memory-keyring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-keyring.d.ts","sourceRoot":"","sources":["../../../src/node/keyring/in-memory-keyring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBAAa,eAAgB,YAAW,cAAc;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IAE7C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI9C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class InMemoryKeyring {
|
|
2
|
+
store = new Map();
|
|
3
|
+
async getSecret(key) {
|
|
4
|
+
return this.store.get(key) ?? null;
|
|
5
|
+
}
|
|
6
|
+
async setSecret(key, secret) {
|
|
7
|
+
this.store.set(key, secret);
|
|
8
|
+
}
|
|
9
|
+
async deleteSecret(key) {
|
|
10
|
+
this.store.delete(key);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=in-memory-keyring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-keyring.js","sourceRoot":"","sources":["../../../src/node/keyring/in-memory-keyring.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAe;IACT,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEnD,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,MAAc;QACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { KeyringAdapter } from '../../service/facade.js';
|
|
2
|
+
export declare class LinuxSecretstoreKeyring implements KeyringAdapter {
|
|
3
|
+
private readonly memoryStore;
|
|
4
|
+
private readonly serviceName;
|
|
5
|
+
constructor(serviceName?: string);
|
|
6
|
+
getSecret(key: string): Promise<string | null>;
|
|
7
|
+
setSecret(key: string, secret: string): Promise<void>;
|
|
8
|
+
deleteSecret(key: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=linux-secretstore-keyring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-secretstore-keyring.d.ts","sourceRoot":"","sources":["../../../src/node/keyring/linux-secretstore-keyring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBAAa,uBAAwB,YAAW,cAAc;IAC5D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,WAAW,SAAuB;IAIxC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI9C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class LinuxSecretstoreKeyring {
|
|
2
|
+
memoryStore = new Map();
|
|
3
|
+
serviceName;
|
|
4
|
+
constructor(serviceName = 'sentropic-llm-mesh') {
|
|
5
|
+
this.serviceName = serviceName;
|
|
6
|
+
}
|
|
7
|
+
async getSecret(key) {
|
|
8
|
+
return this.memoryStore.get(`${this.serviceName}:${key}`) ?? null;
|
|
9
|
+
}
|
|
10
|
+
async setSecret(key, secret) {
|
|
11
|
+
this.memoryStore.set(`${this.serviceName}:${key}`, secret);
|
|
12
|
+
}
|
|
13
|
+
async deleteSecret(key) {
|
|
14
|
+
this.memoryStore.delete(`${this.serviceName}:${key}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=linux-secretstore-keyring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linux-secretstore-keyring.js","sourceRoot":"","sources":["../../../src/node/keyring/linux-secretstore-keyring.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAuB;IACjB,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,WAAW,CAAS;IAErC,YAAY,WAAW,GAAG,oBAAoB;QAC5C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,MAAc;QACzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { KeyringAdapter } from '../../service/facade.js';
|
|
2
|
+
export declare class MacOSKeychainKeyring implements KeyringAdapter {
|
|
3
|
+
private readonly memoryStore;
|
|
4
|
+
private readonly serviceName;
|
|
5
|
+
constructor(serviceName?: string);
|
|
6
|
+
getSecret(key: string): Promise<string | null>;
|
|
7
|
+
setSecret(key: string, secret: string): Promise<void>;
|
|
8
|
+
deleteSecret(key: string): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=macos-keychain-keyring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos-keychain-keyring.d.ts","sourceRoot":"","sources":["../../../src/node/keyring/macos-keychain-keyring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBAAa,oBAAqB,YAAW,cAAc;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,WAAW,SAAuB;IAIxC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI9C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class MacOSKeychainKeyring {
|
|
2
|
+
memoryStore = new Map();
|
|
3
|
+
serviceName;
|
|
4
|
+
constructor(serviceName = 'sentropic-llm-mesh') {
|
|
5
|
+
this.serviceName = serviceName;
|
|
6
|
+
}
|
|
7
|
+
async getSecret(key) {
|
|
8
|
+
return this.memoryStore.get(`${this.serviceName}:${key}`) ?? null;
|
|
9
|
+
}
|
|
10
|
+
async setSecret(key, secret) {
|
|
11
|
+
this.memoryStore.set(`${this.serviceName}:${key}`, secret);
|
|
12
|
+
}
|
|
13
|
+
async deleteSecret(key) {
|
|
14
|
+
this.memoryStore.delete(`${this.serviceName}:${key}`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=macos-keychain-keyring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"macos-keychain-keyring.js","sourceRoot":"","sources":["../../../src/node/keyring/macos-keychain-keyring.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,oBAAoB;IACd,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,WAAW,CAAS;IAErC,YAAY,WAAW,GAAG,oBAAoB;QAC5C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,MAAc;QACzC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { AccountTransportAcquireInput, AccountTransportAcquisition } from '../account-transports.js';
|
|
2
|
+
import type { AccountTransportProviderId } from '../auth.js';
|
|
3
|
+
import type { EnrollmentSession, StartEnrollmentInput } from '../enrollment/contracts.js';
|
|
4
|
+
export interface ProviderRequest {
|
|
5
|
+
modelId: string;
|
|
6
|
+
contents: unknown[];
|
|
7
|
+
generationConfig?: unknown;
|
|
8
|
+
}
|
|
9
|
+
export type ProviderEvent = {
|
|
10
|
+
kind: 'content';
|
|
11
|
+
delta: string;
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'done';
|
|
14
|
+
usage: unknown;
|
|
15
|
+
} | {
|
|
16
|
+
kind: 'error';
|
|
17
|
+
code: string;
|
|
18
|
+
message: string;
|
|
19
|
+
};
|
|
20
|
+
export interface ProviderAdapter {
|
|
21
|
+
execute(acquisition: AccountTransportAcquisition, request: ProviderRequest, signal: AbortSignal): AsyncIterable<ProviderEvent>;
|
|
22
|
+
}
|
|
23
|
+
export interface KeyringAdapter {
|
|
24
|
+
getSecret(key: string): Promise<string | null>;
|
|
25
|
+
setSecret(key: string, secret: string): Promise<void>;
|
|
26
|
+
deleteSecret(key: string): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export interface ConfigResolver {
|
|
29
|
+
resolveConfig(configRef: string): Promise<Record<string, unknown>>;
|
|
30
|
+
}
|
|
31
|
+
export interface FacadeOptions {
|
|
32
|
+
configResolver: ConfigResolver;
|
|
33
|
+
keyring?: KeyringAdapter;
|
|
34
|
+
mode: 'cli' | 'portal';
|
|
35
|
+
}
|
|
36
|
+
export interface LlmMeshFacade {
|
|
37
|
+
enroll(providerId: AccountTransportProviderId, input: StartEnrollmentInput): Promise<EnrollmentSession>;
|
|
38
|
+
waitForCallback(enrollmentId: string): Promise<{
|
|
39
|
+
accountId: string;
|
|
40
|
+
label: string;
|
|
41
|
+
}>;
|
|
42
|
+
pollForCompletion(enrollmentId: string): Promise<{
|
|
43
|
+
accountId: string;
|
|
44
|
+
label: string;
|
|
45
|
+
}>;
|
|
46
|
+
cancel(enrollmentId: string): Promise<void>;
|
|
47
|
+
acquire(input: AccountTransportAcquireInput): Promise<AccountTransportAcquisition>;
|
|
48
|
+
release(acquisition: AccountTransportAcquisition): Promise<void>;
|
|
49
|
+
getAdapter(providerId: AccountTransportProviderId): ProviderAdapter;
|
|
50
|
+
}
|
|
51
|
+
export declare function createLlmMeshFacade(options: FacadeOptions): LlmMeshFacade;
|
|
52
|
+
//# sourceMappingURL=facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facade.d.ts","sourceRoot":"","sources":["../../src/service/facade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAEV,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AASpC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,OAAO,CACL,WAAW,EAAE,2BAA2B,EACxC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,WAAW,GAClB,aAAa,CAAC,aAAa,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAE5B,MAAM,CACJ,UAAU,EAAE,0BAA0B,EACtC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrF,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5C,OAAO,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACnF,OAAO,CAAC,WAAW,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjE,UAAU,CAAC,UAAU,EAAE,0BAA0B,GAAG,eAAe,CAAC;CACrE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAiDzE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ClaudeCodeEnrollmentProvider } from '../enrollment/claude-code.js';
|
|
2
|
+
import { CloudCodeEnrollmentProvider } from '../enrollment/cloud-code.js';
|
|
3
|
+
import { CodexEnrollmentProvider } from '../enrollment/codex.js';
|
|
4
|
+
import { EncryptedFileKeyring } from '../node/keyring/encrypted-file-keyring.js';
|
|
5
|
+
import { InMemoryKeyring } from '../node/keyring/in-memory-keyring.js';
|
|
6
|
+
import { CloudCodeProviderAdapter } from '../transport/cloud-code-transport.js';
|
|
7
|
+
import { LocalAccountTransportService } from './local-account-transport-service.js';
|
|
8
|
+
export function createLlmMeshFacade(options) {
|
|
9
|
+
if (!options) {
|
|
10
|
+
throw new Error('LlmMeshFacade: options is required');
|
|
11
|
+
}
|
|
12
|
+
if (!options.configResolver) {
|
|
13
|
+
throw new Error('configResolver is required');
|
|
14
|
+
}
|
|
15
|
+
const keyring = options.keyring ??
|
|
16
|
+
(options.mode === 'cli' ? new EncryptedFileKeyring() : new InMemoryKeyring());
|
|
17
|
+
const providers = new Map([
|
|
18
|
+
[
|
|
19
|
+
'cloud-code',
|
|
20
|
+
new CloudCodeEnrollmentProvider({ configResolver: options.configResolver }),
|
|
21
|
+
],
|
|
22
|
+
['codex', new CodexEnrollmentProvider({ configResolver: options.configResolver })],
|
|
23
|
+
['claude-code', new ClaudeCodeEnrollmentProvider()],
|
|
24
|
+
]);
|
|
25
|
+
const service = new LocalAccountTransportService(keyring, providers, options.configResolver);
|
|
26
|
+
return {
|
|
27
|
+
async enroll(providerId, input) {
|
|
28
|
+
return service.enroll(providerId, input);
|
|
29
|
+
},
|
|
30
|
+
async waitForCallback(enrollmentId) {
|
|
31
|
+
return service.waitForCallback(enrollmentId);
|
|
32
|
+
},
|
|
33
|
+
async pollForCompletion(enrollmentId) {
|
|
34
|
+
return service.pollForCompletion(enrollmentId);
|
|
35
|
+
},
|
|
36
|
+
async cancel(enrollmentId) {
|
|
37
|
+
return service.cancel(enrollmentId);
|
|
38
|
+
},
|
|
39
|
+
async acquire(input) {
|
|
40
|
+
return service.acquire(input);
|
|
41
|
+
},
|
|
42
|
+
async release(acquisition) {
|
|
43
|
+
return service.release(acquisition);
|
|
44
|
+
},
|
|
45
|
+
getAdapter(providerId) {
|
|
46
|
+
if (providerId === 'cloud-code') {
|
|
47
|
+
return new CloudCodeProviderAdapter();
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`Adapter for ${providerId} not available locally`);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../../src/service/facade.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAuDpF,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,OAAO,GACX,OAAO,CAAC,OAAO;QACf,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,IAAI,GAAG,CAA6B;QACpD;YACE,YAAY;YACZ,IAAI,2BAA2B,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;SAC5E;QACD,CAAC,OAAO,EAAE,IAAI,uBAAuB,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAClF,CAAC,aAAa,EAAE,IAAI,4BAA4B,EAAE,CAAC;KACpD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAE7F,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK;YAC5B,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,YAAY;YAChC,OAAO,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,YAAY;YAClC,OAAO,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,YAAY;YACvB,OAAO,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,WAAW;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QACD,UAAU,CAAC,UAAU;YACnB,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;gBAChC,OAAO,IAAI,wBAAwB,EAAE,CAAC;YACxC,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,eAAe,UAAU,wBAAwB,CAAC,CAAC;QACrE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type AccountTransportAccount, type AccountTransportAcquireInput, type AccountTransportAcquisition } from '../account-transports.js';
|
|
2
|
+
import type { EnrollmentProvider, EnrollmentSession, StartEnrollmentInput } from '../enrollment/contracts.js';
|
|
3
|
+
import type { ConfigResolver, KeyringAdapter } from './facade.js';
|
|
4
|
+
export declare class LocalAccountTransportService {
|
|
5
|
+
private readonly keyring;
|
|
6
|
+
private readonly providers;
|
|
7
|
+
private readonly configResolver;
|
|
8
|
+
private static readonly accountIndexKey;
|
|
9
|
+
private readonly coordinator;
|
|
10
|
+
private readonly accountsMap;
|
|
11
|
+
private readonly credentialVersions;
|
|
12
|
+
private readonly refreshInFlight;
|
|
13
|
+
constructor(keyring: KeyringAdapter, providers: Map<string, EnrollmentProvider>, configResolver: ConfigResolver);
|
|
14
|
+
enroll(providerId: string, input: StartEnrollmentInput): Promise<EnrollmentSession>;
|
|
15
|
+
waitForCallback(enrollmentId: string): Promise<{
|
|
16
|
+
accountId: string;
|
|
17
|
+
label: string;
|
|
18
|
+
}>;
|
|
19
|
+
pollForCompletion(enrollmentId: string): Promise<{
|
|
20
|
+
accountId: string;
|
|
21
|
+
label: string;
|
|
22
|
+
}>;
|
|
23
|
+
cancel(enrollmentId: string): Promise<void>;
|
|
24
|
+
registerAccount(account: AccountTransportAccount, configVersion?: string): void;
|
|
25
|
+
acquire(input: AccountTransportAcquireInput): Promise<AccountTransportAcquisition>;
|
|
26
|
+
release(_acquisition: AccountTransportAcquisition): Promise<void>;
|
|
27
|
+
private completeEnrollment;
|
|
28
|
+
private refreshToken;
|
|
29
|
+
private persistCredential;
|
|
30
|
+
private parseAccountIndex;
|
|
31
|
+
private restorePersistedAccounts;
|
|
32
|
+
private markReauthRequired;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=local-account-transport-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-account-transport-service.d.ts","sourceRoot":"","sources":["../../src/service/local-account-transport-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAIV,kBAAkB,EAClB,iBAAiB,EAGjB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAWlE,qBAAa,4BAA4B;IAQrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IATjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAuC;IAC9E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8C;IAC1E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkD;gBAG/D,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC1C,cAAc,EAAE,cAAc;IAM3C,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQnF,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA0CpF,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA2CtF,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,eAAe,CAAC,OAAO,EAAE,uBAAuB,EAAE,aAAa,SAAW,GAAG,IAAI;IAO3E,OAAO,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC;IA4ElF,OAAO,CAAC,YAAY,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;YAMzD,kBAAkB;YAIlB,YAAY;YA0BZ,iBAAiB;IA4B/B,OAAO,CAAC,iBAAiB;YAYX,wBAAwB;YA0BxB,kBAAkB;CAMjC"}
|