@auxiora/vault 1.0.0 → 1.3.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@auxiora/vault",
3
- "version": "1.0.0",
3
+ "version": "1.3.0",
4
4
  "description": "Encrypted credential vault with AES-256-GCM and Argon2id",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -13,11 +13,17 @@
13
13
  },
14
14
  "dependencies": {
15
15
  "argon2": "^0.44.0",
16
- "@auxiora/core": "1.0.0"
16
+ "@auxiora/core": "1.3.0"
17
17
  },
18
18
  "engines": {
19
19
  "node": ">=22.0.0"
20
20
  },
21
+ "publishConfig": {
22
+ "access": "public"
23
+ },
24
+ "files": [
25
+ "dist/"
26
+ ],
21
27
  "scripts": {
22
28
  "build": "tsc",
23
29
  "clean": "rm -rf dist",
@@ -1,129 +0,0 @@
1
- import * as crypto from 'node:crypto';
2
-
3
- const ALGORITHM = 'aes-256-gcm';
4
- const IV_LENGTH = 12;
5
- const AUTH_TAG_LENGTH = 16;
6
- const KEY_LENGTH = 32;
7
-
8
- /**
9
- * Encrypted envelope containing a data key encrypted by the master key,
10
- * and the data encrypted by the data key.
11
- */
12
- export interface EncryptedEnvelope {
13
- version: number;
14
- /** Encrypted data key (base64) */
15
- encryptedDataKey: string;
16
- /** IV for data key encryption (base64) */
17
- dataKeyIv: string;
18
- /** Auth tag for data key encryption (base64) */
19
- dataKeyTag: string;
20
- /** Encrypted payload (base64) */
21
- encryptedPayload: string;
22
- /** IV for payload encryption (base64) */
23
- payloadIv: string;
24
- /** Auth tag for payload encryption (base64) */
25
- payloadTag: string;
26
- }
27
-
28
- function encryptAes256Gcm(plaintext: Buffer, key: Buffer): { ciphertext: Buffer; iv: Buffer; tag: Buffer } {
29
- const iv = crypto.randomBytes(IV_LENGTH);
30
- const cipher = crypto.createCipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });
31
- const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
32
- const tag = cipher.getAuthTag();
33
- return { ciphertext, iv, tag };
34
- }
35
-
36
- function decryptAes256Gcm(ciphertext: Buffer, key: Buffer, iv: Buffer, tag: Buffer): Buffer {
37
- const decipher = crypto.createDecipheriv(ALGORITHM, key, iv, { authTagLength: AUTH_TAG_LENGTH });
38
- decipher.setAuthTag(tag);
39
- return Buffer.concat([decipher.update(ciphertext), decipher.final()]);
40
- }
41
-
42
- /**
43
- * CloudVault provides client-side AES-256-GCM encryption with envelope encryption.
44
- * All data is encrypted before leaving the client, so the server never sees plaintext.
45
- */
46
- export class CloudVault {
47
- /**
48
- * Encrypt data using envelope encryption.
49
- * Generates a random data key, encrypts the payload with it,
50
- * then encrypts the data key with the master key.
51
- */
52
- static encrypt(plaintext: Buffer, masterKey: Buffer): EncryptedEnvelope {
53
- // Generate a random data key
54
- const dataKey = crypto.randomBytes(KEY_LENGTH);
55
-
56
- // Encrypt the payload with the data key
57
- const payload = encryptAes256Gcm(plaintext, dataKey);
58
-
59
- // Encrypt the data key with the master key
60
- const wrappedKey = encryptAes256Gcm(dataKey, masterKey);
61
-
62
- // Zero the data key
63
- dataKey.fill(0);
64
-
65
- return {
66
- version: 1,
67
- encryptedDataKey: wrappedKey.ciphertext.toString('base64'),
68
- dataKeyIv: wrappedKey.iv.toString('base64'),
69
- dataKeyTag: wrappedKey.tag.toString('base64'),
70
- encryptedPayload: payload.ciphertext.toString('base64'),
71
- payloadIv: payload.iv.toString('base64'),
72
- payloadTag: payload.tag.toString('base64'),
73
- };
74
- }
75
-
76
- /**
77
- * Decrypt an envelope-encrypted payload.
78
- */
79
- static decrypt(envelope: EncryptedEnvelope, masterKey: Buffer): Buffer {
80
- // Unwrap the data key
81
- const dataKey = decryptAes256Gcm(
82
- Buffer.from(envelope.encryptedDataKey, 'base64'),
83
- masterKey,
84
- Buffer.from(envelope.dataKeyIv, 'base64'),
85
- Buffer.from(envelope.dataKeyTag, 'base64'),
86
- );
87
-
88
- // Decrypt the payload
89
- const plaintext = decryptAes256Gcm(
90
- Buffer.from(envelope.encryptedPayload, 'base64'),
91
- dataKey,
92
- Buffer.from(envelope.payloadIv, 'base64'),
93
- Buffer.from(envelope.payloadTag, 'base64'),
94
- );
95
-
96
- // Zero the data key
97
- dataKey.fill(0);
98
-
99
- return plaintext;
100
- }
101
-
102
- /**
103
- * Re-encrypt an envelope with a new master key (for key rotation).
104
- * The data key is unwrapped with the old key and re-wrapped with the new key.
105
- * The payload itself is not re-encrypted (only the key envelope changes).
106
- */
107
- static reEncrypt(envelope: EncryptedEnvelope, oldMasterKey: Buffer, newMasterKey: Buffer): EncryptedEnvelope {
108
- // Unwrap data key with old master key
109
- const dataKey = decryptAes256Gcm(
110
- Buffer.from(envelope.encryptedDataKey, 'base64'),
111
- oldMasterKey,
112
- Buffer.from(envelope.dataKeyIv, 'base64'),
113
- Buffer.from(envelope.dataKeyTag, 'base64'),
114
- );
115
-
116
- // Re-wrap data key with new master key
117
- const wrappedKey = encryptAes256Gcm(dataKey, newMasterKey);
118
-
119
- // Zero the data key
120
- dataKey.fill(0);
121
-
122
- return {
123
- ...envelope,
124
- encryptedDataKey: wrappedKey.ciphertext.toString('base64'),
125
- dataKeyIv: wrappedKey.iv.toString('base64'),
126
- dataKeyTag: wrappedKey.tag.toString('base64'),
127
- };
128
- }
129
- }
package/src/crypto.ts DELETED
@@ -1,63 +0,0 @@
1
- import * as crypto from 'node:crypto';
2
- import * as argon2 from 'argon2';
3
- import { zeroBuffer } from '@auxiora/core';
4
-
5
- const ARGON2_MEMORY_COST = 65536; // 64MB
6
- const ARGON2_TIME_COST = 3;
7
- const ARGON2_PARALLELISM = 1;
8
- const KEY_LENGTH = 32;
9
- const IV_LENGTH = 12;
10
- const AUTH_TAG_LENGTH = 16;
11
-
12
- export async function deriveKey(password: string, salt: Buffer): Promise<Buffer> {
13
- const key = await argon2.hash(password, {
14
- type: argon2.argon2id,
15
- salt,
16
- memoryCost: ARGON2_MEMORY_COST,
17
- timeCost: ARGON2_TIME_COST,
18
- parallelism: ARGON2_PARALLELISM,
19
- hashLength: KEY_LENGTH,
20
- raw: true,
21
- });
22
- return key;
23
- }
24
-
25
- export function generateSalt(): Buffer {
26
- return crypto.randomBytes(32);
27
- }
28
-
29
- export function generateIv(): Buffer {
30
- return crypto.randomBytes(IV_LENGTH);
31
- }
32
-
33
- export interface EncryptedData {
34
- iv: Buffer;
35
- ciphertext: Buffer;
36
- tag: Buffer;
37
- }
38
-
39
- export function encrypt(plaintext: Buffer, key: Buffer): EncryptedData {
40
- const iv = generateIv();
41
- const cipher = crypto.createCipheriv('aes-256-gcm', key, iv, {
42
- authTagLength: AUTH_TAG_LENGTH,
43
- });
44
-
45
- const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
46
- const tag = cipher.getAuthTag();
47
-
48
- return { iv, ciphertext, tag };
49
- }
50
-
51
- export function decrypt(encryptedData: EncryptedData, key: Buffer): Buffer {
52
- const { iv, ciphertext, tag } = encryptedData;
53
-
54
- const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv, {
55
- authTagLength: AUTH_TAG_LENGTH,
56
- });
57
- decipher.setAuthTag(tag);
58
-
59
- const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
60
- return plaintext;
61
- }
62
-
63
- export { zeroBuffer };
package/src/eject.ts DELETED
@@ -1,55 +0,0 @@
1
- import * as fs from 'node:fs/promises';
2
- import * as path from 'node:path';
3
-
4
- export interface EjectableData {
5
- version: number;
6
- exportedAt: string;
7
- credentials: Record<string, string>;
8
- metadata?: Record<string, unknown>;
9
- }
10
-
11
- /**
12
- * EjectManager provides data portability — export all tenant data
13
- * in a portable, decrypted format that can be imported elsewhere.
14
- */
15
- export class EjectManager {
16
- /**
17
- * Export all credentials to a portable JSON format.
18
- */
19
- static exportData(credentials: Record<string, string>, metadata?: Record<string, unknown>): EjectableData {
20
- return {
21
- version: 1,
22
- exportedAt: new Date().toISOString(),
23
- credentials: { ...credentials },
24
- metadata,
25
- };
26
- }
27
-
28
- /**
29
- * Save exported data to a file.
30
- */
31
- static async saveToFile(data: EjectableData, filePath: string): Promise<void> {
32
- const dir = path.dirname(filePath);
33
- await fs.mkdir(dir, { recursive: true });
34
- await fs.writeFile(filePath, JSON.stringify(data, null, 2), 'utf-8');
35
- }
36
-
37
- /**
38
- * Load exported data from a file.
39
- */
40
- static async loadFromFile(filePath: string): Promise<EjectableData> {
41
- const content = await fs.readFile(filePath, 'utf-8');
42
- const data = JSON.parse(content) as EjectableData;
43
- if (!data.version || !data.credentials) {
44
- throw new Error('Invalid eject file format');
45
- }
46
- return data;
47
- }
48
-
49
- /**
50
- * Import credentials from ejected data into a vault-compatible format.
51
- */
52
- static getCredentials(data: EjectableData): Record<string, string> {
53
- return { ...data.credentials };
54
- }
55
- }
package/src/index.ts DELETED
@@ -1,13 +0,0 @@
1
- export { Vault, VaultError, type VaultOptions } from './vault.js';
2
- export {
3
- deriveKey,
4
- encrypt,
5
- decrypt,
6
- generateSalt,
7
- generateIv,
8
- zeroBuffer,
9
- } from './crypto.js';
10
- export { readVaultFile, writeVaultFile, deleteVaultFile, getVaultPath, vaultExists } from './storage.js';
11
- export { CloudVault, type EncryptedEnvelope } from './cloud-vault.js';
12
- export { KeyManager, type ExportedKey } from './key-management.js';
13
- export { EjectManager, type EjectableData } from './eject.js';
@@ -1,86 +0,0 @@
1
- import * as crypto from 'node:crypto';
2
-
3
- const PBKDF2_ITERATIONS = 600000;
4
- const KEY_LENGTH = 32;
5
- const SALT_LENGTH = 32;
6
-
7
- export interface ExportedKey {
8
- version: number;
9
- salt: string;
10
- iterations: number;
11
- keyHash: string;
12
- }
13
-
14
- /**
15
- * KeyManager handles key derivation, rotation, and import/export
16
- * for client-side cloud vault encryption.
17
- */
18
- export class KeyManager {
19
- /**
20
- * Derive a 256-bit key from a password using PBKDF2.
21
- */
22
- static async deriveKey(password: string, salt?: Buffer): Promise<{ key: Buffer; salt: Buffer }> {
23
- const keySalt = salt ?? crypto.randomBytes(SALT_LENGTH);
24
-
25
- const key = await new Promise<Buffer>((resolve, reject) => {
26
- crypto.pbkdf2(password, keySalt, PBKDF2_ITERATIONS, KEY_LENGTH, 'sha512', (err, derivedKey) => {
27
- if (err) reject(err);
28
- else resolve(derivedKey);
29
- });
30
- });
31
-
32
- return { key, salt: keySalt };
33
- }
34
-
35
- /**
36
- * Generate a random 256-bit master key.
37
- */
38
- static generateKey(): Buffer {
39
- return crypto.randomBytes(KEY_LENGTH);
40
- }
41
-
42
- /**
43
- * Rotate a key: derive a new key from a new password.
44
- * Returns both old and new keys for re-encryption.
45
- */
46
- static async rotateKey(
47
- oldPassword: string,
48
- oldSalt: Buffer,
49
- newPassword: string,
50
- ): Promise<{ oldKey: Buffer; newKey: Buffer; newSalt: Buffer }> {
51
- const { key: oldKey } = await KeyManager.deriveKey(oldPassword, oldSalt);
52
- const { key: newKey, salt: newSalt } = await KeyManager.deriveKey(newPassword);
53
-
54
- return { oldKey, newKey, newSalt };
55
- }
56
-
57
- /**
58
- * Export a key's metadata for storage (does NOT export the key itself).
59
- * Stores the salt and a hash of the derived key for verification.
60
- */
61
- static exportKeyMetadata(salt: Buffer, key: Buffer): ExportedKey {
62
- const keyHash = crypto.createHash('sha256').update(key).digest('hex');
63
- return {
64
- version: 1,
65
- salt: salt.toString('base64'),
66
- iterations: PBKDF2_ITERATIONS,
67
- keyHash,
68
- };
69
- }
70
-
71
- /**
72
- * Import key metadata and verify a password against it.
73
- */
74
- static async verifyPassword(password: string, exported: ExportedKey): Promise<{ valid: boolean; key: Buffer }> {
75
- const salt = Buffer.from(exported.salt, 'base64');
76
- const { key } = await KeyManager.deriveKey(password, salt);
77
- const keyHash = crypto.createHash('sha256').update(key).digest('hex');
78
-
79
- if (keyHash === exported.keyHash) {
80
- return { valid: true, key };
81
- }
82
-
83
- key.fill(0);
84
- return { valid: false, key: Buffer.alloc(0) };
85
- }
86
- }
package/src/storage.ts DELETED
@@ -1,66 +0,0 @@
1
- import * as fs from 'node:fs/promises';
2
- import * as path from 'node:path';
3
- import { getVaultPath, isWindows } from '@auxiora/core';
4
-
5
- export interface VaultFile {
6
- version: number;
7
- salt: string;
8
- iv: string;
9
- data: string;
10
- tag: string;
11
- }
12
-
13
- export { getVaultPath };
14
-
15
- export async function readVaultFile(customPath?: string): Promise<VaultFile | null> {
16
- const vaultPath = customPath || getVaultPath();
17
-
18
- try {
19
- const content = await fs.readFile(vaultPath, 'utf-8');
20
- return JSON.parse(content) as VaultFile;
21
- } catch (error) {
22
- if ((error as NodeJS.ErrnoException).code === 'ENOENT') {
23
- return null;
24
- }
25
- throw error;
26
- }
27
- }
28
-
29
- export async function writeVaultFile(vaultFile: VaultFile, customPath?: string): Promise<void> {
30
- const vaultPath = customPath || getVaultPath();
31
- const vaultDir = path.dirname(vaultPath);
32
-
33
- // Create parent directories if needed
34
- await fs.mkdir(vaultDir, { recursive: true });
35
-
36
- // Write the file
37
- await fs.writeFile(vaultPath, JSON.stringify(vaultFile, null, 2), 'utf-8');
38
-
39
- // Set permissions to 0600 on Unix
40
- if (!isWindows()) {
41
- await fs.chmod(vaultPath, 0o600);
42
- }
43
- }
44
-
45
- export async function deleteVaultFile(customPath?: string): Promise<void> {
46
- const vaultPath = customPath || getVaultPath();
47
-
48
- try {
49
- await fs.unlink(vaultPath);
50
- } catch (error) {
51
- if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {
52
- throw error;
53
- }
54
- }
55
- }
56
-
57
- export async function vaultExists(customPath?: string): Promise<boolean> {
58
- const vaultPath = customPath || getVaultPath();
59
-
60
- try {
61
- await fs.access(vaultPath);
62
- return true;
63
- } catch {
64
- return false;
65
- }
66
- }
package/src/vault.ts DELETED
@@ -1,151 +0,0 @@
1
- import {
2
- deriveKey,
3
- generateSalt,
4
- encrypt,
5
- decrypt,
6
- zeroBuffer,
7
- type EncryptedData,
8
- } from './crypto.js';
9
- import { readVaultFile, writeVaultFile, type VaultFile } from './storage.js';
10
-
11
- interface VaultData {
12
- credentials: Record<string, string>;
13
- }
14
-
15
- export class VaultError extends Error {
16
- constructor(message: string) {
17
- super(message);
18
- this.name = 'VaultError';
19
- }
20
- }
21
-
22
- export interface VaultOptions {
23
- path?: string;
24
- }
25
-
26
- export class Vault {
27
- private key: Buffer | null = null;
28
- private salt: Buffer | null = null;
29
- private credentials: Record<string, string> = {};
30
- private isUnlocked = false;
31
- private vaultPath?: string;
32
-
33
- constructor(options?: VaultOptions) {
34
- this.vaultPath = options?.path;
35
- }
36
-
37
- async unlock(password: string): Promise<void> {
38
- const vaultFile = await readVaultFile(this.vaultPath);
39
-
40
- if (vaultFile === null) {
41
- // New vault - create with this password
42
- this.salt = generateSalt();
43
- this.key = await deriveKey(password, this.salt);
44
- this.credentials = {};
45
- this.isUnlocked = true;
46
- await this.save();
47
- return;
48
- }
49
-
50
- // Existing vault - decrypt
51
- this.salt = Buffer.from(vaultFile.salt, 'base64');
52
- this.key = await deriveKey(password, this.salt);
53
-
54
- const encryptedData: EncryptedData = {
55
- iv: Buffer.from(vaultFile.iv, 'base64'),
56
- ciphertext: Buffer.from(vaultFile.data, 'base64'),
57
- tag: Buffer.from(vaultFile.tag, 'base64'),
58
- };
59
-
60
- try {
61
- const plaintext = decrypt(encryptedData, this.key);
62
- const data = JSON.parse(plaintext.toString('utf-8')) as VaultData;
63
- this.credentials = data.credentials;
64
- this.isUnlocked = true;
65
- } catch {
66
- this.lock();
67
- throw new VaultError('Wrong password or corrupted vault');
68
- }
69
- }
70
-
71
- lock(): void {
72
- if (this.key) {
73
- zeroBuffer(this.key);
74
- this.key = null;
75
- }
76
- this.salt = null;
77
- this.credentials = {};
78
- this.isUnlocked = false;
79
- }
80
-
81
- private ensureUnlocked(): void {
82
- if (!this.isUnlocked || !this.key || !this.salt) {
83
- throw new VaultError('Vault is locked');
84
- }
85
- }
86
-
87
- private async save(): Promise<void> {
88
- this.ensureUnlocked();
89
-
90
- const data: VaultData = { credentials: this.credentials };
91
- const plaintext = Buffer.from(JSON.stringify(data), 'utf-8');
92
- const encrypted = encrypt(plaintext, this.key!);
93
-
94
- const vaultFile: VaultFile = {
95
- version: 1,
96
- salt: this.salt!.toString('base64'),
97
- iv: encrypted.iv.toString('base64'),
98
- data: encrypted.ciphertext.toString('base64'),
99
- tag: encrypted.tag.toString('base64'),
100
- };
101
-
102
- await writeVaultFile(vaultFile, this.vaultPath);
103
- }
104
-
105
- async add(name: string, value: string): Promise<void> {
106
- this.ensureUnlocked();
107
- this.credentials[name] = value;
108
- await this.save();
109
- }
110
-
111
- list(): string[] {
112
- this.ensureUnlocked();
113
- return Object.keys(this.credentials);
114
- }
115
-
116
- async remove(name: string): Promise<boolean> {
117
- this.ensureUnlocked();
118
- if (!(name in this.credentials)) {
119
- return false;
120
- }
121
- delete this.credentials[name];
122
- await this.save();
123
- return true;
124
- }
125
-
126
- get(name: string): string | undefined {
127
- this.ensureUnlocked();
128
- return this.credentials[name];
129
- }
130
-
131
- has(name: string): boolean {
132
- this.ensureUnlocked();
133
- return name in this.credentials;
134
- }
135
-
136
- async changePassword(newPassword: string): Promise<void> {
137
- this.ensureUnlocked();
138
-
139
- // Zero the old key
140
- if (this.key) {
141
- zeroBuffer(this.key);
142
- }
143
-
144
- // Generate new salt and derive new key
145
- this.salt = generateSalt();
146
- this.key = await deriveKey(newPassword, this.salt);
147
-
148
- // Re-save with new encryption
149
- await this.save();
150
- }
151
- }
@@ -1,80 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import * as crypto from 'node:crypto';
3
- import { CloudVault } from '../src/cloud-vault.js';
4
-
5
- describe('CloudVault', () => {
6
- const masterKey = crypto.randomBytes(32);
7
-
8
- describe('encrypt / decrypt', () => {
9
- it('should encrypt and decrypt data', () => {
10
- const plaintext = Buffer.from('Hello, cloud vault!');
11
- const envelope = CloudVault.encrypt(plaintext, masterKey);
12
-
13
- expect(envelope.version).toBe(1);
14
- expect(envelope.encryptedDataKey).toBeDefined();
15
- expect(envelope.encryptedPayload).toBeDefined();
16
-
17
- const decrypted = CloudVault.decrypt(envelope, masterKey);
18
- expect(decrypted.toString()).toBe('Hello, cloud vault!');
19
- });
20
-
21
- it('should fail with wrong master key', () => {
22
- const plaintext = Buffer.from('secret data');
23
- const envelope = CloudVault.encrypt(plaintext, masterKey);
24
-
25
- const wrongKey = crypto.randomBytes(32);
26
- expect(() => CloudVault.decrypt(envelope, wrongKey)).toThrow();
27
- });
28
-
29
- it('should handle empty data', () => {
30
- const plaintext = Buffer.from('');
31
- const envelope = CloudVault.encrypt(plaintext, masterKey);
32
- const decrypted = CloudVault.decrypt(envelope, masterKey);
33
- expect(decrypted.toString()).toBe('');
34
- });
35
-
36
- it('should handle large data', () => {
37
- const plaintext = crypto.randomBytes(1024 * 1024); // 1MB
38
- const envelope = CloudVault.encrypt(plaintext, masterKey);
39
- const decrypted = CloudVault.decrypt(envelope, masterKey);
40
- expect(decrypted.equals(plaintext)).toBe(true);
41
- });
42
-
43
- it('should produce different ciphertexts for same plaintext', () => {
44
- const plaintext = Buffer.from('same data');
45
- const e1 = CloudVault.encrypt(plaintext, masterKey);
46
- const e2 = CloudVault.encrypt(plaintext, masterKey);
47
- expect(e1.encryptedPayload).not.toBe(e2.encryptedPayload);
48
- });
49
- });
50
-
51
- describe('reEncrypt', () => {
52
- it('should re-encrypt with a new master key', () => {
53
- const plaintext = Buffer.from('data to rotate');
54
- const envelope = CloudVault.encrypt(plaintext, masterKey);
55
-
56
- const newMasterKey = crypto.randomBytes(32);
57
- const rotated = CloudVault.reEncrypt(envelope, masterKey, newMasterKey);
58
-
59
- // Old key should no longer work
60
- expect(() => CloudVault.decrypt(rotated, masterKey)).toThrow();
61
-
62
- // New key should work
63
- const decrypted = CloudVault.decrypt(rotated, newMasterKey);
64
- expect(decrypted.toString()).toBe('data to rotate');
65
- });
66
-
67
- it('should preserve the payload ciphertext during rotation', () => {
68
- const plaintext = Buffer.from('preserved payload');
69
- const envelope = CloudVault.encrypt(plaintext, masterKey);
70
-
71
- const newMasterKey = crypto.randomBytes(32);
72
- const rotated = CloudVault.reEncrypt(envelope, masterKey, newMasterKey);
73
-
74
- // Payload should be the same (only key envelope changed)
75
- expect(rotated.encryptedPayload).toBe(envelope.encryptedPayload);
76
- expect(rotated.payloadIv).toBe(envelope.payloadIv);
77
- expect(rotated.payloadTag).toBe(envelope.payloadTag);
78
- });
79
- });
80
- });
@@ -1,64 +0,0 @@
1
- import { describe, it, expect, afterEach } from 'vitest';
2
- import * as fs from 'node:fs/promises';
3
- import * as path from 'node:path';
4
- import * as os from 'node:os';
5
- import { EjectManager } from '../src/eject.js';
6
-
7
- describe('EjectManager', () => {
8
- let tmpDir: string;
9
-
10
- afterEach(async () => {
11
- if (tmpDir) {
12
- await fs.rm(tmpDir, { recursive: true, force: true });
13
- }
14
- });
15
-
16
- describe('exportData', () => {
17
- it('should create export data with credentials', () => {
18
- const data = EjectManager.exportData({ API_KEY: 'secret', DB_URL: 'postgres://...' });
19
- expect(data.version).toBe(1);
20
- expect(data.exportedAt).toBeDefined();
21
- expect(data.credentials.API_KEY).toBe('secret');
22
- expect(data.credentials.DB_URL).toBe('postgres://...');
23
- });
24
-
25
- it('should include optional metadata', () => {
26
- const data = EjectManager.exportData({ KEY: 'val' }, { source: 'test' });
27
- expect(data.metadata?.source).toBe('test');
28
- });
29
- });
30
-
31
- describe('saveToFile / loadFromFile', () => {
32
- it('should save and load data', async () => {
33
- tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'eject-'));
34
- const filePath = path.join(tmpDir, 'export.json');
35
-
36
- const data = EjectManager.exportData({ KEY: 'value' });
37
- await EjectManager.saveToFile(data, filePath);
38
-
39
- const loaded = await EjectManager.loadFromFile(filePath);
40
- expect(loaded.version).toBe(1);
41
- expect(loaded.credentials.KEY).toBe('value');
42
- });
43
-
44
- it('should throw on invalid file', async () => {
45
- tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'eject-'));
46
- const filePath = path.join(tmpDir, 'bad.json');
47
- await fs.writeFile(filePath, '{"invalid":true}', 'utf-8');
48
-
49
- await expect(EjectManager.loadFromFile(filePath)).rejects.toThrow('Invalid eject file format');
50
- });
51
- });
52
-
53
- describe('getCredentials', () => {
54
- it('should return a copy of credentials', () => {
55
- const data = EjectManager.exportData({ A: '1', B: '2' });
56
- const creds = EjectManager.getCredentials(data);
57
- expect(creds).toEqual({ A: '1', B: '2' });
58
-
59
- // Should be a copy, not a reference
60
- creds.A = 'modified';
61
- expect(data.credentials.A).toBe('1');
62
- });
63
- });
64
- });
@@ -1,76 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import * as crypto from 'node:crypto';
3
- import { KeyManager } from '../src/key-management.js';
4
-
5
- describe('KeyManager', () => {
6
- describe('deriveKey', () => {
7
- it('should derive a 32-byte key from a password', async () => {
8
- const { key, salt } = await KeyManager.deriveKey('my-password');
9
- expect(key).toBeInstanceOf(Buffer);
10
- expect(key.length).toBe(32);
11
- expect(salt.length).toBe(32);
12
- });
13
-
14
- it('should produce the same key with the same salt', async () => {
15
- const { key: key1, salt } = await KeyManager.deriveKey('my-password');
16
- const { key: key2 } = await KeyManager.deriveKey('my-password', salt);
17
- expect(key1.equals(key2)).toBe(true);
18
- });
19
-
20
- it('should produce different keys for different passwords', async () => {
21
- const salt = crypto.randomBytes(32);
22
- const { key: key1 } = await KeyManager.deriveKey('password-1', salt);
23
- const { key: key2 } = await KeyManager.deriveKey('password-2', salt);
24
- expect(key1.equals(key2)).toBe(false);
25
- });
26
- });
27
-
28
- describe('generateKey', () => {
29
- it('should generate a random 32-byte key', () => {
30
- const key = KeyManager.generateKey();
31
- expect(key).toBeInstanceOf(Buffer);
32
- expect(key.length).toBe(32);
33
- });
34
-
35
- it('should produce unique keys', () => {
36
- const k1 = KeyManager.generateKey();
37
- const k2 = KeyManager.generateKey();
38
- expect(k1.equals(k2)).toBe(false);
39
- });
40
- });
41
-
42
- describe('rotateKey', () => {
43
- it('should produce old and new keys', async () => {
44
- const { salt: oldSalt } = await KeyManager.deriveKey('old-password');
45
- const { oldKey, newKey, newSalt } = await KeyManager.rotateKey('old-password', oldSalt, 'new-password');
46
-
47
- expect(oldKey.length).toBe(32);
48
- expect(newKey.length).toBe(32);
49
- expect(newSalt.length).toBe(32);
50
- expect(oldKey.equals(newKey)).toBe(false);
51
- });
52
- });
53
-
54
- describe('exportKeyMetadata / verifyPassword', () => {
55
- it('should export and verify a password', async () => {
56
- const { key, salt } = await KeyManager.deriveKey('test-password');
57
- const exported = KeyManager.exportKeyMetadata(salt, key);
58
-
59
- expect(exported.version).toBe(1);
60
- expect(exported.salt).toBeDefined();
61
- expect(exported.keyHash).toBeDefined();
62
-
63
- const { valid, key: verifiedKey } = await KeyManager.verifyPassword('test-password', exported);
64
- expect(valid).toBe(true);
65
- expect(verifiedKey.length).toBe(32);
66
- });
67
-
68
- it('should reject wrong password', async () => {
69
- const { key, salt } = await KeyManager.deriveKey('correct-password');
70
- const exported = KeyManager.exportKeyMetadata(salt, key);
71
-
72
- const { valid } = await KeyManager.verifyPassword('wrong-password', exported);
73
- expect(valid).toBe(false);
74
- });
75
- });
76
- });
@@ -1,127 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import * as fs from 'node:fs/promises';
3
- import * as path from 'node:path';
4
- import * as os from 'node:os';
5
- import { Vault, VaultError } from '../src/vault.js';
6
-
7
- // Create unique test dir for each test run
8
- let testDir: string;
9
- let testVaultPath: string;
10
-
11
- describe('Vault', () => {
12
- beforeEach(async () => {
13
- testDir = path.join(os.tmpdir(), 'auxiora-vault-test-' + Date.now() + '-' + Math.random().toString(36).slice(2));
14
- testVaultPath = path.join(testDir, 'vault.enc');
15
- await fs.mkdir(testDir, { recursive: true });
16
- });
17
-
18
- afterEach(async () => {
19
- await fs.rm(testDir, { recursive: true, force: true });
20
- });
21
-
22
- describe('unlock', () => {
23
- it('should create a new vault if none exists', async () => {
24
- const vault = new Vault({ path: testVaultPath });
25
- await vault.unlock('test-password');
26
-
27
- expect(vault.list()).toEqual([]);
28
-
29
- const exists = await fs.access(testVaultPath).then(() => true).catch(() => false);
30
- expect(exists).toBe(true);
31
-
32
- vault.lock();
33
- });
34
-
35
- it('should unlock an existing vault with correct password', async () => {
36
- // Create vault
37
- const vault1 = new Vault({ path: testVaultPath });
38
- await vault1.unlock('test-password');
39
- await vault1.add('TEST_KEY', 'test-value');
40
- vault1.lock();
41
-
42
- // Reopen vault
43
- const vault2 = new Vault({ path: testVaultPath });
44
- await vault2.unlock('test-password');
45
-
46
- expect(vault2.get('TEST_KEY')).toBe('test-value');
47
- vault2.lock();
48
- });
49
-
50
- it('should fail with wrong password', async () => {
51
- // Create vault
52
- const vault1 = new Vault({ path: testVaultPath });
53
- await vault1.unlock('correct-password');
54
- await vault1.add('TEST_KEY', 'test-value');
55
- vault1.lock();
56
-
57
- // Try wrong password
58
- const vault2 = new Vault({ path: testVaultPath });
59
- await expect(vault2.unlock('wrong-password')).rejects.toThrow(VaultError);
60
- });
61
- });
62
-
63
- describe('credentials', () => {
64
- let vault: Vault;
65
-
66
- beforeEach(async () => {
67
- vault = new Vault({ path: testVaultPath });
68
- await vault.unlock('test-password');
69
- });
70
-
71
- afterEach(() => {
72
- vault.lock();
73
- });
74
-
75
- it('should add and retrieve credentials', async () => {
76
- await vault.add('API_KEY', 'secret-value');
77
- expect(vault.get('API_KEY')).toBe('secret-value');
78
- });
79
-
80
- it('should list credential names', async () => {
81
- await vault.add('KEY1', 'value1');
82
- await vault.add('KEY2', 'value2');
83
-
84
- const names = vault.list();
85
- expect(names).toContain('KEY1');
86
- expect(names).toContain('KEY2');
87
- expect(names).toHaveLength(2);
88
- });
89
-
90
- it('should remove credentials', async () => {
91
- await vault.add('TO_DELETE', 'value');
92
- expect(vault.has('TO_DELETE')).toBe(true);
93
-
94
- const removed = await vault.remove('TO_DELETE');
95
- expect(removed).toBe(true);
96
- expect(vault.has('TO_DELETE')).toBe(false);
97
- });
98
-
99
- it('should return false when removing non-existent credential', async () => {
100
- const removed = await vault.remove('NON_EXISTENT');
101
- expect(removed).toBe(false);
102
- });
103
-
104
- it('should persist credentials across sessions', async () => {
105
- await vault.add('PERSISTENT', 'persisted-value');
106
- vault.lock();
107
-
108
- const vault2 = new Vault({ path: testVaultPath });
109
- await vault2.unlock('test-password');
110
- expect(vault2.get('PERSISTENT')).toBe('persisted-value');
111
- vault2.lock();
112
- });
113
- });
114
-
115
- describe('lock', () => {
116
- it('should clear data on lock', async () => {
117
- const vault = new Vault({ path: testVaultPath });
118
- await vault.unlock('test-password');
119
- await vault.add('KEY', 'value');
120
-
121
- vault.lock();
122
-
123
- expect(() => vault.list()).toThrow(VaultError);
124
- expect(() => vault.get('KEY')).toThrow(VaultError);
125
- });
126
- });
127
- });
package/tsconfig.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "outDir": "./dist",
5
- "rootDir": "./src"
6
- },
7
- "include": ["src/**/*"],
8
- "references": [
9
- { "path": "../core" }
10
- ]
11
- }
@@ -1 +0,0 @@
1
- {"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","./src/cloud-vault.ts","../../node_modules/.pnpm/argon2@0.44.0/node_modules/argon2/argon2.d.cts","../core/dist/index.d.ts","./src/crypto.ts","./src/eject.ts","./src/storage.ts","./src/vault.ts","./src/key-management.ts","./src/index.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/blob.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/console.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/encoding.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/utility.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client-stats.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/h2c-client.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-call-history.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/snapshot-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache-interceptor.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@7.16.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/importmeta.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/messaging.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/performance.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/streams.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/timers.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/web-globals/url.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/inspector/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/path/posix.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/path/win32.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/quic.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/test/reporters.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/util/types.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@25.1.0/node_modules/@types/node/index.d.ts"],"fileIdsList":[[75,134,135,137,145,149,152,154,155,156,168],[75,136,137,145,149,152,154,155,156,168],[137,145,149,152,154,155,156,168],[75,137,145,149,152,154,155,156,168,176],[75,137,138,143,145,148,149,152,154,155,156,158,168,173,185],[75,137,138,139,145,148,149,152,154,155,156,168],[75,137,145,149,152,154,155,156,168],[75,137,140,145,149,152,154,155,156,168,186],[75,137,141,142,145,149,152,154,155,156,159,168],[75,137,142,145,149,152,154,155,156,168,173,182],[75,137,143,145,148,149,152,154,155,156,158,168],[75,136,137,144,145,149,152,154,155,156,168],[75,137,145,146,149,152,154,155,156,168],[75,137,145,147,148,149,152,154,155,156,168],[75,136,137,145,148,149,152,154,155,156,168],[75,137,145,148,149,150,152,154,155,156,168,173,185],[75,137,145,148,149,150,152,154,155,156,168,173,176],[75,124,137,145,148,149,151,152,154,155,156,158,168,173,185],[75,137,145,148,149,151,152,154,155,156,158,168,173,182,185],[75,137,145,149,151,152,153,154,155,156,168,173,182,185],[73,74,75,76,77,78,79,80,81,82,83,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[75,137,145,148,149,152,154,155,156,168],[75,137,145,149,152,154,156,168],[75,137,145,149,152,154,155,156,157,168,185],[75,137,145,148,149,152,154,155,156,158,168,173],[75,137,145,149,152,154,155,156,159,168],[75,137,145,149,152,154,155,156,160,168],[75,137,145,148,149,152,154,155,156,163,168],[75,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[75,137,145,149,152,154,155,156,165,168],[75,137,145,149,152,154,155,156,166,168],[75,137,142,145,149,152,154,155,156,158,168,176],[75,137,145,148,149,152,154,155,156,168,169],[75,137,145,149,152,154,155,156,168,170,186,189],[75,137,145,148,149,152,154,155,156,168,173,175,176],[75,137,145,149,152,154,155,156,168,174,176],[75,137,145,149,152,154,155,156,168,176,186],[75,137,145,149,152,154,155,156,168,177],[75,134,137,145,149,152,154,155,156,168,173,179],[75,137,145,149,152,154,155,156,168,173,178],[75,137,145,148,149,152,154,155,156,168,180,181],[75,137,145,149,152,154,155,156,168,180,181],[75,137,142,145,149,152,154,155,156,158,168,173,182],[75,137,145,149,152,154,155,156,168,183],[75,137,145,149,152,154,155,156,158,168,184],[75,137,145,149,151,152,154,155,156,166,168,185],[75,137,145,149,152,154,155,156,168,186,187],[75,137,142,145,149,152,154,155,156,168,187],[75,137,145,149,152,154,155,156,168,173,188],[75,137,145,149,152,154,155,156,157,168,189],[75,137,145,149,152,154,155,156,168,190],[75,137,140,145,149,152,154,155,156,168],[75,137,142,145,149,152,154,155,156,168],[75,137,145,149,152,154,155,156,168,186],[75,124,137,145,149,152,154,155,156,168],[75,137,145,149,152,154,155,156,168,185],[75,137,145,149,152,154,155,156,168,191],[75,137,145,149,152,154,155,156,163,168],[75,137,145,149,152,154,155,156,168,181],[75,124,137,145,148,149,150,152,154,155,156,163,168,173,176,185,188,189,191],[75,137,145,149,152,154,155,156,168,173,192],[75,90,93,96,97,137,145,149,152,154,155,156,168,185],[75,93,137,145,149,152,154,155,156,168,173,185],[75,93,97,137,145,149,152,154,155,156,168,185],[75,137,145,149,152,154,155,156,168,173],[75,87,137,145,149,152,154,155,156,168],[75,91,137,145,149,152,154,155,156,168],[75,89,90,93,137,145,149,152,154,155,156,168,185],[75,137,145,149,152,154,155,156,158,168,182],[75,137,145,149,152,154,155,156,168,193],[75,87,137,145,149,152,154,155,156,168,193],[75,89,93,137,145,149,152,154,155,156,158,168,185],[75,84,85,86,88,92,137,145,148,149,152,154,155,156,168,173,185],[75,93,101,109,137,145,149,152,154,155,156,168],[75,85,91,137,145,149,152,154,155,156,168],[75,93,118,119,137,145,149,152,154,155,156,168],[75,85,88,93,137,145,149,152,154,155,156,168,176,185,193],[75,93,137,145,149,152,154,155,156,168],[75,89,93,137,145,149,152,154,155,156,168,185],[75,84,137,145,149,152,154,155,156,168],[75,87,88,89,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,119,120,121,122,123,137,145,149,152,154,155,156,168],[75,93,111,114,137,145,149,152,154,155,156,168],[75,93,101,102,103,137,145,149,152,154,155,156,168],[75,91,93,102,104,137,145,149,152,154,155,156,168],[75,92,137,145,149,152,154,155,156,168],[75,85,87,93,137,145,149,152,154,155,156,168],[75,93,97,102,104,137,145,149,152,154,155,156,168],[75,97,137,145,149,152,154,155,156,168],[75,91,93,96,137,145,149,152,154,155,156,168,185],[75,85,89,93,101,137,145,149,152,154,155,156,168],[75,93,111,137,145,149,152,154,155,156,168],[75,104,137,145,149,152,154,155,156,168],[75,87,93,118,137,145,149,152,154,155,156,168,176,191,193],[65,66,75,137,142,145,149,152,154,155,156,168],[75,137,145,149,150,152,154,155,156,160,168],[64,67,68,69,70,71,75,137,145,149,152,154,155,156,168],[66,75,137,145,149,150,152,154,155,156,160,168],[67,69,75,137,145,149,152,154,155,156,168]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f51a7c5fa275188a5956bb8f8d20ae3c0facea30e503c11c29e256fdf1a10fe","signature":"a40070fcc8b9e66a6afce104122dc93c96e24bd89de46b03820adb06e862c370","impliedFormat":99},{"version":"a2104f6f9546d9aecbdfc4cb4700496c8e57eafe36843fdeafd048bc7f79f934","impliedFormat":1},{"version":"50bce923a573d84f6667d2d05b2f04059ee6a292a4ed236a2174ec034edb7e9c","impliedFormat":99},{"version":"5ff594fab23d70ed4f4068d4d3ec2f15c15c99696c4b541c1ba52e76e3e560e8","signature":"14b71f3684a0971f4c20a94e3a6bfe4cbcafae8e05b0f0a9b6c9e7972330bca2","impliedFormat":99},{"version":"0b86e70dd9b5ee0a57634b12b2748bff9cf56dc3ae214af3565b75e189e0fbcd","signature":"406bb53a879753882ec2e3b144212137e2dd357c18d61dd841c6c829f8d45376","impliedFormat":99},{"version":"9e20d54e583622c8ce55b46967994147a5514ea59483e9809812590658dd8c9c","signature":"23e80a48e7c4beb9d2ef74b6a504b9a71f800776a18428573761d2b6bf66de84","impliedFormat":99},{"version":"8842085ed276ac62038fafd4462394f2cc338874c5a064036e013aca21c8fc6a","signature":"02cd74f954e11735885812a345c689830afe1a985a16067745710c674964b9a7","impliedFormat":99},{"version":"406ad633a9b20bddb47481c3092f5f84bb4e8162c91b079fbe4d081416ca3bf5","signature":"28fa757782ad6cbeb04223373df29601a75f0838c307569b93d7ac101da4476a","impliedFormat":99},{"version":"f34740b2290531c8a1a2edc1768fa1a8277c2c74973045b29292ae500a78221b","signature":"81bd4b9e0483bc4aa3e2c13405068c22a2ead4e629d3a720a334387dba375ae9","impliedFormat":99},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"dd0109710de4cd93e245121ab86d8c66d20f3ead80074b68e9c3e349c4f53342","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"cf83d90d5faf27b994c2e79af02e32b555dbfe42cd9bd1571445f2168d1f4e2d","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"0e28335ac43f4d94dd2fe6d9e6fa6813570640839addd10d309d7985f33a6308","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"b0b69c61b0f0ec8ca15db4c8c41f6e77f4cacb784d42bca948f42dea33e8757e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"e6f370b5c1d52edabb93ef055d0c0c396a98be77db8aa022fcc3670787b8b5f5","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"9d96a7ce809392ff2cb99691acf7c62e632fe56897356ba013b689277aca3619","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"27c0a08e343c6a0ae17bd13ba6d44a9758236dc904cd5e4b43456996cd51f520","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"6f80e51ba310608cd71bcdc09a171d7bbfb3b316048601c9ec215ce16a8dcfbc","impliedFormat":1},{"version":"10947bb49601aeec9ea1dddf61ef6e4f8442f949bd40a8008e12b129deb037be","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"1641d32611fc7aa82cdd9fa38ff18349aac4eda9e032ced76b21943673887f9a","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"2a00d005e3af99cd1cfa75220e60c61b04bfb6be7ca7453bfe2ef6cca37cc03c","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"586eaf66bace2e731cee0ddfbfac326ad74a83c1acfeac4afb2db85ad23226c7","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"d1a14d87cedcf4f0b8173720d6eb29cc02878bf2b6dabf9c9d9cee742f275368","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"b37f83e7deea729aa9ce5593f78905afb45b7532fdff63041d374f60059e7852","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1}],"root":[64,[67,72]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":10},"referencedMap":[[134,1],[135,1],[136,2],[75,3],[137,4],[138,5],[139,6],[73,7],[140,8],[141,9],[142,10],[143,11],[144,12],[145,13],[146,13],[147,14],[148,15],[149,16],[150,17],[76,7],[74,7],[151,18],[152,19],[153,20],[193,21],[154,22],[155,23],[156,22],[157,24],[158,25],[159,26],[160,27],[161,27],[162,27],[163,28],[164,29],[165,30],[166,31],[167,32],[168,33],[169,33],[170,34],[171,7],[172,7],[173,35],[174,36],[175,35],[176,37],[177,38],[178,39],[179,40],[180,41],[181,42],[182,43],[183,44],[184,45],[185,46],[186,47],[187,48],[188,49],[189,50],[190,51],[77,22],[78,7],[79,52],[80,53],[81,7],[82,54],[83,7],[125,55],[126,56],[127,57],[128,57],[129,58],[130,7],[131,4],[132,59],[133,56],[191,60],[192,61],[65,7],[62,7],[63,7],[12,7],[11,7],[2,7],[13,7],[14,7],[15,7],[16,7],[17,7],[18,7],[19,7],[20,7],[3,7],[21,7],[22,7],[4,7],[23,7],[27,7],[24,7],[25,7],[26,7],[28,7],[29,7],[30,7],[5,7],[31,7],[32,7],[33,7],[34,7],[6,7],[38,7],[35,7],[36,7],[37,7],[39,7],[7,7],[40,7],[45,7],[46,7],[41,7],[42,7],[43,7],[44,7],[8,7],[50,7],[47,7],[48,7],[49,7],[51,7],[9,7],[52,7],[53,7],[54,7],[56,7],[55,7],[57,7],[58,7],[10,7],[59,7],[1,7],[60,7],[61,7],[101,62],[113,63],[99,64],[114,65],[123,66],[90,67],[91,68],[89,69],[122,70],[117,71],[121,72],[93,73],[110,74],[92,75],[120,76],[87,77],[88,71],[94,78],[95,7],[100,79],[98,78],[85,80],[124,81],[115,82],[104,83],[103,78],[105,84],[108,85],[102,86],[106,87],[118,70],[96,88],[97,89],[109,90],[86,65],[112,91],[111,78],[107,92],[116,7],[84,7],[119,93],[66,7],[64,53],[67,94],[68,95],[72,96],[71,53],[69,97],[70,98]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.9.3"}