@omujs/omu 0.10.0 → 0.10.2
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/api/dashboard/apps.d.ts +25 -0
- package/dist/api/dashboard/apps.js +2 -0
- package/dist/api/dashboard/apps.js.map +7 -0
- package/dist/api/dashboard/constants.d.ts +59 -0
- package/dist/api/dashboard/constants.js +2 -0
- package/dist/api/dashboard/constants.js.map +7 -0
- package/dist/api/dashboard/dragdrop.d.ts +78 -0
- package/dist/api/dashboard/dragdrop.js +2 -0
- package/dist/api/dashboard/dragdrop.js.map +7 -0
- package/dist/api/dashboard/extension.d.ts +8 -164
- package/dist/api/dashboard/extension.js +1 -1
- package/dist/api/dashboard/extension.js.map +3 -3
- package/dist/api/dashboard/handler.d.ts +6 -2
- package/dist/api/dashboard/index.d.ts +5 -2
- package/dist/api/dashboard/index.js +1 -1
- package/dist/api/dashboard/index.js.map +3 -3
- package/dist/api/dashboard/packets.d.ts +48 -59
- package/dist/api/dashboard/packets.js +1 -1
- package/dist/api/dashboard/packets.js.map +3 -3
- package/dist/api/dashboard/prompt.d.ts +0 -0
- package/dist/api/dashboard/prompt.js +1 -0
- package/dist/api/dashboard/prompt.js.map +7 -0
- package/dist/api/dashboard/webview.d.ts +101 -0
- package/dist/api/dashboard/webview.js +2 -0
- package/dist/api/dashboard/webview.js.map +7 -0
- package/dist/api/table/extension.js +1 -1
- package/dist/api/table/extension.js.map +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { DASHBOARD_APP_INSTALL_PERMISSION_ID, DASHBOARD_OPEN_APP_PERMISSION_ID, } from './apps.js';
|
|
2
|
+
export { DASHBOARD_DRAG_DROP_PERMISSION_ID, DASHBOARD_SET_PERMISSION_ID, DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID, type HostRequest, type SpeechRecognitionStart, type TranscriptSegment, type TranscriptStatus, type UserResponse, } from './constants.js';
|
|
3
|
+
export { type PortProcess, type PromptRequest, type PromptRequestAppInstall, type PromptRequestAppPermissions, type PromptRequestAppPlugins, type PromptRequestAppUpdate, type PromptRequestHttpPort, type PromptRequestIndexInstall, type PromptResult, } from './packets.js';
|
|
4
|
+
export { CookieList, DASHBOARD_WEBVIEW_PERMISSION_ID, type Cookie, type GetCookiesRequest, type WebviewEvent, type WebviewHandle, type WebviewPacket, type WebviewRequest, } from './webview.js';
|
|
5
|
+
export { DragDropReadResponse, type DragDropFile, type DragDropReadRequest, type DragDropRequestDashboard, type FileData, } from './dragdrop.js';
|
|
2
6
|
export type { DashboardHandler } from './handler';
|
|
3
|
-
export { DragDropReadResponse, type DragDropFile, type DragDropReadRequest, type DragDropRequestDashboard, type FileData, } from './packets.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{DASHBOARD_APP_INSTALL_PERMISSION_ID as p,DASHBOARD_OPEN_APP_PERMISSION_ID as r}from"./apps.js";import{DASHBOARD_DRAG_DROP_PERMISSION_ID as s,DASHBOARD_SET_PERMISSION_ID as R,DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID as D}from"./constants.js";import{CookieList as I,DASHBOARD_WEBVIEW_PERMISSION_ID as S}from"./webview.js";import{DragDropReadResponse as _}from"./dragdrop.js";export{I as CookieList,p as DASHBOARD_APP_INSTALL_PERMISSION_ID,s as DASHBOARD_DRAG_DROP_PERMISSION_ID,r as DASHBOARD_OPEN_APP_PERMISSION_ID,R as DASHBOARD_SET_PERMISSION_ID,D as DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,S as DASHBOARD_WEBVIEW_PERMISSION_ID,_ as DragDropReadResponse};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api/dashboard/index.ts"],
|
|
4
|
-
"sourcesContent": ["export {\n
|
|
5
|
-
"mappings": "AAAA,OACI,
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["export {\n DASHBOARD_APP_INSTALL_PERMISSION_ID,\n DASHBOARD_OPEN_APP_PERMISSION_ID,\n} from './apps.js';\nexport {\n DASHBOARD_DRAG_DROP_PERMISSION_ID,\n DASHBOARD_SET_PERMISSION_ID,\n DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n type HostRequest,\n type SpeechRecognitionStart,\n type TranscriptSegment,\n type TranscriptStatus,\n type UserResponse,\n} from './constants.js';\nexport {\n type PortProcess,\n type PromptRequest,\n type PromptRequestAppInstall,\n type PromptRequestAppPermissions,\n type PromptRequestAppPlugins,\n type PromptRequestAppUpdate,\n type PromptRequestHttpPort,\n type PromptRequestIndexInstall,\n type PromptResult,\n} from './packets.js';\nexport {\n CookieList,\n DASHBOARD_WEBVIEW_PERMISSION_ID,\n type Cookie,\n type GetCookiesRequest,\n type WebviewEvent,\n type WebviewHandle,\n type WebviewPacket,\n type WebviewRequest,\n} from './webview.js';\n\nexport {\n DragDropReadResponse,\n type DragDropFile,\n type DragDropReadRequest,\n type DragDropRequestDashboard,\n type FileData,\n} from './dragdrop.js';\n\nexport type { DashboardHandler } from './handler';\n"],
|
|
5
|
+
"mappings": "AAAA,OACI,uCAAAA,EACA,oCAAAC,MACG,YACP,OACI,qCAAAC,EACA,+BAAAC,EACA,8CAAAC,MAMG,iBAYP,OACI,cAAAC,EACA,mCAAAC,MAOG,eAEP,OACI,wBAAAC,MAKG",
|
|
6
|
+
"names": ["DASHBOARD_APP_INSTALL_PERMISSION_ID", "DASHBOARD_OPEN_APP_PERMISSION_ID", "DASHBOARD_DRAG_DROP_PERMISSION_ID", "DASHBOARD_SET_PERMISSION_ID", "DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID", "CookieList", "DASHBOARD_WEBVIEW_PERMISSION_ID", "DragDropReadResponse"]
|
|
7
7
|
}
|
|
@@ -1,63 +1,52 @@
|
|
|
1
|
-
import { App } from '../../app.js';
|
|
1
|
+
import { App, AppJson } from '../../app.js';
|
|
2
|
+
import { PacketType } from '../../network/packet/packet.js';
|
|
3
|
+
import { PermissionTypeJson } from '../permission/permission.js';
|
|
4
|
+
import { PackageInfo } from '../plugin/package-info.js';
|
|
5
|
+
import { AppIndexRegistryMeta } from '../server/extension.js';
|
|
2
6
|
export type AppInstallResponse = {
|
|
3
7
|
accepted: boolean;
|
|
4
8
|
};
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
export declare const DASHBOARD_OPEN_APP_PACKET: PacketType<App>;
|
|
10
|
+
export interface PromptRequestBase<T extends string> {
|
|
11
|
+
kind: T;
|
|
12
|
+
id: string;
|
|
13
|
+
}
|
|
14
|
+
export interface PromptRequestAppPermissions extends PromptRequestBase<'app/permissions'> {
|
|
15
|
+
app: AppJson;
|
|
16
|
+
permissions: PermissionTypeJson[];
|
|
17
|
+
}
|
|
18
|
+
export interface PromptRequestAppPlugins extends PromptRequestBase<'app/plugins'> {
|
|
19
|
+
app: AppJson;
|
|
20
|
+
packages: PackageInfo[];
|
|
21
|
+
}
|
|
22
|
+
export interface PromptRequestAppInstall extends PromptRequestBase<'app/install'> {
|
|
23
|
+
app: AppJson;
|
|
24
|
+
dependencies: Record<string, AppJson>;
|
|
25
|
+
}
|
|
26
|
+
export interface PromptRequestAppUpdate extends PromptRequestBase<'app/update'> {
|
|
27
|
+
old_app: AppJson;
|
|
28
|
+
new_app: AppJson;
|
|
29
|
+
dependencies: Record<string, AppJson>;
|
|
30
|
+
}
|
|
31
|
+
export interface PromptRequestIndexInstall extends PromptRequestBase<'index/install'> {
|
|
32
|
+
index_url: string;
|
|
33
|
+
meta?: AppIndexRegistryMeta;
|
|
34
|
+
}
|
|
35
|
+
export interface PortProcess {
|
|
36
|
+
port: number;
|
|
8
37
|
name: string;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
25
|
-
export type DragDrop = {
|
|
26
|
-
type: 'drop';
|
|
27
|
-
drag_id: string;
|
|
28
|
-
position: DragDropPosition;
|
|
29
|
-
files: DragDropFile[];
|
|
30
|
-
};
|
|
31
|
-
export type DragLeave = {
|
|
32
|
-
type: 'leave';
|
|
33
|
-
drag_id: string;
|
|
34
|
-
};
|
|
35
|
-
export type DragState = DragEnter | DragOver | DragDrop | DragLeave;
|
|
36
|
-
export type FileDragPacket = {
|
|
37
|
-
drag_id: string;
|
|
38
|
-
app: App;
|
|
39
|
-
state: DragState;
|
|
40
|
-
};
|
|
41
|
-
export type DragDropReadRequest = {
|
|
42
|
-
drag_id: string;
|
|
43
|
-
};
|
|
44
|
-
export type DragDropReadMeta = {
|
|
45
|
-
drag_id: string;
|
|
46
|
-
files: readonly DragDropFile[];
|
|
47
|
-
};
|
|
48
|
-
export type FileData = {
|
|
49
|
-
file: DragDropFile;
|
|
50
|
-
buffer: Uint8Array;
|
|
51
|
-
};
|
|
52
|
-
export declare class DragDropReadResponse {
|
|
53
|
-
readonly meta: DragDropReadMeta;
|
|
54
|
-
readonly files: Record<string, FileData>;
|
|
55
|
-
readonly version: number;
|
|
56
|
-
constructor(meta: DragDropReadMeta, files: Record<string, FileData>, version?: number);
|
|
57
|
-
static serialize(data: DragDropReadResponse): Uint8Array;
|
|
58
|
-
static deserialize(data: Uint8Array): DragDropReadResponse;
|
|
59
|
-
}
|
|
60
|
-
export type DragDropRequestDashboard = object;
|
|
61
|
-
export type DragDropRequestResponse = {
|
|
62
|
-
ok: boolean;
|
|
63
|
-
};
|
|
38
|
+
exe: string;
|
|
39
|
+
}
|
|
40
|
+
export interface PromptRequestHttpPort extends PromptRequestBase<'http/port'> {
|
|
41
|
+
app: AppJson;
|
|
42
|
+
processes: PortProcess[];
|
|
43
|
+
}
|
|
44
|
+
export type PromptResult = 'accept' | 'deny' | 'block';
|
|
45
|
+
export interface PromptResponse {
|
|
46
|
+
id: string;
|
|
47
|
+
kind: string;
|
|
48
|
+
result: PromptResult;
|
|
49
|
+
}
|
|
50
|
+
export type PromptRequest = (PromptRequestAppPermissions | PromptRequestAppPlugins | PromptRequestAppInstall | PromptRequestAppUpdate | PromptRequestIndexInstall | PromptRequestHttpPort);
|
|
51
|
+
export declare const DASHBOARD_PROMPT_REQUEST: PacketType<PromptRequest>;
|
|
52
|
+
export declare const DASHBOARD_PROMPT_RESPONSE: PacketType<PromptResponse>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{App as t}from"../../app.js";import{PacketType as e}from"../../network/packet/packet.js";import{DASHBOARD_EXTENSION_TYPE as p}from"./constants.js";const A=e.createJson(p,{name:"open_app",serializer:t}),u=e.createJson(p,{name:"prompt_request"}),d=e.createJson(p,{name:"prompt_response"});export{A as DASHBOARD_OPEN_APP_PACKET,u as DASHBOARD_PROMPT_REQUEST,d as DASHBOARD_PROMPT_RESPONSE};
|
|
2
2
|
//# sourceMappingURL=packets.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api/dashboard/packets.ts"],
|
|
4
|
-
"sourcesContent": ["import { App } from '../../app.js';\nimport {
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["import { App, AppJson } from '../../app.js';\nimport { PacketType } from '../../network/packet/packet.js';\nimport { PermissionTypeJson } from '../permission/permission.js';\nimport { PackageInfo } from '../plugin/package-info.js';\nimport { AppIndexRegistryMeta } from '../server/extension.js';\nimport { DASHBOARD_EXTENSION_TYPE } from './constants.js';\n\nexport type AppInstallResponse = {\n accepted: boolean;\n};\n\nexport const DASHBOARD_OPEN_APP_PACKET: PacketType<App> = PacketType.createJson<App>(DASHBOARD_EXTENSION_TYPE, {\n name: 'open_app',\n serializer: App,\n});\nexport interface PromptRequestBase<T extends string> {\n kind: T;\n id: string;\n}\n\nexport interface PromptRequestAppPermissions extends PromptRequestBase<'app/permissions'> {\n app: AppJson;\n permissions: PermissionTypeJson[];\n}\n\nexport interface PromptRequestAppPlugins extends PromptRequestBase<'app/plugins'> {\n app: AppJson;\n packages: PackageInfo[];\n}\n\nexport interface PromptRequestAppInstall extends PromptRequestBase<'app/install'> {\n app: AppJson;\n dependencies: Record<string, AppJson>;\n}\n\nexport interface PromptRequestAppUpdate extends PromptRequestBase<'app/update'> {\n old_app: AppJson;\n new_app: AppJson;\n dependencies: Record<string, AppJson>;\n}\n\nexport interface PromptRequestIndexInstall extends PromptRequestBase<'index/install'> {\n index_url: string;\n meta?: AppIndexRegistryMeta;\n}\n\nexport interface PortProcess {\n port: number;\n name: string;\n exe: string;\n}\n\nexport interface PromptRequestHttpPort extends PromptRequestBase<'http/port'> {\n app: AppJson;\n processes: PortProcess[];\n}\n\nexport type PromptResult = 'accept' | 'deny' | 'block';\n\nexport interface PromptResponse {\n id: string;\n kind: string;\n result: PromptResult;\n}\n\nexport type PromptRequest = (\n PromptRequestAppPermissions\n | PromptRequestAppPlugins\n | PromptRequestAppInstall\n | PromptRequestAppUpdate\n | PromptRequestIndexInstall\n | PromptRequestHttpPort\n);\n\nexport const DASHBOARD_PROMPT_REQUEST: PacketType<PromptRequest> = PacketType.createJson<PromptRequest>(DASHBOARD_EXTENSION_TYPE, {\n name: 'prompt_request',\n});\nexport const DASHBOARD_PROMPT_RESPONSE: PacketType<PromptResponse> = PacketType.createJson<PromptResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'prompt_response',\n});\n\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,OAAAA,MAAoB,eAC7B,OAAS,cAAAC,MAAkB,iCAI3B,OAAS,4BAAAC,MAAgC,iBAMlC,MAAMC,EAA6CF,EAAW,WAAgBC,EAA0B,CAC3G,KAAM,WACN,WAAYF,CAChB,CAAC,EA4DYI,EAAsDH,EAAW,WAA0BC,EAA0B,CAC9H,KAAM,gBACV,CAAC,EACYG,EAAwDJ,EAAW,WAA2BC,EAA0B,CACjI,KAAM,iBACV,CAAC",
|
|
6
|
+
"names": ["App", "PacketType", "DASHBOARD_EXTENSION_TYPE", "DASHBOARD_OPEN_APP_PACKET", "DASHBOARD_PROMPT_REQUEST", "DASHBOARD_PROMPT_RESPONSE"]
|
|
7
7
|
}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Identifier } from '../../identifier';
|
|
2
|
+
import { PacketType } from '../../network/packet';
|
|
3
|
+
import { Omu } from '../../omu';
|
|
4
|
+
import { PromiseResult } from '../../result';
|
|
5
|
+
import { Table } from '../table';
|
|
6
|
+
import { AllowedHost, UserError, UserResponse } from './constants';
|
|
7
|
+
import { DashboardHandler } from './handler';
|
|
8
|
+
export type Cookie = {
|
|
9
|
+
name: string;
|
|
10
|
+
value: string;
|
|
11
|
+
};
|
|
12
|
+
export declare class CookieList extends Array<Cookie> {
|
|
13
|
+
toString(): string;
|
|
14
|
+
}
|
|
15
|
+
export type WebviewEvent = {
|
|
16
|
+
type: 'closed';
|
|
17
|
+
} | {
|
|
18
|
+
type: 'resize';
|
|
19
|
+
dimensions: {
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
};
|
|
23
|
+
} | {
|
|
24
|
+
type: 'cookie';
|
|
25
|
+
cookies: Cookie[];
|
|
26
|
+
} | {
|
|
27
|
+
type: 'message';
|
|
28
|
+
data: any;
|
|
29
|
+
};
|
|
30
|
+
export type WebviewEventPacket = {
|
|
31
|
+
id: Identifier;
|
|
32
|
+
target: Identifier;
|
|
33
|
+
event: WebviewEvent;
|
|
34
|
+
};
|
|
35
|
+
export declare const DASHBOARD_WEBVIEW_EVENT_PACKET: PacketType<WebviewEventPacket>;
|
|
36
|
+
export type WebviewPacket = {
|
|
37
|
+
id: string;
|
|
38
|
+
};
|
|
39
|
+
export type WebviewResponse = UserResponse<WebviewPacket>;
|
|
40
|
+
export type GetCookiesRequest = {
|
|
41
|
+
url: string;
|
|
42
|
+
};
|
|
43
|
+
export type WebviewRequest = {
|
|
44
|
+
url: string;
|
|
45
|
+
script?: string;
|
|
46
|
+
center?: boolean;
|
|
47
|
+
position?: {
|
|
48
|
+
x: number;
|
|
49
|
+
y: number;
|
|
50
|
+
};
|
|
51
|
+
inner_size?: {
|
|
52
|
+
x: number;
|
|
53
|
+
y: number;
|
|
54
|
+
};
|
|
55
|
+
min_inner_size?: {
|
|
56
|
+
x: number;
|
|
57
|
+
y: number;
|
|
58
|
+
};
|
|
59
|
+
max_inner_size?: {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
};
|
|
63
|
+
resizable?: boolean;
|
|
64
|
+
maximizable?: boolean;
|
|
65
|
+
minimizable?: boolean;
|
|
66
|
+
title?: string;
|
|
67
|
+
maximized?: boolean;
|
|
68
|
+
always_on_bottom?: boolean;
|
|
69
|
+
always_on_top?: boolean;
|
|
70
|
+
shadow?: boolean;
|
|
71
|
+
decorations?: boolean;
|
|
72
|
+
transparent?: boolean;
|
|
73
|
+
};
|
|
74
|
+
export type WebviewEventListeners = {
|
|
75
|
+
[K in WebviewEvent['type']]?: Array<(event: Extract<WebviewEvent, {
|
|
76
|
+
type: K;
|
|
77
|
+
}>) => void>;
|
|
78
|
+
};
|
|
79
|
+
export type WebviewHandle = {
|
|
80
|
+
readonly id: Identifier;
|
|
81
|
+
readonly url: string;
|
|
82
|
+
getCookies(): PromiseResult<CookieList, UserError>;
|
|
83
|
+
on<T extends WebviewEvent['type']>(key: T, callback: (event: Extract<WebviewEvent, {
|
|
84
|
+
type: T;
|
|
85
|
+
}>) => void): void;
|
|
86
|
+
close(): Promise<void>;
|
|
87
|
+
join(): Promise<void>;
|
|
88
|
+
};
|
|
89
|
+
export type WebviewEventEmit = <T extends WebviewEvent['type']>(event: Extract<WebviewEvent, {
|
|
90
|
+
type: T;
|
|
91
|
+
}>) => void;
|
|
92
|
+
export declare const DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier;
|
|
93
|
+
export declare class WebviewAPI {
|
|
94
|
+
private readonly omu;
|
|
95
|
+
private readonly webviewHandles;
|
|
96
|
+
readonly allowedHosts: Table<AllowedHost>;
|
|
97
|
+
constructor(omu: Omu);
|
|
98
|
+
setDashboard(dashboard: DashboardHandler): void;
|
|
99
|
+
requestWebview(options: WebviewRequest): PromiseResult<WebviewHandle, UserError>;
|
|
100
|
+
getCookies(options: GetCookiesRequest): PromiseResult<CookieList, UserError>;
|
|
101
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Identifier as b,IdentifierMap as h}from"../../identifier";import{PacketType as R}from"../../network/packet";import{PromiseResult as E}from"../../result";import{Serializer as _}from"../../serialize";import{EndpointType as p}from"../endpoint";import{TableType as H}from"../table";import{DASHBOARD_EXTENSION_TYPE as c,DASHBOARD_SET_PERMISSION_ID as x}from"./constants";class A extends Array{toString(){return this.map(i=>`${i.name}=${i.value}`).join("; ")}}const m=R.createJson(c,{name:"webview_event",serializer:_.noop().field("id",b).field("target",b)}),w=c.join("webview"),P=H.createJson(c,{name:"allowed_webview_hosts",key:u=>u.id,permissions:{all:x}}),g=p.createJson(c,{name:"host_request",permissionId:w}),W=p.createJson(c,{name:"cookies_get",permissionId:w}),k=p.createJson(c,{name:"webview_request",permissionId:w}),f=p.createJson(c,{name:"webview_close",permissionId:w});class G{constructor(i){this.omu=i;i.network.registerPacket(m),i.network.addPacketHandler(m,r=>{const e=this.webviewHandles.get(r.id);e&&e.emit(r.event)}),this.allowedHosts=i.tables.get(P)}webviewHandles=new h;allowedHosts;setDashboard(i){const r=async(e,t)=>{const o=t.split(".").reverse().join(".");if(e.caller.namespace===o)return{type:"ok",value:void 0};const n=e.caller.key();if(!(await this.allowedHosts.get(n)??{id:n,hosts:[]}).hosts.includes(t))if(await i.handleHostRequest({host:t},e)==="accept"){const s=await this.allowedHosts.get(n)??{id:n,hosts:[]};s.hosts.push(t),await this.allowedHosts.update(s)}else return{type:"cancelled"};return{type:"ok",value:void 0}};this.omu.server.apps.event.remove.listen(async e=>{for(const t of e.values()){const o=await this.allowedHosts.get(t.id.key());o&&this.allowedHosts.remove(o)}}),this.omu.endpoints.bind(W,async(e,t)=>{const{url:o}=e,{host:n}=new URL(o),a=await r(t,n);return a.type!=="ok"?a:await i.getCookies(e)}),this.omu.endpoints.bind(g,async(e,t)=>{const{host:o}=e;return await r(t,o)}),this.omu.endpoints.bind(k,async(e,t)=>{const o=new URL(e.url),{host:n}=o,a=await r(t,n);if(a.type!=="ok")return a;let l=null;const d=async v=>{l&&this.omu.send(m,{id:l,target:t.caller,event:v})},s=await i.createWebview(e,t,d);return l=s,{type:"ok",value:{id:s.key()}}}),this.omu.endpoints.bind(f,async(e,t)=>{const o=await i.getWebview(e,t);return o?(await i.closeWebview(e,t),{type:"ok",value:{id:o.key()}}):{type:"cancelled"}})}requestWebview(i){const{promise:r,resolve:e,reject:t}=E.create();return this.omu.endpoints.call(k,i).then(o=>{if(o.type!=="ok"){t(o);return}const{value:n}=o,a=b.fromKey(n.id),l={},d={id:a,url:i.url,close:async()=>{await this.omu.endpoints.call(f,{id:a.key()})},getCookies:()=>this.getCookies({url:i.url}),on:function(s,v){l[s]||(l[s]=[]),l[s].push(v)},join:async()=>{await new Promise(s=>{d.on("closed",()=>s())})}};this.webviewHandles.set(a,{handle:d,emit:function(s){const v=l[s.type];if(v)for(const y of v)y(s)}}),e(d)}),r}getCookies(i){const{promise:r,resolve:e,reject:t}=E.create();return this.omu.endpoints.call(W,i).then(o=>{if(o.type==="ok"){e(A.from(o.value));return}else t(o)}),r}}export{A as CookieList,m as DASHBOARD_WEBVIEW_EVENT_PACKET,w as DASHBOARD_WEBVIEW_PERMISSION_ID,G as WebviewAPI};
|
|
2
|
+
//# sourceMappingURL=webview.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/dashboard/webview.ts"],
|
|
4
|
+
"sourcesContent": ["import { Identifier, IdentifierMap } from '../../identifier';\nimport { PacketType } from '../../network/packet';\nimport { Omu } from '../../omu';\nimport { PromiseResult } from '../../result';\nimport { Serializer } from '../../serialize';\nimport { EndpointType, InvokedParams } from '../endpoint';\nimport { Table, TableType } from '../table';\nimport { AllowedHost, DASHBOARD_EXTENSION_TYPE, DASHBOARD_SET_PERMISSION_ID, UserError, UserResponse } from './constants';\nimport { DashboardHandler } from './handler';\n\nexport type Cookie = {\n name: string;\n value: string;\n};\n\nexport class CookieList extends Array<Cookie> {\n public toString(): string {\n return this.map(cookie => `${cookie.name}=${cookie.value}`).join('; ');\n }\n}\n\nexport type WebviewEvent = {\n type: 'closed';\n} | {\n type: 'resize';\n dimensions: {\n x: number;\n y: number;\n };\n} | {\n type: 'cookie';\n cookies: Cookie[];\n} | {\n type: 'message';\n data: any;\n};\n\nexport type WebviewEventPacket = {\n id: Identifier;\n target: Identifier;\n event: WebviewEvent;\n};\n\nexport const DASHBOARD_WEBVIEW_EVENT_PACKET: PacketType<WebviewEventPacket> = PacketType.createJson<WebviewEventPacket>(DASHBOARD_EXTENSION_TYPE, {\n name: 'webview_event',\n serializer: Serializer.noop<WebviewEventPacket>()\n .field('id', Identifier)\n .field('target', Identifier),\n});\n\nexport type WebviewPacket = {\n id: string;\n};\n\nexport type WebviewResponse = UserResponse<WebviewPacket>;\n\nexport type GetCookiesRequest = {\n url: string;\n};\n\nexport type WebviewRequest = {\n url: string;\n script?: string;\n center?: boolean;\n position?: { x: number; y: number };\n inner_size?: { x: number; y: number };\n min_inner_size?: { x: number; y: number };\n max_inner_size?: { x: number; y: number };\n resizable?: boolean;\n maximizable?: boolean;\n minimizable?: boolean;\n title?: string;\n maximized?: boolean;\n always_on_bottom?: boolean;\n always_on_top?: boolean;\n shadow?: boolean;\n decorations?: boolean;\n transparent?: boolean;\n};\n\nexport type WebviewEventListeners = {\n [K in WebviewEvent['type']]?: Array<(event: Extract<WebviewEvent, { type: K }>) => void>;\n};\n\nexport type WebviewHandle = {\n readonly id: Identifier;\n readonly url: string;\n getCookies(): PromiseResult<CookieList, UserError>;\n on<T extends WebviewEvent['type']>(key: T, callback: (event: Extract<WebviewEvent, { type: T }>) => void): void;\n close(): Promise<void>;\n join(): Promise<void>;\n};\n\nexport type WebviewEventEmit = <T extends WebviewEvent['type']>(event: Extract<WebviewEvent, { type: T }>) => void;\n\nexport const DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('webview');\n\nconst DASHBOARD_ALLOWED_WEBVIEW_HOSTS = TableType.createJson<AllowedHost>(DASHBOARD_EXTENSION_TYPE, {\n name: 'allowed_webview_hosts',\n key: (entry) => entry.id,\n permissions: { all: DASHBOARD_SET_PERMISSION_ID },\n});\n\nconst DASHBOARD_HOST_REQUEST = EndpointType.createJson<{ host: string }, UserResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'host_request',\n permissionId: DASHBOARD_WEBVIEW_PERMISSION_ID,\n});\n\nconst DASHBOARD_COOKIES_GET = EndpointType.createJson<GetCookiesRequest, UserResponse<Cookie[]>>(DASHBOARD_EXTENSION_TYPE, {\n name: 'cookies_get',\n permissionId: DASHBOARD_WEBVIEW_PERMISSION_ID,\n});\n\nconst DASHBOARD_WEBVIEW_REQUEST = EndpointType.createJson<WebviewRequest, WebviewResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'webview_request',\n permissionId: DASHBOARD_WEBVIEW_PERMISSION_ID,\n});\n\nconst DASHBOARD_WEBVIEW_CLOSE = EndpointType.createJson<WebviewPacket, WebviewResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'webview_close',\n permissionId: DASHBOARD_WEBVIEW_PERMISSION_ID,\n});\n\nexport class WebviewAPI {\n private readonly webviewHandles: IdentifierMap<{ handle: WebviewHandle; emit: WebviewEventEmit }> = new IdentifierMap();\n public readonly allowedHosts: Table<AllowedHost>;\n\n constructor(\n private readonly omu: Omu,\n ) {\n omu.network.registerPacket(\n DASHBOARD_WEBVIEW_EVENT_PACKET,\n );\n omu.network.addPacketHandler(DASHBOARD_WEBVIEW_EVENT_PACKET, (packet) => {\n const handle = this.webviewHandles.get(packet.id);\n if (!handle) return;\n handle.emit(packet.event);\n });\n this.allowedHosts = omu.tables.get(DASHBOARD_ALLOWED_WEBVIEW_HOSTS);\n }\n\n public setDashboard(dashboard: DashboardHandler): void {\n const requireHost = async (params: InvokedParams, host: string): Promise<UserResponse<undefined>> => {\n const hostNamespace = host.split('.').reverse().join('.');\n if (params.caller.namespace === hostNamespace) {\n return { type: 'ok', value: undefined };\n }\n\n const id = params.caller.key();\n const hostEntry: AllowedHost = await this.allowedHosts.get(id) ?? { id: id, hosts: [] };\n const allowed = hostEntry.hosts.includes(host);\n\n if (!allowed) {\n const result = await dashboard.handleHostRequest({ host }, params);\n\n if (result === 'accept') {\n const hostEntry: AllowedHost = await this.allowedHosts.get(id) ?? { id: id, hosts: [] };\n hostEntry.hosts.push(host);\n await this.allowedHosts.update(hostEntry);\n } else {\n return { type: 'cancelled' };\n }\n }\n\n return { type: 'ok', value: undefined };\n };\n\n this.omu.server.apps.event.remove.listen(async (apps) => {\n for (const app of apps.values()) {\n const hosts = await this.allowedHosts.get(app.id.key());\n if (!hosts) continue;\n this.allowedHosts.remove(hosts);\n }\n });\n this.omu.endpoints.bind(DASHBOARD_COOKIES_GET, async (request, params): Promise<UserResponse<Cookie[]>> => {\n const { url } = request;\n const { host } = new URL(url);\n const hostAccessResult = await requireHost(params, host);\n if (hostAccessResult.type !== 'ok') {\n return hostAccessResult;\n }\n return await dashboard.getCookies(request);\n });\n this.omu.endpoints.bind(DASHBOARD_HOST_REQUEST, async (request, params): Promise<UserResponse> => {\n const { host } = request;\n const result = await requireHost(params, host);\n return result;\n });\n this.omu.endpoints.bind(DASHBOARD_WEBVIEW_REQUEST, async (request, params): Promise<WebviewResponse> => {\n const url = new URL(request.url);\n const { host } = url;\n const hostAccessResult = await requireHost(params, host);\n if (hostAccessResult.type !== 'ok') {\n return hostAccessResult;\n }\n\n let webviewId: Identifier | null = null;\n const emit = async (event: WebviewEvent) => {\n if (!webviewId) return;\n this.omu.send(DASHBOARD_WEBVIEW_EVENT_PACKET, { id: webviewId, target: params.caller, event });\n };\n\n const id = await dashboard.createWebview(request, params, emit);\n webviewId = id;\n\n return {\n type: 'ok',\n value: {\n id: id.key(),\n },\n };\n });\n this.omu.endpoints.bind(DASHBOARD_WEBVIEW_CLOSE, async (request, params): Promise<WebviewResponse> => {\n const id = await dashboard.getWebview(request, params);\n if (!id) {\n return {\n type: 'cancelled',\n };\n }\n await dashboard.closeWebview(request, params);\n return {\n type: 'ok',\n value: {\n id: id.key(),\n },\n };\n });\n }\n\n public requestWebview(options: WebviewRequest): PromiseResult<WebviewHandle, UserError> {\n const { promise, resolve, reject } = PromiseResult.create<WebviewHandle, UserError>();\n this.omu.endpoints.call(\n DASHBOARD_WEBVIEW_REQUEST,\n options,\n ).then((result) => {\n if (result.type !== 'ok') {\n reject(result);\n return;\n }\n const { value } = result;\n const id = Identifier.fromKey(value.id);\n const eventListeners: WebviewEventListeners = {};\n const handle: WebviewHandle = {\n id,\n url: options.url,\n close: async () => {\n await this.omu.endpoints.call(\n DASHBOARD_WEBVIEW_CLOSE,\n { id: id.key() },\n );\n },\n getCookies: () => this.getCookies({\n url: options.url,\n }),\n on: function <T extends WebviewEvent['type']>(key: T, callback: (event: Extract<WebviewEvent, { type: T }>) => void): void {\n if (!eventListeners[key]) {\n eventListeners[key] = [];\n }\n const listeners = eventListeners[key]!;\n listeners.push(callback);\n },\n join: async () => {\n await new Promise<void>((resolve) => {\n handle.on('closed', () => resolve());\n });\n },\n };\n this.webviewHandles.set(id, {\n handle,\n emit: function <T extends WebviewEvent['type']>(event: Extract<WebviewEvent, { type: T }>): void {\n const listeners = eventListeners[event.type];\n if (!listeners) return;\n for (const listener of listeners) {\n listener(event);\n }\n },\n });\n\n resolve(handle);\n });\n return promise;\n }\n\n public getCookies(options: GetCookiesRequest): PromiseResult<CookieList, UserError> {\n const { promise, resolve, reject } = PromiseResult.create<CookieList, UserError>();\n this.omu.endpoints.call(\n DASHBOARD_COOKIES_GET,\n options,\n ).then((response) => {\n if (response.type === 'ok') {\n resolve(CookieList.from(response.value));\n return;\n } else {\n reject(response);\n }\n });\n return promise;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Identifier", "IdentifierMap", "PacketType", "PromiseResult", "Serializer", "EndpointType", "TableType", "DASHBOARD_EXTENSION_TYPE", "DASHBOARD_SET_PERMISSION_ID", "CookieList", "cookie", "DASHBOARD_WEBVIEW_EVENT_PACKET", "DASHBOARD_WEBVIEW_PERMISSION_ID", "DASHBOARD_ALLOWED_WEBVIEW_HOSTS", "entry", "DASHBOARD_HOST_REQUEST", "DASHBOARD_COOKIES_GET", "DASHBOARD_WEBVIEW_REQUEST", "DASHBOARD_WEBVIEW_CLOSE", "WebviewAPI", "omu", "packet", "handle", "dashboard", "requireHost", "params", "host", "hostNamespace", "id", "hostEntry", "apps", "app", "hosts", "request", "url", "hostAccessResult", "webviewId", "emit", "event", "options", "promise", "resolve", "reject", "result", "value", "eventListeners", "key", "callback", "listeners", "listener", "response"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{EventEmitter as m}from"../../event";import{Identifier as
|
|
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 g,TableFetchRangePacket as O,TableItemsPacket as d,TableKeysPacket as p,TablePacket as u,TableProxyPacket as B}from"./packets.js";import{TableType as _}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}),A=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:g,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){this.omu.permissions.require(c);const i=this.tableMap.get(e.id);if(i)return i;const t=new J(this.omu,e);return this.tableMap.set(e.id,t),t}json(e,i){const t=new _(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 _(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,w])=>{const y=a(w);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){return this.proxies.length===0&&this.omu.onReady(()=>{this.omu.send(v,this.id)}),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(A,{id:this.id,keys:[e]}))[e]??!1}async hasMany(...e){return await this.omu.endpoints.call(A,{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 g(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
2
|
//# sourceMappingURL=extension.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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 const existing = this.tableMap.get(tableType.id);\n if (existing) {\n return existing as Table<T>;\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", "existing", "table", "TableImpl", "name", "options", "type", "identifier", "packet", "items", "proxy", "key", "item", "proxyItem", "_", "cache", "listener", "callback", "
|
|
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 const existing = this.tableMap.get(tableType.id);\n if (existing) {\n return existing as Table<T>;\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 this.omu.onReady(() => {\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", "existing", "table", "TableImpl", "name", "options", "type", "identifier", "packet", "items", "proxy", "key", "item", "proxyItem", "_", "cache", "listener", "callback", "promise", "res", "keys", "filteredKeys", "data", "limit", "backward", "cursor", "start", "end", "cursorItem", "size", "config", "permissions"]
|
|
7
7
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,13 +11,13 @@ import { Identifier } from './identifier';
|
|
|
11
11
|
export declare const OmuPermissions: {
|
|
12
12
|
readonly ASSET_PERMISSION_ID: Identifier;
|
|
13
13
|
readonly DASHBOARD_APP_INSTALL_PERMISSION_ID: Identifier;
|
|
14
|
-
readonly
|
|
14
|
+
readonly DASHBOARD_DRAG_DROP_PERMISSION_ID: Identifier;
|
|
15
15
|
readonly DASHBOARD_OPEN_APP_PERMISSION_ID: Identifier;
|
|
16
16
|
readonly DASHBOARD_SET_PERMISSION_ID: Identifier;
|
|
17
17
|
readonly DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID: Identifier;
|
|
18
18
|
readonly DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier;
|
|
19
|
-
readonly
|
|
20
|
-
readonly
|
|
19
|
+
readonly DASHBOARD_APP_STARTUP_PERMISSION_ID: Identifier;
|
|
20
|
+
readonly DASHBOARD_APP_CLOSE_PERMISSION_ID: Identifier;
|
|
21
21
|
readonly HTTP_REQUEST_PERMISSION_ID: Identifier;
|
|
22
22
|
readonly I18N_GET_LOCALES_PERMISSION_ID: Identifier;
|
|
23
23
|
readonly I18N_SET_LOCALES_PERMISSION_ID: Identifier;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{AppIndexRegistry as
|
|
1
|
+
import{AppIndexRegistry as k}from"./api/server";import{App as w}from"./app.js";import{DisconnectReason as b}from"./errors.js";import{Identifier as J,IdentifierMap as h,IdentifierSet as j}from"./identifier";import*as q from"./network";import{Omu as X}from"./omu.js";import{Serializer as $}from"./serialize";import{BrowserSession as SI}from"./token";import{ASSET_PERMISSION_ID as I}from"./api/asset";import{DASHBOARD_APP_INSTALL_PERMISSION_ID as S,DASHBOARD_DRAG_DROP_PERMISSION_ID as _,DASHBOARD_OPEN_APP_PERMISSION_ID as E,DASHBOARD_SET_PERMISSION_ID as e,DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID as R,DASHBOARD_WEBVIEW_PERMISSION_ID as r}from"./api/dashboard";import{DASHBOARD_APP_CLOSE_PERMISSION_ID as D,DASHBOARD_APP_STARTUP_PERMISSION_ID as O}from"./api/dashboard/apps";import{HTTP_REQUEST_PERMISSION_ID as P}from"./api/http";import{I18N_GET_LOCALES_PERMISSION_ID as i,I18N_SET_LOCALES_PERMISSION_ID as A}from"./api/i18n";import{LOGGER_LOG_PERMISSION_ID as o}from"./api/logger";import{PLUGIN_MANAGE_PACKAGE_PERMISSION_ID as N,PLUGIN_READ_PACKAGE_PERMISSION_ID as t}from"./api/plugin";import{REGISTRY_PERMISSION_ID as n}from"./api/registry";import{SERVER_APPS_READ_PERMISSION_ID as d,SERVER_SHUTDOWN_PERMISSION_ID as M,TRUSTED_ORIGINS_GET_PERMISSION_ID as f,TRUSTED_ORIGINS_SET_PERMISSION_ID as T}from"./api/server";import{GENERATE_TOKEN_PERMISSION_ID as a,REMOTE_APP_REQUEST_PERMISSION_ID as m,SESSIONS_READ_PERMISSION_ID as p}from"./api/session";import{TABLE_PERMISSION_ID as y}from"./api/table";const Q={ASSET_PERMISSION_ID:I,DASHBOARD_APP_INSTALL_PERMISSION_ID:S,DASHBOARD_DRAG_DROP_PERMISSION_ID:_,DASHBOARD_OPEN_APP_PERMISSION_ID:E,DASHBOARD_SET_PERMISSION_ID:e,DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID:R,DASHBOARD_WEBVIEW_PERMISSION_ID:r,DASHBOARD_APP_STARTUP_PERMISSION_ID:O,DASHBOARD_APP_CLOSE_PERMISSION_ID:D,HTTP_REQUEST_PERMISSION_ID:P,I18N_GET_LOCALES_PERMISSION_ID:i,I18N_SET_LOCALES_PERMISSION_ID:A,LOGGER_LOG_PERMISSION_ID:o,PLUGIN_MANAGE_PACKAGE_PERMISSION_ID:N,PLUGIN_READ_PACKAGE_PERMISSION_ID:t,REGISTRY_PERMISSION_ID:n,SERVER_APPS_READ_PERMISSION_ID:d,SERVER_SHUTDOWN_PERMISSION_ID:M,TRUSTED_ORIGINS_GET_PERMISSION_ID:f,TRUSTED_ORIGINS_SET_PERMISSION_ID:T,GENERATE_TOKEN_PERMISSION_ID:a,REMOTE_APP_REQUEST_PERMISSION_ID:m,SESSIONS_READ_PERMISSION_ID:p,TABLE_PERMISSION_ID:y};export{w as App,k as AppIndexRegistry,SI as BrowserSession,b as DisconnectReason,J as Identifier,h as IdentifierMap,j as IdentifierSet,X as Omu,Q as OmuPermissions,$ as Serializer,q as network};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|