@omujs/omu 0.6.21 → 0.6.23
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/CHANGELOG.md +16 -0
- package/dist/dts/bytebuffer.d.ts +4 -1
- package/dist/dts/bytebuffer.d.ts.map +1 -1
- package/dist/dts/client.d.ts +2 -2
- package/dist/dts/client.d.ts.map +1 -1
- package/dist/dts/extension/dashboard/dashboard-extension.d.ts +6 -0
- package/dist/dts/extension/dashboard/dashboard-extension.d.ts.map +1 -1
- package/dist/dts/extension/dashboard/dashboard.d.ts +3 -1
- package/dist/dts/extension/dashboard/dashboard.d.ts.map +1 -1
- package/dist/dts/extension/dashboard/index.d.ts +1 -1
- package/dist/dts/extension/dashboard/index.d.ts.map +1 -1
- package/dist/dts/extension/dashboard/packets.d.ts +21 -0
- package/dist/dts/extension/dashboard/packets.d.ts.map +1 -1
- package/dist/dts/extension/i18n/i18n-extension.d.ts.map +1 -1
- package/dist/dts/extension/permission/permission.d.ts +1 -2
- package/dist/dts/extension/permission/permission.d.ts.map +1 -1
- package/dist/dts/extension/server/server-extension.d.ts +20 -1
- package/dist/dts/extension/server/server-extension.d.ts.map +1 -1
- package/dist/dts/extension/table/packets.d.ts +3 -3
- package/dist/dts/extension/table/packets.d.ts.map +1 -1
- package/dist/dts/extension/table/table-extension.d.ts.map +1 -1
- package/dist/dts/extension/table/table.d.ts +9 -3
- package/dist/dts/extension/table/table.d.ts.map +1 -1
- package/dist/dts/identifier.d.ts +1 -0
- package/dist/dts/identifier.d.ts.map +1 -1
- package/dist/dts/network/network.d.ts.map +1 -1
- package/dist/dts/network/packet/packet-types.d.ts +6 -0
- package/dist/dts/network/packet/packet-types.d.ts.map +1 -1
- package/dist/dts/omu.d.ts +2 -2
- package/dist/dts/omu.d.ts.map +1 -1
- package/dist/dts/version.d.ts +2 -0
- package/dist/dts/version.d.ts.map +1 -0
- package/dist/esm/bytebuffer.js +6 -6
- package/dist/esm/bytebuffer.js.map +1 -1
- package/dist/esm/extension/dashboard/dashboard-extension.js +68 -2
- package/dist/esm/extension/dashboard/dashboard-extension.js.map +1 -1
- package/dist/esm/extension/dashboard/index.js +1 -1
- package/dist/esm/extension/dashboard/index.js.map +1 -1
- package/dist/esm/extension/dashboard/packets.js +44 -0
- package/dist/esm/extension/dashboard/packets.js.map +1 -1
- package/dist/esm/extension/i18n/i18n-extension.js +2 -2
- package/dist/esm/extension/i18n/i18n-extension.js.map +1 -1
- package/dist/esm/extension/registry/registry.js +1 -1
- package/dist/esm/extension/registry/registry.js.map +1 -1
- package/dist/esm/extension/server/server-extension.js +78 -3
- package/dist/esm/extension/server/server-extension.js.map +1 -1
- package/dist/esm/extension/signal/signal.js +1 -1
- package/dist/esm/extension/signal/signal.js.map +1 -1
- package/dist/esm/extension/table/packets.js +16 -28
- package/dist/esm/extension/table/packets.js.map +1 -1
- package/dist/esm/extension/table/table-extension.js +59 -17
- package/dist/esm/extension/table/table-extension.js.map +1 -1
- package/dist/esm/extension/table/table.js.map +1 -1
- package/dist/esm/identifier.js +6 -8
- package/dist/esm/identifier.js.map +1 -1
- package/dist/esm/network/network.js +2 -0
- package/dist/esm/network/network.js.map +1 -1
- package/dist/esm/network/packet/packet-types.js +4 -0
- package/dist/esm/network/packet/packet-types.js.map +1 -1
- package/dist/esm/omu.js +4 -4
- package/dist/esm/omu.js.map +1 -1
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/package.json +1 -1
- package/src/bytebuffer.ts +10 -7
- package/src/client.ts +2 -2
- package/src/extension/dashboard/dashboard-extension.ts +76 -1
- package/src/extension/dashboard/dashboard.ts +3 -1
- package/src/extension/dashboard/index.ts +7 -1
- package/src/extension/dashboard/packets.ts +46 -0
- package/src/extension/i18n/i18n-extension.ts +2 -4
- package/src/extension/permission/permission.ts +1 -1
- package/src/extension/registry/registry.ts +1 -1
- package/src/extension/server/server-extension.ts +102 -4
- package/src/extension/signal/signal.ts +1 -1
- package/src/extension/table/packets.ts +14 -26
- package/src/extension/table/table-extension.ts +78 -28
- package/src/extension/table/table.ts +8 -4
- package/src/identifier.ts +8 -8
- package/src/network/network.ts +2 -0
- package/src/network/packet/packet-types.ts +11 -0
- package/src/omu.ts +4 -4
- package/src/version.ts +1 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ByteReader, ByteWriter } from '../../bytebuffer.js';
|
|
1
|
+
import { ByteReader, ByteWriter, Flags } from '../../bytebuffer.js';
|
|
2
2
|
import { Identifier } from '../../identifier.js';
|
|
3
3
|
|
|
4
4
|
import type { TableConfig } from './table.js';
|
|
@@ -114,31 +114,19 @@ export class TableProxyPacket {
|
|
|
114
114
|
export class TableFetchPacket {
|
|
115
115
|
constructor(
|
|
116
116
|
public readonly id: Identifier,
|
|
117
|
-
public readonly
|
|
118
|
-
public readonly
|
|
119
|
-
public readonly cursor: string | null,
|
|
117
|
+
public readonly limit: number,
|
|
118
|
+
public readonly backward: boolean = false,
|
|
119
|
+
public readonly cursor: string | null = null,
|
|
120
120
|
) {}
|
|
121
121
|
|
|
122
122
|
public static serialize(packet: TableFetchPacket): Uint8Array {
|
|
123
123
|
const writer = new ByteWriter();
|
|
124
124
|
writer.writeString(packet.id.key());
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
flags |= 0b10;
|
|
131
|
-
}
|
|
132
|
-
if (packet.cursor !== null) {
|
|
133
|
-
flags |= 0b100;
|
|
134
|
-
}
|
|
135
|
-
writer.writeByte(flags);
|
|
136
|
-
if (packet.before !== null) {
|
|
137
|
-
writer.writeInt(packet.before);
|
|
138
|
-
}
|
|
139
|
-
if (packet.after !== null) {
|
|
140
|
-
writer.writeInt(packet.after);
|
|
141
|
-
}
|
|
125
|
+
writer.writeInt(packet.limit);
|
|
126
|
+
const flags = new Flags({length: 2});
|
|
127
|
+
flags.set(0, packet.backward);
|
|
128
|
+
flags.set(1, packet.cursor !== null);
|
|
129
|
+
writer.writeFlags(flags);
|
|
142
130
|
if (packet.cursor !== null) {
|
|
143
131
|
writer.writeString(packet.cursor);
|
|
144
132
|
}
|
|
@@ -148,11 +136,11 @@ export class TableFetchPacket {
|
|
|
148
136
|
public static deserialize(data: Uint8Array): TableFetchPacket {
|
|
149
137
|
const reader = new ByteReader(data);
|
|
150
138
|
const id = Identifier.fromKey(reader.readString());
|
|
151
|
-
const
|
|
152
|
-
const
|
|
153
|
-
const
|
|
154
|
-
const cursor = flags
|
|
155
|
-
return new TableFetchPacket(id,
|
|
139
|
+
const limit = reader.readInt();
|
|
140
|
+
const flags = reader.readFlags(2);
|
|
141
|
+
const backward = flags.get(0);
|
|
142
|
+
const cursor = flags.ifSet(1, () => reader.readString());
|
|
143
|
+
return new TableFetchPacket(id, limit, backward, cursor);
|
|
156
144
|
}
|
|
157
145
|
}
|
|
158
146
|
|
|
@@ -80,6 +80,33 @@ const TABLE_ITEM_GET_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, T
|
|
|
80
80
|
permissionId: TABLE_PERMISSION_ID,
|
|
81
81
|
},
|
|
82
82
|
);
|
|
83
|
+
const TABLE_ITEM_HAS_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, Record<string, boolean>>(
|
|
84
|
+
TABLE_EXTENSION_TYPE,
|
|
85
|
+
{
|
|
86
|
+
name: 'item_has',
|
|
87
|
+
requestSerializer: TableKeysPacket,
|
|
88
|
+
responseSerializer: Serializer.json(),
|
|
89
|
+
permissionId: TABLE_PERMISSION_ID,
|
|
90
|
+
},
|
|
91
|
+
);
|
|
92
|
+
const TABLE_ITEM_HAS_ALL_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(
|
|
93
|
+
TABLE_EXTENSION_TYPE,
|
|
94
|
+
{
|
|
95
|
+
name: 'item_has_all',
|
|
96
|
+
requestSerializer: TableKeysPacket,
|
|
97
|
+
responseSerializer: Serializer.json(),
|
|
98
|
+
permissionId: TABLE_PERMISSION_ID,
|
|
99
|
+
},
|
|
100
|
+
);
|
|
101
|
+
const TABLE_ITEM_HAS_ANY_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(
|
|
102
|
+
TABLE_EXTENSION_TYPE,
|
|
103
|
+
{
|
|
104
|
+
name: 'item_has_any',
|
|
105
|
+
requestSerializer: TableKeysPacket,
|
|
106
|
+
responseSerializer: Serializer.json(),
|
|
107
|
+
permissionId: TABLE_PERMISSION_ID,
|
|
108
|
+
},
|
|
109
|
+
);
|
|
83
110
|
const TABLE_FETCH_ENDPOINT = EndpointType.createSerialized<TableFetchPacket, TableItemsPacket>(
|
|
84
111
|
TABLE_EXTENSION_TYPE,
|
|
85
112
|
{
|
|
@@ -277,6 +304,7 @@ class TableImpl<T> implements Table<T> {
|
|
|
277
304
|
});
|
|
278
305
|
client.event.ready.listen(() => this.onReady());
|
|
279
306
|
}
|
|
307
|
+
|
|
280
308
|
private updateCache(items: Map<string, T>): void {
|
|
281
309
|
if (!this.cacheSize) {
|
|
282
310
|
this.cache = items;
|
|
@@ -412,18 +440,53 @@ class TableImpl<T> implements Table<T> {
|
|
|
412
440
|
});
|
|
413
441
|
}
|
|
414
442
|
|
|
443
|
+
public async has(key: string): Promise<boolean> {
|
|
444
|
+
if (this.cache.has(key)) {
|
|
445
|
+
return true;
|
|
446
|
+
}
|
|
447
|
+
const res = await this.client.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {
|
|
448
|
+
id: this.id,
|
|
449
|
+
keys: [key],
|
|
450
|
+
});
|
|
451
|
+
return res[key] ?? false;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
public async hasMany<T extends Record<string, unknown>>(...keys: (keyof T)[]): Promise<{ [key in keyof T]: boolean }> {
|
|
455
|
+
const res = await this.client.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {
|
|
456
|
+
id: this.id,
|
|
457
|
+
keys: keys,
|
|
458
|
+
});
|
|
459
|
+
return res as { [key in keyof T]: boolean };
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
public async hasAll(...keys: string[]): Promise<boolean> {
|
|
463
|
+
const res = await this.client.endpoints.call(TABLE_ITEM_HAS_ALL_ENDPOINT, {
|
|
464
|
+
id: this.id,
|
|
465
|
+
keys,
|
|
466
|
+
});
|
|
467
|
+
return res;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
public async hasAny(...keys: string[]): Promise<boolean> {
|
|
471
|
+
const res = await this.client.endpoints.call(TABLE_ITEM_HAS_ANY_ENDPOINT, {
|
|
472
|
+
id: this.id,
|
|
473
|
+
keys,
|
|
474
|
+
});
|
|
475
|
+
return res;
|
|
476
|
+
}
|
|
477
|
+
|
|
415
478
|
public async fetchItems({
|
|
416
|
-
|
|
417
|
-
|
|
479
|
+
limit,
|
|
480
|
+
backward,
|
|
418
481
|
cursor,
|
|
419
482
|
}: {
|
|
420
|
-
|
|
421
|
-
|
|
483
|
+
limit: number;
|
|
484
|
+
backward?: boolean;
|
|
422
485
|
cursor?: string;
|
|
423
486
|
}): Promise<Map<string, T>> {
|
|
424
487
|
const res = await this.client.endpoints.call(
|
|
425
488
|
TABLE_FETCH_ENDPOINT,
|
|
426
|
-
new TableFetchPacket(this.id,
|
|
489
|
+
new TableFetchPacket(this.id, limit, backward, cursor),
|
|
427
490
|
);
|
|
428
491
|
const items = this.deserializeItems(res.items);
|
|
429
492
|
this.updateCache(items);
|
|
@@ -463,30 +526,17 @@ class TableImpl<T> implements Table<T> {
|
|
|
463
526
|
backward?: boolean;
|
|
464
527
|
cursor?: string;
|
|
465
528
|
}): AsyncIterable<T> {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
after: 0,
|
|
476
|
-
cursor,
|
|
477
|
-
},
|
|
478
|
-
);
|
|
479
|
-
yield* items.values();
|
|
480
|
-
while (items.size > 0) {
|
|
481
|
-
const cursor = this.keyFunction(
|
|
482
|
-
backward ? items.values().next().value : [...items.values()].pop(),
|
|
483
|
-
);
|
|
484
|
-
items = await this.fetchItems(
|
|
485
|
-
backward
|
|
486
|
-
? { before: 0, after: this.cacheSize ?? 100, cursor }
|
|
487
|
-
: { before: this.cacheSize ?? 100, after: 0, cursor },
|
|
488
|
-
);
|
|
529
|
+
while (true) {
|
|
530
|
+
const items = await this.fetchItems({
|
|
531
|
+
limit: this.cacheSize ?? 100,
|
|
532
|
+
backward,
|
|
533
|
+
cursor,
|
|
534
|
+
});
|
|
535
|
+
if (items.size === 0) {
|
|
536
|
+
break;
|
|
537
|
+
}
|
|
489
538
|
yield* items.values();
|
|
539
|
+
cursor = this.keyFunction(backward ? items.values().next().value : [...items.values()].pop());
|
|
490
540
|
}
|
|
491
541
|
}
|
|
492
542
|
|
|
@@ -19,14 +19,18 @@ export interface Table<T> {
|
|
|
19
19
|
update(...item: T[]): Promise<void>;
|
|
20
20
|
remove(...items: T[]): Promise<void>;
|
|
21
21
|
clear(): Promise<void>;
|
|
22
|
+
has(key: string): Promise<boolean>;
|
|
23
|
+
hasMany<T extends Record<string, unknown>>(...keys: (keyof T)[]): Promise<{ [key in keyof T]: boolean }>;
|
|
24
|
+
hasAll(...keys: string[]): Promise<boolean>;
|
|
25
|
+
hasAny(...keys: string[]): Promise<boolean>;
|
|
22
26
|
|
|
23
27
|
fetchItems({
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
limit,
|
|
29
|
+
backward,
|
|
26
30
|
cursor,
|
|
27
31
|
}: {
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
limit: number;
|
|
33
|
+
backward?: boolean;
|
|
30
34
|
cursor?: string;
|
|
31
35
|
}): Promise<Map<string, T>>;
|
|
32
36
|
fetchRange({ start, end }: { start: string; end: string }): Promise<Map<string, T>>;
|
package/src/identifier.ts
CHANGED
|
@@ -55,18 +55,18 @@ export class Identifier implements Model<string>, Keyable {
|
|
|
55
55
|
return new Identifier(namespace, ...path.split('/'));
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
static fromUrl(url: string | URL): Identifier {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
parsedUrl = new URL(url);
|
|
62
|
-
} else {
|
|
63
|
-
parsedUrl = url;
|
|
64
|
-
}
|
|
65
|
-
const namespace = parsedUrl.hostname.split('.').reverse().join('.');
|
|
58
|
+
public static fromUrl(url: string | URL): Identifier {
|
|
59
|
+
const parsedUrl = new URL(url);
|
|
60
|
+
const namespace = Identifier.namespaceFromUrl(parsedUrl.href);
|
|
66
61
|
const path = parsedUrl.pathname.slice(1).split('/');
|
|
67
62
|
return new Identifier(namespace, ...path);
|
|
68
63
|
}
|
|
69
64
|
|
|
65
|
+
public static namespaceFromUrl(url: string | URL): string {
|
|
66
|
+
const parsed = new URL(url);
|
|
67
|
+
return parsed.hostname.split('.').reverse().join('.');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
70
|
public toJson(): string {
|
|
71
71
|
return this.key();
|
|
72
72
|
}
|
package/src/network/network.ts
CHANGED
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
import { EventEmitter } from '../event-emitter.js';
|
|
13
13
|
import { IdentifierMap } from '../identifier.js';
|
|
14
14
|
import type { TokenProvider } from '../token.js';
|
|
15
|
+
import { VERSION } from '../version.js';
|
|
15
16
|
|
|
16
17
|
import type { Connection } from './connection.js';
|
|
17
18
|
import { PacketMapper } from './connection.js';
|
|
@@ -138,6 +139,7 @@ export class Network {
|
|
|
138
139
|
type: PACKET_TYPES.CONNECT,
|
|
139
140
|
data: new ConnectPacket({
|
|
140
141
|
app: this.client.app,
|
|
142
|
+
protocol: {version: VERSION},
|
|
141
143
|
token,
|
|
142
144
|
}),
|
|
143
145
|
});
|
|
@@ -8,24 +8,34 @@ import { PacketType } from './packet.js';
|
|
|
8
8
|
|
|
9
9
|
const IDENTIFIER = new Identifier('core', 'packet');
|
|
10
10
|
|
|
11
|
+
type ProtocolInfo = {
|
|
12
|
+
version: string,
|
|
13
|
+
};
|
|
14
|
+
|
|
11
15
|
type ConnectPacketJson = {
|
|
12
16
|
app: AppJson,
|
|
17
|
+
protocol: ProtocolInfo,
|
|
13
18
|
token?: string,
|
|
14
19
|
};
|
|
15
20
|
export class ConnectPacket implements Model<ConnectPacketJson> {
|
|
16
21
|
public readonly app: App;
|
|
22
|
+
public readonly protocol: ProtocolInfo;
|
|
17
23
|
public readonly token?: string;
|
|
24
|
+
|
|
18
25
|
constructor(options: {
|
|
19
26
|
app: App,
|
|
27
|
+
protocol: ProtocolInfo,
|
|
20
28
|
token?: string,
|
|
21
29
|
}) {
|
|
22
30
|
this.app = options.app;
|
|
31
|
+
this.protocol = options.protocol;
|
|
23
32
|
this.token = options.token;
|
|
24
33
|
}
|
|
25
34
|
|
|
26
35
|
static fromJson(data: ConnectPacketJson): ConnectPacket {
|
|
27
36
|
return new ConnectPacket({
|
|
28
37
|
app: App.fromJson(data.app),
|
|
38
|
+
protocol: data.protocol,
|
|
29
39
|
token: data.token,
|
|
30
40
|
});
|
|
31
41
|
}
|
|
@@ -33,6 +43,7 @@ export class ConnectPacket implements Model<ConnectPacketJson> {
|
|
|
33
43
|
toJson(): ConnectPacketJson {
|
|
34
44
|
return {
|
|
35
45
|
app: this.app.toJson(),
|
|
46
|
+
protocol: this.protocol,
|
|
36
47
|
token: this.token,
|
|
37
48
|
};
|
|
38
49
|
}
|
package/src/omu.ts
CHANGED
|
@@ -43,8 +43,8 @@ export class Omu implements Client {
|
|
|
43
43
|
readonly dashboard: DashboardExtension;
|
|
44
44
|
readonly extensions: ExtensionRegistry;
|
|
45
45
|
readonly tables: TableExtension;
|
|
46
|
-
readonly
|
|
47
|
-
readonly
|
|
46
|
+
readonly registries: RegistryExtension;
|
|
47
|
+
readonly signals: SignalExtension;
|
|
48
48
|
readonly assets: AssetExtension;
|
|
49
49
|
readonly i18n: I18nExtension;
|
|
50
50
|
readonly server: ServerExtension;
|
|
@@ -79,8 +79,8 @@ export class Omu implements Client {
|
|
|
79
79
|
this.plugins = this.extensions.register(PLUGIN_EXTENSION_TYPE);
|
|
80
80
|
this.tables = this.extensions.register(TABLE_EXTENSION_TYPE);
|
|
81
81
|
this.dashboard = this.extensions.register(DASHBOARD_EXTENSION_TYPE);
|
|
82
|
-
this.
|
|
83
|
-
this.
|
|
82
|
+
this.registries = this.extensions.register(REGISTRY_EXTENSION_TYPE);
|
|
83
|
+
this.signals = this.extensions.register(SIGNAL_EXTENSION_TYPE);
|
|
84
84
|
this.assets = this.extensions.register(ASSET_EXTENSION_TYPE);
|
|
85
85
|
this.i18n = this.extensions.register(I18N_EXTENSION_TYPE);
|
|
86
86
|
this.server = this.extensions.register(SERVER_EXTENSION_TYPE);
|
package/src/version.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const VERSION = '0.6.22';
|