@omujs/omu 0.9.48 → 0.9.50
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/address.js +1 -0
- package/dist/address.js.map +7 -0
- package/dist/api/asset/extension.d.ts +25 -0
- package/dist/api/asset/extension.js +2 -0
- package/dist/api/asset/extension.js.map +7 -0
- package/dist/api/asset/index.d.ts +2 -0
- package/dist/api/asset/index.js +2 -0
- package/dist/api/asset/index.js.map +7 -0
- package/dist/api/dashboard/extension.d.ts +181 -0
- package/dist/api/dashboard/extension.js +2 -0
- package/dist/api/dashboard/extension.js.map +7 -0
- package/{src/api/dashboard/handler.ts → dist/api/dashboard/handler.d.ts} +3 -5
- package/dist/api/dashboard/handler.js +1 -0
- package/dist/api/dashboard/handler.js.map +7 -0
- package/dist/api/dashboard/index.d.ts +3 -0
- package/dist/api/dashboard/index.js +2 -0
- package/dist/api/dashboard/index.js.map +7 -0
- package/dist/api/dashboard/packets.d.ts +63 -0
- package/dist/api/dashboard/packets.js +2 -0
- package/dist/api/dashboard/packets.js.map +7 -0
- package/dist/api/endpoint/endpoint.d.ts +21 -0
- package/dist/api/endpoint/endpoint.js +2 -0
- package/dist/api/endpoint/endpoint.js.map +7 -0
- package/dist/api/endpoint/extension.d.ts +17 -0
- package/dist/api/endpoint/extension.js +2 -0
- package/dist/api/endpoint/extension.js.map +7 -0
- package/{src/api/endpoint/index.ts → dist/api/endpoint/index.d.ts} +0 -1
- package/dist/api/endpoint/index.js +2 -0
- package/dist/api/endpoint/index.js.map +7 -0
- package/dist/api/endpoint/packets.d.ts +51 -0
- package/dist/api/endpoint/packets.js +2 -0
- package/dist/api/endpoint/packets.js.map +7 -0
- package/dist/api/extension-registry.d.ts +8 -0
- package/dist/api/extension-registry.js +2 -0
- package/dist/api/extension-registry.js.map +7 -0
- package/dist/api/extension.d.ts +11 -0
- package/dist/api/extension.js +2 -0
- package/dist/api/extension.js.map +7 -0
- package/dist/api/http/extension.d.ts +41 -0
- package/dist/api/http/extension.js +2 -0
- package/dist/api/http/extension.js.map +7 -0
- package/dist/api/http/http.d.ts +36 -0
- package/dist/api/http/http.js +2 -0
- package/dist/api/http/http.js.map +7 -0
- package/{src/api/http/index.ts → dist/api/http/index.d.ts} +0 -1
- package/dist/api/http/index.js +2 -0
- package/dist/api/http/index.js.map +7 -0
- package/dist/api/http/websocket.d.ts +125 -0
- package/dist/api/http/websocket.js +2 -0
- package/dist/api/http/websocket.js.map +7 -0
- package/dist/api/i18n/extension.d.ts +19 -0
- package/dist/api/i18n/extension.js +2 -0
- package/dist/api/i18n/extension.js.map +7 -0
- package/{src/api/i18n/index.ts → dist/api/i18n/index.d.ts} +0 -1
- package/dist/api/i18n/index.js +2 -0
- package/dist/api/i18n/index.js.map +7 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +7 -0
- package/dist/api/logger/extension.d.ts +25 -0
- package/dist/api/logger/extension.js +2 -0
- package/dist/api/logger/extension.js.map +7 -0
- package/dist/api/logger/index.d.ts +1 -0
- package/dist/api/logger/index.js +2 -0
- package/dist/api/logger/index.js.map +7 -0
- package/dist/api/logger/packets.d.ts +18 -0
- package/dist/api/logger/packets.js +2 -0
- package/dist/api/logger/packets.js.map +7 -0
- package/dist/api/permission/extension.d.ts +19 -0
- package/dist/api/permission/extension.js +2 -0
- package/dist/api/permission/extension.js.map +7 -0
- package/{src/api/permission/index.ts → dist/api/permission/index.d.ts} +0 -1
- package/dist/api/permission/index.js +2 -0
- package/dist/api/permission/index.js.map +7 -0
- package/dist/api/permission/permission.d.ts +25 -0
- package/dist/api/permission/permission.js +2 -0
- package/dist/api/permission/permission.js.map +7 -0
- package/dist/api/plugin/extension.d.ts +43 -0
- package/dist/api/plugin/extension.js +2 -0
- package/dist/api/plugin/extension.js.map +7 -0
- package/{src/api/plugin/index.ts → dist/api/plugin/index.d.ts} +0 -1
- package/dist/api/plugin/index.js +2 -0
- package/dist/api/plugin/index.js.map +7 -0
- package/{src/api/plugin/package-info.ts → dist/api/plugin/package-info.d.ts} +0 -7
- package/dist/api/plugin/package-info.js +1 -0
- package/dist/api/plugin/package-info.js.map +7 -0
- package/dist/api/registry/extension.d.ts +23 -0
- package/dist/api/registry/extension.js +2 -0
- package/dist/api/registry/extension.js.map +7 -0
- package/{src/api/registry/index.ts → dist/api/registry/index.d.ts} +0 -1
- package/dist/api/registry/index.js +2 -0
- package/dist/api/registry/index.js.map +7 -0
- package/dist/api/registry/packets.d.ts +20 -0
- package/dist/api/registry/packets.js +2 -0
- package/dist/api/registry/packets.js.map +7 -0
- package/{src/api/registry/registry.ts → dist/api/registry/registry.d.ts} +11 -53
- package/dist/api/registry/registry.js +2 -0
- package/dist/api/registry/registry.js.map +7 -0
- package/dist/api/server/extension.d.ts +61 -0
- package/dist/api/server/extension.js +2 -0
- package/dist/api/server/extension.js.map +7 -0
- package/dist/api/server/index.d.ts +1 -0
- package/dist/api/server/index.js +2 -0
- package/dist/api/server/index.js.map +7 -0
- package/dist/api/session/extension.d.ts +52 -0
- package/dist/api/session/extension.js +2 -0
- package/dist/api/session/extension.js.map +7 -0
- package/dist/api/session/index.d.ts +1 -0
- package/dist/api/session/index.js +2 -0
- package/dist/api/session/index.js.map +7 -0
- package/dist/api/signal/extension.d.ts +19 -0
- package/dist/api/signal/extension.js +2 -0
- package/dist/api/signal/extension.js.map +7 -0
- package/dist/api/signal/index.d.ts +1 -0
- package/dist/api/signal/index.js +2 -0
- package/dist/api/signal/index.js.map +7 -0
- package/dist/api/signal/packets.d.ts +21 -0
- package/dist/api/signal/packets.js +2 -0
- package/dist/api/signal/packets.js.map +7 -0
- package/dist/api/signal/signal.d.ts +33 -0
- package/dist/api/signal/signal.js +2 -0
- package/dist/api/signal/signal.js.map +7 -0
- package/dist/api/table/extension.d.ts +26 -0
- package/dist/api/table/extension.js +2 -0
- package/dist/api/table/extension.js.map +7 -0
- package/{src/api/table/index.ts → dist/api/table/index.d.ts} +0 -1
- package/dist/api/table/index.js +2 -0
- package/dist/api/table/index.js.map +7 -0
- package/dist/api/table/packets.d.ts +65 -0
- package/dist/api/table/packets.js +2 -0
- package/dist/api/table/packets.js.map +7 -0
- package/dist/api/table/table.d.ts +75 -0
- package/dist/api/table/table.js +2 -0
- package/dist/api/table/table.js.map +7 -0
- package/dist/app.d.ts +49 -0
- package/dist/app.js +2 -0
- package/dist/app.js.map +7 -0
- package/dist/const.d.ts +2 -0
- package/dist/const.js +2 -0
- package/dist/const.js.map +7 -0
- package/dist/errors.d.ts +36 -0
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +7 -0
- package/dist/event/index.d.ts +6 -0
- package/dist/event/index.js +2 -0
- package/dist/event/index.js.map +7 -0
- package/dist/helper.d.ts +10 -0
- package/dist/helper.js +2 -0
- package/dist/helper.js.map +7 -0
- package/dist/identifier.d.ts +51 -0
- package/dist/identifier.js +2 -0
- package/dist/identifier.js.map +7 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +7 -0
- package/{src/localization/index.ts → dist/localization/index.d.ts} +0 -1
- package/dist/localization/index.js +2 -0
- package/dist/localization/index.js.map +7 -0
- package/dist/localization/locale.d.ts +735 -0
- package/dist/localization/locale.js +2 -0
- package/dist/localization/locale.js.map +7 -0
- package/{src/localization/localization.ts → dist/localization/localization.d.ts} +0 -2
- package/dist/localization/localization.js +1 -0
- package/dist/localization/localization.js.map +7 -0
- package/dist/lock.d.ts +6 -0
- package/dist/lock.js +2 -0
- package/dist/lock.js.map +7 -0
- package/dist/network/connection.d.ts +17 -0
- package/dist/network/connection.js +2 -0
- package/dist/network/connection.js.map +7 -0
- package/dist/network/encryption.d.ts +38 -0
- package/dist/network/encryption.js +2 -0
- package/dist/network/encryption.js.map +7 -0
- package/dist/network/frame-transport.d.ts +22 -0
- package/dist/network/frame-transport.js +2 -0
- package/dist/network/frame-transport.js.map +7 -0
- package/{src/network/index.ts → dist/network/index.d.ts} +0 -1
- package/dist/network/index.js +2 -0
- package/dist/network/index.js.map +7 -0
- package/dist/network/network.d.ts +59 -0
- package/dist/network/network.js +2 -0
- package/dist/network/network.js.map +7 -0
- package/{src/network/packet/index.ts → dist/network/packet/index.d.ts} +0 -1
- package/dist/network/packet/index.js +2 -0
- package/dist/network/packet/index.js.map +7 -0
- package/dist/network/packet/packet-types.d.ts +84 -0
- package/dist/network/packet/packet-types.js +2 -0
- package/dist/network/packet/packet-types.js.map +7 -0
- package/dist/network/packet/packet.d.ts +25 -0
- package/dist/network/packet/packet.js +2 -0
- package/dist/network/packet/packet.js.map +7 -0
- package/dist/network/websocket-transport.d.ts +24 -0
- package/dist/network/websocket-transport.js +2 -0
- package/dist/network/websocket-transport.js.map +7 -0
- package/dist/omu.d.ts +61 -0
- package/dist/omu.js +2 -0
- package/dist/omu.js.map +7 -0
- package/dist/result.d.ts +26 -0
- package/dist/result.js +2 -0
- package/dist/result.js.map +7 -0
- package/dist/serialize/bytebuffer.d.ts +73 -0
- package/dist/serialize/bytebuffer.js +2 -0
- package/dist/serialize/bytebuffer.js.map +7 -0
- package/dist/serialize/index.d.ts +2 -0
- package/dist/serialize/index.js +2 -0
- package/dist/serialize/index.js.map +7 -0
- package/dist/serialize/serializer.d.ts +26 -0
- package/dist/serialize/serializer.js +2 -0
- package/dist/serialize/serializer.js.map +7 -0
- package/dist/token.d.ts +14 -0
- package/dist/token.js +2 -0
- package/dist/token.js.map +7 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +7 -0
- package/package.json +12 -9
- package/CHANGELOG.md +0 -1845
- package/src/api/asset/extension.ts +0 -193
- package/src/api/asset/index.ts +0 -5
- package/src/api/dashboard/extension.ts +0 -651
- package/src/api/dashboard/index.ts +0 -38
- package/src/api/dashboard/packets.ts +0 -126
- package/src/api/endpoint/endpoint.ts +0 -56
- package/src/api/endpoint/extension.ts +0 -133
- package/src/api/endpoint/packets.ts +0 -176
- package/src/api/extension-registry.ts +0 -17
- package/src/api/extension.ts +0 -19
- package/src/api/http/extension.ts +0 -401
- package/src/api/http/http.ts +0 -79
- package/src/api/http/websocket.ts +0 -283
- package/src/api/i18n/extension.ts +0 -65
- package/src/api/index.ts +0 -3
- package/src/api/logger/extension.ts +0 -75
- package/src/api/logger/index.ts +0 -4
- package/src/api/logger/packets.ts +0 -38
- package/src/api/permission/extension.ts +0 -107
- package/src/api/permission/permission.ts +0 -53
- package/src/api/plugin/extension.ts +0 -100
- package/src/api/registry/extension.ts +0 -326
- package/src/api/registry/packets.ts +0 -64
- package/src/api/server/extension.ts +0 -155
- package/src/api/server/index.ts +0 -11
- package/src/api/session/extension.ts +0 -205
- package/src/api/session/index.ts +0 -7
- package/src/api/signal/extension.ts +0 -125
- package/src/api/signal/index.ts +0 -1
- package/src/api/signal/packets.ts +0 -61
- package/src/api/signal/signal.ts +0 -67
- package/src/api/table/extension.ts +0 -554
- package/src/api/table/packets.ts +0 -252
- package/src/api/table/table.ts +0 -113
- package/src/app.ts +0 -95
- package/src/const.ts +0 -2
- package/src/errors.ts +0 -70
- package/src/event/index.ts +0 -18
- package/src/helper.ts +0 -16
- package/src/identifier.ts +0 -256
- package/src/index.ts +0 -87
- package/src/localization/locale.ts +0 -737
- package/src/lock.ts +0 -43
- package/src/network/connection.ts +0 -45
- package/src/network/encryption.ts +0 -221
- package/src/network/frame-transport.ts +0 -186
- package/src/network/network.ts +0 -322
- package/src/network/packet/packet-types.ts +0 -164
- package/src/network/packet/packet.ts +0 -55
- package/src/network/websocket-transport.ts +0 -123
- package/src/omu.ts +0 -156
- package/src/result.ts +0 -78
- package/src/serialize/bytebuffer.ts +0 -432
- package/src/serialize/index.ts +0 -2
- package/src/serialize/serializer.ts +0 -149
- package/src/token.ts +0 -39
- package/src/version.ts +0 -2
- package/tsconfig.json +0 -18
- /package/{src/address.ts → dist/address.d.ts} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Identifier as n}from"../../identifier";import{Serializer as s}from"../../serialize";class a{constructor(e,i,r,t){this.id=e;this.defaultValue=i;this.serializer=r;this.permissions=t}static createJson(e,{name:i,defaultValue:r,permissions:t,serializer:o}){return new a(n.from(e).join(i),r,s.pipe(o??s.noop(),s.json()),t??{})}static createSerialized(e,{name:i,defaultValue:r,serializer:t,permissions:o}){return new a(n.from(e).join(i),r,t,o??{})}}export{a as RegistryType};
|
|
2
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/registry/registry.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Unlisten } from '../../event';\nimport { Identifier, IntoId } from '../../identifier';\nimport type { JsonType, Serializable } from '../../serialize';\nimport { Serializer } from '../../serialize';\n\nexport interface RegistryPermissionsJSON {\n all?: string;\n read?: string;\n write?: string;\n}\n\nexport interface RegistryPermissions {\n all?: IntoId;\n read?: IntoId;\n write?: IntoId;\n}\n\nexport class RegistryType<T> {\n constructor(\n public readonly id: Identifier,\n public readonly defaultValue: T,\n public readonly serializer: Serializable<T, Uint8Array>,\n public readonly permissions: RegistryPermissions,\n ) { }\n\n public static createJson<T, D extends JsonType = JsonType>(identifier: IntoId, {\n name,\n defaultValue,\n permissions,\n serializer,\n }: {\n name: string;\n defaultValue: T;\n permissions?: RegistryPermissions;\n serializer?: Serializable<T, D>;\n }): RegistryType<T> {\n return new RegistryType(\n Identifier.from(identifier).join(name),\n defaultValue,\n Serializer.pipe<T, D, Uint8Array>(serializer ?? Serializer.noop(), Serializer.json()),\n permissions ?? {},\n );\n }\n\n public static createSerialized<T>(identifier: IntoId, {\n name,\n defaultValue,\n serializer,\n permissions,\n }: {\n name: string;\n defaultValue: T;\n serializer: Serializable<T, Uint8Array>;\n permissions?: RegistryPermissions;\n }): RegistryType<T> {\n return new RegistryType(\n Identifier.from(identifier).join(name),\n defaultValue,\n serializer,\n permissions ?? {},\n );\n }\n}\n\nexport interface Registry<T> {\n readonly type: RegistryType<T>;\n readonly value: T;\n get(): Promise<T>;\n set(value: T): Promise<void>;\n update(fn: (value: T) => PromiseLike<T> | T): Promise<T>;\n modify(fn: (value: T) => PromiseLike<void> | void): Promise<T>;\n listen(fn: (value: T) => void): Unlisten;\n\n compatSvelte(): Writable<T>;\n}\n\nexport type Subscriber<T> = (value: T) => void;\n\nexport type Unsubscriber = () => void;\n\nexport type Updater<T> = (value: T) => T;\n\nexport type StartStopNotifier<T> = (\n set: (value: T) => void,\n update: (fn: Updater<T>) => void\n) => void | (() => void);\n\nexport interface Readable<T> {\n subscribe(this: void, run: Subscriber<T>): Unsubscriber;\n}\n\nexport interface Writable<T> extends Readable<T> {\n set(this: void, value: T): void;\n update(this: void, updater: Updater<T>): void;\n wait(): Promise<T>;\n}\n"],
|
|
5
|
+
"mappings": "AACA,OAAS,cAAAA,MAA0B,mBAEnC,OAAS,cAAAC,MAAkB,kBAcpB,MAAMC,CAAgB,CACzB,YACoBC,EACAC,EACAC,EACAC,EAClB,CAJkB,QAAAH,EACA,kBAAAC,EACA,gBAAAC,EACA,iBAAAC,CAChB,CAEJ,OAAc,WAA6CC,EAAoB,CAC3E,KAAAC,EACA,aAAAJ,EACA,YAAAE,EACA,WAAAD,CACJ,EAKoB,CAChB,OAAO,IAAIH,EACPF,EAAW,KAAKO,CAAU,EAAE,KAAKC,CAAI,EACrCJ,EACAH,EAAW,KAAuBI,GAAcJ,EAAW,KAAK,EAAGA,EAAW,KAAK,CAAC,EACpFK,GAAe,CAAC,CACpB,CACJ,CAEA,OAAc,iBAAoBC,EAAoB,CAClD,KAAAC,EACA,aAAAJ,EACA,WAAAC,EACA,YAAAC,CACJ,EAKoB,CAChB,OAAO,IAAIJ,EACPF,EAAW,KAAKO,CAAU,EAAE,KAAKC,CAAI,EACrCJ,EACAC,EACAC,GAAe,CAAC,CACpB,CACJ,CACJ",
|
|
6
|
+
"names": ["Identifier", "Serializer", "RegistryType", "id", "defaultValue", "serializer", "permissions", "identifier", "name"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { App, AppJson } from '../../app.js';
|
|
2
|
+
import { Identifier, IdentifierMap, IntoId } from '../../identifier';
|
|
3
|
+
import { LocalizedText } from '../../localization/localization.js';
|
|
4
|
+
import { Omu } from '../../omu.js';
|
|
5
|
+
import { ExtensionType, type Extension } from '../extension.js';
|
|
6
|
+
import { Registry, RegistryType } from '../registry';
|
|
7
|
+
import { type Table } from '../table';
|
|
8
|
+
export declare const SERVER_EXTENSION_TYPE: ExtensionType<ServerExtension>;
|
|
9
|
+
export interface AppIndexEntry {
|
|
10
|
+
url: string;
|
|
11
|
+
meta?: AppIndexRegistryMeta;
|
|
12
|
+
added_at: string;
|
|
13
|
+
}
|
|
14
|
+
export interface AppIndex {
|
|
15
|
+
indexes: Record<string, AppIndexEntry>;
|
|
16
|
+
}
|
|
17
|
+
export declare const SERVER_APPS_READ_PERMISSION_ID: Identifier;
|
|
18
|
+
export declare const SERVER_APPS_WRITE_PERMISSION_ID: Identifier;
|
|
19
|
+
export declare const SERVER_INDEX_READ_PERMISSION_ID: Identifier;
|
|
20
|
+
export declare const SERVER_INDEX_REGISTRY_TYPE: RegistryType<AppIndex>;
|
|
21
|
+
export declare const SERVER_SHUTDOWN_PERMISSION_ID: Identifier;
|
|
22
|
+
export declare const TRUSTED_ORIGINS_GET_PERMISSION_ID: Identifier;
|
|
23
|
+
export declare const TRUSTED_ORIGINS_SET_PERMISSION_ID: Identifier;
|
|
24
|
+
export declare class ServerExtension implements Extension {
|
|
25
|
+
private readonly omu;
|
|
26
|
+
readonly type: ExtensionType<ServerExtension>;
|
|
27
|
+
readonly apps: Table<App>;
|
|
28
|
+
readonly index: Registry<AppIndex>;
|
|
29
|
+
readonly trustedHosts: Registry<Record<string, string>>;
|
|
30
|
+
constructor(omu: Omu);
|
|
31
|
+
shutdown(restart?: boolean): Promise<boolean>;
|
|
32
|
+
}
|
|
33
|
+
export declare class SessionObserver {
|
|
34
|
+
readonly onConnectCallbacks: Array<(app: App) => Promise<void> | void>;
|
|
35
|
+
readonly onDisconnectCallbacks: Array<(app: App) => Promise<void> | void>;
|
|
36
|
+
constructor(onConnectCallbacks: Array<(app: App) => Promise<void> | void>, onDisconnectCallbacks: Array<(app: App) => Promise<void> | void>);
|
|
37
|
+
onConnect(callback: (app: App) => Promise<void> | void): void;
|
|
38
|
+
onDisconnect(callback: (app: App) => Promise<void> | void): void;
|
|
39
|
+
}
|
|
40
|
+
export type AppIndexRegistryMeta = {
|
|
41
|
+
name: LocalizedText;
|
|
42
|
+
note: LocalizedText;
|
|
43
|
+
};
|
|
44
|
+
export interface AppIndexRegistryJSON {
|
|
45
|
+
id: string;
|
|
46
|
+
meta?: AppIndexRegistryMeta;
|
|
47
|
+
apps: Record<string, AppJson>;
|
|
48
|
+
}
|
|
49
|
+
export declare class AppIndexRegistry {
|
|
50
|
+
id: Identifier;
|
|
51
|
+
apps: IdentifierMap<App>;
|
|
52
|
+
meta: AppIndexRegistryMeta | undefined;
|
|
53
|
+
constructor(id: Identifier, apps: IdentifierMap<App>, meta: AppIndexRegistryMeta | undefined);
|
|
54
|
+
static build(options: {
|
|
55
|
+
id: IntoId;
|
|
56
|
+
meta: AppIndexRegistryMeta;
|
|
57
|
+
apps: App[];
|
|
58
|
+
}): AppIndexRegistry;
|
|
59
|
+
static fromJSON(json: AppIndexRegistryJSON): AppIndexRegistry;
|
|
60
|
+
toJSON(): AppIndexRegistryJSON;
|
|
61
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{App as o}from"../../app.js";import{Identifier as a,IdentifierMap as c}from"../../identifier";import{EndpointType as x}from"../endpoint/endpoint.js";import{ExtensionType as R}from"../extension.js";import{RegistryType as l}from"../registry";import{TableType as u}from"../table";const t=new R("server",n=>new P(n)),S=t.join("apps","read"),I=t.join("apps","write"),y=t.join("index","read"),_=l.createJson(t,{name:"index",defaultValue:{indexes:{}},permissions:{write:I,read:y}}),A=u.createJson(t,{name:"apps",serializer:o,key:n=>n.id.key(),permissions:{all:I,read:S}}),T=t.join("shutdown"),f=x.createJson(t,{name:"shutdown",permissionId:T}),b=t.join("trusted_origins","get"),g=t.join("trusted_origins","set"),O=l.createJson(t,{name:"trusted_hosts",defaultValue:{},permissions:{read:b,write:g}});class P{constructor(e){this.omu=e;this.apps=e.tables.get(A),this.index=e.registries.get(_),this.trustedHosts=e.registries.get(O)}type=t;apps;index;trustedHosts;async shutdown(e){return this.omu.endpoints.call(f,e??!1),await new Promise(i=>{const r=this.omu.network.event.disconnected.listen(()=>{i(),r()})}),!0}}class G{constructor(e,i){this.onConnectCallbacks=e;this.onDisconnectCallbacks=i}onConnect(e){this.onConnectCallbacks.push(e)}onDisconnect(e){this.onDisconnectCallbacks.push(e)}}class d{constructor(e,i,r){this.id=e;this.apps=i;this.meta=r}static build(e){return new d(a.from(e.id),new c(e.apps.map(i=>[i.id,i])),e.meta)}static fromJSON(e){const i=a.fromKey(e.id),r=new c;for(const[m,E]of Object.entries(e.apps)){const s=a.fromKey(m),p=o.deserialize(E);if(!s.isNamespaceEqual(p.id))throw new Error(`App ID does not match the ID in the index. ${p.id} != ${s}`);r.set(s,p)}return new d(i,r,e.meta)}toJSON(){return{id:this.id.key(),meta:this.meta,apps:Object.fromEntries([...this.apps.entries()].map(([e,i])=>[e.key(),o.serialize(i)]))}}}export{d as AppIndexRegistry,S as SERVER_APPS_READ_PERMISSION_ID,I as SERVER_APPS_WRITE_PERMISSION_ID,t as SERVER_EXTENSION_TYPE,y as SERVER_INDEX_READ_PERMISSION_ID,_ as SERVER_INDEX_REGISTRY_TYPE,T as SERVER_SHUTDOWN_PERMISSION_ID,P as ServerExtension,G as SessionObserver,b as TRUSTED_ORIGINS_GET_PERMISSION_ID,g as TRUSTED_ORIGINS_SET_PERMISSION_ID};
|
|
2
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/server/extension.ts"],
|
|
4
|
+
"sourcesContent": ["import { App, AppJson } from '../../app.js';\nimport { Identifier, IdentifierMap, IntoId } from '../../identifier';\nimport { LocalizedText } from '../../localization/localization.js';\nimport { Omu } from '../../omu.js';\nimport { EndpointType } from '../endpoint/endpoint.js';\nimport { ExtensionType, type Extension } from '../extension.js';\nimport { Registry, RegistryType } from '../registry';\nimport { TableType, type Table } from '../table';\n\nexport const SERVER_EXTENSION_TYPE: ExtensionType<ServerExtension> = new ExtensionType(\n 'server',\n (omu: Omu) => new ServerExtension(omu),\n);\n\nexport interface AppIndexEntry {\n url: string;\n meta?: AppIndexRegistryMeta;\n added_at: string;\n};\n\nexport interface AppIndex {\n indexes: Record<string, AppIndexEntry>;\n};\n\nexport const SERVER_APPS_READ_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('apps', 'read');\nexport const SERVER_APPS_WRITE_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('apps', 'write');\nexport const SERVER_INDEX_READ_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('index', 'read');\nexport const SERVER_INDEX_REGISTRY_TYPE: RegistryType<AppIndex> = RegistryType.createJson<AppIndex>(SERVER_EXTENSION_TYPE, {\n name: 'index',\n defaultValue: { 'indexes': {} },\n permissions: {\n write: SERVER_APPS_WRITE_PERMISSION_ID,\n read: SERVER_INDEX_READ_PERMISSION_ID,\n },\n});\nconst APP_TABLE_TYPE = TableType.createJson(SERVER_EXTENSION_TYPE, {\n name: 'apps',\n serializer: App,\n key: (app) => app.id.key(),\n permissions: {\n all: SERVER_APPS_WRITE_PERMISSION_ID,\n read: SERVER_APPS_READ_PERMISSION_ID,\n },\n});\n\nexport const SERVER_SHUTDOWN_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('shutdown');\nconst SHUTDOWN_ENDPOINT_TYPE = EndpointType.createJson<boolean, boolean>(SERVER_EXTENSION_TYPE, {\n name: 'shutdown',\n permissionId: SERVER_SHUTDOWN_PERMISSION_ID,\n});\nexport const TRUSTED_ORIGINS_GET_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('trusted_origins', 'get');\nexport const TRUSTED_ORIGINS_SET_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('trusted_origins', 'set');\nconst TRUSTED_HOSTS_REGISTRY_TYPE = RegistryType.createJson<Record<string, string>>(SERVER_EXTENSION_TYPE, {\n name: 'trusted_hosts',\n defaultValue: {},\n permissions: {\n read: TRUSTED_ORIGINS_GET_PERMISSION_ID,\n write: TRUSTED_ORIGINS_SET_PERMISSION_ID,\n },\n});\n\nexport class ServerExtension implements Extension {\n public readonly type: ExtensionType<ServerExtension> = SERVER_EXTENSION_TYPE;\n public readonly apps: Table<App>;\n public readonly index: Registry<AppIndex>;\n public readonly trustedHosts: Registry<Record<string, string>>;\n\n constructor(private readonly omu: Omu) {\n this.apps = omu.tables.get(APP_TABLE_TYPE);\n this.index = omu.registries.get(SERVER_INDEX_REGISTRY_TYPE);\n this.trustedHosts = omu.registries.get(TRUSTED_HOSTS_REGISTRY_TYPE);\n }\n\n public async shutdown(restart?: boolean): Promise<boolean> {\n this.omu.endpoints.call(SHUTDOWN_ENDPOINT_TYPE, restart ?? false);\n await new Promise<void>((resolve) => {\n const unlisten = this.omu.network.event.disconnected.listen(() => {\n resolve();\n unlisten();\n });\n });\n return true;\n }\n}\n\nexport class SessionObserver {\n constructor(\n public readonly onConnectCallbacks: Array<(app: App) => Promise<void> | void>,\n public readonly onDisconnectCallbacks: Array<(app: App) => Promise<void> | void>,\n ) { }\n\n public onConnect(callback: (app: App) => Promise<void> | void): void {\n this.onConnectCallbacks.push(callback);\n }\n\n public onDisconnect(callback: (app: App) => Promise<void> | void): void {\n this.onDisconnectCallbacks.push(callback);\n }\n}\n\nexport type AppIndexRegistryMeta = {\n name: LocalizedText;\n note: LocalizedText;\n};\n\nexport interface AppIndexRegistryJSON {\n id: string;\n meta?: AppIndexRegistryMeta;\n apps: Record<string, AppJson>;\n}\n\nexport class AppIndexRegistry {\n constructor(\n public id: Identifier,\n public apps: IdentifierMap<App>,\n public meta: AppIndexRegistryMeta | undefined,\n ) { }\n\n public static build(options: { id: IntoId; meta: AppIndexRegistryMeta; apps: App[] }): AppIndexRegistry {\n return new AppIndexRegistry(\n Identifier.from(options.id),\n new IdentifierMap(options.apps.map((app) => [app.id, app])),\n options.meta,\n );\n }\n\n public static fromJSON(json: AppIndexRegistryJSON): AppIndexRegistry {\n const id = Identifier.fromKey(json['id']);\n const apps = new IdentifierMap<App>();\n for (const [idStr, appJSON] of Object.entries(json['apps'])) {\n const id = Identifier.fromKey(idStr);\n const app = App.deserialize(appJSON);\n if (!id.isNamespaceEqual(app.id)) {\n throw new Error(`App ID does not match the ID in the index. ${app.id} != ${id}`);\n }\n apps.set(id, app);\n }\n return new AppIndexRegistry(\n id,\n apps,\n json.meta,\n );\n }\n\n public toJSON(): AppIndexRegistryJSON {\n return {\n id: this.id.key(),\n meta: this.meta,\n apps: Object.fromEntries([...this.apps.entries()].map(([id, app]) => [\n id.key(),\n App.serialize(app),\n ])),\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["App", "Identifier", "IdentifierMap", "EndpointType", "ExtensionType", "RegistryType", "TableType", "SERVER_EXTENSION_TYPE", "omu", "ServerExtension", "SERVER_APPS_READ_PERMISSION_ID", "SERVER_APPS_WRITE_PERMISSION_ID", "SERVER_INDEX_READ_PERMISSION_ID", "SERVER_INDEX_REGISTRY_TYPE", "APP_TABLE_TYPE", "app", "SERVER_SHUTDOWN_PERMISSION_ID", "SHUTDOWN_ENDPOINT_TYPE", "TRUSTED_ORIGINS_GET_PERMISSION_ID", "TRUSTED_ORIGINS_SET_PERMISSION_ID", "TRUSTED_HOSTS_REGISTRY_TYPE", "restart", "resolve", "unlisten", "SessionObserver", "onConnectCallbacks", "onDisconnectCallbacks", "callback", "AppIndexRegistry", "id", "apps", "meta", "options", "json", "idStr", "appJSON"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { AppIndexRegistry, SERVER_APPS_READ_PERMISSION_ID, SERVER_SHUTDOWN_PERMISSION_ID, TRUSTED_ORIGINS_GET_PERMISSION_ID, TRUSTED_ORIGINS_SET_PERMISSION_ID, type AppIndex, type AppIndexEntry, type AppIndexRegistryJSON, } from './extension.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AppIndexRegistry as R,SERVER_APPS_READ_PERMISSION_ID as _,SERVER_SHUTDOWN_PERMISSION_ID as E,TRUSTED_ORIGINS_GET_PERMISSION_ID as p,TRUSTED_ORIGINS_SET_PERMISSION_ID as e}from"./extension.js";export{R as AppIndexRegistry,_ as SERVER_APPS_READ_PERMISSION_ID,E as SERVER_SHUTDOWN_PERMISSION_ID,p as TRUSTED_ORIGINS_GET_PERMISSION_ID,e as TRUSTED_ORIGINS_SET_PERMISSION_ID};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/server/index.ts"],
|
|
4
|
+
"sourcesContent": ["export {\n AppIndexRegistry,\n SERVER_APPS_READ_PERMISSION_ID,\n SERVER_SHUTDOWN_PERMISSION_ID,\n TRUSTED_ORIGINS_GET_PERMISSION_ID,\n TRUSTED_ORIGINS_SET_PERMISSION_ID,\n type AppIndex,\n type AppIndexEntry,\n type AppIndexRegistryJSON,\n} from './extension.js';\n\n"],
|
|
5
|
+
"mappings": "AAAA,OACI,oBAAAA,EACA,kCAAAC,EACA,iCAAAC,EACA,qCAAAC,EACA,qCAAAC,MAIG",
|
|
6
|
+
"names": ["AppIndexRegistry", "SERVER_APPS_READ_PERMISSION_ID", "SERVER_SHUTDOWN_PERMISSION_ID", "TRUSTED_ORIGINS_GET_PERMISSION_ID", "TRUSTED_ORIGINS_SET_PERMISSION_ID"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { App } from '../../app';
|
|
2
|
+
import { Identifier, IntoId } from '../../identifier';
|
|
3
|
+
import { Omu } from '../../omu';
|
|
4
|
+
import { SessionParam } from '../../token';
|
|
5
|
+
import { Extension, ExtensionType } from '../extension';
|
|
6
|
+
import { SessionObserver } from '../server/extension';
|
|
7
|
+
import { Table } from '../table';
|
|
8
|
+
export declare const SESSION_EXTENSION_TYPE: ExtensionType<SessionExtension>;
|
|
9
|
+
export declare const SESSIONS_READ_PERMISSION_ID: Identifier;
|
|
10
|
+
export type RequestRemoteAppResponse = {
|
|
11
|
+
type: 'success';
|
|
12
|
+
token: string;
|
|
13
|
+
lan_ip: string;
|
|
14
|
+
} | {
|
|
15
|
+
type: 'error';
|
|
16
|
+
message: string;
|
|
17
|
+
};
|
|
18
|
+
export declare const REMOTE_APP_REQUEST_PERMISSION_ID: Identifier;
|
|
19
|
+
export type GenerateTokenResponse = {
|
|
20
|
+
type: 'success';
|
|
21
|
+
token: string;
|
|
22
|
+
} | {
|
|
23
|
+
type: 'error';
|
|
24
|
+
message: string;
|
|
25
|
+
};
|
|
26
|
+
export declare const GENERATE_TOKEN_PERMISSION_ID: Identifier;
|
|
27
|
+
export declare class SessionExtension implements Extension {
|
|
28
|
+
private readonly omu;
|
|
29
|
+
readonly type: ExtensionType<SessionExtension>;
|
|
30
|
+
readonly sessions: Table<App>;
|
|
31
|
+
private readonly sessionObservers;
|
|
32
|
+
private readonly requiredApps;
|
|
33
|
+
constructor(omu: Omu);
|
|
34
|
+
has(id: IntoId): Promise<boolean>;
|
|
35
|
+
observe(appId: IntoId, options?: {
|
|
36
|
+
onConnect?(app: App): void;
|
|
37
|
+
onDisconnect?(app: App): void;
|
|
38
|
+
}): SessionObserver;
|
|
39
|
+
private handleSessionConnect;
|
|
40
|
+
private handleSessionDisconnect;
|
|
41
|
+
require(...appIds: IntoId[]): void;
|
|
42
|
+
private onTask;
|
|
43
|
+
private onReady;
|
|
44
|
+
requestRemoteApp(options: {
|
|
45
|
+
app: App;
|
|
46
|
+
permissions: IntoId[];
|
|
47
|
+
}): Promise<RequestRemoteAppResponse>;
|
|
48
|
+
generateToken(options: {
|
|
49
|
+
app: App;
|
|
50
|
+
permissions?: IntoId[];
|
|
51
|
+
}): Promise<SessionParam>;
|
|
52
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{App as t}from"../../app";import{Identifier as o,IdentifierMap as u,IdentifierSet as f}from"../../identifier";import{PacketType as p}from"../../network/packet";import{Serializer as m}from"../../serialize";import{EndpointType as d}from"../endpoint";import{ExtensionType as S}from"../extension";import{SessionObserver as I}from"../server/extension";import{TableType as T}from"../table";const r=new S("sessions",i=>new k(i)),A=r.join("read"),_=T.createJson(r,{name:"sessions",serializer:t,key:i=>i.id.key(),permissions:{read:A}}),E=p.createJson(r,{name:"require",serializer:m.of(o).toArray()}),c=p.createJson(r,{name:"observe",serializer:m.of(o).toArray()}),l=p.createJson(r,{name:"session_connected",serializer:t}),y=p.createJson(r,{name:"session_disconnected",serializer:t}),P=r.join("remote_app","request"),h=d.createJson(r,{name:"remote_app_request",permissionId:P}),R=r.join("generate_token"),b=d.createJson(r,{name:"generate_token",permissionId:R});class k{constructor(e){this.omu=e;e.network.registerPacket(E,c,l,y),e.network.addPacketHandler(l,s=>this.handleSessionConnect(s)),e.network.addPacketHandler(y,s=>this.handleSessionDisconnect(s)),this.sessions=e.tables.get(_),e.network.addTask(()=>this.onTask()),e.onReady(()=>this.onReady())}type=r;sessions;sessionObservers=new u;requiredApps=new f;async has(e){return await this.sessions.has(o.from(e).key())}observe(e,s){const n=o.from(e);this.omu.running&&this.omu.send(c,[n]);const a=this.sessionObservers.get(n)??new I([],[]);return s?.onConnect&&a.onConnect(s.onConnect),s?.onDisconnect&&a.onDisconnect(s.onDisconnect),this.sessionObservers.set(n,a),a}async handleSessionConnect(e){const s=this.sessionObservers.get(e.id);if(s)for(const n of s.onConnectCallbacks)await n(e)}async handleSessionDisconnect(e){const s=this.sessionObservers.get(e.id);if(s)for(const n of s.onDisconnectCallbacks)await n(e)}require(...e){if(this.omu.running)throw new Error("Cannot require apps after the client has started");for(const s of e)this.requiredApps.add(o.from(s))}async onTask(){this.requiredApps.size>0&&this.omu.send(E,Array.from(this.requiredApps.values()))}async onReady(){this.sessionObservers.size>0&&this.omu.send(c,Array.from(this.sessionObservers.keys()))}async requestRemoteApp(e){const{app:s}=e;if(!s.url)throw new Error("App must have a URL to request it remotely");if(s.type!=="remote")throw new Error("App must be a remote app to request it remotely");if(!s.metadata)throw new Error("App must have metadata to request it remotely");return this.omu.endpoints.call(h,{app:t.serialize(e.app),permissions:e.permissions.map(n=>o.from(n).key())})}async generateToken(e){const s=await this.omu.endpoints.call(b,{app:t.serialize(e.app),permissions:e.permissions?.map(n=>o.from(n).key())});if(s.type==="error")throw new Error(s.message);return{token:s.token,address:this.omu.address}}}export{R as GENERATE_TOKEN_PERMISSION_ID,P as REMOTE_APP_REQUEST_PERMISSION_ID,A as SESSIONS_READ_PERMISSION_ID,r as SESSION_EXTENSION_TYPE,k as SessionExtension};
|
|
2
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/session/extension.ts"],
|
|
4
|
+
"sourcesContent": ["import { App, AppJson } from '../../app';\nimport { Identifier, IdentifierMap, IdentifierSet, IntoId } from '../../identifier';\nimport { PacketType } from '../../network/packet';\nimport { Omu } from '../../omu';\nimport { Serializer } from '../../serialize';\nimport { SessionParam } from '../../token';\nimport { EndpointType } from '../endpoint';\nimport { Extension, ExtensionType } from '../extension';\nimport { SessionObserver } from '../server/extension';\nimport { Table, TableType } from '../table';\n\nexport const SESSION_EXTENSION_TYPE: ExtensionType<SessionExtension> = new ExtensionType('sessions', (omu: Omu) => new SessionExtension(omu));\n\nexport const SESSIONS_READ_PERMISSION_ID: Identifier = SESSION_EXTENSION_TYPE.join('read');\nconst SESSION_TABLE_TYPE = TableType.createJson(SESSION_EXTENSION_TYPE, {\n name: 'sessions',\n serializer: App,\n key: (app) => app.id.key(),\n permissions: {\n read: SESSIONS_READ_PERMISSION_ID,\n },\n});\nconst REQUIRE_APPS_PACKET_TYPE = PacketType.createJson<Identifier[]>(SESSION_EXTENSION_TYPE, {\n name: 'require',\n serializer: Serializer.of(Identifier).toArray(),\n});\nconst SESSION_OBSERVE_PACKET_TYPE = PacketType.createJson<Identifier[]>(SESSION_EXTENSION_TYPE, {\n name: 'observe',\n serializer: Serializer.of(Identifier).toArray(),\n});\nconst SESSION_CONNECTED_PACKET_TYPE = PacketType.createJson<App>(SESSION_EXTENSION_TYPE, {\n name: 'session_connected',\n serializer: App,\n});\nconst SESSION_DISCONNECTED_PACKET_TYPE = PacketType.createJson<App>(SESSION_EXTENSION_TYPE, {\n name: 'session_disconnected',\n serializer: App,\n});\n\ntype RemoteAppRequestPayload = {\n app: AppJson;\n permissions: string[];\n};\n\nexport type RequestRemoteAppResponse = {\n type: 'success';\n token: string;\n lan_ip: string;\n} | {\n type: 'error';\n message: string;\n};\n\nexport const REMOTE_APP_REQUEST_PERMISSION_ID: Identifier = SESSION_EXTENSION_TYPE.join('remote_app', 'request');\n\nconst REMOTE_APP_REQUEST_ENDPOINT_TYPE = EndpointType.createJson<RemoteAppRequestPayload, RequestRemoteAppResponse>(SESSION_EXTENSION_TYPE, {\n name: 'remote_app_request',\n permissionId: REMOTE_APP_REQUEST_PERMISSION_ID,\n});\n\nexport type GenerateTokenResponse = {\n type: 'success';\n token: string;\n} | {\n type: 'error';\n message: string;\n};\n\nexport const GENERATE_TOKEN_PERMISSION_ID: Identifier = SESSION_EXTENSION_TYPE.join('generate_token');\n\ntype GenerateTokenPayload = {\n app: AppJson;\n permissions: string[];\n};\n\nconst GENERATE_TOKEN_ENDPOINT_TYPE = EndpointType.createJson<GenerateTokenPayload, GenerateTokenResponse>(SESSION_EXTENSION_TYPE, {\n name: 'generate_token',\n permissionId: GENERATE_TOKEN_PERMISSION_ID,\n});\n\nexport class SessionExtension implements Extension {\n public readonly type: ExtensionType<SessionExtension> = SESSION_EXTENSION_TYPE;\n public readonly sessions: Table<App>;\n private readonly sessionObservers = new IdentifierMap<SessionObserver>();\n private readonly requiredApps = new IdentifierSet();\n\n constructor(private readonly omu: Omu) {\n omu.network.registerPacket(\n REQUIRE_APPS_PACKET_TYPE,\n SESSION_OBSERVE_PACKET_TYPE,\n SESSION_CONNECTED_PACKET_TYPE,\n SESSION_DISCONNECTED_PACKET_TYPE,\n );\n omu.network.addPacketHandler(\n SESSION_CONNECTED_PACKET_TYPE, (app) => this.handleSessionConnect(app),\n );\n omu.network.addPacketHandler(\n SESSION_DISCONNECTED_PACKET_TYPE, (app) => this.handleSessionDisconnect(app),\n );\n this.sessions = omu.tables.get(SESSION_TABLE_TYPE);\n omu.network.addTask(() => this.onTask());\n omu.onReady(() => this.onReady());\n }\n\n public async has(id: IntoId): Promise<boolean> {\n return await this.sessions.has(Identifier.from(id).key());\n }\n\n public observe(appId: IntoId, options?: {\n onConnect?(app: App): void;\n onDisconnect?(app: App): void;\n }): SessionObserver {\n const id = Identifier.from(appId);\n if (this.omu.running) {\n this.omu.send(SESSION_OBSERVE_PACKET_TYPE, [id]);\n }\n const observer = this.sessionObservers.get(id) ?? new SessionObserver([], []);\n if (options?.onConnect) {\n observer.onConnect(options.onConnect);\n }\n if (options?.onDisconnect) {\n observer.onDisconnect(options.onDisconnect);\n }\n this.sessionObservers.set(id, observer);\n return observer;\n }\n\n private async handleSessionConnect(app: App): Promise<void> {\n const observer = this.sessionObservers.get(app.id);\n if (!observer) {\n return;\n }\n for (const callback of observer.onConnectCallbacks) {\n await callback(app);\n }\n }\n\n private async handleSessionDisconnect(app: App): Promise<void> {\n const observer = this.sessionObservers.get(app.id);\n if (!observer) {\n return;\n }\n for (const callback of observer.onDisconnectCallbacks) {\n await callback(app);\n }\n }\n\n public require(...appIds: IntoId[]): void {\n if (this.omu.running) {\n throw new Error('Cannot require apps after the client has started');\n }\n for (const appId of appIds) {\n this.requiredApps.add(Identifier.from(appId));\n }\n }\n\n private async onTask(): Promise<void> {\n if (this.requiredApps.size > 0) {\n this.omu.send(REQUIRE_APPS_PACKET_TYPE, Array.from(this.requiredApps.values()));\n }\n }\n\n private async onReady(): Promise<void> {\n if (this.sessionObservers.size > 0) {\n this.omu.send(SESSION_OBSERVE_PACKET_TYPE, Array.from(this.sessionObservers.keys()));\n }\n }\n\n public async requestRemoteApp(options: {\n app: App;\n permissions: IntoId[];\n }): Promise<RequestRemoteAppResponse> {\n const { app } = options;\n if (!app.url) {\n throw new Error('App must have a URL to request it remotely');\n }\n if (app.type !== 'remote') {\n throw new Error('App must be a remote app to request it remotely');\n }\n if (!app.metadata) {\n throw new Error('App must have metadata to request it remotely');\n }\n return this.omu.endpoints.call(REMOTE_APP_REQUEST_ENDPOINT_TYPE, {\n app: App.serialize(options.app),\n permissions: options.permissions.map(id => Identifier.from(id).key()),\n });\n }\n\n public async generateToken(options: {\n app: App;\n permissions?: IntoId[];\n }): Promise<SessionParam> {\n const result = await this.omu.endpoints.call(GENERATE_TOKEN_ENDPOINT_TYPE, {\n app: App.serialize(options.app),\n permissions: options.permissions?.map(id => Identifier.from(id).key()),\n });\n if (result.type === 'error') {\n throw new Error(result.message);\n }\n return {\n token: result.token,\n address: this.omu.address,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["App", "Identifier", "IdentifierMap", "IdentifierSet", "PacketType", "Serializer", "EndpointType", "ExtensionType", "SessionObserver", "TableType", "SESSION_EXTENSION_TYPE", "omu", "SessionExtension", "SESSIONS_READ_PERMISSION_ID", "SESSION_TABLE_TYPE", "app", "REQUIRE_APPS_PACKET_TYPE", "SESSION_OBSERVE_PACKET_TYPE", "SESSION_CONNECTED_PACKET_TYPE", "SESSION_DISCONNECTED_PACKET_TYPE", "REMOTE_APP_REQUEST_PERMISSION_ID", "REMOTE_APP_REQUEST_ENDPOINT_TYPE", "GENERATE_TOKEN_PERMISSION_ID", "GENERATE_TOKEN_ENDPOINT_TYPE", "id", "appId", "options", "observer", "callback", "appIds", "result"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { GENERATE_TOKEN_PERMISSION_ID, REMOTE_APP_REQUEST_PERMISSION_ID, SESSION_EXTENSION_TYPE, SessionExtension, SESSIONS_READ_PERMISSION_ID, type RequestRemoteAppResponse, } from './extension';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{GENERATE_TOKEN_PERMISSION_ID as I,REMOTE_APP_REQUEST_PERMISSION_ID as _,SESSION_EXTENSION_TYPE as e,SessionExtension as R,SESSIONS_READ_PERMISSION_ID as N}from"./extension";export{I as GENERATE_TOKEN_PERMISSION_ID,_ as REMOTE_APP_REQUEST_PERMISSION_ID,N as SESSIONS_READ_PERMISSION_ID,e as SESSION_EXTENSION_TYPE,R as SessionExtension};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/session/index.ts"],
|
|
4
|
+
"sourcesContent": ["export {\n GENERATE_TOKEN_PERMISSION_ID, REMOTE_APP_REQUEST_PERMISSION_ID, SESSION_EXTENSION_TYPE,\n SessionExtension,\n SESSIONS_READ_PERMISSION_ID,\n type RequestRemoteAppResponse,\n} from './extension';\n\n"],
|
|
5
|
+
"mappings": "AAAA,OACI,gCAAAA,EAA8B,oCAAAC,EAAkC,0BAAAC,EAChE,oBAAAC,EACA,+BAAAC,MAEG",
|
|
6
|
+
"names": ["GENERATE_TOKEN_PERMISSION_ID", "REMOTE_APP_REQUEST_PERMISSION_ID", "SESSION_EXTENSION_TYPE", "SessionExtension", "SESSIONS_READ_PERMISSION_ID"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Omu } from '../../omu';
|
|
2
|
+
import { JsonType, Serializable } from '../../serialize';
|
|
3
|
+
import { ExtensionType, type Extension } from '../extension.js';
|
|
4
|
+
import { SignalType, type Signal } from './signal.js';
|
|
5
|
+
export declare const SIGNAL_EXTENSION_TYPE: ExtensionType<SignalExtension>;
|
|
6
|
+
export declare class SignalExtension implements Extension {
|
|
7
|
+
private readonly omu;
|
|
8
|
+
readonly type: ExtensionType<SignalExtension>;
|
|
9
|
+
private readonly signals;
|
|
10
|
+
constructor(omu: Omu);
|
|
11
|
+
private createSignal;
|
|
12
|
+
json<T, D extends JsonType = JsonType>(name: string, options?: {
|
|
13
|
+
serializer?: Serializable<T, D>;
|
|
14
|
+
}): Signal<T>;
|
|
15
|
+
serialized<T>(name: string, options: {
|
|
16
|
+
serializer: Serializable<T, Uint8Array>;
|
|
17
|
+
}): Signal<T>;
|
|
18
|
+
get<T>(signalType: SignalType<T>): Signal<T>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Identifier as c,IdentifierMap as T}from"../../identifier";import{PacketType as a}from"../../network/packet";import{ExtensionType as y}from"../extension.js";import{SignalPacket as S,SignalRegisterPacket as g}from"./packets.js";import{SignalType as l}from"./signal.js";const n=new y("signal",s=>new m(s)),p=a.createJson(n,{name:"register",serializer:g}),d=a.createJson(n,{name:"listen",serializer:c}),o=a.createSerialized(n,{name:"notify",serializer:S});class m{constructor(e){this.omu=e;e.network.registerPacket(p,d,o)}type=n;signals=new T;createSignal(e){if(this.signals.has(e.id))throw new Error(`Signal for key ${e.id} already created`);return new h(this.omu,e)}json(e,t){const i=this.omu.app.id.base.join(e),r=l.createJson(i,{name:e,serializer:t?.serializer});return this.createSignal(r)}serialized(e,t){const i=this.omu.app.id.base.join(e),r=l.createSerialized(i,{name:e,serializer:t?.serializer});return this.createSignal(r)}get(e){return this.createSignal(e)}}class h{constructor(e,t){this.omu=e;this.type=t;e.network.addPacketHandler(o,i=>this.handleBroadcast(i)),e.network.addTask(()=>this.onTask())}listeners=[];listening=!1;notify(e){const t=this.type.serializer.serialize(e);this.omu.send(o,{id:this.type.id,body:t});for(const i of this.listeners)i(e)}listen(e){return this.listening||(this.omu.onReady(()=>{this.omu.send(d,this.type.id)}),this.listening=!0),this.listeners.push(e),()=>{this.listeners.splice(this.listeners.indexOf(e),1)}}handleBroadcast(e){if(!e.id.isEqual(this.type.id))return;const t=this.type.serializer.deserialize(e.body);for(const i of this.listeners)i(t)}onTask(){this.type.id.isSubpathOf(this.omu.app.id)&&this.omu.send(p,{id:this.type.id,permissions:this.type.permissions})}}export{n as SIGNAL_EXTENSION_TYPE,m as SignalExtension};
|
|
2
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/signal/extension.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Unlisten } from '../../event';\nimport { Identifier, IdentifierMap } from '../../identifier';\nimport { PacketType } from '../../network/packet';\nimport { Omu } from '../../omu';\nimport { JsonType, Serializable } from '../../serialize';\nimport { ExtensionType, type Extension } from '../extension.js';\nimport { SignalPacket, SignalRegisterPacket } from './packets.js';\nimport { SignalType, type Signal } from './signal.js';\n\nexport const SIGNAL_EXTENSION_TYPE: ExtensionType<SignalExtension> = new ExtensionType(\n 'signal',\n (omu: Omu) => new SignalExtension(omu),\n);\n\nconst SIGNAL_REGISTER_PACKET = PacketType.createJson<SignalRegisterPacket>(SIGNAL_EXTENSION_TYPE, {\n name: 'register',\n serializer: SignalRegisterPacket,\n});\nconst SIGNAL_LISTEN_PACKET = PacketType.createJson<Identifier>(SIGNAL_EXTENSION_TYPE, {\n name: 'listen',\n serializer: Identifier,\n});\nconst SIGNAL_NOTIFY_PACKET = PacketType.createSerialized<SignalPacket>(SIGNAL_EXTENSION_TYPE, {\n name: 'notify',\n serializer: SignalPacket,\n});\n\nexport class SignalExtension implements Extension {\n public readonly type: ExtensionType<SignalExtension> = SIGNAL_EXTENSION_TYPE;\n private readonly signals = new IdentifierMap<SignalType<unknown>>();\n\n constructor(private readonly omu: Omu) {\n omu.network.registerPacket(\n SIGNAL_REGISTER_PACKET,\n SIGNAL_LISTEN_PACKET,\n SIGNAL_NOTIFY_PACKET,\n );\n }\n\n private createSignal<T>(signalType: SignalType<T>): Signal<T> {\n if (this.signals.has(signalType.id)) {\n throw new Error(`Signal for key ${signalType.id} already created`);\n }\n return new SignalImpl(this.omu, signalType);\n }\n\n public json<T, D extends JsonType = JsonType>(name: string, options?: { serializer?: Serializable<T, D> }): Signal<T> {\n const id = this.omu.app.id.base.join(name);\n const type = SignalType.createJson<T>(id, {\n name,\n serializer: options?.serializer,\n });\n return this.createSignal(type);\n }\n\n public serialized<T>(name: string, options: { serializer: Serializable<T, Uint8Array> }): Signal<T> {\n const id = this.omu.app.id.base.join(name);\n const type = SignalType.createSerialized<T>(id, {\n name,\n serializer: options?.serializer,\n });\n return this.createSignal(type);\n }\n\n public get<T>(signalType: SignalType<T>): Signal<T> {\n return this.createSignal(signalType);\n }\n}\n\nclass SignalImpl<T> implements Signal<T> {\n private readonly listeners: ((value: T) => void)[] = [];\n private listening = false;\n\n constructor(\n private readonly omu: Omu,\n private readonly type: SignalType<T>,\n ) {\n omu.network.addPacketHandler(SIGNAL_NOTIFY_PACKET, (data) => this.handleBroadcast(data));\n omu.network.addTask(() => this.onTask());\n }\n\n public notify(body: T): void {\n const data = this.type.serializer.serialize(body);\n this.omu.send(SIGNAL_NOTIFY_PACKET, {\n id: this.type.id,\n body: data,\n });\n for (const listener of this.listeners) {\n listener(body);\n }\n }\n\n public listen(handler: (value: T) => void): Unlisten {\n if (!this.listening) {\n this.omu.onReady(() => {\n this.omu.send(SIGNAL_LISTEN_PACKET, this.type.id);\n });\n this.listening = true;\n }\n this.listeners.push(handler);\n return () => {\n this.listeners.splice(this.listeners.indexOf(handler), 1);\n };\n }\n\n private handleBroadcast(data: SignalPacket): void {\n if (!data.id.isEqual(this.type.id)) {\n return;\n }\n const body = this.type.serializer.deserialize(data.body);\n for (const listener of this.listeners) {\n listener(body);\n }\n }\n\n private onTask(): void {\n if (!this.type.id.isSubpathOf(this.omu.app.id)) {\n return;\n }\n this.omu.send(SIGNAL_REGISTER_PACKET, {\n id: this.type.id,\n permissions: this.type.permissions,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,OAAS,cAAAA,EAAY,iBAAAC,MAAqB,mBAC1C,OAAS,cAAAC,MAAkB,uBAG3B,OAAS,iBAAAC,MAAqC,kBAC9C,OAAS,gBAAAC,EAAc,wBAAAC,MAA4B,eACnD,OAAS,cAAAC,MAA+B,cAEjC,MAAMC,EAAwD,IAAIJ,EACrE,SACCK,GAAa,IAAIC,EAAgBD,CAAG,CACzC,EAEME,EAAyBR,EAAW,WAAiCK,EAAuB,CAC9F,KAAM,WACN,WAAYF,CAChB,CAAC,EACKM,EAAuBT,EAAW,WAAuBK,EAAuB,CAClF,KAAM,SACN,WAAYP,CAChB,CAAC,EACKY,EAAuBV,EAAW,iBAA+BK,EAAuB,CAC1F,KAAM,SACN,WAAYH,CAChB,CAAC,EAEM,MAAMK,CAAqC,CAI9C,YAA6BD,EAAU,CAAV,SAAAA,EACzBA,EAAI,QAAQ,eACRE,EACAC,EACAC,CACJ,CACJ,CATgB,KAAuCL,EACtC,QAAU,IAAIN,EAUvB,aAAgBY,EAAsC,CAC1D,GAAI,KAAK,QAAQ,IAAIA,EAAW,EAAE,EAC9B,MAAM,IAAI,MAAM,kBAAkBA,EAAW,EAAE,kBAAkB,EAErE,OAAO,IAAIC,EAAW,KAAK,IAAKD,CAAU,CAC9C,CAEO,KAAuCE,EAAcC,EAA0D,CAClH,MAAMC,EAAK,KAAK,IAAI,IAAI,GAAG,KAAK,KAAKF,CAAI,EACnCG,EAAOZ,EAAW,WAAcW,EAAI,CACtC,KAAAF,EACA,WAAYC,GAAS,UACzB,CAAC,EACD,OAAO,KAAK,aAAaE,CAAI,CACjC,CAEO,WAAcH,EAAcC,EAAiE,CAChG,MAAMC,EAAK,KAAK,IAAI,IAAI,GAAG,KAAK,KAAKF,CAAI,EACnCG,EAAOZ,EAAW,iBAAoBW,EAAI,CAC5C,KAAAF,EACA,WAAYC,GAAS,UACzB,CAAC,EACD,OAAO,KAAK,aAAaE,CAAI,CACjC,CAEO,IAAOL,EAAsC,CAChD,OAAO,KAAK,aAAaA,CAAU,CACvC,CACJ,CAEA,MAAMC,CAAmC,CAIrC,YACqBN,EACAU,EACnB,CAFmB,SAAAV,EACA,UAAAU,EAEjBV,EAAI,QAAQ,iBAAiBI,EAAuBO,GAAS,KAAK,gBAAgBA,CAAI,CAAC,EACvFX,EAAI,QAAQ,QAAQ,IAAM,KAAK,OAAO,CAAC,CAC3C,CATiB,UAAoC,CAAC,EAC9C,UAAY,GAUb,OAAOY,EAAe,CACzB,MAAMD,EAAO,KAAK,KAAK,WAAW,UAAUC,CAAI,EAChD,KAAK,IAAI,KAAKR,EAAsB,CAChC,GAAI,KAAK,KAAK,GACd,KAAMO,CACV,CAAC,EACD,UAAWE,KAAY,KAAK,UACxBA,EAASD,CAAI,CAErB,CAEO,OAAOE,EAAuC,CACjD,OAAK,KAAK,YACN,KAAK,IAAI,QAAQ,IAAM,CACnB,KAAK,IAAI,KAAKX,EAAsB,KAAK,KAAK,EAAE,CACpD,CAAC,EACD,KAAK,UAAY,IAErB,KAAK,UAAU,KAAKW,CAAO,EACpB,IAAM,CACT,KAAK,UAAU,OAAO,KAAK,UAAU,QAAQA,CAAO,EAAG,CAAC,CAC5D,CACJ,CAEQ,gBAAgBH,EAA0B,CAC9C,GAAI,CAACA,EAAK,GAAG,QAAQ,KAAK,KAAK,EAAE,EAC7B,OAEJ,MAAMC,EAAO,KAAK,KAAK,WAAW,YAAYD,EAAK,IAAI,EACvD,UAAWE,KAAY,KAAK,UACxBA,EAASD,CAAI,CAErB,CAEQ,QAAe,CACd,KAAK,KAAK,GAAG,YAAY,KAAK,IAAI,IAAI,EAAE,GAG7C,KAAK,IAAI,KAAKV,EAAwB,CAClC,GAAI,KAAK,KAAK,GACd,YAAa,KAAK,KAAK,WAC3B,CAAC,CACL,CACJ",
|
|
6
|
+
"names": ["Identifier", "IdentifierMap", "PacketType", "ExtensionType", "SignalPacket", "SignalRegisterPacket", "SignalType", "SIGNAL_EXTENSION_TYPE", "omu", "SignalExtension", "SIGNAL_REGISTER_PACKET", "SIGNAL_LISTEN_PACKET", "SIGNAL_NOTIFY_PACKET", "signalType", "SignalImpl", "name", "options", "id", "type", "data", "body", "listener", "handler"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SignalType, type Signal, type SignalPermissions } from './signal.js';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Identifier } from '../../identifier';
|
|
2
|
+
import { SignalPermissions, SignalPermissionsJSON } from './signal.js';
|
|
3
|
+
export declare class SignalPacket {
|
|
4
|
+
readonly id: Identifier;
|
|
5
|
+
readonly body: Uint8Array;
|
|
6
|
+
constructor(id: Identifier, body: Uint8Array);
|
|
7
|
+
static serialize(packet: SignalPacket): Uint8Array;
|
|
8
|
+
static deserialize(data: Uint8Array): SignalPacket;
|
|
9
|
+
}
|
|
10
|
+
interface SignalRegisterPacketJSON {
|
|
11
|
+
id: string;
|
|
12
|
+
permissions: SignalPermissionsJSON;
|
|
13
|
+
}
|
|
14
|
+
export declare class SignalRegisterPacket {
|
|
15
|
+
readonly id: Identifier;
|
|
16
|
+
readonly permissions: SignalPermissions;
|
|
17
|
+
constructor(id: Identifier, permissions: SignalPermissions);
|
|
18
|
+
static serialize(packet: SignalRegisterPacket): SignalRegisterPacketJSON;
|
|
19
|
+
static deserialize(data: SignalRegisterPacketJSON): SignalRegisterPacket;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Identifier as r}from"../../identifier";import{ByteReader as a,ByteWriter as o}from"../../serialize";class n{constructor(i,e){this.id=i;this.body=e}static serialize(i){const e=new o;return e.writeString(i.id.key()),e.writeUint8Array(i.body),e.finish()}static deserialize(i){const e=a.fromUint8Array(i),t=r.fromKey(e.readString()),l=e.readUint8Array();return new n(t,l)}}class s{constructor(i,e){this.id=i;this.permissions=e}static serialize(i){const{permissions:e}=i;return{id:i.id.key(),permissions:{all:e.all?r.from(e.all).key():void 0,listen:e.listen?r.from(e.listen).key():void 0,send:e.send?r.from(e.send).key():void 0}}}static deserialize(i){const{permissions:e}=i;return new s(r.fromKey(i.id),{all:e.all?r.fromKey(e.all):void 0,listen:e.listen?r.fromKey(e.listen):void 0,send:e.send?r.fromKey(e.send):void 0})}}export{n as SignalPacket,s as SignalRegisterPacket};
|
|
2
|
+
//# sourceMappingURL=packets.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/signal/packets.ts"],
|
|
4
|
+
"sourcesContent": ["import { Identifier } from '../../identifier';\nimport { ByteReader, ByteWriter } from '../../serialize';\n\nimport { SignalPermissions, SignalPermissionsJSON } from './signal.js';\n\nexport class SignalPacket {\n constructor(\n public readonly id: Identifier,\n public readonly body: Uint8Array,\n ) { }\n\n public static serialize(packet: SignalPacket): Uint8Array {\n const writer = new ByteWriter();\n writer.writeString(packet.id.key());\n writer.writeUint8Array(packet.body);\n return writer.finish();\n }\n\n public static deserialize(data: Uint8Array): SignalPacket {\n const reader = ByteReader.fromUint8Array(data);\n const id = Identifier.fromKey(reader.readString());\n const body = reader.readUint8Array();\n return new SignalPacket(id, body);\n }\n}\n\ninterface SignalRegisterPacketJSON {\n id: string;\n permissions: SignalPermissionsJSON;\n}\n\nexport class SignalRegisterPacket {\n constructor(\n public readonly id: Identifier,\n public readonly permissions: SignalPermissions,\n ) {}\n\n public static serialize(packet: SignalRegisterPacket): SignalRegisterPacketJSON {\n const { permissions: perms } = packet;\n return {\n id: packet.id.key(),\n permissions: {\n all: perms.all ? Identifier.from(perms.all).key() : undefined,\n listen: perms.listen ? Identifier.from(perms.listen).key() : undefined,\n send: perms.send ? Identifier.from(perms.send).key() : undefined,\n },\n };\n }\n\n public static deserialize(data: SignalRegisterPacketJSON): SignalRegisterPacket {\n const { permissions: perms } = data;\n return new SignalRegisterPacket(\n Identifier.fromKey(data.id),\n {\n all: perms.all ? Identifier.fromKey(perms.all) : undefined,\n listen: perms.listen ? Identifier.fromKey(perms.listen) : undefined,\n send: perms.send ? Identifier.fromKey(perms.send) : undefined,\n },\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,cAAAA,MAAkB,mBAC3B,OAAS,cAAAC,EAAY,cAAAC,MAAkB,kBAIhC,MAAMC,CAAa,CACtB,YACoBC,EACAC,EAClB,CAFkB,QAAAD,EACA,UAAAC,CAChB,CAEJ,OAAc,UAAUC,EAAkC,CACtD,MAAMC,EAAS,IAAIL,EACnB,OAAAK,EAAO,YAAYD,EAAO,GAAG,IAAI,CAAC,EAClCC,EAAO,gBAAgBD,EAAO,IAAI,EAC3BC,EAAO,OAAO,CACzB,CAEA,OAAc,YAAYC,EAAgC,CACtD,MAAMC,EAASR,EAAW,eAAeO,CAAI,EACvCJ,EAAKJ,EAAW,QAAQS,EAAO,WAAW,CAAC,EAC3CJ,EAAOI,EAAO,eAAe,EACnC,OAAO,IAAIN,EAAaC,EAAIC,CAAI,CACpC,CACJ,CAOO,MAAMK,CAAqB,CAC9B,YACoBN,EACAO,EAClB,CAFkB,QAAAP,EACA,iBAAAO,CACjB,CAEH,OAAc,UAAUL,EAAwD,CAC5E,KAAM,CAAE,YAAaM,CAAM,EAAIN,EAC/B,MAAO,CACH,GAAIA,EAAO,GAAG,IAAI,EAClB,YAAa,CACT,IAAKM,EAAM,IAAMZ,EAAW,KAAKY,EAAM,GAAG,EAAE,IAAI,EAAI,OACpD,OAAQA,EAAM,OAASZ,EAAW,KAAKY,EAAM,MAAM,EAAE,IAAI,EAAI,OAC7D,KAAMA,EAAM,KAAOZ,EAAW,KAAKY,EAAM,IAAI,EAAE,IAAI,EAAI,MAC3D,CACJ,CACJ,CAEA,OAAc,YAAYJ,EAAsD,CAC5E,KAAM,CAAE,YAAaI,CAAM,EAAIJ,EAC/B,OAAO,IAAIE,EACPV,EAAW,QAAQQ,EAAK,EAAE,EAC1B,CACI,IAAKI,EAAM,IAAMZ,EAAW,QAAQY,EAAM,GAAG,EAAI,OACjD,OAAQA,EAAM,OAASZ,EAAW,QAAQY,EAAM,MAAM,EAAI,OAC1D,KAAMA,EAAM,KAAOZ,EAAW,QAAQY,EAAM,IAAI,EAAI,MACxD,CACJ,CACJ,CACJ",
|
|
6
|
+
"names": ["Identifier", "ByteReader", "ByteWriter", "SignalPacket", "id", "body", "packet", "writer", "data", "reader", "SignalRegisterPacket", "permissions", "perms"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Unlisten } from '../../event';
|
|
2
|
+
import { Identifier, IntoId } from '../../identifier';
|
|
3
|
+
import type { Serializable } from '../../serialize';
|
|
4
|
+
export interface SignalPermissionsJSON {
|
|
5
|
+
all?: string;
|
|
6
|
+
listen?: string;
|
|
7
|
+
send?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SignalPermissions {
|
|
10
|
+
all?: IntoId | undefined;
|
|
11
|
+
listen?: IntoId | undefined;
|
|
12
|
+
send?: IntoId | undefined;
|
|
13
|
+
}
|
|
14
|
+
export declare class SignalType<T> {
|
|
15
|
+
readonly id: Identifier;
|
|
16
|
+
readonly serializer: Serializable<T, Uint8Array>;
|
|
17
|
+
readonly permissions: SignalPermissions;
|
|
18
|
+
constructor(id: Identifier, serializer: Serializable<T, Uint8Array>, permissions: SignalPermissions);
|
|
19
|
+
static createJson<T>(identifier: IntoId, { name, serializer, permissions }: {
|
|
20
|
+
name: string;
|
|
21
|
+
serializer?: Serializable<T, any>;
|
|
22
|
+
permissions?: SignalPermissions;
|
|
23
|
+
}): SignalType<T>;
|
|
24
|
+
static createSerialized<T>(identifier: IntoId, { name, serializer, permissions }: {
|
|
25
|
+
name: string;
|
|
26
|
+
serializer: Serializable<T, Uint8Array>;
|
|
27
|
+
permissions?: SignalPermissions;
|
|
28
|
+
}): SignalType<T>;
|
|
29
|
+
}
|
|
30
|
+
export interface Signal<T> {
|
|
31
|
+
listen(handler: (value: T) => void): Unlisten;
|
|
32
|
+
notify(body: T): void;
|
|
33
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Identifier as t}from"../../identifier";import{Serializer as o}from"../../serialize";class s{constructor(i,e,n){this.id=i;this.serializer=e;this.permissions=n}static createJson(i,{name:e,serializer:n,permissions:r}){return new s(t.from(i).join(e),o.of(n??o.noop()).toJson(),r??{})}static createSerialized(i,{name:e,serializer:n,permissions:r}){return new s(t.from(i).join(e),n,r??{})}}export{s as SignalType};
|
|
2
|
+
//# sourceMappingURL=signal.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/signal/signal.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Unlisten } from '../../event';\nimport { Identifier, IntoId } from '../../identifier';\nimport type { Serializable } from '../../serialize';\nimport { Serializer } from '../../serialize';\n\nexport interface SignalPermissionsJSON {\n all?: string;\n listen?: string;\n send?: string;\n}\n\nexport interface SignalPermissions {\n all?: IntoId | undefined;\n listen?: IntoId | undefined;\n send?: IntoId | undefined;\n}\n\nexport class SignalType<T> {\n constructor(\n public readonly id: Identifier,\n public readonly serializer: Serializable<T, Uint8Array>,\n public readonly permissions: SignalPermissions,\n ) {}\n\n static createJson<T>(\n identifier: IntoId,\n {\n name,\n serializer,\n permissions,\n }: {\n name: string;\n serializer?: Serializable<T, any>;\n permissions?: SignalPermissions;\n },\n ): SignalType<T> {\n return new SignalType(\n Identifier.from(identifier).join(name),\n Serializer.of<T, any>(serializer ?? Serializer.noop()).toJson(),\n permissions ?? {},\n );\n }\n\n static createSerialized<T>(\n identifier: IntoId,\n {\n name,\n serializer,\n permissions,\n }: {\n name: string;\n serializer: Serializable<T, Uint8Array>;\n permissions?: SignalPermissions;\n },\n ): SignalType<T> {\n return new SignalType(\n Identifier.from(identifier).join(name),\n serializer,\n permissions ?? {},\n );\n }\n}\n\nexport interface Signal<T> {\n listen(handler: (value: T) => void): Unlisten;\n notify(body: T): void;\n}\n"],
|
|
5
|
+
"mappings": "AACA,OAAS,cAAAA,MAA0B,mBAEnC,OAAS,cAAAC,MAAkB,kBAcpB,MAAMC,CAAc,CACvB,YACoBC,EACAC,EACAC,EAClB,CAHkB,QAAAF,EACA,gBAAAC,EACA,iBAAAC,CACjB,CAEH,OAAO,WACHC,EACA,CACI,KAAAC,EACA,WAAAH,EACA,YAAAC,CACJ,EAKa,CACb,OAAO,IAAIH,EACPF,EAAW,KAAKM,CAAU,EAAE,KAAKC,CAAI,EACrCN,EAAW,GAAWG,GAAcH,EAAW,KAAK,CAAC,EAAE,OAAO,EAC9DI,GAAe,CAAC,CACpB,CACJ,CAEA,OAAO,iBACHC,EACA,CACI,KAAAC,EACA,WAAAH,EACA,YAAAC,CACJ,EAKa,CACb,OAAO,IAAIH,EACPF,EAAW,KAAKM,CAAU,EAAE,KAAKC,CAAI,EACrCH,EACAC,GAAe,CAAC,CACpB,CACJ,CACJ",
|
|
6
|
+
"names": ["Identifier", "Serializer", "SignalType", "id", "serializer", "permissions", "identifier", "name"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Identifier } from '../../identifier';
|
|
2
|
+
import { Omu } from '../../omu';
|
|
3
|
+
import type { JsonType, Serializable } from '../../serialize';
|
|
4
|
+
import type { Extension } from '../extension.js';
|
|
5
|
+
import { ExtensionType } from '../extension.js';
|
|
6
|
+
import type { Table } from './table.js';
|
|
7
|
+
import { TableType } from './table.js';
|
|
8
|
+
export declare const TABLE_EXTENSION_TYPE: ExtensionType<TableExtension>;
|
|
9
|
+
export declare const TABLE_PERMISSION_ID: Identifier;
|
|
10
|
+
export declare class TableExtension implements Extension {
|
|
11
|
+
private readonly omu;
|
|
12
|
+
readonly type: ExtensionType<TableExtension>;
|
|
13
|
+
private readonly tableMap;
|
|
14
|
+
constructor(omu: Omu);
|
|
15
|
+
private createTable;
|
|
16
|
+
json<T, D extends JsonType = JsonType>(name: string, options: {
|
|
17
|
+
key: (item: T) => string;
|
|
18
|
+
serializer?: Serializable<T, D>;
|
|
19
|
+
}): Table<T>;
|
|
20
|
+
serialized<T>(name: string, options: {
|
|
21
|
+
key: (item: T) => string;
|
|
22
|
+
serializer: Serializable<T, Uint8Array>;
|
|
23
|
+
}): Table<T>;
|
|
24
|
+
get<T>(type: TableType<T>): Table<T>;
|
|
25
|
+
has(identifier: Identifier): boolean;
|
|
26
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{EventEmitter as m}from"../../event";import{Identifier as I,IdentifierMap as x}from"../../identifier";import{PacketType as o}from"../../network/packet/packet.js";import{Serializer as h}from"../../serialize";import{EndpointType as l}from"../endpoint/endpoint.js";import{ExtensionType as C}from"../extension.js";import{SetConfigPacket as L,SetPermissionPacket as N,TableFetchPacket as _,TableFetchRangePacket as O,TableItemsPacket as d,TableKeysPacket as p,TablePacket as u,TableProxyPacket as B}from"./packets.js";import{TableType as g}from"./table.js";const r=new C("table",T=>new H(T)),c=r.join("permission"),R=o.createSerialized(r,{name:"set_permission",serializer:N}),S=o.createSerialized(r,{name:"set_config",serializer:L}),k=o.createJson(r,{name:"listen",serializer:I}),v=o.createJson(r,{name:"proxy_listen",serializer:I}),b=o.createSerialized(r,{name:"proxy",serializer:B}),f=o.createSerialized(r,{name:"item_add",serializer:d}),E=o.createSerialized(r,{name:"item_update",serializer:d}),z=o.createSerialized(r,{name:"item_remove",serializer:d}),M=l.createSerialized(r,{name:"item_get",requestSerializer:p,responseSerializer:d,permissionId:c}),w=l.createSerialized(r,{name:"item_has",requestSerializer:p,responseSerializer:h.json(),permissionId:c}),j=l.createSerialized(r,{name:"item_has_all",requestSerializer:p,responseSerializer:h.json(),permissionId:c}),K=l.createSerialized(r,{name:"item_has_any",requestSerializer:p,responseSerializer:h.json(),permissionId:c}),q=l.createSerialized(r,{name:"fetch",requestSerializer:_,responseSerializer:d,permissionId:c}),D=l.createSerialized(r,{name:"fetch_range",requestSerializer:O,responseSerializer:d,permissionId:c}),U=l.createSerialized(r,{name:"fetch_all",requestSerializer:u,responseSerializer:d,permissionId:c}),F=l.createSerialized(r,{name:"size",requestSerializer:u,responseSerializer:h.json(),permissionId:c}),P=o.createSerialized(r,{name:"clear",serializer:u});class H{constructor(e){this.omu=e;e.network.registerPacket(R,S,k,v,b,f,E,z,P)}type=r;tableMap=new x;createTable(e){if(this.omu.permissions.require(c),this.has(e.id))throw new Error("Table already exists");const i=new J(this.omu,e);return this.tableMap.set(e.id,i),i}json(e,i){const t=new g(this.omu.app.id.base.join(e),h.pipe(i.serializer??h.noop(),h.json()),i.key);return this.createTable(t)}serialized(e,i){const t=new g(this.omu.app.id.base.join(e),i.serializer,i.key);return this.createTable(t)}get(e){return this.has(e.id)?this.tableMap.get(e.id):this.createTable(e)}has(e){return this.tableMap.has(e)}}class J{constructor(e,i){this.omu=e;this.id=i.id,this.serializer=i.serializer,this.keyFunction=i.keyFunction,this.cache=new Map,this.event={add:new m,update:new m,remove:new m,clear:new m,cacheUpdate:new m},this.promiseMap=new Map,this.proxies=[],this.listening=!1,e.network.addPacketHandler(b,t=>{if(!t.id.isEqual(this.id))return;let s=this.deserializeItems(t.items);this.proxies.forEach(a=>{s=new Map([...s.entries()].map(([n,A])=>{const y=a(A);if(y!==void 0)return[n,y]}).filter(n=>typeof n<"u"))}),e.send(b,{id:this.id,key:t.key,items:Object.fromEntries([...s.entries()].map(([a,n])=>[a,this.serializer.serialize(n)]))})}),e.network.addPacketHandler(f,t=>{if(!t.id.isEqual(this.id))return;const s=this.deserializeItems(t.items);this.updateCache(s),this.event.add.emit(s)}),e.network.addPacketHandler(E,t=>{if(!t.id.isEqual(this.id))return;const s=this.deserializeItems(t.items);this.updateCache(s),this.event.update.emit(s)}),e.network.addPacketHandler(z,t=>{if(!t.id.isEqual(this.id))return;const s=this.deserializeItems(t.items);s.forEach((a,n)=>{this.cache.delete(n)}),this.event.remove.emit(s),this.event.cacheUpdate.emit(this.cache)}),e.network.addPacketHandler(P,t=>{t.id.isEqual(this.id)&&(this.cache=new Map,this.event.clear.emit(),this.event.cacheUpdate.emit(this.cache))}),e.event.ready.listen(()=>this.onReady())}cache;event;promiseMap;proxies;id;serializer;keyFunction;listening;cacheSize;config;permissions;updateCache(e){if(!this.cacheSize)this.cache=e;else{const i=new Map([...this.cache,...e].slice(-this.cacheSize));this.cache=i}this.event.cacheUpdate.emit(this.cache)}listen(e){return this.listening||(this.omu.onReady(()=>{this.omu.send(k,this.id)}),this.listening=!0),e?this.event.cacheUpdate.listen(e):()=>{}}proxy(e){if(this.proxies.length===0){let i=()=>{};i=this.omu.onReady(()=>{if(this.proxies.length===0){i();return}this.omu.send(v,this.id)})}return this.proxies.push(e),()=>{this.proxies.splice(this.proxies.indexOf(e),1)}}onReady(){this.config&&this.omu.send(S,{id:this.id,config:this.config})}async get(e){if(this.cache.has(e))return this.cache.get(e);if(this.promiseMap.has(e))return await this.promiseMap.get(e);const i=this.omu.endpoints.call(M,{id:this.id,keys:[e]}).then(t=>{const s=this.deserializeItems(t.items);return this.updateCache(s),this.cache.get(e)});return this.promiseMap.set(e,i),await i.then(t=>(this.promiseMap.delete(e),t))}async getMany(...e){const i=e.filter(a=>!this.cache.has(a)).filter(a=>!this.promiseMap.has(a));if(i.length===0)return new Map([...this.cache].filter(([a])=>e.includes(a)));const t=this.omu.endpoints.call(M,{id:this.id,keys:i}).then(a=>{const n=this.deserializeItems(a.items);return this.updateCache(n),n});for(const a of i)this.promiseMap.set(a,t.then(n=>n.get(a)));const s=await t;for(const a of i)this.promiseMap.delete(a);return new Map([...this.cache,...s].filter(([a])=>e.includes(a)))}async add(...e){const i=this.serializeItems(e);this.omu.send(f,{id:this.id,items:i})}async update(...e){const i=this.serializeItems(e);this.omu.send(E,{id:this.id,items:i})}async remove(...e){const i=this.serializeItems(e),t=Object.keys(i);this.cache=new Map([...this.cache].filter(([s])=>!t.includes(s))),this.omu.send(z,{id:this.id,items:i})}async clear(){this.omu.send(P,{id:this.id})}async has(e){return this.cache.has(e)?!0:(await this.omu.endpoints.call(w,{id:this.id,keys:[e]}))[e]??!1}async hasMany(...e){return await this.omu.endpoints.call(w,{id:this.id,keys:e})}async hasAll(...e){return await this.omu.endpoints.call(j,{id:this.id,keys:e})}async hasAny(...e){return await this.omu.endpoints.call(K,{id:this.id,keys:e})}async fetchItems({limit:e,backward:i,cursor:t}){const s=await this.omu.endpoints.call(q,new _(this.id,e,i,t)),a=this.deserializeItems(s.items);return this.updateCache(a),a}async fetchRange({start:e,end:i}){const t=await this.omu.endpoints.call(D,{id:this.id,start:e,end:i}),s=this.deserializeItems(t.items);return this.updateCache(s),s}async fetchAll(){const e=await this.omu.endpoints.call(U,{id:this.id}),i=this.deserializeItems(e.items);return this.updateCache(i),i}async*iterate({backward:e,cursor:i}){for(;;){const t=await this.fetchItems({limit:this.cacheSize??100,backward:e,cursor:i});if(t.size===0)break;yield*t.values(),i!==void 0&&t.delete(i);const s=e?t.values().next().value:[...t.values()].pop();if(!s)break;i=this.keyFunction(s)}}async size(){return await this.omu.endpoints.call(F,{id:this.id})}deserializeItems(e){return new Map(Object.entries(e).map(([i,t])=>{const s=this.serializer.deserialize(t);return this.cache.set(i,s),[i,s]}))}serializeItems(e){return Object.fromEntries(e.map(i=>[this.keyFunction(i),this.serializer.serialize(i)]))}setCacheSize(e){this.cacheSize=e}setConfig(e){if(this.omu.running)throw new Error("Cannot set config after client has started");this.config=e}setPermissions(e){this.permissions=e}}export{r as TABLE_EXTENSION_TYPE,c as TABLE_PERMISSION_ID,H as TableExtension};
|
|
2
|
+
//# sourceMappingURL=extension.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/table/extension.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Unlisten } from '../../event';\nimport { EventEmitter } from '../../event';\nimport { Identifier, IdentifierMap } from '../../identifier';\nimport { PacketType } from '../../network/packet/packet.js';\nimport { Omu } from '../../omu';\nimport type { JsonType, Serializable } from '../../serialize';\nimport { Serializer } from '../../serialize';\nimport { EndpointType } from '../endpoint/endpoint.js';\nimport type { Extension } from '../extension.js';\nimport { ExtensionType } from '../extension.js';\n\nimport {\n SetConfigPacket,\n SetPermissionPacket,\n TableFetchPacket,\n TableFetchRangePacket,\n TableItemsPacket,\n TableKeysPacket,\n TablePacket,\n TableProxyPacket,\n} from './packets.js';\nimport type { Table, TableConfig, TableEvents, TablePermissions } from './table.js';\nimport { TableType } from './table.js';\n\nexport const TABLE_EXTENSION_TYPE: ExtensionType<TableExtension> = new ExtensionType(\n 'table',\n (client) => new TableExtension(client),\n);\nexport const TABLE_PERMISSION_ID: Identifier = TABLE_EXTENSION_TYPE.join('permission');\n\nconst TABLE_SET_PERMISSION_PACKET = PacketType.createSerialized<SetPermissionPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_permission',\n serializer: SetPermissionPacket,\n});\nconst TABLE_SET_CONFIG_PACKET = PacketType.createSerialized<SetConfigPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_config',\n serializer: SetConfigPacket,\n});\nconst TABLE_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'proxy_listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_PACKET = PacketType.createSerialized<TableProxyPacket>(TABLE_EXTENSION_TYPE, {\n name: 'proxy',\n serializer: TableProxyPacket,\n});\nconst TABLE_ITEM_ADD_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_add',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_UPDATE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_update',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_REMOVE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_remove',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_GET_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_get',\n requestSerializer: TableKeysPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, Record<string, boolean>>(TABLE_EXTENSION_TYPE, {\n name: 'item_has',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ALL_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_all',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ANY_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_any',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ENDPOINT = EndpointType.createSerialized<TableFetchPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch',\n requestSerializer: TableFetchPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_RANGE_ENDPOINT = EndpointType.createSerialized<TableFetchRangePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_range',\n requestSerializer: TableFetchRangePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ALL_ENDPOINT = EndpointType.createSerialized<TablePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_all',\n requestSerializer: TablePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_SIZE_ENDPOINT = EndpointType.createSerialized<TablePacket, number>(TABLE_EXTENSION_TYPE, {\n name: 'size',\n requestSerializer: TablePacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_CLEAR_PACKET = PacketType.createSerialized<TablePacket>(TABLE_EXTENSION_TYPE, {\n name: 'clear',\n serializer: TablePacket,\n});\n\nexport class TableExtension implements Extension {\n public readonly type: ExtensionType<TableExtension> = TABLE_EXTENSION_TYPE;\n private readonly tableMap = new IdentifierMap<Table<unknown>>();\n\n constructor(private readonly omu: Omu) {\n omu.network.registerPacket(\n TABLE_SET_PERMISSION_PACKET,\n TABLE_SET_CONFIG_PACKET,\n TABLE_LISTEN_PACKET,\n TABLE_PROXY_LISTEN_PACKET,\n TABLE_PROXY_PACKET,\n TABLE_ITEM_ADD_PACKET,\n TABLE_ITEM_UPDATE_PACKET,\n TABLE_ITEM_REMOVE_PACKET,\n TABLE_ITEM_CLEAR_PACKET,\n );\n }\n\n private createTable<T>(tableType: TableType<T>): Table<T> {\n this.omu.permissions.require(TABLE_PERMISSION_ID);\n if (this.has(tableType.id)) {\n throw new Error('Table already exists');\n }\n const table = new TableImpl<T>(this.omu, tableType);\n this.tableMap.set(tableType.id, table as Table<unknown>);\n return table;\n }\n\n public json<T, D extends JsonType = JsonType>(name: string, options: { key: (item: T) => string; serializer?: Serializable<T, D> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n Serializer.pipe<T, JsonType, Uint8Array>(options.serializer ?? Serializer.noop(), Serializer.json()),\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public serialized<T>(name: string, options: { key: (item: T) => string; serializer: Serializable<T, Uint8Array> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n options.serializer,\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public get<T>(type: TableType<T>): Table<T> {\n if (this.has(type.id)) {\n return this.tableMap.get(type.id) as Table<T>;\n }\n return this.createTable(type);\n }\n\n public has(identifier: Identifier): boolean {\n return this.tableMap.has(identifier);\n }\n}\n\nclass TableImpl<T> implements Table<T> {\n public cache: Map<string, T>;\n public readonly event: TableEvents<T>;\n private readonly promiseMap: Map<string, Promise<T | undefined>>;\n private readonly proxies: Array<(item: T) => T | undefined>;\n private id: Identifier;\n private serializer: Serializable<T, Uint8Array>;\n private keyFunction: (item: T) => string;\n private listening: boolean;\n private cacheSize?: number;\n private config?: TableConfig;\n private permissions?: TablePermissions;\n\n constructor(\n private readonly omu: Omu,\n tableType: TableType<T>,\n ) {\n this.id = tableType.id;\n this.serializer = tableType.serializer;\n this.keyFunction = tableType.keyFunction;\n this.cache = new Map();\n this.event = {\n add: new EventEmitter<[Map<string, T>]>(),\n update: new EventEmitter<[Map<string, T>]>(),\n remove: new EventEmitter<[Map<string, T>]>(),\n clear: new EventEmitter<[]>(),\n cacheUpdate: new EventEmitter<[Map<string, T>]>(),\n };\n this.promiseMap = new Map();\n this.proxies = [];\n this.listening = false;\n\n omu.network.addPacketHandler(TABLE_PROXY_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n let items = this.deserializeItems(packet.items);\n this.proxies.forEach((proxy) => {\n items = new Map(\n [...items.entries()]\n .map(([key, item]) => {\n const proxyItem = proxy(item);\n if (proxyItem !== undefined) {\n return [key, proxyItem as T];\n }\n return undefined;\n })\n .filter((item): item is [string, T] => {\n return typeof item !== 'undefined';\n }),\n );\n });\n omu.send(TABLE_PROXY_PACKET, {\n id: this.id,\n key: packet.key,\n items: Object.fromEntries(\n [...items.entries()].map(([key, item]) => {\n return [key, this.serializer.serialize(item)];\n }),\n ),\n });\n });\n omu.network.addPacketHandler(TABLE_ITEM_ADD_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.add.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_UPDATE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.update.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_REMOVE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n items.forEach((_, key) => {\n this.cache.delete(key);\n });\n this.event.remove.emit(items);\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.network.addPacketHandler(TABLE_ITEM_CLEAR_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n this.cache = new Map();\n this.event.clear.emit();\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.event.ready.listen(() => this.onReady());\n }\n\n private updateCache(items: Map<string, T>): void {\n if (!this.cacheSize) {\n this.cache = items;\n } else {\n const cache = new Map([...this.cache, ...items].slice(-this.cacheSize));\n this.cache = cache;\n }\n this.event.cacheUpdate.emit(this.cache);\n }\n\n public listen(listener?: (items: Map<string, T>) => void): Unlisten {\n if (!this.listening) {\n this.omu.onReady(() => {\n this.omu.send(TABLE_LISTEN_PACKET, this.id);\n });\n this.listening = true;\n }\n if (listener) {\n return this.event.cacheUpdate.listen(listener);\n }\n return () => {};\n }\n\n public proxy(callback: (item: T) => T | undefined): Unlisten {\n if (this.proxies.length === 0) {\n let cancel = (): void => {};\n cancel = this.omu.onReady(() => {\n if (this.proxies.length === 0) {\n cancel();\n return;\n }\n this.omu.send(TABLE_PROXY_LISTEN_PACKET, this.id);\n });\n }\n this.proxies.push(callback);\n return () => {\n this.proxies.splice(this.proxies.indexOf(callback), 1);\n };\n }\n\n private onReady(): void {\n if (this.config) {\n this.omu.send(TABLE_SET_CONFIG_PACKET, {\n id: this.id,\n config: this.config,\n });\n }\n }\n\n public async get(key: string): Promise<T | undefined> {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n if (this.promiseMap.has(key)) {\n return await this.promiseMap.get(key);\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: [key],\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return this.cache.get(key);\n });\n this.promiseMap.set(key, promise);\n return await promise.then((item) => {\n this.promiseMap.delete(key);\n return item;\n });\n }\n\n public async getMany(...keys: string[]): Promise<Map<string, T>> {\n const filteredKeys = keys\n .filter((key) => !this.cache.has(key))\n .filter((key) => !this.promiseMap.has(key));\n if (filteredKeys.length === 0) {\n return new Map([...this.cache].filter(([key]) => keys.includes(key)));\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: filteredKeys,\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n });\n for (const key of filteredKeys) {\n this.promiseMap.set(\n key,\n promise.then((items) => items.get(key)),\n );\n }\n const items = await promise;\n for (const key of filteredKeys) {\n this.promiseMap.delete(key);\n }\n return new Map([...this.cache, ...items].filter(([key]) => keys.includes(key)));\n }\n\n public async add(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_ADD_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async update(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_UPDATE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async remove(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n const keys = Object.keys(data);\n this.cache = new Map([...this.cache].filter(([key]) => !keys.includes(key)));\n this.omu.send(TABLE_ITEM_REMOVE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async clear(): Promise<void> {\n this.omu.send(TABLE_ITEM_CLEAR_PACKET, {\n id: this.id,\n });\n }\n\n public async has(key: string): Promise<boolean> {\n if (this.cache.has(key)) {\n return true;\n }\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: [key],\n });\n return res[key] ?? false;\n }\n\n public async hasMany<T extends Record<string, unknown>>(...keys: (keyof T)[]): Promise<{ [key in keyof T]: boolean }> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: keys,\n });\n return res as { [key in keyof T]: boolean };\n }\n\n public async hasAll(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ALL_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async hasAny(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ANY_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async fetchItems({\n limit,\n backward,\n cursor,\n }: {\n limit: number;\n backward?: boolean;\n cursor?: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(\n TABLE_FETCH_ENDPOINT,\n new TableFetchPacket(this.id, limit, backward, cursor),\n );\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchRange({\n start,\n end,\n }: {\n start: string;\n end: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_RANGE_ENDPOINT, {\n id: this.id,\n start,\n end,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchAll(): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_ALL_ENDPOINT, {\n id: this.id,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async *iterate({\n backward,\n cursor,\n }: {\n backward?: boolean;\n cursor?: string;\n }): AsyncIterable<T> {\n while (true) {\n const items = await this.fetchItems({\n limit: this.cacheSize ?? 100,\n backward,\n cursor,\n });\n if (items.size === 0) {\n break;\n }\n yield* items.values();\n if (cursor !== undefined) {\n items.delete(cursor);\n }\n const cursorItem = backward ? items.values().next().value : [...items.values()].pop();\n if (!cursorItem) {\n break;\n }\n cursor = this.keyFunction(cursorItem);\n }\n }\n\n public async size(): Promise<number> {\n return await this.omu.endpoints.call(TABLE_SIZE_ENDPOINT, {\n id: this.id,\n });\n }\n\n private deserializeItems(items: Record<string, Uint8Array>): Map<string, T> {\n return new Map(\n Object.entries(items).map(([key, data]) => {\n const item = this.serializer.deserialize(data);\n this.cache.set(key, item);\n return [key, item];\n }),\n );\n }\n\n private serializeItems(items: T[]): Record<string, Uint8Array> {\n return Object.fromEntries(\n items.map((item) => {\n return [this.keyFunction(item), this.serializer.serialize(item)];\n }),\n );\n }\n\n public setCacheSize(size: number): void {\n this.cacheSize = size;\n }\n\n public setConfig(config: TableConfig): void {\n if (this.omu.running) {\n throw new Error('Cannot set config after client has started');\n }\n this.config = config;\n }\n\n public setPermissions(permissions: TablePermissions): void {\n this.permissions = permissions;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["EventEmitter", "Identifier", "IdentifierMap", "PacketType", "Serializer", "EndpointType", "ExtensionType", "SetConfigPacket", "SetPermissionPacket", "TableFetchPacket", "TableFetchRangePacket", "TableItemsPacket", "TableKeysPacket", "TablePacket", "TableProxyPacket", "TableType", "TABLE_EXTENSION_TYPE", "client", "TableExtension", "TABLE_PERMISSION_ID", "TABLE_SET_PERMISSION_PACKET", "TABLE_SET_CONFIG_PACKET", "TABLE_LISTEN_PACKET", "TABLE_PROXY_LISTEN_PACKET", "TABLE_PROXY_PACKET", "TABLE_ITEM_ADD_PACKET", "TABLE_ITEM_UPDATE_PACKET", "TABLE_ITEM_REMOVE_PACKET", "TABLE_ITEM_GET_ENDPOINT", "TABLE_ITEM_HAS_ENDPOINT", "TABLE_ITEM_HAS_ALL_ENDPOINT", "TABLE_ITEM_HAS_ANY_ENDPOINT", "TABLE_FETCH_ENDPOINT", "TABLE_FETCH_RANGE_ENDPOINT", "TABLE_FETCH_ALL_ENDPOINT", "TABLE_SIZE_ENDPOINT", "TABLE_ITEM_CLEAR_PACKET", "omu", "tableType", "table", "TableImpl", "name", "options", "type", "identifier", "packet", "items", "proxy", "key", "item", "proxyItem", "_", "cache", "listener", "callback", "cancel", "promise", "res", "keys", "filteredKeys", "data", "limit", "backward", "cursor", "start", "end", "cursorItem", "size", "config", "permissions"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/table/index.ts"],
|
|
4
|
+
"sourcesContent": ["export { TABLE_PERMISSION_ID } from './extension.js';\nexport { TableType, type Table, type TableConfig } from './table.js';\n\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,uBAAAA,MAA2B,iBACpC,OAAS,aAAAC,MAA+C",
|
|
6
|
+
"names": ["TABLE_PERMISSION_ID", "TableType"]
|
|
7
|
+
}
|