omegga 1.2.4 → 1.2.6

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.
@@ -0,0 +1,567 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readBrdbMeta = readBrdbMeta;
7
+ exports.readBrdbScreenshot = readBrdbScreenshot;
8
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
9
+ const fs_1 = require("fs");
10
+ const zlib_1 = require("zlib");
11
+ /** Open a brdb file if it exists */
12
+ function openBrdb(path) {
13
+ if (!(0, fs_1.existsSync)(path))
14
+ return null;
15
+ try {
16
+ return new better_sqlite3_1.default(path, { readonly: true, fileMustExist: true });
17
+ }
18
+ catch (err) {
19
+ console.error(`Error reading BRDB metadata from ${path}:`, err);
20
+ return null;
21
+ }
22
+ }
23
+ /** Unsafely read a file from the BRDB database */
24
+ function readFile(db, name) {
25
+ const row = db
26
+ .prepare(`SELECT compression, size_uncompressed, size_compressed, content
27
+ FROM files
28
+ LEFT JOIN blobs ON files.content_id = blobs.blob_id
29
+ WHERE name = ? AND deleted_at IS NULL;`)
30
+ .get(name);
31
+ if (!row)
32
+ return null;
33
+ if (row.content === null)
34
+ return null;
35
+ if (!row.compression || row.size_compressed >= row.size_uncompressed)
36
+ return row.content;
37
+ return (0, zlib_1.zstdDecompressSync)(row.content, {
38
+ maxOutputLength: row.size_uncompressed,
39
+ params: {},
40
+ });
41
+ }
42
+ /** read the meta and owner data from a brdb file */
43
+ // TODO: specify a create/delete time range for the reading the owner data to allow "browsing" of revisions
44
+ function readBrdbMeta(path) {
45
+ const db = openBrdb(path);
46
+ if (!db)
47
+ return null;
48
+ try {
49
+ const worldJson = JSON.parse(readFile(db, 'World.json').toString('utf8'));
50
+ const bundleJson = JSON.parse(readFile(db, 'Bundle.json').toString('utf8'));
51
+ // parse the owner schema and its data
52
+ const ownersSchemaBuf = readFile(db, 'Owners.schema');
53
+ const ownersBuf = readFile(db, 'Owners.mps');
54
+ // Convert the struct of arrays into an array of structs
55
+ const owners = [];
56
+ if (ownersBuf && ownersSchemaBuf) {
57
+ const ownersSchema = readBrdbSchema(ownersSchemaBuf);
58
+ const { value: ownersMps } = readBrdbType(ownersBuf, 0, ownersSchema, 'BRSavedOwnerTableSoA');
59
+ for (let i = 0; i < ownersMps['UserIds'].length; i++) {
60
+ const id = guidToUuid(ownersMps['UserIds'][i]);
61
+ const name = ownersMps['UserNames'][i];
62
+ const display_name = ownersMps['DisplayNames'][i];
63
+ const entity_count = ownersMps['EntityCounts'][i];
64
+ const brick_count = ownersMps['BrickCounts'][i];
65
+ const component_count = ownersMps['ComponentCounts'][i];
66
+ const wire_count = ownersMps['WireCounts'][i];
67
+ owners.push({
68
+ id,
69
+ name,
70
+ display_name,
71
+ entity_count,
72
+ brick_count,
73
+ component_count,
74
+ wire_count,
75
+ });
76
+ }
77
+ }
78
+ db.close();
79
+ return {
80
+ meta: { world: worldJson, bundle: bundleJson },
81
+ owners,
82
+ };
83
+ }
84
+ catch (err) {
85
+ console.error(`Error reading BRDB metadata from ${path}:`, err);
86
+ db.close();
87
+ return null;
88
+ }
89
+ }
90
+ /** read the screenshot from a brdb file */
91
+ function readBrdbScreenshot(path) {
92
+ const db = openBrdb(path);
93
+ if (!db)
94
+ return null;
95
+ try {
96
+ const file = readFile(db, 'Screenshot.jpg');
97
+ db.close();
98
+ return file;
99
+ }
100
+ catch (err) {
101
+ console.error(`Error reading BRDB screenshot from ${path}:`, err);
102
+ db.close();
103
+ }
104
+ }
105
+ /** get the msgpack format from a byte */
106
+ function mpMarker(byte) {
107
+ if ((byte & 128) === 0)
108
+ return ['fixpos', byte & 63];
109
+ if ((byte & 240) === 128)
110
+ return ['fixmap', byte & 15];
111
+ if ((byte & 240) === 144)
112
+ return ['fixarray', byte & 15];
113
+ if ((byte & 224) === 160)
114
+ return ['fixstr', byte & 31];
115
+ if ((byte & 224) === 224)
116
+ return ['fixneg', -(byte & 31)];
117
+ switch (byte) {
118
+ case 192:
119
+ return ['nil', null];
120
+ case 194:
121
+ return ['false', null];
122
+ case 195:
123
+ return ['true', null];
124
+ case 196:
125
+ return ['bin8', null];
126
+ case 197:
127
+ return ['bin16', null];
128
+ case 198:
129
+ return ['bin32', null];
130
+ case 199:
131
+ return ['ext8', null];
132
+ case 200:
133
+ return ['ext16', null];
134
+ case 201:
135
+ return ['ext32', null];
136
+ case 202:
137
+ return ['float32', null];
138
+ case 203:
139
+ return ['float64', null];
140
+ case 204:
141
+ return ['uint8', null];
142
+ case 205:
143
+ return ['uint16', null];
144
+ case 206:
145
+ return ['uint32', null];
146
+ case 207:
147
+ return ['uint64', null];
148
+ case 208:
149
+ return ['int8', null];
150
+ case 209:
151
+ return ['int16', null];
152
+ case 210:
153
+ return ['int32', null];
154
+ case 211:
155
+ return ['int64', null];
156
+ case 212:
157
+ return ['fixext1', null];
158
+ case 213:
159
+ return ['fixext2', null];
160
+ case 214:
161
+ return ['fixext4', null];
162
+ case 215:
163
+ return ['fixext8', null];
164
+ case 216:
165
+ return ['fixext16', null];
166
+ case 217:
167
+ return ['str8', null];
168
+ case 218:
169
+ return ['str16', null];
170
+ case 219:
171
+ return ['str32', null];
172
+ case 220:
173
+ return ['array16', null];
174
+ case 221:
175
+ return ['array32', null];
176
+ case 222:
177
+ return ['map16', null];
178
+ case 223:
179
+ return ['map32', null];
180
+ default:
181
+ return null;
182
+ }
183
+ }
184
+ function mpString(buf, offset) {
185
+ const byte = buf[offset];
186
+ const marker = mpMarker(byte);
187
+ if (!marker) {
188
+ throw new Error(`Invalid msgpack format byte: ${byte.toString(16)}`);
189
+ }
190
+ return mpStringContent(buf, marker, offset + 1);
191
+ }
192
+ function mpStringContent(buf, marker, offset) {
193
+ const [m, size] = marker;
194
+ if (m !== 'fixstr' && m !== 'str8' && m !== 'str16' && m !== 'str32') {
195
+ throw new Error(`Expected string format, got ${m}`);
196
+ }
197
+ let strSize = 0;
198
+ if (m === 'fixstr') {
199
+ strSize = size;
200
+ }
201
+ else if (m === 'str8') {
202
+ strSize = buf[offset];
203
+ offset++;
204
+ }
205
+ else if (m === 'str16') {
206
+ strSize = buf.readUInt16BE(offset);
207
+ offset += 2;
208
+ }
209
+ else if (m === 'str32') {
210
+ strSize = buf.readUInt32BE(offset);
211
+ offset += 4;
212
+ }
213
+ if (!strSize)
214
+ return { str: '', offset };
215
+ const str = buf.toString('utf8', offset, offset + strSize);
216
+ offset += strSize;
217
+ return { str, offset };
218
+ }
219
+ function mpInt(buf, offset) {
220
+ const [marker, num] = mpMarker(buf[offset]);
221
+ offset++;
222
+ if (!marker)
223
+ throw new Error(`Invalid msgpack format byte: ${buf[offset - 1].toString(16)}`);
224
+ if (marker === 'fixpos')
225
+ return { num, offset };
226
+ if (marker === 'fixneg')
227
+ return { num, offset };
228
+ if (marker === 'uint8')
229
+ return {
230
+ num: buf.readUInt8(offset++),
231
+ offset,
232
+ };
233
+ if (marker === 'uint16') {
234
+ const num = buf.readUInt16BE(offset);
235
+ offset += 2;
236
+ return { num, offset };
237
+ }
238
+ if (marker === 'uint32') {
239
+ const num = buf.readUInt32BE(offset);
240
+ offset += 4;
241
+ return { num, offset };
242
+ }
243
+ if (marker === 'uint64') {
244
+ const num = BigInt.asUintN(64, BigInt(buf.readBigUInt64BE(offset)));
245
+ offset += 8;
246
+ return { num: Number(num), offset };
247
+ }
248
+ if (marker === 'int8') {
249
+ const num = buf.readInt8(offset);
250
+ offset++;
251
+ return { num, offset };
252
+ }
253
+ if (marker === 'int16') {
254
+ const num = buf.readInt16BE(offset);
255
+ offset += 2;
256
+ return { num, offset };
257
+ }
258
+ if (marker === 'int32') {
259
+ const num = buf.readInt32BE(offset);
260
+ offset += 4;
261
+ return { num, offset };
262
+ }
263
+ if (marker === 'int64') {
264
+ const num = BigInt.asIntN(64, BigInt(buf.readBigInt64BE(offset)));
265
+ offset += 8;
266
+ return { num: Number(num), offset };
267
+ }
268
+ throw new Error(`Expected integer format, got ${marker}`);
269
+ }
270
+ function readBrdbSchema(buf) {
271
+ const enums = {};
272
+ const structs = {};
273
+ let offset = 0;
274
+ const next = () => {
275
+ const byte = buf[offset];
276
+ offset++;
277
+ return byte;
278
+ };
279
+ const nextMarker = () => {
280
+ const byte = next();
281
+ const kind = mpMarker(byte);
282
+ if (!kind) {
283
+ throw new Error(`Invalid msgpack format byte: ${byte.toString(16)}`);
284
+ }
285
+ return kind;
286
+ };
287
+ const mapLen = (name) => {
288
+ const [kind, val] = nextMarker();
289
+ let len = 0;
290
+ switch (kind) {
291
+ case 'fixmap':
292
+ len = val;
293
+ break;
294
+ case 'map16':
295
+ len = buf.readUInt16BE(offset);
296
+ offset += 2;
297
+ break;
298
+ case 'map32':
299
+ len = buf.readUInt32BE(offset);
300
+ offset += 4;
301
+ break;
302
+ default:
303
+ throw new Error(`Expected ${name !== null && name !== void 0 ? name : 'unknown'} map len, got ${kind}`);
304
+ }
305
+ return len;
306
+ };
307
+ const header = nextMarker();
308
+ if (header[0] !== 'fixarray' && header[1] !== 2) {
309
+ throw new Error(`Expected schema header to be fixarray of length 2, got ${header[0]} ${header[1]}`);
310
+ }
311
+ const numEnums = mapLen('enums');
312
+ for (let i = 0; i < numEnums; i++) {
313
+ let name;
314
+ ({ str: name, offset } = mpString(buf, offset));
315
+ enums[name] = {};
316
+ const values = mapLen(`enum ${name} values`);
317
+ for (let j = 0; j < values; j++) {
318
+ let key;
319
+ ({ str: key, offset } = mpString(buf, offset));
320
+ let value;
321
+ ({ num: value, offset } = mpInt(buf, offset));
322
+ enums[name][key] = value;
323
+ enums[name][value] = key;
324
+ }
325
+ }
326
+ const numStructs = mapLen('structs');
327
+ for (let i = 0; i < numStructs; i++) {
328
+ let name;
329
+ ({ str: name, offset } = mpString(buf, offset));
330
+ const props = {};
331
+ const numProps = mapLen(`struct ${name} properties`);
332
+ for (let j = 0; j < numProps; j++) {
333
+ let propName;
334
+ ({ str: propName, offset } = mpString(buf, offset));
335
+ const [kind, val] = nextMarker();
336
+ // Basic types
337
+ if (kind === 'fixstr' || kind === 'str8' || kind === 'str16') {
338
+ let ty;
339
+ ({ str: ty, offset } = mpStringContent(buf, [kind, val], offset));
340
+ props[propName] = { kind: 'literal', ty };
341
+ }
342
+ else if (kind === 'fixarray' && val == 1) {
343
+ let ty;
344
+ ({ str: ty, offset } = mpString(buf, offset));
345
+ props[propName] = { kind: 'array', ty };
346
+ }
347
+ else if (kind === 'fixarray' && val == 2) {
348
+ let ty;
349
+ ({ str: ty, offset } = mpString(buf, offset));
350
+ if (nextMarker()[0] !== 'nil')
351
+ throw new Error(`Expected nil after flatarray type`);
352
+ props[propName] = { kind: 'flatarray', ty };
353
+ }
354
+ else if (kind === 'fixmap' && val == 1) {
355
+ let key_ty;
356
+ let val_ty;
357
+ ({ str: key_ty, offset } = mpString(buf, offset));
358
+ ({ str: val_ty, offset } = mpString(buf, offset));
359
+ props[propName] = { kind: 'map', key: key_ty, value: val_ty };
360
+ }
361
+ else {
362
+ throw new Error(`Expected property type for ${name}.${propName}, got ${kind}`);
363
+ }
364
+ }
365
+ structs[name] = { name, props };
366
+ }
367
+ return { enums, structs };
368
+ }
369
+ function mpArrayLen(buf, offset) {
370
+ const [kind, val] = mpMarker(buf[offset]);
371
+ offset++;
372
+ let len = 0;
373
+ switch (kind) {
374
+ case 'fixarray':
375
+ len = val;
376
+ break;
377
+ case 'array16':
378
+ len = buf.readUInt16BE(offset);
379
+ offset += 2;
380
+ break;
381
+ case 'array32':
382
+ len = buf.readUInt32BE(offset);
383
+ offset += 4;
384
+ break;
385
+ default:
386
+ throw new Error(`Expected array length, got ${kind}`);
387
+ }
388
+ return { len, offset };
389
+ }
390
+ function mpBinLen(buf, offset) {
391
+ const [kind, _] = mpMarker(buf[offset]);
392
+ offset++;
393
+ let len = 0;
394
+ switch (kind) {
395
+ case 'bin8':
396
+ len = buf.readUInt8(offset);
397
+ offset++;
398
+ break;
399
+ case 'bin16':
400
+ len = buf.readUInt16BE(offset);
401
+ offset += 2;
402
+ break;
403
+ case 'bin32':
404
+ len = buf.readUInt32BE(offset);
405
+ offset += 4;
406
+ break;
407
+ default:
408
+ throw new Error(`Expected binary length, got ${kind}`);
409
+ }
410
+ return { len, offset };
411
+ }
412
+ // this is not a full brdb impl so I'm only implementing what is required
413
+ // to read the owner data
414
+ function readBrdbType(buf, offset, schema, ty) {
415
+ switch (ty) {
416
+ case 'u32':
417
+ let num;
418
+ ({ num, offset } = mpInt(buf, offset));
419
+ return { value: num, offset };
420
+ case 'str':
421
+ let str;
422
+ ({ str, offset } = mpString(buf, offset));
423
+ return { value: str, offset };
424
+ default:
425
+ if (!(ty in schema.structs)) {
426
+ throw new Error(`Unknown type ${ty} in schema`);
427
+ }
428
+ const struct = schema.structs[ty];
429
+ const value = {};
430
+ for (const [propName, propType] of Object.entries(struct.props)) {
431
+ switch (propType.kind) {
432
+ // other soa fields
433
+ case 'array':
434
+ let arrLen;
435
+ ({ len: arrLen, offset } = mpArrayLen(buf, offset));
436
+ const arr = [];
437
+ for (let i = 0; i < arrLen; i++) {
438
+ const item = readBrdbType(buf, offset, schema, propType.ty);
439
+ arr.push(item.value);
440
+ offset = item.offset;
441
+ }
442
+ value[propName] = arr;
443
+ break;
444
+ // userids
445
+ case 'flatarray':
446
+ let flatBinSize;
447
+ ({ len: flatBinSize, offset } = mpBinLen(buf, offset));
448
+ const flatTySize = flatTypeSize(schema, propType.ty);
449
+ const numItems = flatBinSize / flatTySize;
450
+ const flatArr = [];
451
+ for (let i = 0; i < numItems; i++) {
452
+ const item = readFlatBrdbType(buf, offset, schema, propType.ty);
453
+ flatArr.push(item.value);
454
+ offset = item.offset;
455
+ }
456
+ value[propName] = flatArr;
457
+ break;
458
+ }
459
+ }
460
+ return { value, offset };
461
+ }
462
+ }
463
+ function readFlatBrdbType(buf, offset, schema, ty) {
464
+ switch (ty) {
465
+ case 'u8':
466
+ const u8 = buf.readUInt8(offset);
467
+ offset++;
468
+ return { value: u8, offset };
469
+ case 'u16':
470
+ const u16 = buf.readUInt16LE(offset);
471
+ offset += 2;
472
+ return { value: u16, offset };
473
+ case 'u32':
474
+ const u32 = buf.readUInt32LE(offset);
475
+ offset += 4;
476
+ return { value: u32, offset };
477
+ case 'u64':
478
+ const u64 = BigInt.asUintN(64, BigInt(buf.readBigUInt64LE(offset)));
479
+ offset += 8;
480
+ return { value: Number(u64), offset };
481
+ case 'i8':
482
+ const i8 = buf.readInt8(offset);
483
+ offset++;
484
+ return { value: i8, offset };
485
+ case 'i16':
486
+ const i16 = buf.readInt16LE(offset);
487
+ offset += 2;
488
+ return { value: i16, offset };
489
+ case 'i32':
490
+ const i32 = buf.readInt32LE(offset);
491
+ offset += 4;
492
+ return { value: i32, offset };
493
+ case 'i64':
494
+ const i64 = BigInt.asIntN(64, BigInt(buf.readBigInt64LE(offset)));
495
+ offset += 8;
496
+ return { value: Number(i64), offset };
497
+ case 'f32':
498
+ const f32 = buf.readFloatLE(offset);
499
+ offset += 4;
500
+ return { value: f32, offset };
501
+ case 'f64':
502
+ const f64 = buf.readDoubleLE(offset);
503
+ offset += 8;
504
+ return { value: f64, offset };
505
+ default:
506
+ if (!(ty in schema.structs)) {
507
+ throw new Error(`Unknown type ${ty} in schema`);
508
+ }
509
+ const struct = schema.structs[ty];
510
+ const value = {};
511
+ for (const [propName, propType] of Object.entries(struct.props)) {
512
+ if (propType.kind !== 'literal') {
513
+ throw new Error(`Expected literal type for ${ty} property, got ${propType.kind}`);
514
+ }
515
+ const item = readFlatBrdbType(buf, offset, schema, propType.ty);
516
+ value[propName] = item.value;
517
+ offset = item.offset;
518
+ }
519
+ return { value, offset };
520
+ }
521
+ }
522
+ function flatTypeSize(schema, ty) {
523
+ switch (ty) {
524
+ case 'u8':
525
+ return 1;
526
+ case 'u16':
527
+ return 2;
528
+ case 'u32':
529
+ return 4;
530
+ case 'u64':
531
+ return 8;
532
+ case 'i8':
533
+ return 1;
534
+ case 'i16':
535
+ return 2;
536
+ case 'i32':
537
+ return 4;
538
+ case 'i64':
539
+ return 8;
540
+ case 'f32':
541
+ return 4;
542
+ case 'f64':
543
+ return 8;
544
+ default:
545
+ if (!(ty in schema.structs)) {
546
+ throw new Error(`Unknown type ${ty} in schema`);
547
+ }
548
+ const struct = schema.structs[ty];
549
+ let size = 0;
550
+ for (const propType of Object.values(struct.props)) {
551
+ if (propType.kind !== 'literal') {
552
+ throw new Error(`Expected literal type for ${ty} property, got ${propType.kind}`);
553
+ }
554
+ size += flatTypeSize(schema, propType.ty);
555
+ }
556
+ return size;
557
+ }
558
+ }
559
+ /** convert a set of 4 u32s into a uuidv4 */
560
+ function guidToUuid(guid) {
561
+ const hex = (num) => num.toString(16).padStart(8, '0');
562
+ // concatenate them all together
563
+ const joined = `${hex(guid.A)}${hex(guid.B)}${hex(guid.C)}${hex(guid.D)}`;
564
+ // format as uuidv4
565
+ return `${joined.slice(0, 8)}-${joined.slice(8, 12)}-${joined.slice(12, 16)}-${joined.slice(16, 20)}-${joined.slice(20)}`;
566
+ }
567
+ //# sourceMappingURL=brdb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brdb.js","sourceRoot":"","sources":["../../src/util/brdb.ts"],"names":[],"mappings":"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"}
@@ -84,4 +84,32 @@ export type WorldRevisionsRes = {
84
84
  date: number;
85
85
  note: string;
86
86
  }[];
87
+ export type WorldMetaRes = {
88
+ meta: {
89
+ world: {
90
+ environment: string;
91
+ };
92
+ bundle: {
93
+ type: 'World';
94
+ iD: string;
95
+ name: string;
96
+ version: string;
97
+ tags: string[];
98
+ authors: string[];
99
+ createdAt: string;
100
+ updatedAt: string;
101
+ description: string;
102
+ dependencies: string[];
103
+ };
104
+ };
105
+ owners: {
106
+ id: string;
107
+ name: string;
108
+ display_name: string;
109
+ entity_count: number;
110
+ brick_count: number;
111
+ component_count: number;
112
+ wire_count: number;
113
+ }[];
114
+ };
87
115
  export default function (server: Webserver, io: OmeggaSocketIo): void;
@@ -49,6 +49,7 @@ const uuid = __importStar(require("../../util/uuid"));
49
49
  const express_1 = __importDefault(require("express"));
50
50
  const json_rpc_2_0_1 = require("json-rpc-2.0");
51
51
  const lodash_1 = __importDefault(require("lodash"));
52
+ const brdb_1 = require("../../util/brdb");
52
53
  function default_1(server, io) {
53
54
  const { database, omegga } = server;
54
55
  // open API is accessible without auth
@@ -764,6 +765,18 @@ function default_1(server, io) {
764
765
  return null;
765
766
  }
766
767
  });
768
+ rpc.addMethod('world.meta', async ([world]) => {
769
+ try {
770
+ const path = omegga.getWorldPath(world);
771
+ if (!path)
772
+ return null;
773
+ return (0, brdb_1.readBrdbMeta)(path);
774
+ }
775
+ catch (err) {
776
+ error('Error while getting world meta', err);
777
+ return null;
778
+ }
779
+ });
767
780
  // get the next world to load
768
781
  rpc.addMethod('world.next', async () => {
769
782
  return omegga.getNextWorld();