@omujs/omu 0.6.21 → 0.6.22

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.
Files changed (83) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/dts/bytebuffer.d.ts +4 -1
  3. package/dist/dts/bytebuffer.d.ts.map +1 -1
  4. package/dist/dts/client.d.ts +2 -2
  5. package/dist/dts/client.d.ts.map +1 -1
  6. package/dist/dts/extension/dashboard/dashboard-extension.d.ts +6 -0
  7. package/dist/dts/extension/dashboard/dashboard-extension.d.ts.map +1 -1
  8. package/dist/dts/extension/dashboard/dashboard.d.ts +3 -1
  9. package/dist/dts/extension/dashboard/dashboard.d.ts.map +1 -1
  10. package/dist/dts/extension/dashboard/index.d.ts +1 -1
  11. package/dist/dts/extension/dashboard/index.d.ts.map +1 -1
  12. package/dist/dts/extension/dashboard/packets.d.ts +21 -0
  13. package/dist/dts/extension/dashboard/packets.d.ts.map +1 -1
  14. package/dist/dts/extension/i18n/i18n-extension.d.ts.map +1 -1
  15. package/dist/dts/extension/permission/permission.d.ts +1 -2
  16. package/dist/dts/extension/permission/permission.d.ts.map +1 -1
  17. package/dist/dts/extension/server/server-extension.d.ts +20 -1
  18. package/dist/dts/extension/server/server-extension.d.ts.map +1 -1
  19. package/dist/dts/extension/table/packets.d.ts +3 -3
  20. package/dist/dts/extension/table/packets.d.ts.map +1 -1
  21. package/dist/dts/extension/table/table-extension.d.ts.map +1 -1
  22. package/dist/dts/extension/table/table.d.ts +9 -3
  23. package/dist/dts/extension/table/table.d.ts.map +1 -1
  24. package/dist/dts/identifier.d.ts +1 -0
  25. package/dist/dts/identifier.d.ts.map +1 -1
  26. package/dist/dts/network/network.d.ts.map +1 -1
  27. package/dist/dts/network/packet/packet-types.d.ts +6 -0
  28. package/dist/dts/network/packet/packet-types.d.ts.map +1 -1
  29. package/dist/dts/omu.d.ts +2 -2
  30. package/dist/dts/omu.d.ts.map +1 -1
  31. package/dist/dts/version.d.ts +2 -0
  32. package/dist/dts/version.d.ts.map +1 -0
  33. package/dist/esm/bytebuffer.js +6 -6
  34. package/dist/esm/bytebuffer.js.map +1 -1
  35. package/dist/esm/extension/dashboard/dashboard-extension.js +68 -2
  36. package/dist/esm/extension/dashboard/dashboard-extension.js.map +1 -1
  37. package/dist/esm/extension/dashboard/index.js +1 -1
  38. package/dist/esm/extension/dashboard/index.js.map +1 -1
  39. package/dist/esm/extension/dashboard/packets.js +44 -0
  40. package/dist/esm/extension/dashboard/packets.js.map +1 -1
  41. package/dist/esm/extension/i18n/i18n-extension.js +2 -2
  42. package/dist/esm/extension/i18n/i18n-extension.js.map +1 -1
  43. package/dist/esm/extension/registry/registry.js +1 -1
  44. package/dist/esm/extension/registry/registry.js.map +1 -1
  45. package/dist/esm/extension/server/server-extension.js +78 -3
  46. package/dist/esm/extension/server/server-extension.js.map +1 -1
  47. package/dist/esm/extension/signal/signal.js +1 -1
  48. package/dist/esm/extension/signal/signal.js.map +1 -1
  49. package/dist/esm/extension/table/packets.js +16 -28
  50. package/dist/esm/extension/table/packets.js.map +1 -1
  51. package/dist/esm/extension/table/table-extension.js +59 -17
  52. package/dist/esm/extension/table/table-extension.js.map +1 -1
  53. package/dist/esm/extension/table/table.js.map +1 -1
  54. package/dist/esm/identifier.js +6 -8
  55. package/dist/esm/identifier.js.map +1 -1
  56. package/dist/esm/network/network.js +2 -0
  57. package/dist/esm/network/network.js.map +1 -1
  58. package/dist/esm/network/packet/packet-types.js +4 -0
  59. package/dist/esm/network/packet/packet-types.js.map +1 -1
  60. package/dist/esm/omu.js +4 -4
  61. package/dist/esm/omu.js.map +1 -1
  62. package/dist/esm/version.js +2 -0
  63. package/dist/esm/version.js.map +1 -0
  64. package/package.json +1 -1
  65. package/src/bytebuffer.ts +10 -7
  66. package/src/client.ts +2 -2
  67. package/src/extension/dashboard/dashboard-extension.ts +76 -1
  68. package/src/extension/dashboard/dashboard.ts +3 -1
  69. package/src/extension/dashboard/index.ts +7 -1
  70. package/src/extension/dashboard/packets.ts +46 -0
  71. package/src/extension/i18n/i18n-extension.ts +2 -4
  72. package/src/extension/permission/permission.ts +1 -1
  73. package/src/extension/registry/registry.ts +1 -1
  74. package/src/extension/server/server-extension.ts +102 -4
  75. package/src/extension/signal/signal.ts +1 -1
  76. package/src/extension/table/packets.ts +14 -26
  77. package/src/extension/table/table-extension.ts +78 -28
  78. package/src/extension/table/table.ts +8 -4
  79. package/src/identifier.ts +8 -8
  80. package/src/network/network.ts +2 -0
  81. package/src/network/packet/packet-types.ts +11 -0
  82. package/src/omu.ts +4 -4
  83. 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 before: number | null,
118
- public readonly after: number | null,
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
- let flags = 0;
126
- if (packet.before !== null) {
127
- flags |= 0b1;
128
- }
129
- if (packet.after !== null) {
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 flags = reader.readByte();
152
- const before = flags & 0b1 ? reader.readInt() : null;
153
- const after = flags & 0b10 ? reader.readInt() : null;
154
- const cursor = flags & 0b100 ? reader.readString() : null;
155
- return new TableFetchPacket(id, before, after, cursor);
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
- before,
417
- after,
479
+ limit,
480
+ backward,
418
481
  cursor,
419
482
  }: {
420
- before: number;
421
- after: number;
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, before, after, cursor ?? null),
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
- let items: Map<string, T> = await this.fetchItems(
467
- backward
468
- ? {
469
- before: 0,
470
- after: this.cacheSize ?? 100,
471
- cursor,
472
- }
473
- : {
474
- before: this.cacheSize ?? 100,
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
- before,
25
- after,
28
+ limit,
29
+ backward,
26
30
  cursor,
27
31
  }: {
28
- before?: number;
29
- after?: number;
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
- let parsedUrl: URL;
60
- if (typeof url === 'string') {
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
  }
@@ -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 registry: RegistryExtension;
47
- readonly signal: SignalExtension;
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.registry = this.extensions.register(REGISTRY_EXTENSION_TYPE);
83
- this.signal = this.extensions.register(SIGNAL_EXTENSION_TYPE);
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.21';