@minecraft-docker/shared 1.6.1 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts +41 -0
- package/dist/application/ports/inbound/IWorldManagementUseCase.d.ts.map +1 -1
- package/dist/application/ports/inbound/index.d.ts +1 -1
- package/dist/application/ports/inbound/index.d.ts.map +1 -1
- package/dist/application/ports/index.d.ts +2 -2
- package/dist/application/ports/index.d.ts.map +1 -1
- package/dist/application/ports/outbound/IModSourcePort.d.ts +71 -0
- package/dist/application/ports/outbound/IModSourcePort.d.ts.map +1 -0
- package/dist/application/ports/outbound/IModSourcePort.js +19 -0
- package/dist/application/ports/outbound/IModSourcePort.js.map +1 -0
- package/dist/application/ports/outbound/IPromptPort.d.ts +12 -0
- package/dist/application/ports/outbound/IPromptPort.d.ts.map +1 -1
- package/dist/application/ports/outbound/IServiceManagerPort.d.ts +115 -0
- package/dist/application/ports/outbound/IServiceManagerPort.d.ts.map +1 -0
- package/dist/application/ports/outbound/IServiceManagerPort.js +2 -0
- package/dist/application/ports/outbound/IServiceManagerPort.js.map +1 -0
- package/dist/application/ports/outbound/IShellPort.d.ts +10 -2
- package/dist/application/ports/outbound/IShellPort.d.ts.map +1 -1
- package/dist/application/ports/outbound/IUserRepository.d.ts +42 -0
- package/dist/application/ports/outbound/IUserRepository.d.ts.map +1 -0
- package/dist/application/ports/outbound/IUserRepository.js +2 -0
- package/dist/application/ports/outbound/IUserRepository.js.map +1 -0
- package/dist/application/ports/outbound/IWorldRepository.d.ts +19 -0
- package/dist/application/ports/outbound/IWorldRepository.d.ts.map +1 -1
- package/dist/application/ports/outbound/index.d.ts +4 -1
- package/dist/application/ports/outbound/index.d.ts.map +1 -1
- package/dist/application/use-cases/CreateServerUseCase.d.ts.map +1 -1
- package/dist/application/use-cases/CreateServerUseCase.js +2 -3
- package/dist/application/use-cases/CreateServerUseCase.js.map +1 -1
- package/dist/application/use-cases/DeleteServerUseCase.js +5 -5
- package/dist/application/use-cases/DeleteServerUseCase.js.map +1 -1
- package/dist/application/use-cases/WorldManagementUseCase.d.ts +18 -1
- package/dist/application/use-cases/WorldManagementUseCase.d.ts.map +1 -1
- package/dist/application/use-cases/WorldManagementUseCase.js +332 -0
- package/dist/application/use-cases/WorldManagementUseCase.js.map +1 -1
- package/dist/docker/index.d.ts +51 -1
- package/dist/docker/index.d.ts.map +1 -1
- package/dist/docker/index.js +194 -4
- package/dist/docker/index.js.map +1 -1
- package/dist/domain/entities/User.d.ts +77 -0
- package/dist/domain/entities/User.d.ts.map +1 -0
- package/dist/domain/entities/User.js +121 -0
- package/dist/domain/entities/User.js.map +1 -0
- package/dist/domain/entities/World.d.ts +7 -1
- package/dist/domain/entities/World.d.ts.map +1 -1
- package/dist/domain/entities/World.js +14 -1
- package/dist/domain/entities/World.js.map +1 -1
- package/dist/domain/entities/index.d.ts +1 -0
- package/dist/domain/entities/index.d.ts.map +1 -1
- package/dist/domain/entities/index.js +1 -0
- package/dist/domain/entities/index.js.map +1 -1
- package/dist/domain/index.d.ts +2 -2
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +4 -2
- package/dist/domain/index.js.map +1 -1
- package/dist/domain/mod/ModDependency.d.ts +18 -0
- package/dist/domain/mod/ModDependency.d.ts.map +1 -0
- package/dist/domain/mod/ModDependency.js +5 -0
- package/dist/domain/mod/ModDependency.js.map +1 -0
- package/dist/domain/mod/ModFile.d.ts +27 -0
- package/dist/domain/mod/ModFile.d.ts.map +1 -0
- package/dist/domain/mod/ModFile.js +5 -0
- package/dist/domain/mod/ModFile.js.map +1 -0
- package/dist/domain/mod/ModProject.d.ts +36 -0
- package/dist/domain/mod/ModProject.d.ts.map +1 -0
- package/dist/domain/mod/ModProject.js +5 -0
- package/dist/domain/mod/ModProject.js.map +1 -0
- package/dist/domain/mod/ModSearchResult.d.ts +18 -0
- package/dist/domain/mod/ModSearchResult.d.ts.map +1 -0
- package/dist/domain/mod/ModSearchResult.js +5 -0
- package/dist/domain/mod/ModSearchResult.js.map +1 -0
- package/dist/domain/mod/ModVersion.d.ts +36 -0
- package/dist/domain/mod/ModVersion.d.ts.map +1 -0
- package/dist/domain/mod/ModVersion.js +5 -0
- package/dist/domain/mod/ModVersion.js.map +1 -0
- package/dist/domain/mod/index.d.ts +11 -0
- package/dist/domain/mod/index.d.ts.map +1 -0
- package/dist/domain/mod/index.js +6 -0
- package/dist/domain/mod/index.js.map +1 -0
- package/dist/domain/mod/types.d.ts +43 -0
- package/dist/domain/mod/types.d.ts.map +1 -0
- package/dist/domain/mod/types.js +6 -0
- package/dist/domain/mod/types.js.map +1 -0
- package/dist/domain/value-objects/ProcessInfo.d.ts +99 -0
- package/dist/domain/value-objects/ProcessInfo.d.ts.map +1 -0
- package/dist/domain/value-objects/ProcessInfo.js +171 -0
- package/dist/domain/value-objects/ProcessInfo.js.map +1 -0
- package/dist/domain/value-objects/Role.d.ts +41 -0
- package/dist/domain/value-objects/Role.d.ts.map +1 -0
- package/dist/domain/value-objects/Role.js +66 -0
- package/dist/domain/value-objects/Role.js.map +1 -0
- package/dist/domain/value-objects/ServerType.d.ts +1 -0
- package/dist/domain/value-objects/ServerType.d.ts.map +1 -1
- package/dist/domain/value-objects/ServerType.js +8 -0
- package/dist/domain/value-objects/ServerType.js.map +1 -1
- package/dist/domain/value-objects/ServiceStatus.d.ts +64 -0
- package/dist/domain/value-objects/ServiceStatus.d.ts.map +1 -0
- package/dist/domain/value-objects/ServiceStatus.js +99 -0
- package/dist/domain/value-objects/ServiceStatus.js.map +1 -0
- package/dist/domain/value-objects/UserId.d.ts +21 -0
- package/dist/domain/value-objects/UserId.d.ts.map +1 -0
- package/dist/domain/value-objects/UserId.js +43 -0
- package/dist/domain/value-objects/UserId.js.map +1 -0
- package/dist/domain/value-objects/Username.d.ts +16 -0
- package/dist/domain/value-objects/Username.d.ts.map +1 -0
- package/dist/domain/value-objects/Username.js +46 -0
- package/dist/domain/value-objects/Username.js.map +1 -0
- package/dist/domain/value-objects/index.d.ts +5 -0
- package/dist/domain/value-objects/index.d.ts.map +1 -1
- package/dist/domain/value-objects/index.js +7 -0
- package/dist/domain/value-objects/index.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/adapters/ApiPromptAdapter.d.ts +115 -0
- package/dist/infrastructure/adapters/ApiPromptAdapter.d.ts.map +1 -0
- package/dist/infrastructure/adapters/ApiPromptAdapter.js +268 -0
- package/dist/infrastructure/adapters/ApiPromptAdapter.js.map +1 -0
- package/dist/infrastructure/adapters/ServerRepository.js +3 -3
- package/dist/infrastructure/adapters/ServerRepository.js.map +1 -1
- package/dist/infrastructure/adapters/ShellAdapter.d.ts +4 -2
- package/dist/infrastructure/adapters/ShellAdapter.d.ts.map +1 -1
- package/dist/infrastructure/adapters/ShellAdapter.js +15 -5
- package/dist/infrastructure/adapters/ShellAdapter.js.map +1 -1
- package/dist/infrastructure/adapters/SqliteUserRepository.d.ts +70 -0
- package/dist/infrastructure/adapters/SqliteUserRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/SqliteUserRepository.js +149 -0
- package/dist/infrastructure/adapters/SqliteUserRepository.js.map +1 -0
- package/dist/infrastructure/adapters/WorldRepository.d.ts +12 -0
- package/dist/infrastructure/adapters/WorldRepository.d.ts.map +1 -1
- package/dist/infrastructure/adapters/WorldRepository.js +73 -3
- package/dist/infrastructure/adapters/WorldRepository.js.map +1 -1
- package/dist/infrastructure/adapters/YamlUserRepository.d.ts +67 -0
- package/dist/infrastructure/adapters/YamlUserRepository.d.ts.map +1 -0
- package/dist/infrastructure/adapters/YamlUserRepository.js +161 -0
- package/dist/infrastructure/adapters/YamlUserRepository.js.map +1 -0
- package/dist/infrastructure/adapters/index.d.ts +3 -0
- package/dist/infrastructure/adapters/index.d.ts.map +1 -1
- package/dist/infrastructure/adapters/index.js +3 -0
- package/dist/infrastructure/adapters/index.js.map +1 -1
- package/dist/infrastructure/config/Pm2EcosystemConfig.d.ts +192 -0
- package/dist/infrastructure/config/Pm2EcosystemConfig.d.ts.map +1 -0
- package/dist/infrastructure/config/Pm2EcosystemConfig.js +48 -0
- package/dist/infrastructure/config/Pm2EcosystemConfig.js.map +1 -0
- package/dist/infrastructure/config/index.d.ts +6 -0
- package/dist/infrastructure/config/index.d.ts.map +1 -0
- package/dist/infrastructure/config/index.js +6 -0
- package/dist/infrastructure/config/index.js.map +1 -0
- package/dist/infrastructure/factories/ModSourceFactory.d.ts +73 -0
- package/dist/infrastructure/factories/ModSourceFactory.d.ts.map +1 -0
- package/dist/infrastructure/factories/ModSourceFactory.js +98 -0
- package/dist/infrastructure/factories/ModSourceFactory.js.map +1 -0
- package/dist/infrastructure/factories/index.d.ts +5 -0
- package/dist/infrastructure/factories/index.d.ts.map +1 -0
- package/dist/infrastructure/factories/index.js +5 -0
- package/dist/infrastructure/factories/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +1 -0
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +1 -0
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +10 -2
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import { mkdirSync, existsSync } from 'node:fs';
|
|
3
|
+
import { dirname } from 'node:path';
|
|
4
|
+
import * as bcrypt from 'bcryptjs';
|
|
5
|
+
import { User } from '../../domain/entities/User.js';
|
|
6
|
+
/**
|
|
7
|
+
* SqliteUserRepository
|
|
8
|
+
* Implements IUserRepository using SQLite database storage with better-sqlite3
|
|
9
|
+
*/
|
|
10
|
+
export class SqliteUserRepository {
|
|
11
|
+
static SALT_ROUNDS = 10;
|
|
12
|
+
db;
|
|
13
|
+
/**
|
|
14
|
+
* Create a new SqliteUserRepository
|
|
15
|
+
* @param dbPath - Path to the SQLite database file
|
|
16
|
+
*/
|
|
17
|
+
constructor(dbPath) {
|
|
18
|
+
// Ensure directory exists
|
|
19
|
+
const dir = dirname(dbPath);
|
|
20
|
+
if (!existsSync(dir)) {
|
|
21
|
+
mkdirSync(dir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
// Open database connection
|
|
24
|
+
this.db = new Database(dbPath);
|
|
25
|
+
// Enable WAL mode for better concurrency
|
|
26
|
+
this.db.pragma('journal_mode = WAL');
|
|
27
|
+
// Run migrations
|
|
28
|
+
this.migrate();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Run database migrations
|
|
32
|
+
* Creates tables and indexes if they don't exist
|
|
33
|
+
*/
|
|
34
|
+
migrate() {
|
|
35
|
+
this.db.exec(`
|
|
36
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
37
|
+
id TEXT PRIMARY KEY,
|
|
38
|
+
username TEXT UNIQUE NOT NULL COLLATE NOCASE,
|
|
39
|
+
password_hash TEXT NOT NULL,
|
|
40
|
+
role TEXT NOT NULL CHECK(role IN ('admin', 'viewer')),
|
|
41
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
42
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE INDEX IF NOT EXISTS idx_users_username ON users(username);
|
|
46
|
+
CREATE INDEX IF NOT EXISTS idx_users_role ON users(role);
|
|
47
|
+
`);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Find a user by their unique ID
|
|
51
|
+
*/
|
|
52
|
+
async findById(id) {
|
|
53
|
+
const stmt = this.db.prepare('SELECT * FROM users WHERE id = ?');
|
|
54
|
+
const row = stmt.get(id.value);
|
|
55
|
+
if (!row) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
return this.toUser(row);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Find a user by their username (case-insensitive)
|
|
62
|
+
*/
|
|
63
|
+
async findByUsername(username) {
|
|
64
|
+
// SQLite COLLATE NOCASE handles case-insensitive comparison
|
|
65
|
+
const stmt = this.db.prepare('SELECT * FROM users WHERE username = ?');
|
|
66
|
+
const row = stmt.get(username.value);
|
|
67
|
+
if (!row) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
return this.toUser(row);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get all users in the system
|
|
74
|
+
*/
|
|
75
|
+
async findAll() {
|
|
76
|
+
const stmt = this.db.prepare('SELECT * FROM users ORDER BY created_at ASC');
|
|
77
|
+
const rows = stmt.all();
|
|
78
|
+
return rows.map((row) => this.toUser(row));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Save a user (create or update)
|
|
82
|
+
* Uses INSERT OR REPLACE for upsert behavior
|
|
83
|
+
*/
|
|
84
|
+
async save(user) {
|
|
85
|
+
const stmt = this.db.prepare(`
|
|
86
|
+
INSERT INTO users (id, username, password_hash, role, created_at, updated_at)
|
|
87
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
88
|
+
ON CONFLICT(id) DO UPDATE SET
|
|
89
|
+
username = excluded.username,
|
|
90
|
+
password_hash = excluded.password_hash,
|
|
91
|
+
role = excluded.role,
|
|
92
|
+
updated_at = excluded.updated_at
|
|
93
|
+
`);
|
|
94
|
+
stmt.run(user.id.value, user.username.value, user.passwordHash, user.role.value, user.createdAt.toISOString(), user.updatedAt.toISOString());
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Delete a user by their ID
|
|
98
|
+
*/
|
|
99
|
+
async delete(id) {
|
|
100
|
+
const stmt = this.db.prepare('DELETE FROM users WHERE id = ?');
|
|
101
|
+
stmt.run(id.value);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the total count of users
|
|
105
|
+
*/
|
|
106
|
+
async count() {
|
|
107
|
+
const stmt = this.db.prepare('SELECT COUNT(*) as count FROM users');
|
|
108
|
+
const result = stmt.get();
|
|
109
|
+
return result?.count ?? 0;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Hash a password using bcrypt
|
|
113
|
+
* @param password - Plain text password to hash
|
|
114
|
+
* @returns Hashed password
|
|
115
|
+
*/
|
|
116
|
+
async hashPassword(password) {
|
|
117
|
+
return bcrypt.hash(password, SqliteUserRepository.SALT_ROUNDS);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Verify a password against a hash
|
|
121
|
+
* @param password - Plain text password to verify
|
|
122
|
+
* @param hash - Password hash to verify against
|
|
123
|
+
* @returns True if password matches, false otherwise
|
|
124
|
+
*/
|
|
125
|
+
async verifyPassword(password, hash) {
|
|
126
|
+
return bcrypt.compare(password, hash);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Close the database connection
|
|
130
|
+
* Should be called when the repository is no longer needed
|
|
131
|
+
*/
|
|
132
|
+
close() {
|
|
133
|
+
this.db.close();
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Convert a database row to a User entity
|
|
137
|
+
*/
|
|
138
|
+
toUser(row) {
|
|
139
|
+
return User.fromRaw({
|
|
140
|
+
id: row.id,
|
|
141
|
+
username: row.username,
|
|
142
|
+
passwordHash: row.password_hash,
|
|
143
|
+
role: row.role,
|
|
144
|
+
createdAt: row.created_at,
|
|
145
|
+
updatedAt: row.updated_at,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=SqliteUserRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SqliteUserRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/SqliteUserRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,9 +47,21 @@ export declare class WorldRepository implements IWorldRepository {
|
|
|
47
47
|
* Returns worlds categorized by availability
|
|
48
48
|
*/
|
|
49
49
|
findAllWithServerStatus(): Promise<WorldWithServerStatus[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Delete a world directory and its lock file
|
|
52
|
+
*/
|
|
53
|
+
delete(name: string): Promise<boolean>;
|
|
50
54
|
/**
|
|
51
55
|
* Get directory size recursively
|
|
52
56
|
*/
|
|
53
57
|
private getDirectorySize;
|
|
58
|
+
/**
|
|
59
|
+
* Create a new world directory with optional seed
|
|
60
|
+
*/
|
|
61
|
+
create(name: string, seed?: string): Promise<World>;
|
|
62
|
+
/**
|
|
63
|
+
* Get seed for a world from .meta file
|
|
64
|
+
*/
|
|
65
|
+
getSeed(name: string): Promise<string | null>;
|
|
54
66
|
}
|
|
55
67
|
//# sourceMappingURL=WorldRepository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorldRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/WorldRepository.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EAGtB,MAAM,sDAAsD,CAAC;AAE9D;;;GAGG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,KAAK,CAAC,EAAE,KAAK;IAMzB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAcjC;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"WorldRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/WorldRepository.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EAGtB,MAAM,sDAAsD,CAAC;AAE9D;;;GAGG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,KAAK,CAAC,EAAE,KAAK;IAMzB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAcjC;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA4BrD;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAKtC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAKpC;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAKxD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAgBpC;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA0BhE;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA0DjE;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsB5C;;OAEG;YACW,gBAAgB;IAuB9B;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAkCzD;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAepD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { readdir, readFile, stat } from 'node:fs/promises';
|
|
1
|
+
import { readdir, readFile, stat, rm, unlink, mkdir, writeFile } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { existsSync } from 'node:fs';
|
|
4
4
|
import { Paths } from '../../utils/index.js';
|
|
@@ -45,11 +45,12 @@ export class WorldRepository {
|
|
|
45
45
|
if (lockData) {
|
|
46
46
|
world.lockTo(lockData.serverName, lockData.pid);
|
|
47
47
|
}
|
|
48
|
-
// Get world metadata
|
|
48
|
+
// Get world metadata and seed
|
|
49
49
|
try {
|
|
50
50
|
const worldStat = await stat(worldPath);
|
|
51
51
|
const size = await this.getDirectorySize(worldPath);
|
|
52
|
-
|
|
52
|
+
const seed = await this.getSeed(name);
|
|
53
|
+
world.setMetadata(size, worldStat.mtime, seed ?? undefined);
|
|
53
54
|
}
|
|
54
55
|
catch {
|
|
55
56
|
// Ignore metadata errors
|
|
@@ -186,6 +187,28 @@ export class WorldRepository {
|
|
|
186
187
|
return a.world.name.localeCompare(b.world.name);
|
|
187
188
|
});
|
|
188
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* Delete a world directory and its lock file
|
|
192
|
+
*/
|
|
193
|
+
async delete(name) {
|
|
194
|
+
const worldPath = join(this.worldsDir, name);
|
|
195
|
+
const lockFile = join(this.locksDir, `${name}.lock`);
|
|
196
|
+
if (!existsSync(worldPath)) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
// Delete lock file if exists
|
|
201
|
+
if (existsSync(lockFile)) {
|
|
202
|
+
await unlink(lockFile);
|
|
203
|
+
}
|
|
204
|
+
// Delete world directory
|
|
205
|
+
await rm(worldPath, { recursive: true, force: true });
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
189
212
|
/**
|
|
190
213
|
* Get directory size recursively
|
|
191
214
|
*/
|
|
@@ -209,5 +232,52 @@ export class WorldRepository {
|
|
|
209
232
|
}
|
|
210
233
|
return totalSize;
|
|
211
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Create a new world directory with optional seed
|
|
237
|
+
*/
|
|
238
|
+
async create(name, seed) {
|
|
239
|
+
const worldPath = join(this.worldsDir, name);
|
|
240
|
+
// Check if already exists
|
|
241
|
+
if (existsSync(worldPath)) {
|
|
242
|
+
throw new Error(`World '${name}' already exists`);
|
|
243
|
+
}
|
|
244
|
+
// Ensure worlds directory exists
|
|
245
|
+
if (!existsSync(this.worldsDir)) {
|
|
246
|
+
await mkdir(this.worldsDir, { recursive: true });
|
|
247
|
+
}
|
|
248
|
+
// Create world directory
|
|
249
|
+
await mkdir(worldPath, { recursive: true });
|
|
250
|
+
// Create .meta file with seed if provided
|
|
251
|
+
const metaPath = join(worldPath, '.meta');
|
|
252
|
+
const metaContent = {
|
|
253
|
+
name,
|
|
254
|
+
seed: seed || null,
|
|
255
|
+
createdAt: new Date().toISOString(),
|
|
256
|
+
};
|
|
257
|
+
await writeFile(metaPath, JSON.stringify(metaContent, null, 2), 'utf-8');
|
|
258
|
+
// Create and return the World entity
|
|
259
|
+
const world = new World(name, worldPath);
|
|
260
|
+
if (seed) {
|
|
261
|
+
world.setSeed(seed);
|
|
262
|
+
}
|
|
263
|
+
return world;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Get seed for a world from .meta file
|
|
267
|
+
*/
|
|
268
|
+
async getSeed(name) {
|
|
269
|
+
const metaPath = join(this.worldsDir, name, '.meta');
|
|
270
|
+
if (!existsSync(metaPath)) {
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
try {
|
|
274
|
+
const content = await readFile(metaPath, 'utf-8');
|
|
275
|
+
const meta = JSON.parse(content);
|
|
276
|
+
return meta.seed || null;
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
212
282
|
}
|
|
213
283
|
//# sourceMappingURL=WorldRepository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorldRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/WorldRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"WorldRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/WorldRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { IUserRepository } from '../../application/ports/outbound/IUserRepository.js';
|
|
2
|
+
import { User } from '../../domain/entities/User.js';
|
|
3
|
+
import { UserId } from '../../domain/value-objects/UserId.js';
|
|
4
|
+
import { Username } from '../../domain/value-objects/Username.js';
|
|
5
|
+
/**
|
|
6
|
+
* YamlUserRepository
|
|
7
|
+
* Implements IUserRepository using YAML file storage
|
|
8
|
+
*/
|
|
9
|
+
export declare class YamlUserRepository implements IUserRepository {
|
|
10
|
+
private static readonly SALT_ROUNDS;
|
|
11
|
+
private readonly filePath;
|
|
12
|
+
/**
|
|
13
|
+
* Create a new YamlUserRepository
|
|
14
|
+
* @param filePath - Path to the YAML file for user storage
|
|
15
|
+
*/
|
|
16
|
+
constructor(filePath: string);
|
|
17
|
+
/**
|
|
18
|
+
* Find a user by their unique ID
|
|
19
|
+
*/
|
|
20
|
+
findById(id: UserId): Promise<User | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Find a user by their username
|
|
23
|
+
*/
|
|
24
|
+
findByUsername(username: Username): Promise<User | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Get all users in the system
|
|
27
|
+
*/
|
|
28
|
+
findAll(): Promise<User[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Save a user (create or update)
|
|
31
|
+
*/
|
|
32
|
+
save(user: User): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Delete a user by their ID
|
|
35
|
+
*/
|
|
36
|
+
delete(id: UserId): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Get the total count of users
|
|
39
|
+
*/
|
|
40
|
+
count(): Promise<number>;
|
|
41
|
+
/**
|
|
42
|
+
* Hash a password using bcrypt
|
|
43
|
+
* @param password - Plain text password to hash
|
|
44
|
+
* @returns Hashed password
|
|
45
|
+
*/
|
|
46
|
+
hashPassword(password: string): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Verify a password against a hash
|
|
49
|
+
* @param password - Plain text password to verify
|
|
50
|
+
* @param hash - Password hash to verify against
|
|
51
|
+
* @returns True if password matches, false otherwise
|
|
52
|
+
*/
|
|
53
|
+
verifyPassword(password: string, hash: string): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* Load users from YAML file
|
|
56
|
+
*/
|
|
57
|
+
private loadUsers;
|
|
58
|
+
/**
|
|
59
|
+
* Save users to YAML file
|
|
60
|
+
*/
|
|
61
|
+
private saveUsers;
|
|
62
|
+
/**
|
|
63
|
+
* Convert YAML user data to User entity
|
|
64
|
+
*/
|
|
65
|
+
private toUser;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=YamlUserRepository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YamlUserRepository.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/YamlUserRepository.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAkBlE;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAM;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC;;;OAGG;gBACS,QAAQ,EAAE,MAAM;IAI5B;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAWhD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAc9D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAKhC;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBrC;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAK9B;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD;;;;;OAKG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItE;;OAEG;YACW,SAAS;IAoBvB;;OAEG;YACW,SAAS;IAkBvB;;OAEG;IACH,OAAO,CAAC,MAAM;CAUf"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import * as yaml from 'js-yaml';
|
|
5
|
+
import * as bcrypt from 'bcryptjs';
|
|
6
|
+
import { User } from '../../domain/entities/User.js';
|
|
7
|
+
/**
|
|
8
|
+
* YamlUserRepository
|
|
9
|
+
* Implements IUserRepository using YAML file storage
|
|
10
|
+
*/
|
|
11
|
+
export class YamlUserRepository {
|
|
12
|
+
static SALT_ROUNDS = 10;
|
|
13
|
+
filePath;
|
|
14
|
+
/**
|
|
15
|
+
* Create a new YamlUserRepository
|
|
16
|
+
* @param filePath - Path to the YAML file for user storage
|
|
17
|
+
*/
|
|
18
|
+
constructor(filePath) {
|
|
19
|
+
this.filePath = filePath;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Find a user by their unique ID
|
|
23
|
+
*/
|
|
24
|
+
async findById(id) {
|
|
25
|
+
const users = await this.loadUsers();
|
|
26
|
+
const userData = users.find((u) => u.id === id.value);
|
|
27
|
+
if (!userData) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return this.toUser(userData);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Find a user by their username
|
|
34
|
+
*/
|
|
35
|
+
async findByUsername(username) {
|
|
36
|
+
const users = await this.loadUsers();
|
|
37
|
+
// Case-insensitive username comparison
|
|
38
|
+
const userData = users.find((u) => u.username.toLowerCase() === username.value.toLowerCase());
|
|
39
|
+
if (!userData) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
return this.toUser(userData);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get all users in the system
|
|
46
|
+
*/
|
|
47
|
+
async findAll() {
|
|
48
|
+
const users = await this.loadUsers();
|
|
49
|
+
return users.map((u) => this.toUser(u));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Save a user (create or update)
|
|
53
|
+
*/
|
|
54
|
+
async save(user) {
|
|
55
|
+
const users = await this.loadUsers();
|
|
56
|
+
const existingIndex = users.findIndex((u) => u.id === user.id.value);
|
|
57
|
+
const userData = {
|
|
58
|
+
id: user.id.value,
|
|
59
|
+
username: user.username.value,
|
|
60
|
+
passwordHash: user.passwordHash,
|
|
61
|
+
role: user.role.value,
|
|
62
|
+
createdAt: user.createdAt.toISOString(),
|
|
63
|
+
updatedAt: user.updatedAt.toISOString(),
|
|
64
|
+
};
|
|
65
|
+
if (existingIndex >= 0) {
|
|
66
|
+
// Update existing user
|
|
67
|
+
users[existingIndex] = userData;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Add new user
|
|
71
|
+
users.push(userData);
|
|
72
|
+
}
|
|
73
|
+
await this.saveUsers(users);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Delete a user by their ID
|
|
77
|
+
*/
|
|
78
|
+
async delete(id) {
|
|
79
|
+
const users = await this.loadUsers();
|
|
80
|
+
const filteredUsers = users.filter((u) => u.id !== id.value);
|
|
81
|
+
if (filteredUsers.length !== users.length) {
|
|
82
|
+
await this.saveUsers(filteredUsers);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get the total count of users
|
|
87
|
+
*/
|
|
88
|
+
async count() {
|
|
89
|
+
const users = await this.loadUsers();
|
|
90
|
+
return users.length;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Hash a password using bcrypt
|
|
94
|
+
* @param password - Plain text password to hash
|
|
95
|
+
* @returns Hashed password
|
|
96
|
+
*/
|
|
97
|
+
async hashPassword(password) {
|
|
98
|
+
return bcrypt.hash(password, YamlUserRepository.SALT_ROUNDS);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Verify a password against a hash
|
|
102
|
+
* @param password - Plain text password to verify
|
|
103
|
+
* @param hash - Password hash to verify against
|
|
104
|
+
* @returns True if password matches, false otherwise
|
|
105
|
+
*/
|
|
106
|
+
async verifyPassword(password, hash) {
|
|
107
|
+
return bcrypt.compare(password, hash);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Load users from YAML file
|
|
111
|
+
*/
|
|
112
|
+
async loadUsers() {
|
|
113
|
+
if (!existsSync(this.filePath)) {
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
const content = await readFile(this.filePath, 'utf-8');
|
|
118
|
+
const data = yaml.load(content);
|
|
119
|
+
if (!data || !Array.isArray(data.users)) {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
return data.users;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// If file is empty or invalid, return empty array
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Save users to YAML file
|
|
131
|
+
*/
|
|
132
|
+
async saveUsers(users) {
|
|
133
|
+
// Ensure directory exists
|
|
134
|
+
const dir = dirname(this.filePath);
|
|
135
|
+
if (!existsSync(dir)) {
|
|
136
|
+
await mkdir(dir, { recursive: true });
|
|
137
|
+
}
|
|
138
|
+
const data = { users };
|
|
139
|
+
const yamlContent = yaml.dump(data, {
|
|
140
|
+
indent: 2,
|
|
141
|
+
lineWidth: -1, // No line wrapping
|
|
142
|
+
quotingType: '"',
|
|
143
|
+
forceQuotes: false,
|
|
144
|
+
});
|
|
145
|
+
await writeFile(this.filePath, yamlContent, 'utf-8');
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Convert YAML user data to User entity
|
|
149
|
+
*/
|
|
150
|
+
toUser(data) {
|
|
151
|
+
return User.fromRaw({
|
|
152
|
+
id: data.id,
|
|
153
|
+
username: data.username,
|
|
154
|
+
passwordHash: data.passwordHash,
|
|
155
|
+
role: data.role,
|
|
156
|
+
createdAt: data.createdAt,
|
|
157
|
+
updatedAt: data.updatedAt,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=YamlUserRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YamlUserRepository.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/YamlUserRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,7 @@ export { ShellAdapter, type ShellAdapterOptions } from './ShellAdapter.js';
|
|
|
6
6
|
export { ServerRepository } from './ServerRepository.js';
|
|
7
7
|
export { WorldRepository } from './WorldRepository.js';
|
|
8
8
|
export { DocsAdapter } from './DocsAdapter.js';
|
|
9
|
+
export { YamlUserRepository } from './YamlUserRepository.js';
|
|
10
|
+
export { SqliteUserRepository } from './SqliteUserRepository.js';
|
|
11
|
+
export { ApiPromptAdapter, ApiModeError, type ApiPromptOptions, type WorldSetupType, type MessageType, type CollectedMessage, } from './ApiPromptAdapter.js';
|
|
9
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,gBAAgB,GACtB,MAAM,uBAAuB,CAAC"}
|
|
@@ -6,4 +6,7 @@ export { ShellAdapter } from './ShellAdapter.js';
|
|
|
6
6
|
export { ServerRepository } from './ServerRepository.js';
|
|
7
7
|
export { WorldRepository } from './WorldRepository.js';
|
|
8
8
|
export { DocsAdapter } from './DocsAdapter.js';
|
|
9
|
+
export { YamlUserRepository } from './YamlUserRepository.js';
|
|
10
|
+
export { SqliteUserRepository } from './SqliteUserRepository.js';
|
|
11
|
+
export { ApiPromptAdapter, ApiModeError, } from './ApiPromptAdapter.js';
|
|
9
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/adapters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAA4B,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,YAAY,GAKb,MAAM,uBAAuB,CAAC"}
|