@omujs/omu 0.10.0 → 0.10.1
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/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
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { App } from '../../app';
|
|
2
|
+
import { Identifier, IntoId } from '../../identifier';
|
|
3
|
+
import { Omu } from '../../omu';
|
|
4
|
+
import { DashboardHandler } from './handler';
|
|
5
|
+
import { AppInstallResponse } from './packets';
|
|
6
|
+
export declare const DASHBOARD_OPEN_APP_PERMISSION_ID: Identifier;
|
|
7
|
+
export declare const DASHBOARD_APP_INSTALL_PERMISSION_ID: Identifier;
|
|
8
|
+
export declare const DASHBOARD_APP_CLOSE_PERMISSION_ID: Identifier;
|
|
9
|
+
export declare const DASHBOARD_APP_STARTUP_PERMISSION_ID: Identifier;
|
|
10
|
+
interface StartupApp {
|
|
11
|
+
id: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class DashboardApps {
|
|
14
|
+
private readonly omu;
|
|
15
|
+
private readonly startupApps;
|
|
16
|
+
constructor(omu: Omu);
|
|
17
|
+
setDashboard(dashboard: DashboardHandler): void;
|
|
18
|
+
open(app: App): Promise<void>;
|
|
19
|
+
install(app: App): Promise<AppInstallResponse>;
|
|
20
|
+
close(app: IntoId): Promise<void>;
|
|
21
|
+
addStartup(app: IntoId): Promise<void>;
|
|
22
|
+
removeStartup(app: IntoId): Promise<void>;
|
|
23
|
+
getStartupApps(): Promise<Map<string, StartupApp>>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{App as n}from"../../app";import{Identifier as s}from"../../identifier";import{Serializer as A}from"../../serialize";import{EndpointType as r}from"../endpoint";import{TableType as d}from"../table";import{DASHBOARD_EXTENSION_TYPE as e}from"./constants";const I=e.join("app","open"),l=e.join("app","install"),M=e.join("app","close"),S=e.join("app","startup"),P=r.createJson(e,{name:"open_app",requestSerializer:n,permissionId:I}),f=r.createJson(e,{name:"install_app",requestSerializer:n,permissionId:l}),u=r.createJson(e,{name:"close_app",requestSerializer:s,permissionId:l}),i=r.createJson(e,{name:"request_startup",requestSerializer:A.noop().field("app",s),permissionId:S}),_=d.createJson(e,{name:"startup_apps",key:({id:o})=>o});class x{constructor(p){this.omu=p;this.startupApps=p.tables.get(_)}startupApps;setDashboard(p){this.omu.endpoints.bind(u,async t=>{await p.closeApp(t)}),this.omu.endpoints.bind(i,async(t,a)=>{if(!a.caller.isSubpathOf(t.app))throw new Error(`App ${a.caller} cannot request startup for app ${t.app}`);return t.type==="register"?await this.startupApps.add({id:t.app.key()}):t.type==="unregister"&&await this.startupApps.remove({id:t.app.key()}),null}),this.omu.onReady(async()=>{const a=[...(await this.startupApps.fetchAll()).values()].map(({id:m})=>m),c=await this.omu.server.apps.getMany(...a);await p.openApp(...c.values())})}async open(p){return await this.omu.endpoints.call(P,p)}async install(p){return await this.omu.endpoints.call(f,p)}async close(p){await this.omu.endpoints.call(u,s.from(p))}async addStartup(p){await this.omu.endpoints.call(i,{type:"register",app:s.from(p)})}async removeStartup(p){await this.omu.endpoints.call(i,{type:"unregister",app:s.from(p)})}async getStartupApps(){return await this.startupApps.fetchAll()}}export{M as DASHBOARD_APP_CLOSE_PERMISSION_ID,l as DASHBOARD_APP_INSTALL_PERMISSION_ID,S as DASHBOARD_APP_STARTUP_PERMISSION_ID,I as DASHBOARD_OPEN_APP_PERMISSION_ID,x as DashboardApps};
|
|
2
|
+
//# sourceMappingURL=apps.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/dashboard/apps.ts"],
|
|
4
|
+
"sourcesContent": ["import { App } from '../../app';\nimport { Identifier, IntoId } from '../../identifier';\nimport { Omu } from '../../omu';\nimport { Serializer } from '../../serialize';\nimport { EndpointType } from '../endpoint';\nimport { Table, TableType } from '../table';\nimport { DASHBOARD_EXTENSION_TYPE } from './constants';\nimport { DashboardHandler } from './handler';\nimport { AppInstallResponse } from './packets';\n\nexport const DASHBOARD_OPEN_APP_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('app', 'open');\nexport const DASHBOARD_APP_INSTALL_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('app', 'install');\nexport const DASHBOARD_APP_CLOSE_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('app', 'close');\nexport const DASHBOARD_APP_STARTUP_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('app', 'startup');\n\nconst ENDPOINT_OPEN = EndpointType.createJson<App, void>(DASHBOARD_EXTENSION_TYPE, {\n name: 'open_app',\n requestSerializer: App,\n permissionId: DASHBOARD_OPEN_APP_PERMISSION_ID,\n});\nconst ENDPOINT_INSTALL = EndpointType.createJson<App, AppInstallResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'install_app',\n requestSerializer: App,\n permissionId: DASHBOARD_APP_INSTALL_PERMISSION_ID,\n});\nconst ENDPOINT_CLOSE = EndpointType.createJson<Identifier, null>(DASHBOARD_EXTENSION_TYPE, {\n name: 'close_app',\n requestSerializer: Identifier,\n permissionId: DASHBOARD_APP_INSTALL_PERMISSION_ID,\n});\ninterface RequestStartup {\n type: 'register' | 'unregister';\n app: Identifier;\n}\nconst ENDPOINT_REQUEST_STARTUP = EndpointType.createJson<RequestStartup, null>(DASHBOARD_EXTENSION_TYPE, {\n name: 'request_startup',\n requestSerializer: Serializer.noop<RequestStartup>()\n .field('app', Identifier),\n permissionId: DASHBOARD_APP_STARTUP_PERMISSION_ID,\n});\n\ninterface StartupApp {\n id: string;\n}\n\nconst STARTUP_APPS = TableType.createJson<StartupApp>(DASHBOARD_EXTENSION_TYPE, {\n name: 'startup_apps',\n key: ({ id }) => id,\n});\n\nexport class DashboardApps {\n private readonly startupApps: Table<StartupApp>;\n\n constructor(\n private readonly omu: Omu,\n ) {\n this.startupApps = omu.tables.get(STARTUP_APPS);\n }\n\n public setDashboard(dashboard: DashboardHandler): void {\n this.omu.endpoints.bind(ENDPOINT_CLOSE, async (id) => {\n await dashboard.closeApp(id);\n });\n this.omu.endpoints.bind(ENDPOINT_REQUEST_STARTUP, async (request, params) => {\n if (!params.caller.isSubpathOf(request.app)) {\n throw new Error(`App ${params.caller} cannot request startup for app ${request.app}`);\n }\n if (request.type === 'register') {\n await this.startupApps.add({\n id: request.app.key(),\n });\n } else if (request.type === 'unregister') {\n await this.startupApps.remove({\n id: request.app.key(),\n });\n }\n return null;\n });\n this.omu.onReady(async () => {\n const startupApps = await this.startupApps.fetchAll();\n const ids = [...startupApps.values()].map(({ id }) => id);\n const apps = await this.omu.server.apps.getMany(...ids);\n await dashboard.openApp(...apps.values());\n });\n }\n\n public async open(app: App): Promise<void> {\n return await this.omu.endpoints.call(ENDPOINT_OPEN, app);\n }\n\n public async install(app: App): Promise<AppInstallResponse> {\n return await this.omu.endpoints.call(ENDPOINT_INSTALL, app);\n }\n\n public async close(app: IntoId): Promise<void> {\n await this.omu.endpoints.call(ENDPOINT_CLOSE, Identifier.from(app));\n }\n\n public async addStartup(app: IntoId): Promise<void> {\n await this.omu.endpoints.call(ENDPOINT_REQUEST_STARTUP, {\n type: 'register',\n app: Identifier.from(app),\n });\n }\n\n public async removeStartup(app: IntoId): Promise<void> {\n await this.omu.endpoints.call(ENDPOINT_REQUEST_STARTUP, {\n type: 'unregister',\n app: Identifier.from(app),\n });\n }\n\n public async getStartupApps(): Promise<Map<string, StartupApp>> {\n const startupApps = await this.startupApps.fetchAll();\n return startupApps;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,OAAAA,MAAW,YACpB,OAAS,cAAAC,MAA0B,mBAEnC,OAAS,cAAAC,MAAkB,kBAC3B,OAAS,gBAAAC,MAAoB,cAC7B,OAAgB,aAAAC,MAAiB,WACjC,OAAS,4BAAAC,MAAgC,cAIlC,MAAMC,EAA+CD,EAAyB,KAAK,MAAO,MAAM,EAC1FE,EAAkDF,EAAyB,KAAK,MAAO,SAAS,EAChGG,EAAgDH,EAAyB,KAAK,MAAO,OAAO,EAC5FI,EAAkDJ,EAAyB,KAAK,MAAO,SAAS,EAEvGK,EAAgBP,EAAa,WAAsBE,EAA0B,CAC/E,KAAM,WACN,kBAAmBL,EACnB,aAAcM,CAClB,CAAC,EACKK,EAAmBR,EAAa,WAAoCE,EAA0B,CAChG,KAAM,cACN,kBAAmBL,EACnB,aAAcO,CAClB,CAAC,EACKK,EAAiBT,EAAa,WAA6BE,EAA0B,CACvF,KAAM,YACN,kBAAmBJ,EACnB,aAAcM,CAClB,CAAC,EAKKM,EAA2BV,EAAa,WAAiCE,EAA0B,CACrG,KAAM,kBACN,kBAAmBH,EAAW,KAAqB,EAC9C,MAAM,MAAOD,CAAU,EAC5B,aAAcQ,CAClB,CAAC,EAMKK,EAAeV,EAAU,WAAuBC,EAA0B,CAC5E,KAAM,eACN,IAAK,CAAC,CAAE,GAAAU,CAAG,IAAMA,CACrB,CAAC,EAEM,MAAMC,CAAc,CAGvB,YACqBC,EACnB,CADmB,SAAAA,EAEjB,KAAK,YAAcA,EAAI,OAAO,IAAIH,CAAY,CAClD,CANiB,YAQV,aAAaI,EAAmC,CACnD,KAAK,IAAI,UAAU,KAAKN,EAAgB,MAAOG,GAAO,CAClD,MAAMG,EAAU,SAASH,CAAE,CAC/B,CAAC,EACD,KAAK,IAAI,UAAU,KAAKF,EAA0B,MAAOM,EAASC,IAAW,CACzE,GAAI,CAACA,EAAO,OAAO,YAAYD,EAAQ,GAAG,EACtC,MAAM,IAAI,MAAM,OAAOC,EAAO,MAAM,mCAAmCD,EAAQ,GAAG,EAAE,EAExF,OAAIA,EAAQ,OAAS,WACjB,MAAM,KAAK,YAAY,IAAI,CACvB,GAAIA,EAAQ,IAAI,IAAI,CACxB,CAAC,EACMA,EAAQ,OAAS,cACxB,MAAM,KAAK,YAAY,OAAO,CAC1B,GAAIA,EAAQ,IAAI,IAAI,CACxB,CAAC,EAEE,IACX,CAAC,EACD,KAAK,IAAI,QAAQ,SAAY,CAEzB,MAAME,EAAM,CAAC,IADO,MAAM,KAAK,YAAY,SAAS,GACxB,OAAO,CAAC,EAAE,IAAI,CAAC,CAAE,GAAAN,CAAG,IAAMA,CAAE,EAClDO,EAAO,MAAM,KAAK,IAAI,OAAO,KAAK,QAAQ,GAAGD,CAAG,EACtD,MAAMH,EAAU,QAAQ,GAAGI,EAAK,OAAO,CAAC,CAC5C,CAAC,CACL,CAEA,MAAa,KAAKC,EAAyB,CACvC,OAAO,MAAM,KAAK,IAAI,UAAU,KAAKb,EAAea,CAAG,CAC3D,CAEA,MAAa,QAAQA,EAAuC,CACxD,OAAO,MAAM,KAAK,IAAI,UAAU,KAAKZ,EAAkBY,CAAG,CAC9D,CAEA,MAAa,MAAMA,EAA4B,CAC3C,MAAM,KAAK,IAAI,UAAU,KAAKX,EAAgBX,EAAW,KAAKsB,CAAG,CAAC,CACtE,CAEA,MAAa,WAAWA,EAA4B,CAChD,MAAM,KAAK,IAAI,UAAU,KAAKV,EAA0B,CACpD,KAAM,WACN,IAAKZ,EAAW,KAAKsB,CAAG,CAC5B,CAAC,CACL,CAEA,MAAa,cAAcA,EAA4B,CACnD,MAAM,KAAK,IAAI,UAAU,KAAKV,EAA0B,CACpD,KAAM,aACN,IAAKZ,EAAW,KAAKsB,CAAG,CAC5B,CAAC,CACL,CAEA,MAAa,gBAAmD,CAE5D,OADoB,MAAM,KAAK,YAAY,SAAS,CAExD,CACJ",
|
|
6
|
+
"names": ["App", "Identifier", "Serializer", "EndpointType", "TableType", "DASHBOARD_EXTENSION_TYPE", "DASHBOARD_OPEN_APP_PERMISSION_ID", "DASHBOARD_APP_INSTALL_PERMISSION_ID", "DASHBOARD_APP_CLOSE_PERMISSION_ID", "DASHBOARD_APP_STARTUP_PERMISSION_ID", "ENDPOINT_OPEN", "ENDPOINT_INSTALL", "ENDPOINT_CLOSE", "ENDPOINT_REQUEST_STARTUP", "STARTUP_APPS", "id", "DashboardApps", "omu", "dashboard", "request", "params", "ids", "apps", "app"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Identifier } from '../../identifier';
|
|
2
|
+
import { EndpointType } from '../endpoint';
|
|
3
|
+
import { ExtensionType } from '../extension';
|
|
4
|
+
import { RegistryType } from '../registry';
|
|
5
|
+
import { DashboardExtension } from './extension';
|
|
6
|
+
export declare const DASHBOARD_EXTENSION_TYPE: ExtensionType<DashboardExtension>;
|
|
7
|
+
type DashboardSetResponse = {
|
|
8
|
+
success: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare const DASHBOARD_SET_PERMISSION_ID: Identifier;
|
|
11
|
+
export declare const DASHBOARD_SET_ENDPOINT: EndpointType<Identifier, DashboardSetResponse>;
|
|
12
|
+
export type UserResponse<T = undefined> = {
|
|
13
|
+
type: 'ok';
|
|
14
|
+
value: T;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'blocked';
|
|
17
|
+
} | {
|
|
18
|
+
type: 'cancelled';
|
|
19
|
+
};
|
|
20
|
+
export type UserError = Exclude<UserResponse, {
|
|
21
|
+
type: 'ok';
|
|
22
|
+
}>;
|
|
23
|
+
export type HostRequest = {
|
|
24
|
+
host: string;
|
|
25
|
+
};
|
|
26
|
+
export type AllowedHost = {
|
|
27
|
+
id: string;
|
|
28
|
+
hosts: string[];
|
|
29
|
+
};
|
|
30
|
+
export declare const DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID: Identifier;
|
|
31
|
+
export type TranscriptSegment = {
|
|
32
|
+
confidence: number;
|
|
33
|
+
transcript: string;
|
|
34
|
+
};
|
|
35
|
+
export type TranscriptStatus = {
|
|
36
|
+
type: 'idle';
|
|
37
|
+
} | {
|
|
38
|
+
type: 'result';
|
|
39
|
+
timestamp: number;
|
|
40
|
+
segments: TranscriptSegment[];
|
|
41
|
+
} | {
|
|
42
|
+
type: 'final';
|
|
43
|
+
timestamp: number;
|
|
44
|
+
segments: TranscriptSegment[];
|
|
45
|
+
} | {
|
|
46
|
+
type: 'audio_started';
|
|
47
|
+
timestamp: number;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'audio_ended';
|
|
50
|
+
timestamp: number;
|
|
51
|
+
};
|
|
52
|
+
export declare const DASHBOARD_SPEECH_RECOGNITION: RegistryType<TranscriptStatus>;
|
|
53
|
+
export type SpeechRecognitionStart = {
|
|
54
|
+
type: 'start';
|
|
55
|
+
};
|
|
56
|
+
export declare const DASHBOARD_SPEECH_RECOGNITION_START: EndpointType<SpeechRecognitionStart, UserResponse<undefined>>;
|
|
57
|
+
export declare const DASHBOARD_PROMPT_CLEAR_BLOCKED: EndpointType<null, null>;
|
|
58
|
+
export declare const DASHBOARD_DRAG_DROP_PERMISSION_ID: Identifier;
|
|
59
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Identifier as s}from"../../identifier";import{EndpointType as t}from"../endpoint";import{ExtensionType as p}from"../extension";import{RegistryType as i}from"../registry";import{DashboardExtension as a}from"./extension";const e=new p("dashboard",o=>new a(o)),n=e.join("set"),y=t.createJson(e,{name:"set",requestSerializer:s,permissionId:n}),r=e.join("speech_recognition"),D=i.createJson(e,{name:"speech_recognition",defaultValue:{type:"idle"},permissions:{read:r,write:n}}),u=t.createJson(e,{name:"speech_recognition_start",permissionId:r}),T=t.createJson(e,{name:"prompt_clear_blocked"}),l=e.join("drag_drop");export{l as DASHBOARD_DRAG_DROP_PERMISSION_ID,e as DASHBOARD_EXTENSION_TYPE,T as DASHBOARD_PROMPT_CLEAR_BLOCKED,y as DASHBOARD_SET_ENDPOINT,n as DASHBOARD_SET_PERMISSION_ID,D as DASHBOARD_SPEECH_RECOGNITION,r as DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,u as DASHBOARD_SPEECH_RECOGNITION_START};
|
|
2
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/dashboard/constants.ts"],
|
|
4
|
+
"sourcesContent": ["import { Identifier } from '../../identifier';\nimport { Omu } from '../../omu';\nimport { EndpointType } from '../endpoint';\nimport { ExtensionType } from '../extension';\nimport { RegistryType } from '../registry';\nimport { DashboardExtension } from './extension';\n\nexport const DASHBOARD_EXTENSION_TYPE: ExtensionType<DashboardExtension> = new ExtensionType(\n 'dashboard',\n (omu: Omu) => new DashboardExtension(omu),\n);\n\ntype DashboardSetResponse = {\n success: boolean;\n};\nexport const DASHBOARD_SET_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('set');\nexport const DASHBOARD_SET_ENDPOINT: EndpointType<Identifier, DashboardSetResponse> = EndpointType.createJson<Identifier, DashboardSetResponse>(\n DASHBOARD_EXTENSION_TYPE,\n {\n name: 'set',\n requestSerializer: Identifier,\n permissionId: DASHBOARD_SET_PERMISSION_ID,\n },\n);\n\nexport type UserResponse<T = undefined> = {\n type: 'ok';\n value: T;\n} | {\n type: 'blocked';\n} | {\n type: 'cancelled';\n};\n\nexport type UserError = Exclude<UserResponse, { type: 'ok' }>;\n\nexport type HostRequest = {\n host: string;\n};\n\nexport type AllowedHost = {\n id: string;\n hosts: string[];\n};\n\nexport const DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('speech_recognition');\n\nexport type TranscriptSegment = {\n confidence: number;\n transcript: string;\n};\n\nexport type TranscriptStatus = {\n type: 'idle';\n} | {\n type: 'result';\n timestamp: number;\n segments: TranscriptSegment[];\n} | {\n type: 'final';\n timestamp: number;\n segments: TranscriptSegment[];\n} | {\n type: 'audio_started';\n timestamp: number;\n} | {\n type: 'audio_ended';\n timestamp: number;\n};\n\nexport const DASHBOARD_SPEECH_RECOGNITION: RegistryType<TranscriptStatus> = RegistryType.createJson<TranscriptStatus>(DASHBOARD_EXTENSION_TYPE, {\n name: 'speech_recognition',\n defaultValue: { type: 'idle' },\n permissions: {\n read: DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n write: DASHBOARD_SET_PERMISSION_ID,\n },\n});\n\nexport type SpeechRecognitionStart = {\n type: 'start';\n};\n\nexport const DASHBOARD_SPEECH_RECOGNITION_START: EndpointType<SpeechRecognitionStart, UserResponse<undefined>> = EndpointType.createJson<SpeechRecognitionStart, UserResponse<undefined>>(DASHBOARD_EXTENSION_TYPE, {\n name: 'speech_recognition_start',\n permissionId: DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n});\n\nexport const DASHBOARD_PROMPT_CLEAR_BLOCKED: EndpointType<null, null> = EndpointType.createJson<null, null>(DASHBOARD_EXTENSION_TYPE, {\n name: 'prompt_clear_blocked',\n});\nexport const DASHBOARD_DRAG_DROP_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('drag_drop');\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,cAAAA,MAAkB,mBAE3B,OAAS,gBAAAC,MAAoB,cAC7B,OAAS,iBAAAC,MAAqB,eAC9B,OAAS,gBAAAC,MAAoB,cAC7B,OAAS,sBAAAC,MAA0B,cAE5B,MAAMC,EAA8D,IAAIH,EAC3E,YACCI,GAAa,IAAIF,EAAmBE,CAAG,CAC5C,EAKaC,EAA0CF,EAAyB,KAAK,KAAK,EAC7EG,EAAyEP,EAAa,WAC/FI,EACA,CACI,KAAM,MACN,kBAAmBL,EACnB,aAAcO,CAClB,CACJ,EAsBaE,EAAyDJ,EAAyB,KAAK,oBAAoB,EAyB3GK,EAA+DP,EAAa,WAA6BE,EAA0B,CAC5I,KAAM,qBACN,aAAc,CAAE,KAAM,MAAO,EAC7B,YAAa,CACT,KAAMI,EACN,MAAOF,CACX,CACJ,CAAC,EAMYI,EAAoGV,EAAa,WAA4DI,EAA0B,CAChN,KAAM,2BACN,aAAcI,CAClB,CAAC,EAEYG,EAA2DX,EAAa,WAAuBI,EAA0B,CAClI,KAAM,sBACV,CAAC,EACYQ,EAAgDR,EAAyB,KAAK,WAAW",
|
|
6
|
+
"names": ["Identifier", "EndpointType", "ExtensionType", "RegistryType", "DashboardExtension", "DASHBOARD_EXTENSION_TYPE", "omu", "DASHBOARD_SET_PERMISSION_ID", "DASHBOARD_SET_ENDPOINT", "DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID", "DASHBOARD_SPEECH_RECOGNITION", "DASHBOARD_SPEECH_RECOGNITION_START", "DASHBOARD_PROMPT_CLEAR_BLOCKED", "DASHBOARD_DRAG_DROP_PERMISSION_ID"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { App } from '../../app';
|
|
2
|
+
import { Omu } from '../../omu';
|
|
3
|
+
import { DashboardHandler } from './handler';
|
|
4
|
+
export type DragDropFile = {
|
|
5
|
+
type: 'file' | 'directory';
|
|
6
|
+
size: number;
|
|
7
|
+
name: string;
|
|
8
|
+
};
|
|
9
|
+
export type DragDropPosition = {
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
};
|
|
13
|
+
export type DragEnter = {
|
|
14
|
+
type: 'enter';
|
|
15
|
+
drag_id: string;
|
|
16
|
+
files: DragDropFile[];
|
|
17
|
+
position: DragDropPosition;
|
|
18
|
+
};
|
|
19
|
+
export type DragOver = {
|
|
20
|
+
type: 'over';
|
|
21
|
+
drag_id: string;
|
|
22
|
+
position: DragDropPosition;
|
|
23
|
+
};
|
|
24
|
+
export type DragDrop = {
|
|
25
|
+
type: 'drop';
|
|
26
|
+
drag_id: string;
|
|
27
|
+
position: DragDropPosition;
|
|
28
|
+
files: DragDropFile[];
|
|
29
|
+
};
|
|
30
|
+
export type DragLeave = {
|
|
31
|
+
type: 'leave';
|
|
32
|
+
drag_id: string;
|
|
33
|
+
};
|
|
34
|
+
export type DragState = DragEnter | DragOver | DragDrop | DragLeave;
|
|
35
|
+
export type FileDragPacket = {
|
|
36
|
+
drag_id: string;
|
|
37
|
+
app: App;
|
|
38
|
+
state: DragState;
|
|
39
|
+
};
|
|
40
|
+
export type DragDropReadRequest = {
|
|
41
|
+
drag_id: string;
|
|
42
|
+
};
|
|
43
|
+
export type DragDropReadMeta = {
|
|
44
|
+
drag_id: string;
|
|
45
|
+
files: readonly DragDropFile[];
|
|
46
|
+
};
|
|
47
|
+
export type FileData = {
|
|
48
|
+
file: DragDropFile;
|
|
49
|
+
buffer: Uint8Array;
|
|
50
|
+
};
|
|
51
|
+
export declare class DragDropReadResponse {
|
|
52
|
+
readonly meta: DragDropReadMeta;
|
|
53
|
+
readonly files: Record<string, FileData>;
|
|
54
|
+
readonly version: number;
|
|
55
|
+
constructor(meta: DragDropReadMeta, files: Record<string, FileData>, version?: number);
|
|
56
|
+
static serialize(data: DragDropReadResponse): Uint8Array;
|
|
57
|
+
static deserialize(data: Uint8Array): DragDropReadResponse;
|
|
58
|
+
}
|
|
59
|
+
export type DragDropRequestDashboard = object;
|
|
60
|
+
export type DragDropRequestResponse = {
|
|
61
|
+
ok: boolean;
|
|
62
|
+
};
|
|
63
|
+
export type DragDropHandler = {
|
|
64
|
+
onEnter(fn: (event: DragEnter) => unknown): void;
|
|
65
|
+
onOver(fn: (event: DragOver) => unknown): void;
|
|
66
|
+
onDrop(fn: (event: DragDrop) => unknown): void;
|
|
67
|
+
onLeave(fn: (event: DragLeave) => unknown): void;
|
|
68
|
+
read(id: string): Promise<DragDropReadResponse>;
|
|
69
|
+
};
|
|
70
|
+
export declare class DragDropAPI {
|
|
71
|
+
private readonly omu;
|
|
72
|
+
private dragDropHandler;
|
|
73
|
+
private dragDropListeners;
|
|
74
|
+
constructor(omu: Omu);
|
|
75
|
+
requestDragDrop(): Promise<DragDropHandler>;
|
|
76
|
+
setDashboard(dashboard: DashboardHandler): Promise<void>;
|
|
77
|
+
notifyDropDragState(packet: FileDragPacket): Promise<void>;
|
|
78
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{App as m}from"../../app";import{PacketType as v}from"../../network/packet";import{ByteReader as h,ByteWriter as _,Serializer as d}from"../../serialize";import{EndpointType as g}from"../endpoint";import{DASHBOARD_DRAG_DROP_PERMISSION_ID as l,DASHBOARD_EXTENSION_TYPE as n}from"./constants";class s{constructor(a,r,e=1){this.meta=a;this.files=r;this.version=e}static serialize(a){const r=new _;r.writeULEB128(a.version),r.writeString(JSON.stringify(a.meta)),r.writeULEB128(Object.keys(a.files).length);for(const[e,{file:t,buffer:o}]of Object.entries(a.files))r.writeString(e),r.writeString(JSON.stringify(t)),r.writeUint8Array(o);return r.finish()}static deserialize(a){const r=h.fromUint8Array(a),e=r.readULEB128(),t=JSON.parse(r.readString()),o=r.readULEB128(),p={};for(let D=0;D<o;D++){const y=r.readString(),R=JSON.parse(r.readString()),f=r.readUint8Array();p[y]={file:R,buffer:f}}return new s(t,p,e)}}const c=g.createSerialized(n,{name:"drag_drop_read",requestSerializer:d.json(),responseSerializer:s,permissionId:l}),u=g.createJson(n,{name:"drag_drop_request",permissionId:l}),i=v.createJson(n,{name:"drag_drop_state",serializer:d.noop().field("app",m)});class H{constructor(a){this.omu=a;a.network.registerPacket(i),a.network.addPacketHandler(i,({state:r})=>{switch(r.type){case"enter":{this.dragDropListeners.enter.forEach(e=>e(r));break}case"over":{this.dragDropListeners.over.forEach(e=>e(r));break}case"drop":{this.dragDropListeners.drop.forEach(e=>e(r));break}case"leave":{this.dragDropListeners.leave.forEach(e=>e(r));break}}})}dragDropHandler=null;dragDropListeners={enter:[],over:[],drop:[],leave:[]};async requestDragDrop(){await this.omu.endpoints.call(u,{});const a=this.dragDropListeners,r=this.omu;return this.dragDropHandler={onEnter(e){a.enter.push(e)},onOver(e){a.over.push(e)},onDrop(e){a.drop.push(e)},onLeave(e){a.leave.push(e)},async read(e){return await r.endpoints.call(c,{drag_id:e})}},this.dragDropHandler}async setDashboard(a){this.omu.endpoints.bind(u,async(r,e)=>({ok:await a.handleDragDropRequest(r,e)})),this.omu.endpoints.bind(c,async(r,e)=>await a.handleDragDropReadRequest(r,e))}async notifyDropDragState(a){return this.omu.send(i,a)}}export{H as DragDropAPI,s as DragDropReadResponse};
|
|
2
|
+
//# sourceMappingURL=dragdrop.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/api/dashboard/dragdrop.ts"],
|
|
4
|
+
"sourcesContent": ["import { App } from '../../app';\nimport { PacketType } from '../../network/packet';\nimport { Omu } from '../../omu';\nimport { ByteReader, ByteWriter, Serializer } from '../../serialize';\nimport { EndpointType } from '../endpoint';\nimport { DASHBOARD_DRAG_DROP_PERMISSION_ID, DASHBOARD_EXTENSION_TYPE } from './constants';\nimport { DashboardHandler } from './handler';\n\nexport type DragDropFile = {\n type: 'file' | 'directory';\n size: number;\n name: string;\n};\n\nexport type DragDropPosition = {\n x: number;\n y: number;\n};\n\nexport type DragEnter = {\n type: 'enter';\n drag_id: string;\n files: DragDropFile[];\n position: DragDropPosition;\n};\n\nexport type DragOver = {\n type: 'over';\n drag_id: string;\n position: DragDropPosition;\n};\n\nexport type DragDrop = {\n type: 'drop';\n drag_id: string;\n position: DragDropPosition;\n files: DragDropFile[];\n};\n\nexport type DragLeave = {\n type: 'leave';\n drag_id: string;\n};\n\nexport type DragState = DragEnter | DragOver | DragDrop | DragLeave;\n\nexport type FileDragPacket = {\n drag_id: string;\n app: App;\n state: DragState;\n};\n\nexport type DragDropReadRequest = {\n drag_id: string;\n};\n\nexport type DragDropReadMeta = {\n drag_id: string;\n files: readonly DragDropFile[];\n};\n\nexport type FileData = {\n file: DragDropFile;\n buffer: Uint8Array;\n};\n\nexport class DragDropReadResponse {\n constructor(\n public readonly meta: DragDropReadMeta,\n public readonly files: Record<string, FileData>,\n public readonly version: number = 1,\n ) {}\n\n public static serialize(data: DragDropReadResponse): Uint8Array {\n const writer = new ByteWriter();\n writer.writeULEB128(data.version);\n writer.writeString(JSON.stringify(data.meta));\n writer.writeULEB128(Object.keys(data.files).length);\n\n for (const [key, { file, buffer }] of Object.entries(data.files)) {\n writer.writeString(key);\n writer.writeString(JSON.stringify(file));\n writer.writeUint8Array(buffer);\n }\n\n return writer.finish();\n }\n\n public static deserialize(data: Uint8Array): DragDropReadResponse {\n const reader = ByteReader.fromUint8Array(data);\n const version = reader.readULEB128();\n const meta: DragDropReadMeta = JSON.parse(reader.readString());\n const length = reader.readULEB128();\n\n const files: Record<string, FileData> = {};\n for (let i = 0; i < length; i++) {\n const key = reader.readString();\n const file: DragDropFile = JSON.parse(reader.readString());\n const buffer = reader.readUint8Array();\n files[key] = { file, buffer };\n }\n\n return new DragDropReadResponse(\n meta,\n files,\n version,\n );\n }\n}\n\nexport type DragDropRequestDashboard = object;\n\nexport type DragDropRequestResponse = {\n ok: boolean;\n};\n\nexport type DragDropHandler = {\n onEnter(fn: (event: DragEnter) => unknown): void;\n onOver(fn: (event: DragOver) => unknown): void;\n onDrop(fn: (event: DragDrop) => unknown): void;\n onLeave(fn: (event: DragLeave) => unknown): void;\n read(id: string): Promise<DragDropReadResponse>;\n};\n\nconst DASHBOARD_DRAG_DROP_READ_ENDPOINT = EndpointType.createSerialized<DragDropReadRequest, DragDropReadResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'drag_drop_read',\n requestSerializer: Serializer.json(),\n responseSerializer: DragDropReadResponse,\n permissionId: DASHBOARD_DRAG_DROP_PERMISSION_ID,\n});\nconst DASHBOARD_DRAG_DROP_REQUEST_ENDPOINT = EndpointType.createJson<DragDropRequestDashboard, DragDropRequestResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'drag_drop_request',\n permissionId: DASHBOARD_DRAG_DROP_PERMISSION_ID,\n});\nconst DASHBOARD_DRAG_DROP_STATE_PACKET = PacketType.createJson<FileDragPacket>(DASHBOARD_EXTENSION_TYPE, {\n name: 'drag_drop_state',\n serializer: Serializer.noop<FileDragPacket>()\n .field('app', App),\n});\n\nexport class DragDropAPI {\n private dragDropHandler: DragDropHandler | null = null;\n private dragDropListeners = {\n enter: [] as Array<(state: DragEnter) => unknown>,\n over: [] as Array<(state: DragOver) => unknown>,\n drop: [] as Array<(state: DragDrop) => unknown>,\n leave: [] as Array<(state: DragLeave) => unknown>,\n };\n\n constructor(\n private readonly omu: Omu,\n ) {\n omu.network.registerPacket(\n DASHBOARD_DRAG_DROP_STATE_PACKET,\n );\n omu.network.addPacketHandler(DASHBOARD_DRAG_DROP_STATE_PACKET, ({ state }) => {\n switch (state.type) {\n case 'enter': {\n this.dragDropListeners.enter.forEach((fn) => fn(state));\n break;\n }\n case 'over': {\n this.dragDropListeners.over.forEach((fn) => fn(state));\n break;\n }\n case 'drop': {\n this.dragDropListeners.drop.forEach((fn) => fn(state));\n break;\n }\n case 'leave': {\n this.dragDropListeners.leave.forEach((fn) => fn(state));\n break;\n }\n }\n });\n }\n\n public async requestDragDrop(): Promise<DragDropHandler> {\n await this.omu.endpoints.call(DASHBOARD_DRAG_DROP_REQUEST_ENDPOINT, {});\n const listeners = this.dragDropListeners;\n const client = this.omu;\n this.dragDropHandler = {\n onEnter(fn) { listeners.enter.push(fn); },\n onOver(fn) { listeners.over.push(fn); },\n onDrop(fn) { listeners.drop.push(fn); },\n onLeave(fn) { listeners.leave.push(fn); },\n async read(id) { return await client.endpoints.call(DASHBOARD_DRAG_DROP_READ_ENDPOINT, { drag_id: id }); },\n };\n return this.dragDropHandler;\n }\n\n public async setDashboard(dashboard: DashboardHandler): Promise<void> {\n this.omu.endpoints.bind(DASHBOARD_DRAG_DROP_REQUEST_ENDPOINT, async (request: DragDropRequestDashboard, params): Promise<DragDropRequestResponse> => {\n const accepted = await dashboard.handleDragDropRequest(request, params);\n return {\n ok: accepted,\n };\n });\n this.omu.endpoints.bind(DASHBOARD_DRAG_DROP_READ_ENDPOINT, async (request, params): Promise<DragDropReadResponse> => {\n const response = await dashboard.handleDragDropReadRequest(request, params);\n return response;\n });\n }\n\n public async notifyDropDragState(packet: FileDragPacket): Promise<void> {\n return this.omu.send(DASHBOARD_DRAG_DROP_STATE_PACKET, packet);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["App", "PacketType", "ByteReader", "ByteWriter", "Serializer", "EndpointType", "DASHBOARD_DRAG_DROP_PERMISSION_ID", "DASHBOARD_EXTENSION_TYPE", "DragDropReadResponse", "meta", "files", "version", "data", "writer", "key", "file", "buffer", "reader", "length", "i", "DASHBOARD_DRAG_DROP_READ_ENDPOINT", "DASHBOARD_DRAG_DROP_REQUEST_ENDPOINT", "DASHBOARD_DRAG_DROP_STATE_PACKET", "DragDropAPI", "omu", "state", "fn", "listeners", "client", "id", "dashboard", "request", "params", "packet"]
|
|
7
|
+
}
|
|
@@ -1,174 +1,21 @@
|
|
|
1
|
-
import { App, AppJson } from '../../app.js';
|
|
2
|
-
import { Identifier } from '../../identifier';
|
|
3
1
|
import { Omu } from '../../omu.js';
|
|
4
2
|
import { PromiseResult } from '../../result.js';
|
|
5
3
|
import { ExtensionType } from '../extension.js';
|
|
6
|
-
import { PermissionTypeJson } from '../permission/permission.js';
|
|
7
|
-
import { PackageInfo } from '../plugin/package-info.js';
|
|
8
4
|
import { Registry } from '../registry/registry.js';
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
5
|
+
import { DashboardApps } from './apps.js';
|
|
6
|
+
import { DASHBOARD_EXTENSION_TYPE, TranscriptStatus, UserError } from './constants.js';
|
|
7
|
+
import { DragDropHandler, FileDragPacket } from './dragdrop.js';
|
|
11
8
|
import type { DashboardHandler } from './handler.js';
|
|
12
|
-
import {
|
|
13
|
-
export
|
|
14
|
-
export declare const DASHBOARD_SET_PERMISSION_ID: Identifier;
|
|
15
|
-
export declare const DASHBOARD_OPEN_APP_PERMISSION_ID: Identifier;
|
|
16
|
-
export declare const DASHOBARD_APP_READ_PERMISSION_ID: Identifier;
|
|
17
|
-
export declare const DASHOBARD_APP_EDIT_PERMISSION_ID: Identifier;
|
|
18
|
-
export declare const DASHBOARD_APP_INSTALL_PERMISSION_ID: Identifier;
|
|
19
|
-
export declare const DASHBOARD_DRAG_DROP_PERMISSION_ID: Identifier;
|
|
20
|
-
type DragDropHandler = {
|
|
21
|
-
onEnter(fn: (event: DragEnter) => unknown): void;
|
|
22
|
-
onOver(fn: (event: DragOver) => unknown): void;
|
|
23
|
-
onDrop(fn: (event: DragDrop) => unknown): void;
|
|
24
|
-
onLeave(fn: (event: DragLeave) => unknown): void;
|
|
25
|
-
read(id: string): Promise<DragDropReadResponse>;
|
|
26
|
-
};
|
|
27
|
-
export type Cookie = {
|
|
28
|
-
name: string;
|
|
29
|
-
value: string;
|
|
30
|
-
};
|
|
31
|
-
export declare class CookieList extends Array<Cookie> {
|
|
32
|
-
toString(): string;
|
|
33
|
-
}
|
|
34
|
-
export type WebviewRequest = {
|
|
35
|
-
url: string;
|
|
36
|
-
script?: string;
|
|
37
|
-
};
|
|
38
|
-
export type WebviewPacket = {
|
|
39
|
-
id: string;
|
|
40
|
-
};
|
|
41
|
-
export type UserResponse<T = undefined> = {
|
|
42
|
-
type: 'ok';
|
|
43
|
-
value: T;
|
|
44
|
-
} | {
|
|
45
|
-
type: 'blocked';
|
|
46
|
-
} | {
|
|
47
|
-
type: 'cancelled';
|
|
48
|
-
};
|
|
49
|
-
export type UserError = Exclude<UserResponse, {
|
|
50
|
-
type: 'ok';
|
|
51
|
-
}>;
|
|
52
|
-
export type WebviewResponse = UserResponse<WebviewPacket>;
|
|
53
|
-
export declare const DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier;
|
|
54
|
-
export type HostRequest = {
|
|
55
|
-
host: string;
|
|
56
|
-
};
|
|
57
|
-
export type GetCookiesRequest = {
|
|
58
|
-
url: string;
|
|
59
|
-
};
|
|
60
|
-
export type WebviewEvent = {
|
|
61
|
-
type: 'closed';
|
|
62
|
-
} | {
|
|
63
|
-
type: 'resize';
|
|
64
|
-
dimentions: {
|
|
65
|
-
x: number;
|
|
66
|
-
y: number;
|
|
67
|
-
};
|
|
68
|
-
} | {
|
|
69
|
-
type: 'cookie';
|
|
70
|
-
cookies: Cookie[];
|
|
71
|
-
} | {
|
|
72
|
-
type: 'message';
|
|
73
|
-
data: any;
|
|
74
|
-
};
|
|
75
|
-
export type WebviewEventListeners = {
|
|
76
|
-
[K in WebviewEvent['type']]?: Array<(event: Extract<WebviewEvent, {
|
|
77
|
-
type: K;
|
|
78
|
-
}>) => void>;
|
|
79
|
-
};
|
|
80
|
-
export type WebviewEventPacket = {
|
|
81
|
-
id: Identifier;
|
|
82
|
-
target: Identifier;
|
|
83
|
-
event: WebviewEvent;
|
|
84
|
-
};
|
|
85
|
-
export type WebviewHandle = {
|
|
86
|
-
readonly id: Identifier;
|
|
87
|
-
readonly url: string;
|
|
88
|
-
getCookies(): PromiseResult<CookieList, UserError>;
|
|
89
|
-
on<T extends WebviewEvent['type']>(key: T, callback: (event: Extract<WebviewEvent, {
|
|
90
|
-
type: T;
|
|
91
|
-
}>) => void): void;
|
|
92
|
-
close(): Promise<void>;
|
|
93
|
-
join(): Promise<void>;
|
|
94
|
-
};
|
|
95
|
-
export type WebviewEventEmit = <T extends WebviewEvent['type']>(event: Extract<WebviewEvent, {
|
|
96
|
-
type: T;
|
|
97
|
-
}>) => void;
|
|
98
|
-
type AllowedHost = {
|
|
99
|
-
id: string;
|
|
100
|
-
hosts: string[];
|
|
101
|
-
};
|
|
102
|
-
export declare const DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID: Identifier;
|
|
103
|
-
export type TranscriptSegment = {
|
|
104
|
-
confidence: number;
|
|
105
|
-
transcript: string;
|
|
106
|
-
};
|
|
107
|
-
export type TranscriptStatus = {
|
|
108
|
-
type: 'idle';
|
|
109
|
-
} | {
|
|
110
|
-
type: 'result';
|
|
111
|
-
timestamp: number;
|
|
112
|
-
segments: TranscriptSegment[];
|
|
113
|
-
} | {
|
|
114
|
-
type: 'final';
|
|
115
|
-
timestamp: number;
|
|
116
|
-
segments: TranscriptSegment[];
|
|
117
|
-
} | {
|
|
118
|
-
type: 'audio_started';
|
|
119
|
-
timestamp: number;
|
|
120
|
-
} | {
|
|
121
|
-
type: 'audio_ended';
|
|
122
|
-
timestamp: number;
|
|
123
|
-
};
|
|
124
|
-
export type SpeechRecognitionStart = {
|
|
125
|
-
type: 'start';
|
|
126
|
-
};
|
|
127
|
-
interface PromptRequestBase<T extends string> {
|
|
128
|
-
kind: T;
|
|
129
|
-
id: string;
|
|
130
|
-
}
|
|
131
|
-
export interface PromptRequestAppPermissions extends PromptRequestBase<'app/permissions'> {
|
|
132
|
-
app: AppJson;
|
|
133
|
-
permissions: PermissionTypeJson[];
|
|
134
|
-
}
|
|
135
|
-
export interface PromptRequestAppPlugins extends PromptRequestBase<'app/plugins'> {
|
|
136
|
-
app: AppJson;
|
|
137
|
-
packages: PackageInfo[];
|
|
138
|
-
}
|
|
139
|
-
export interface PromptRequestAppInstall extends PromptRequestBase<'app/install'> {
|
|
140
|
-
app: AppJson;
|
|
141
|
-
dependencies: Record<string, AppJson>;
|
|
142
|
-
}
|
|
143
|
-
export interface PromptRequestAppUpdate extends PromptRequestBase<'app/update'> {
|
|
144
|
-
old_app: AppJson;
|
|
145
|
-
new_app: AppJson;
|
|
146
|
-
dependencies: Record<string, AppJson>;
|
|
147
|
-
}
|
|
148
|
-
export interface PromptRequestIndexInstall extends PromptRequestBase<'index/install'> {
|
|
149
|
-
index_url: string;
|
|
150
|
-
meta?: AppIndexRegistryMeta;
|
|
151
|
-
}
|
|
152
|
-
export interface PortProcess {
|
|
153
|
-
port: number;
|
|
154
|
-
name: string;
|
|
155
|
-
exe: string;
|
|
156
|
-
}
|
|
157
|
-
export interface PromptRequestHttpPort extends PromptRequestBase<'http/port'> {
|
|
158
|
-
app: AppJson;
|
|
159
|
-
processes: PortProcess[];
|
|
160
|
-
}
|
|
161
|
-
export type PromptRequest = (PromptRequestAppPermissions | PromptRequestAppPlugins | PromptRequestAppInstall | PromptRequestAppUpdate | PromptRequestIndexInstall | PromptRequestHttpPort);
|
|
162
|
-
export type PromptResult = 'accept' | 'deny' | 'block';
|
|
9
|
+
import { GetCookiesRequest, WebviewHandle, WebviewRequest } from './webview.js';
|
|
10
|
+
export { DASHBOARD_EXTENSION_TYPE };
|
|
163
11
|
export declare class DashboardExtension {
|
|
164
12
|
private readonly omu;
|
|
165
13
|
readonly type: ExtensionType<DashboardExtension>;
|
|
166
14
|
private dashboard;
|
|
167
|
-
private dragDropHandler;
|
|
168
|
-
private dragDropListeners;
|
|
169
|
-
readonly allowedHosts: Table<AllowedHost>;
|
|
170
15
|
readonly speechRecognition: Registry<TranscriptStatus>;
|
|
171
|
-
private readonly
|
|
16
|
+
private readonly webview;
|
|
17
|
+
private readonly dragdrop;
|
|
18
|
+
readonly apps: DashboardApps;
|
|
172
19
|
constructor(omu: Omu);
|
|
173
20
|
private executeRequestForDashboard;
|
|
174
21
|
private handlePromptRequest;
|
|
@@ -177,11 +24,8 @@ export declare class DashboardExtension {
|
|
|
177
24
|
set(dashboard: DashboardHandler): void;
|
|
178
25
|
requestWebview(options: WebviewRequest): PromiseResult<WebviewHandle, UserError>;
|
|
179
26
|
getCookies(options: GetCookiesRequest): PromiseResult<CookieList, UserError>;
|
|
180
|
-
openApp(app: App): Promise<void>;
|
|
181
|
-
installApp(app: App): Promise<AppInstallResponse>;
|
|
182
27
|
clearBlockedPrompts(): Promise<null>;
|
|
183
28
|
requestDragDrop(): Promise<DragDropHandler>;
|
|
184
29
|
notifyDropDragState(packet: FileDragPacket): Promise<void>;
|
|
185
30
|
requestSpeechRecognition(): PromiseResult<Registry<TranscriptStatus>, UserError>;
|
|
186
31
|
}
|
|
187
|
-
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{PromiseResult as d}from"../../result.js";import{DashboardApps as l}from"./apps.js";import{DASHBOARD_EXTENSION_TYPE as a,DASHBOARD_PROMPT_CLEAR_BLOCKED as h,DASHBOARD_SET_ENDPOINT as u,DASHBOARD_SET_PERMISSION_ID as c,DASHBOARD_SPEECH_RECOGNITION as D,DASHBOARD_SPEECH_RECOGNITION_START as i}from"./constants.js";import{DragDropAPI as m}from"./dragdrop.js";import{DASHBOARD_OPEN_APP_PACKET as o,DASHBOARD_PROMPT_REQUEST as n,DASHBOARD_PROMPT_RESPONSE as p}from"./packets.js";import{WebviewAPI as R}from"./webview.js";class M{constructor(e){this.omu=e;this.webview=new R(e),this.dragdrop=new m(e),this.apps=new l(e),e.network.registerPacket(o,n,p),e.network.addPacketHandler(n,r=>{this.handlePromptRequest(r)}),e.network.addPacketHandler(o,r=>{this.handleOpenApp(r)}),this.speechRecognition=e.registries.get(D)}type=a;dashboard=null;speechRecognition;webview;dragdrop;apps;async executeRequestForDashboard(e){const r=this.getDashboard();switch(e.kind){case"app/permissions":return await r.handlePermissionRequest(e);case"app/plugins":return await r.handlePluginRequest(e);case"app/install":return await r.handleInstallApp(e);case"app/update":return await r.handleUpdateApp(e);case"index/install":return await r.handleIndexInstall(e);case"http/port":return await r.handleHttpPortRequest(e);default:throw new Error(`Unknown prompt requested: ${JSON.stringify(e)}`)}}async handlePromptRequest(e){const r=await this.executeRequestForDashboard(e);this.omu.send(p,{id:e.id,kind:e.kind,result:r})}async handleOpenApp(e){await this.getDashboard().handleOpenApp(e)}getDashboard(){if(this.dashboard===null)throw new Error("Dashboard not set");return this.dashboard}set(e){if(this.omu.permissions.require(c),this.dashboard!==null)throw new Error("Dashboard already set");this.dashboard=e,this.webview.setDashboard(e),this.dragdrop.setDashboard(e),this.apps.setDashboard(e),this.omu.network.addTask(async()=>{if(!(await this.omu.endpoints.call(u,this.omu.app.id)).success)throw new Error("Failed to set dashboard")}),this.omu.endpoints.bind(i,async(r,t)=>await e.speechRecognitionStart(r,t))}requestWebview(e){return this.webview.requestWebview(e)}getCookies(e){return this.webview.getCookies(e)}async clearBlockedPrompts(){return await this.omu.endpoints.call(h,null)}async requestDragDrop(){return this.dragdrop.requestDragDrop()}async notifyDropDragState(e){return this.notifyDropDragState(e)}requestSpeechRecognition(){const{promise:e,resolve:r,reject:t}=d.create();return this.omu.endpoints.call(i,{type:"start"}).then(s=>{s.type==="ok"?r(this.speechRecognition):t(s)}),e}}export{a as DASHBOARD_EXTENSION_TYPE,M as DashboardExtension};
|
|
2
2
|
//# sourceMappingURL=extension.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/api/dashboard/extension.ts"],
|
|
4
|
-
"sourcesContent": ["import { App, AppJson } from '../../app.js';\nimport { Identifier, IdentifierMap } from '../../identifier';\nimport { PacketType } from '../../network/packet/packet.js';\nimport { Omu } from '../../omu.js';\nimport { PromiseResult } from '../../result.js';\nimport { Serializer } from '../../serialize';\nimport { EndpointType } from '../endpoint/endpoint.js';\nimport { InvokedParams } from '../endpoint/packets.js';\nimport { ExtensionType } from '../extension.js';\nimport { PermissionTypeJson } from '../permission/permission.js';\nimport { PackageInfo } from '../plugin/package-info.js';\nimport { Registry, RegistryType } from '../registry/registry.js';\nimport { AppIndexRegistryMeta } from '../server/extension.js';\nimport type { Table } from '../table/table.js';\nimport { TableType } from '../table/table.js';\n\nimport type { DashboardHandler } from './handler.js';\nimport { AppInstallResponse, DragDrop, DragDropReadRequest, DragDropReadResponse, DragDropRequestDashboard, DragDropRequestResponse, DragEnter, DragLeave, DragOver, FileDragPacket } from './packets.js';\n\nexport const DASHBOARD_EXTENSION_TYPE: ExtensionType<DashboardExtension> = new ExtensionType(\n 'dashboard',\n (omu: Omu) => new DashboardExtension(omu),\n);\n\ntype DashboardSetResponse = {\n success: boolean;\n};\nexport const DASHBOARD_SET_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('set');\nconst DASHBOARD_SET_ENDPOINT = EndpointType.createJson<Identifier, DashboardSetResponse>(\n DASHBOARD_EXTENSION_TYPE,\n {\n name: 'set',\n requestSerializer: Identifier,\n permissionId: DASHBOARD_SET_PERMISSION_ID,\n },\n);\nexport const DASHBOARD_OPEN_APP_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('app', 'open');\nconst DASHBOARD_OPEN_APP_ENDPOINT = EndpointType.createJson<App, void>(DASHBOARD_EXTENSION_TYPE, {\n name: 'open_app',\n requestSerializer: App,\n permissionId: DASHBOARD_OPEN_APP_PERMISSION_ID,\n});\nconst DASHBOARD_OPEN_APP_PACKET = PacketType.createJson<App>(DASHBOARD_EXTENSION_TYPE, {\n name: 'open_app',\n serializer: App,\n});\nexport const DASHOBARD_APP_READ_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('app', 'read');\nexport const DASHOBARD_APP_EDIT_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('app', 'edit');\nexport const DASHBOARD_APP_INSTALL_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('app', 'install');\nconst DASHBOARD_APP_INSTALL_ENDPOINT = EndpointType.createJson<App, AppInstallResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'install_app',\n requestSerializer: App,\n permissionId: DASHBOARD_APP_INSTALL_PERMISSION_ID,\n});\nexport const DASHBOARD_DRAG_DROP_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('drag_drop');\nconst DASHBOARD_DRAG_DROP_STATE_PACKET = PacketType.createJson<FileDragPacket>(DASHBOARD_EXTENSION_TYPE, {\n name: 'drag_drop_state',\n serializer: Serializer.noop<FileDragPacket>()\n .field('app', App),\n});\nconst DASHBOARD_DRAG_DROP_READ_ENDPOINT = EndpointType.createSerialized<DragDropReadRequest, DragDropReadResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'drag_drop_read',\n requestSerializer: Serializer.json(),\n responseSerializer: DragDropReadResponse,\n permissionId: DASHBOARD_DRAG_DROP_PERMISSION_ID,\n});\nconst DASHBOARD_DRAG_DROP_REQUEST_ENDPOINT = EndpointType.createJson<DragDropRequestDashboard, DragDropRequestResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'drag_drop_request',\n permissionId: DASHBOARD_DRAG_DROP_PERMISSION_ID,\n});\n\ntype DragDropHandler = {\n onEnter(fn: (event: DragEnter) => unknown): void;\n onOver(fn: (event: DragOver) => unknown): void;\n onDrop(fn: (event: DragDrop) => unknown): void;\n onLeave(fn: (event: DragLeave) => unknown): void;\n read(id: string): Promise<DragDropReadResponse>;\n};\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 WebviewRequest = {\n url: string;\n script?: string;\n};\n\nexport type WebviewPacket = {\n id: string;\n};\n\nexport type UserResponse<T = undefined> = {\n type: 'ok';\n value: T;\n} | {\n type: 'blocked';\n} | {\n type: 'cancelled';\n};\n\nexport type UserError = Exclude<UserResponse, { type: 'ok' }>;\n\nexport type WebviewResponse = UserResponse<WebviewPacket>;\n\nexport const DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('webview');\n\nexport type HostRequest = {\n host: string;\n};\n\nexport type GetCookiesRequest = {\n url: string;\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 type WebviewEvent = {\n type: 'closed';\n} | {\n type: 'resize';\n dimentions: {\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 WebviewEventListeners = {\n [K in WebviewEvent['type']]?: Array<(event: Extract<WebviewEvent, { type: K }>) => void>;\n};\n\nexport type WebviewEventPacket = {\n id: Identifier;\n target: Identifier;\n event: WebviewEvent;\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\nconst DASHBOARD_WEBVIEW_EVENT_PACKET = 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\ntype AllowedHost = {\n id: string;\n hosts: string[];\n};\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<{\n host: string;\n}, UserResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'host_request',\n permissionId: DASHBOARD_WEBVIEW_PERMISSION_ID,\n});\n\nexport const DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID: Identifier = DASHBOARD_EXTENSION_TYPE.join('speech_recognition');\n\nexport type TranscriptSegment = {\n confidence: number;\n transcript: string;\n};\n\nexport type TranscriptStatus = {\n type: 'idle';\n} | {\n type: 'result';\n timestamp: number;\n segments: TranscriptSegment[];\n} | {\n type: 'final';\n timestamp: number;\n segments: TranscriptSegment[];\n} | {\n type: 'audio_started';\n timestamp: number;\n} | {\n type: 'audio_ended';\n timestamp: number;\n};\n\nconst DASHBOARD_SPEECH_RECOGNITION = RegistryType.createJson<TranscriptStatus>(DASHBOARD_EXTENSION_TYPE, {\n name: 'speech_recognition',\n defaultValue: { type: 'idle' },\n permissions: {\n read: DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n write: DASHBOARD_SET_PERMISSION_ID,\n },\n});\n\nexport type SpeechRecognitionStart = {\n type: 'start';\n};\n\nconst DASHBOARD_SPEECH_RECOGNITION_START = EndpointType.createJson<SpeechRecognitionStart, UserResponse<undefined>>(DASHBOARD_EXTENSION_TYPE, {\n name: 'speech_recognition_start',\n permissionId: DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n});\n\ninterface 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 PromptRequest = (\n PromptRequestAppPermissions\n | PromptRequestAppPlugins\n | PromptRequestAppInstall\n | PromptRequestAppUpdate\n | PromptRequestIndexInstall\n | PromptRequestHttpPort\n);\n\nconst DASHBOARD_PROMPT_REQUEST = PacketType.createJson<PromptRequest>(DASHBOARD_EXTENSION_TYPE, {\n name: 'prompt_request',\n});\n\nexport type PromptResult = 'accept' | 'deny' | 'block';\n\ninterface PromptResponse {\n id: string;\n kind: string;\n result: PromptResult;\n}\n\nconst DASHBOARD_PROMPT_RESPONSE = PacketType.createJson<PromptResponse>(DASHBOARD_EXTENSION_TYPE, {\n name: 'prompt_response',\n});\n\nconst DASHBOARD_PROMPT_CLEAR_BLOCKED = EndpointType.createJson<null, null>(DASHBOARD_EXTENSION_TYPE, {\n name: 'prompt_clear_blocked',\n});\n\nexport class DashboardExtension {\n public readonly type: ExtensionType<DashboardExtension> = DASHBOARD_EXTENSION_TYPE;\n private dashboard: DashboardHandler | null = null;\n private dragDropHandler: DragDropHandler | null = null;\n private dragDropListeners = {\n enter: [] as Array<(state: DragEnter) => unknown>,\n over: [] as Array<(state: DragOver) => unknown>,\n drop: [] as Array<(state: DragDrop) => unknown>,\n leave: [] as Array<(state: DragLeave) => unknown>,\n };\n public readonly allowedHosts: Table<AllowedHost>;\n public readonly speechRecognition: Registry<TranscriptStatus>;\n private readonly webviewHandles: IdentifierMap<{ handle: WebviewHandle; emit: WebviewEventEmit }> = new IdentifierMap();\n\n constructor(private readonly omu: Omu) {\n omu.network.registerPacket(\n DASHBOARD_OPEN_APP_PACKET,\n DASHBOARD_DRAG_DROP_STATE_PACKET,\n DASHBOARD_WEBVIEW_EVENT_PACKET,\n DASHBOARD_PROMPT_REQUEST,\n DASHBOARD_PROMPT_RESPONSE,\n );\n omu.network.addPacketHandler(DASHBOARD_PROMPT_REQUEST, (request) => {\n this.handlePromptRequest(request);\n });\n omu.network.addPacketHandler(DASHBOARD_OPEN_APP_PACKET, (app) => {\n this.handleOpenApp(app);\n });\n omu.network.addPacketHandler(DASHBOARD_DRAG_DROP_STATE_PACKET, ({ state }) => {\n switch (state.type) {\n case 'enter': {\n this.dragDropListeners.enter.forEach((fn) => fn(state));\n break;\n }\n case 'over': {\n this.dragDropListeners.over.forEach((fn) => fn(state));\n break;\n }\n case 'drop': {\n this.dragDropListeners.drop.forEach((fn) => fn(state));\n break;\n }\n case 'leave': {\n this.dragDropListeners.leave.forEach((fn) => fn(state));\n break;\n }\n }\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 this.speechRecognition = omu.registries.get(DASHBOARD_SPEECH_RECOGNITION);\n }\n\n private async executeRequestForDashboard(request: PromptRequest): Promise<PromptResult> {\n const dashboard = this.getDashboard();\n switch (request.kind) {\n case 'app/permissions':\n return await dashboard.handlePermissionRequest(request);\n case 'app/plugins':\n return await dashboard.handlePluginRequest(request);\n case 'app/install':\n return await dashboard.handleInstallApp(request);\n case 'app/update':\n return await dashboard.handleUpdateApp(request);\n case 'index/install':\n return await dashboard.handleIndexInstall(request);\n case 'http/port':\n return await dashboard.handleHttpPortRequest(request);\n default:\n throw new Error(`Unknown prompt requested: ${JSON.stringify(request)}`);\n }\n }\n\n private async handlePromptRequest(request: PromptRequest): Promise<void> {\n const response = await this.executeRequestForDashboard(request);\n this.omu.send(DASHBOARD_PROMPT_RESPONSE, {\n id: request.id,\n kind: request.kind,\n result: response,\n });\n }\n\n private async handleOpenApp(app: App): Promise<void> {\n const dashboard = this.getDashboard();\n await dashboard.handleOpenApp(app);\n }\n\n private getDashboard(): DashboardHandler {\n if (this.dashboard === null) {\n throw new Error('Dashboard not set');\n }\n return this.dashboard;\n }\n\n public set(dashboard: DashboardHandler): void {\n this.omu.permissions.require(DASHBOARD_SET_PERMISSION_ID);\n if (this.dashboard !== null) {\n throw new Error('Dashboard already set');\n }\n this.dashboard = dashboard;\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\n const requireHost = async (params: InvokedParams, host: string): Promise<UserResponse<undefined>> => {\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 if (!allowed) {\n const result = await dashboard.handleHostRequest({\n host,\n }, params);\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 return { type: 'ok', value: undefined };\n };\n\n this.omu.endpoints.bind(DASHBOARD_DRAG_DROP_REQUEST_ENDPOINT, async (request: DragDropRequestDashboard, params): Promise<DragDropRequestResponse> => {\n const dashboard = this.getDashboard();\n const accepted = await dashboard.handleDragDropRequest(request, params);\n return {\n ok: accepted,\n };\n });\n this.omu.endpoints.bind(DASHBOARD_DRAG_DROP_READ_ENDPOINT, async (request, params): Promise<DragDropReadResponse> => {\n const dashboard = this.getDashboard();\n const response = await dashboard.handleDragDropReadRequest(request, params);\n return response;\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 const emit = async (event: WebviewEvent) => {\n this.omu.send(DASHBOARD_WEBVIEW_EVENT_PACKET, {\n id,\n target: params.caller,\n event,\n });\n };\n const id = await dashboard.createWebview(request, params, emit);\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 this.omu.endpoints.bind(DASHBOARD_SPEECH_RECOGNITION_START, async (request, params): Promise<UserResponse<undefined>> => {\n const result = await dashboard.speechRecognitionStart(request, params);\n return result;\n });\n this.omu.network.addTask(async () => {\n const response = await this.omu.endpoints.call(\n DASHBOARD_SET_ENDPOINT,\n this.omu.app.id,\n );\n if (!response.success) {\n throw new Error('Failed to set dashboard');\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 public async openApp(app: App): Promise<void> {\n return await this.omu.endpoints.call(DASHBOARD_OPEN_APP_ENDPOINT, app);\n }\n\n public async installApp(app: App): Promise<AppInstallResponse> {\n return await this.omu.endpoints.call(DASHBOARD_APP_INSTALL_ENDPOINT, app);\n }\n\n public async clearBlockedPrompts(): Promise<null> {\n return await this.omu.endpoints.call(DASHBOARD_PROMPT_CLEAR_BLOCKED, null);\n }\n\n public async requestDragDrop(): Promise<DragDropHandler> {\n await this.omu.endpoints.call(DASHBOARD_DRAG_DROP_REQUEST_ENDPOINT, {});\n const listeners = this.dragDropListeners;\n const client = this.omu;\n this.dragDropHandler = {\n onEnter(fn) { listeners.enter.push(fn); },\n onOver(fn) { listeners.over.push(fn); },\n onDrop(fn) { listeners.drop.push(fn); },\n onLeave(fn) { listeners.leave.push(fn); },\n async read(id) { return await client.endpoints.call(DASHBOARD_DRAG_DROP_READ_ENDPOINT, { drag_id: id }); },\n };\n return this.dragDropHandler;\n }\n\n public async notifyDropDragState(packet: FileDragPacket): Promise<void> {\n this.omu.send(DASHBOARD_DRAG_DROP_STATE_PACKET, packet);\n }\n\n public requestSpeechRecognition(): PromiseResult<Registry<TranscriptStatus>, UserError> {\n const { promise, resolve, reject } = PromiseResult.create<Registry<TranscriptStatus>, UserError>();\n this.omu.endpoints.call(DASHBOARD_SPEECH_RECOGNITION_START, { type: 'start' }).then((result) => {\n if (result.type === 'ok') {\n resolve(this.speechRecognition);\n } else {\n reject(result);\n }\n });\n return promise;\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["import { App } from '../../app.js';\nimport { Omu } from '../../omu.js';\nimport { PromiseResult } from '../../result.js';\nimport { ExtensionType } from '../extension.js';\nimport { Registry } from '../registry/registry.js';\nimport { DashboardApps } from './apps.js';\nimport { DASHBOARD_EXTENSION_TYPE, DASHBOARD_PROMPT_CLEAR_BLOCKED, DASHBOARD_SET_ENDPOINT, DASHBOARD_SET_PERMISSION_ID, DASHBOARD_SPEECH_RECOGNITION, DASHBOARD_SPEECH_RECOGNITION_START, TranscriptStatus, UserError, UserResponse } from './constants.js';\nimport { DragDropAPI, DragDropHandler, FileDragPacket } from './dragdrop.js';\n\nimport type { DashboardHandler } from './handler.js';\nimport { DASHBOARD_OPEN_APP_PACKET, DASHBOARD_PROMPT_REQUEST, DASHBOARD_PROMPT_RESPONSE, PromptRequest, PromptResult } from './packets.js';\nimport { GetCookiesRequest, WebviewAPI, WebviewHandle, WebviewRequest } from './webview.js';\n\nexport { DASHBOARD_EXTENSION_TYPE };\n\nexport class DashboardExtension {\n public readonly type: ExtensionType<DashboardExtension> = DASHBOARD_EXTENSION_TYPE;\n private dashboard: DashboardHandler | null = null;\n public readonly speechRecognition: Registry<TranscriptStatus>;\n private readonly webview: WebviewAPI;\n private readonly dragdrop: DragDropAPI;\n public readonly apps: DashboardApps;\n\n constructor(private readonly omu: Omu) {\n this.webview = new WebviewAPI(omu);\n this.dragdrop = new DragDropAPI(omu);\n this.apps = new DashboardApps(omu);\n omu.network.registerPacket(\n DASHBOARD_OPEN_APP_PACKET,\n DASHBOARD_PROMPT_REQUEST,\n DASHBOARD_PROMPT_RESPONSE,\n );\n omu.network.addPacketHandler(DASHBOARD_PROMPT_REQUEST, (request) => {\n this.handlePromptRequest(request);\n });\n omu.network.addPacketHandler(DASHBOARD_OPEN_APP_PACKET, (app) => {\n this.handleOpenApp(app);\n });\n this.speechRecognition = omu.registries.get(DASHBOARD_SPEECH_RECOGNITION);\n }\n\n private async executeRequestForDashboard(request: PromptRequest): Promise<PromptResult> {\n const dashboard = this.getDashboard();\n switch (request.kind) {\n case 'app/permissions':\n return await dashboard.handlePermissionRequest(request);\n case 'app/plugins':\n return await dashboard.handlePluginRequest(request);\n case 'app/install':\n return await dashboard.handleInstallApp(request);\n case 'app/update':\n return await dashboard.handleUpdateApp(request);\n case 'index/install':\n return await dashboard.handleIndexInstall(request);\n case 'http/port':\n return await dashboard.handleHttpPortRequest(request);\n default:\n throw new Error(`Unknown prompt requested: ${JSON.stringify(request)}`);\n }\n }\n\n private async handlePromptRequest(request: PromptRequest): Promise<void> {\n const response = await this.executeRequestForDashboard(request);\n this.omu.send(DASHBOARD_PROMPT_RESPONSE, {\n id: request.id,\n kind: request.kind,\n result: response,\n });\n }\n\n private async handleOpenApp(app: App): Promise<void> {\n const dashboard = this.getDashboard();\n await dashboard.handleOpenApp(app);\n }\n\n private getDashboard(): DashboardHandler {\n if (this.dashboard === null) {\n throw new Error('Dashboard not set');\n }\n return this.dashboard;\n }\n\n public set(dashboard: DashboardHandler): void {\n this.omu.permissions.require(DASHBOARD_SET_PERMISSION_ID);\n if (this.dashboard !== null) {\n throw new Error('Dashboard already set');\n }\n this.dashboard = dashboard;\n\n this.webview.setDashboard(dashboard);\n this.dragdrop.setDashboard(dashboard);\n this.apps.setDashboard(dashboard);\n this.omu.network.addTask(async () => {\n const response = await this.omu.endpoints.call(\n DASHBOARD_SET_ENDPOINT,\n this.omu.app.id,\n );\n if (!response.success) {\n throw new Error('Failed to set dashboard');\n }\n });\n this.omu.endpoints.bind(DASHBOARD_SPEECH_RECOGNITION_START, async (request, params): Promise<UserResponse<undefined>> => {\n const result = await dashboard.speechRecognitionStart(request, params);\n return result;\n });\n }\n\n public requestWebview(options: WebviewRequest): PromiseResult<WebviewHandle, UserError> {\n return this.webview.requestWebview(options);\n }\n\n public getCookies(options: GetCookiesRequest): PromiseResult<CookieList, UserError> {\n return this.webview.getCookies(options);\n }\n\n public async clearBlockedPrompts(): Promise<null> {\n return await this.omu.endpoints.call(DASHBOARD_PROMPT_CLEAR_BLOCKED, null);\n }\n\n public async requestDragDrop(): Promise<DragDropHandler> {\n return this.dragdrop.requestDragDrop();\n }\n\n public async notifyDropDragState(packet: FileDragPacket): Promise<void> {\n return this.notifyDropDragState(packet);\n }\n\n public requestSpeechRecognition(): PromiseResult<Registry<TranscriptStatus>, UserError> {\n const { promise, resolve, reject } = PromiseResult.create<Registry<TranscriptStatus>, UserError>();\n this.omu.endpoints.call(DASHBOARD_SPEECH_RECOGNITION_START, { type: 'start' }).then((result) => {\n if (result.type === 'ok') {\n resolve(this.speechRecognition);\n } else {\n reject(result);\n }\n });\n return promise;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAEA,OAAS,iBAAAA,MAAqB,kBAG9B,OAAS,iBAAAC,MAAqB,YAC9B,OAAS,4BAAAC,EAA0B,kCAAAC,EAAgC,0BAAAC,EAAwB,+BAAAC,EAA6B,gCAAAC,EAA8B,sCAAAC,MAAqF,iBAC3O,OAAS,eAAAC,MAAoD,gBAG7D,OAAS,6BAAAC,EAA2B,4BAAAC,EAA0B,6BAAAC,MAA8D,eAC5H,OAA4B,cAAAC,MAAiD,eAItE,MAAMC,CAAmB,CAQ5B,YAA6BC,EAAU,CAAV,SAAAA,EACzB,KAAK,QAAU,IAAIF,EAAWE,CAAG,EACjC,KAAK,SAAW,IAAIN,EAAYM,CAAG,EACnC,KAAK,KAAO,IAAIb,EAAca,CAAG,EACjCA,EAAI,QAAQ,eACRL,EACAC,EACAC,CACJ,EACAG,EAAI,QAAQ,iBAAiBJ,EAA2BK,GAAY,CAChE,KAAK,oBAAoBA,CAAO,CACpC,CAAC,EACDD,EAAI,QAAQ,iBAAiBL,EAA4BO,GAAQ,CAC7D,KAAK,cAAcA,CAAG,CAC1B,CAAC,EACD,KAAK,kBAAoBF,EAAI,WAAW,IAAIR,CAA4B,CAC5E,CAvBgB,KAA0CJ,EAClD,UAAqC,KAC7B,kBACC,QACA,SACD,KAoBhB,MAAc,2BAA2Ba,EAA+C,CACpF,MAAME,EAAY,KAAK,aAAa,EACpC,OAAQF,EAAQ,KAAM,CAClB,IAAK,kBACD,OAAO,MAAME,EAAU,wBAAwBF,CAAO,EAC1D,IAAK,cACD,OAAO,MAAME,EAAU,oBAAoBF,CAAO,EACtD,IAAK,cACD,OAAO,MAAME,EAAU,iBAAiBF,CAAO,EACnD,IAAK,aACD,OAAO,MAAME,EAAU,gBAAgBF,CAAO,EAClD,IAAK,gBACD,OAAO,MAAME,EAAU,mBAAmBF,CAAO,EACrD,IAAK,YACD,OAAO,MAAME,EAAU,sBAAsBF,CAAO,EACxD,QACI,MAAM,IAAI,MAAM,6BAA6B,KAAK,UAAUA,CAAO,CAAC,EAAE,CAC9E,CACJ,CAEA,MAAc,oBAAoBA,EAAuC,CACrE,MAAMG,EAAW,MAAM,KAAK,2BAA2BH,CAAO,EAC9D,KAAK,IAAI,KAAKJ,EAA2B,CACrC,GAAII,EAAQ,GACZ,KAAMA,EAAQ,KACd,OAAQG,CACZ,CAAC,CACL,CAEA,MAAc,cAAcF,EAAyB,CAEjD,MADkB,KAAK,aAAa,EACpB,cAAcA,CAAG,CACrC,CAEQ,cAAiC,CACrC,GAAI,KAAK,YAAc,KACnB,MAAM,IAAI,MAAM,mBAAmB,EAEvC,OAAO,KAAK,SAChB,CAEO,IAAIC,EAAmC,CAE1C,GADA,KAAK,IAAI,YAAY,QAAQZ,CAA2B,EACpD,KAAK,YAAc,KACnB,MAAM,IAAI,MAAM,uBAAuB,EAE3C,KAAK,UAAYY,EAEjB,KAAK,QAAQ,aAAaA,CAAS,EACnC,KAAK,SAAS,aAAaA,CAAS,EACpC,KAAK,KAAK,aAAaA,CAAS,EAChC,KAAK,IAAI,QAAQ,QAAQ,SAAY,CAKjC,GAAI,EAJa,MAAM,KAAK,IAAI,UAAU,KACtCb,EACA,KAAK,IAAI,IAAI,EACjB,GACc,QACV,MAAM,IAAI,MAAM,yBAAyB,CAEjD,CAAC,EACD,KAAK,IAAI,UAAU,KAAKG,EAAoC,MAAOQ,EAASI,IACzD,MAAMF,EAAU,uBAAuBF,EAASI,CAAM,CAExE,CACL,CAEO,eAAeC,EAAkE,CACpF,OAAO,KAAK,QAAQ,eAAeA,CAAO,CAC9C,CAEO,WAAWA,EAAkE,CAChF,OAAO,KAAK,QAAQ,WAAWA,CAAO,CAC1C,CAEA,MAAa,qBAAqC,CAC9C,OAAO,MAAM,KAAK,IAAI,UAAU,KAAKjB,EAAgC,IAAI,CAC7E,CAEA,MAAa,iBAA4C,CACrD,OAAO,KAAK,SAAS,gBAAgB,CACzC,CAEA,MAAa,oBAAoBkB,EAAuC,CACpE,OAAO,KAAK,oBAAoBA,CAAM,CAC1C,CAEO,0BAAiF,CACpF,KAAM,CAAE,QAAAC,EAAS,QAAAC,EAAS,OAAAC,CAAO,EAAIxB,EAAc,OAA8C,EACjG,YAAK,IAAI,UAAU,KAAKO,EAAoC,CAAE,KAAM,OAAQ,CAAC,EAAE,KAAMkB,GAAW,CACxFA,EAAO,OAAS,KAChBF,EAAQ,KAAK,iBAAiB,EAE9BC,EAAOC,CAAM,CAErB,CAAC,EACMH,CACX,CACJ",
|
|
6
|
+
"names": ["PromiseResult", "DashboardApps", "DASHBOARD_EXTENSION_TYPE", "DASHBOARD_PROMPT_CLEAR_BLOCKED", "DASHBOARD_SET_ENDPOINT", "DASHBOARD_SET_PERMISSION_ID", "DASHBOARD_SPEECH_RECOGNITION", "DASHBOARD_SPEECH_RECOGNITION_START", "DragDropAPI", "DASHBOARD_OPEN_APP_PACKET", "DASHBOARD_PROMPT_REQUEST", "DASHBOARD_PROMPT_RESPONSE", "WebviewAPI", "DashboardExtension", "omu", "request", "app", "dashboard", "response", "params", "options", "packet", "promise", "resolve", "reject", "result"]
|
|
7
7
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { App } from '../../app.js';
|
|
2
2
|
import { Identifier } from '../../identifier';
|
|
3
3
|
import { InvokedParams } from '../endpoint/packets.js';
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
4
|
+
import { HostRequest, SpeechRecognitionStart, UserResponse } from './constants.js';
|
|
5
|
+
import { DragDropReadRequest, DragDropReadResponse, DragDropRequestDashboard } from './dragdrop.js';
|
|
6
|
+
import type { PromptRequestAppInstall, PromptRequestAppPermissions, PromptRequestAppPlugins, PromptRequestAppUpdate, PromptRequestHttpPort, PromptRequestIndexInstall, PromptResult } from './packets.js';
|
|
7
|
+
import { Cookie, GetCookiesRequest, WebviewEvent, WebviewPacket, WebviewRequest } from './webview.js';
|
|
6
8
|
export interface DashboardHandler {
|
|
7
9
|
handlePermissionRequest(request: PromptRequestAppPermissions): Promise<PromptResult>;
|
|
8
10
|
handlePluginRequest(request: PromptRequestAppPlugins): Promise<PromptResult>;
|
|
@@ -14,9 +16,11 @@ export interface DashboardHandler {
|
|
|
14
16
|
handleDragDropRequest(request: DragDropRequestDashboard, params: InvokedParams): Promise<boolean>;
|
|
15
17
|
handleDragDropReadRequest(request: DragDropReadRequest, params: InvokedParams): Promise<DragDropReadResponse>;
|
|
16
18
|
handleHostRequest(request: HostRequest, params: InvokedParams): Promise<PromptResult>;
|
|
19
|
+
openApp(...apps: App[]): Promise<void>;
|
|
17
20
|
getCookies(request: GetCookiesRequest): Promise<UserResponse<Cookie[]>>;
|
|
18
21
|
createWebview(request: WebviewRequest, params: InvokedParams, emit: (event: WebviewEvent) => Promise<void>): Promise<Identifier>;
|
|
19
22
|
getWebview(request: WebviewPacket, params: InvokedParams): Promise<Identifier | undefined>;
|
|
20
23
|
closeWebview(request: WebviewPacket, params: InvokedParams): Promise<Identifier | undefined>;
|
|
21
24
|
speechRecognitionStart(request: SpeechRecognitionStart, params: InvokedParams): Promise<UserResponse<undefined>>;
|
|
25
|
+
closeApp(id: Identifier): Promise<void>;
|
|
22
26
|
}
|
|
@@ -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
|
+
}
|
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
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["export { AppIndexRegistry, type AppIndexRegistryJSON } from './api/server';\nexport { App, type AppMetadata } from './app.js';\nexport { DisconnectReason } from './errors.js';\nexport { Identifier, IdentifierMap, IdentifierSet, type IntoId } from './identifier';\nexport * as network from './network';\nexport { Omu } from './omu.js';\nexport { Serializer } from './serialize';\nexport type { Serializable } from './serialize';\nexport { BrowserSession, type SessionParam, type SessioTokenProvider } from './token';\n\nimport { ASSET_PERMISSION_ID } from './api/asset';\nimport {\n DASHBOARD_APP_INSTALL_PERMISSION_ID,\n
|
|
5
|
-
"mappings": "AAAA,OAAS,oBAAAA,MAAmD,eAC5D,OAAS,OAAAC,MAA6B,WACtC,OAAS,oBAAAC,MAAwB,cACjC,OAAS,cAAAC,EAAY,iBAAAC,EAAe,iBAAAC,MAAkC,eACtE,UAAYC,MAAa,YACzB,OAAS,OAAAC,MAAW,WACpB,OAAS,cAAAC,MAAkB,cAE3B,OAAS,kBAAAC,OAAmE,UAE5E,OAAS,uBAAAC,MAA2B,cACpC,OACI,uCAAAC,EACA,qCAAAC,EACA,oCAAAC,EACA,+BAAAC,EACA,8CAAAC,EACA,mCAAAC,
|
|
6
|
-
"names": ["AppIndexRegistry", "App", "DisconnectReason", "Identifier", "IdentifierMap", "IdentifierSet", "network", "Omu", "Serializer", "BrowserSession", "ASSET_PERMISSION_ID", "DASHBOARD_APP_INSTALL_PERMISSION_ID", "
|
|
4
|
+
"sourcesContent": ["export { AppIndexRegistry, type AppIndexRegistryJSON } from './api/server';\nexport { App, type AppMetadata } from './app.js';\nexport { DisconnectReason } from './errors.js';\nexport { Identifier, IdentifierMap, IdentifierSet, type IntoId } from './identifier';\nexport * as network from './network';\nexport { Omu } from './omu.js';\nexport { Serializer } from './serialize';\nexport type { Serializable } from './serialize';\nexport { BrowserSession, type SessionParam, type SessioTokenProvider } from './token';\n\nimport { ASSET_PERMISSION_ID } from './api/asset';\nimport {\n DASHBOARD_APP_INSTALL_PERMISSION_ID,\n DASHBOARD_DRAG_DROP_PERMISSION_ID,\n DASHBOARD_OPEN_APP_PERMISSION_ID,\n DASHBOARD_SET_PERMISSION_ID,\n DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n DASHBOARD_WEBVIEW_PERMISSION_ID,\n} from './api/dashboard';\nimport { DASHBOARD_APP_CLOSE_PERMISSION_ID, DASHBOARD_APP_STARTUP_PERMISSION_ID } from './api/dashboard/apps';\nimport { HTTP_REQUEST_PERMISSION_ID } from './api/http';\nimport { I18N_GET_LOCALES_PERMISSION_ID, I18N_SET_LOCALES_PERMISSION_ID } from './api/i18n';\nimport { LOGGER_LOG_PERMISSION_ID } from './api/logger';\nimport { PLUGIN_MANAGE_PACKAGE_PERMISSION_ID, PLUGIN_READ_PACKAGE_PERMISSION_ID } from './api/plugin';\nimport { REGISTRY_PERMISSION_ID } from './api/registry';\nimport { SERVER_APPS_READ_PERMISSION_ID, SERVER_SHUTDOWN_PERMISSION_ID, TRUSTED_ORIGINS_GET_PERMISSION_ID, TRUSTED_ORIGINS_SET_PERMISSION_ID } from './api/server';\nimport { GENERATE_TOKEN_PERMISSION_ID, REMOTE_APP_REQUEST_PERMISSION_ID, SESSIONS_READ_PERMISSION_ID } from './api/session';\nimport { TABLE_PERMISSION_ID } from './api/table';\nimport { Identifier } from './identifier';\n\nexport const OmuPermissions: {\n // Asset API\n readonly ASSET_PERMISSION_ID: Identifier;\n // Dashboard API\n readonly DASHBOARD_APP_INSTALL_PERMISSION_ID: Identifier; readonly DASHBOARD_DRAG_DROP_PERMISSION_ID: Identifier; readonly DASHBOARD_OPEN_APP_PERMISSION_ID: Identifier; readonly DASHBOARD_SET_PERMISSION_ID: Identifier; readonly DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID: Identifier; readonly DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier;\n readonly DASHBOARD_APP_STARTUP_PERMISSION_ID: Identifier;\n readonly DASHBOARD_APP_CLOSE_PERMISSION_ID: Identifier;\n // HTTP API\n readonly HTTP_REQUEST_PERMISSION_ID: Identifier;\n // I18n API\n readonly I18N_GET_LOCALES_PERMISSION_ID: Identifier; readonly I18N_SET_LOCALES_PERMISSION_ID: Identifier;\n // Logger API\n readonly LOGGER_LOG_PERMISSION_ID: Identifier;\n // Plugin API\n readonly PLUGIN_MANAGE_PACKAGE_PERMISSION_ID: Identifier; readonly PLUGIN_READ_PACKAGE_PERMISSION_ID: Identifier;\n // Registry API\n readonly REGISTRY_PERMISSION_ID: Identifier;\n // Server API\n readonly SERVER_APPS_READ_PERMISSION_ID: Identifier; readonly SERVER_SHUTDOWN_PERMISSION_ID: Identifier; readonly TRUSTED_ORIGINS_GET_PERMISSION_ID: Identifier; readonly TRUSTED_ORIGINS_SET_PERMISSION_ID: Identifier;\n // Session API\n readonly GENERATE_TOKEN_PERMISSION_ID: Identifier; readonly REMOTE_APP_REQUEST_PERMISSION_ID: Identifier; readonly SESSIONS_READ_PERMISSION_ID: Identifier;\n // Table API\n readonly TABLE_PERMISSION_ID: Identifier;\n} = {\n // Asset API\n ASSET_PERMISSION_ID,\n // Dashboard API\n DASHBOARD_APP_INSTALL_PERMISSION_ID,\n DASHBOARD_DRAG_DROP_PERMISSION_ID,\n DASHBOARD_OPEN_APP_PERMISSION_ID,\n DASHBOARD_SET_PERMISSION_ID,\n DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n DASHBOARD_WEBVIEW_PERMISSION_ID,\n DASHBOARD_APP_STARTUP_PERMISSION_ID,\n DASHBOARD_APP_CLOSE_PERMISSION_ID,\n // HTTP API\n HTTP_REQUEST_PERMISSION_ID,\n // I18n API\n I18N_GET_LOCALES_PERMISSION_ID,\n I18N_SET_LOCALES_PERMISSION_ID,\n // Logger API\n LOGGER_LOG_PERMISSION_ID,\n // Plugin API\n PLUGIN_MANAGE_PACKAGE_PERMISSION_ID,\n PLUGIN_READ_PACKAGE_PERMISSION_ID,\n // Registry API\n REGISTRY_PERMISSION_ID,\n // Server API\n SERVER_APPS_READ_PERMISSION_ID,\n SERVER_SHUTDOWN_PERMISSION_ID,\n TRUSTED_ORIGINS_GET_PERMISSION_ID,\n TRUSTED_ORIGINS_SET_PERMISSION_ID,\n // Session API\n GENERATE_TOKEN_PERMISSION_ID,\n REMOTE_APP_REQUEST_PERMISSION_ID,\n SESSIONS_READ_PERMISSION_ID,\n // Table API\n TABLE_PERMISSION_ID,\n} as const;\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,oBAAAA,MAAmD,eAC5D,OAAS,OAAAC,MAA6B,WACtC,OAAS,oBAAAC,MAAwB,cACjC,OAAS,cAAAC,EAAY,iBAAAC,EAAe,iBAAAC,MAAkC,eACtE,UAAYC,MAAa,YACzB,OAAS,OAAAC,MAAW,WACpB,OAAS,cAAAC,MAAkB,cAE3B,OAAS,kBAAAC,OAAmE,UAE5E,OAAS,uBAAAC,MAA2B,cACpC,OACI,uCAAAC,EACA,qCAAAC,EACA,oCAAAC,EACA,+BAAAC,EACA,8CAAAC,EACA,mCAAAC,MACG,kBACP,OAAS,qCAAAC,EAAmC,uCAAAC,MAA2C,uBACvF,OAAS,8BAAAC,MAAkC,aAC3C,OAAS,kCAAAC,EAAgC,kCAAAC,MAAsC,aAC/E,OAAS,4BAAAC,MAAgC,eACzC,OAAS,uCAAAC,EAAqC,qCAAAC,MAAyC,eACvF,OAAS,0BAAAC,MAA8B,iBACvC,OAAS,kCAAAC,EAAgC,iCAAAC,EAA+B,qCAAAC,EAAmC,qCAAAC,MAAyC,eACpJ,OAAS,gCAAAC,EAA8B,oCAAAC,EAAkC,+BAAAC,MAAmC,gBAC5G,OAAS,uBAAAC,MAA2B,cAG7B,MAAMC,EAuBT,CAEA,oBAAAxB,EAEA,oCAAAC,EACA,kCAAAC,EACA,iCAAAC,EACA,4BAAAC,EACA,2CAAAC,EACA,gCAAAC,EACA,oCAAAE,EACA,kCAAAD,EAEA,2BAAAE,EAEA,+BAAAC,EACA,+BAAAC,EAEA,yBAAAC,EAEA,oCAAAC,EACA,kCAAAC,EAEA,uBAAAC,EAEA,+BAAAC,EACA,8BAAAC,EACA,kCAAAC,EACA,kCAAAC,EAEA,6BAAAC,EACA,iCAAAC,EACA,4BAAAC,EAEA,oBAAAC,CACJ",
|
|
6
|
+
"names": ["AppIndexRegistry", "App", "DisconnectReason", "Identifier", "IdentifierMap", "IdentifierSet", "network", "Omu", "Serializer", "BrowserSession", "ASSET_PERMISSION_ID", "DASHBOARD_APP_INSTALL_PERMISSION_ID", "DASHBOARD_DRAG_DROP_PERMISSION_ID", "DASHBOARD_OPEN_APP_PERMISSION_ID", "DASHBOARD_SET_PERMISSION_ID", "DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID", "DASHBOARD_WEBVIEW_PERMISSION_ID", "DASHBOARD_APP_CLOSE_PERMISSION_ID", "DASHBOARD_APP_STARTUP_PERMISSION_ID", "HTTP_REQUEST_PERMISSION_ID", "I18N_GET_LOCALES_PERMISSION_ID", "I18N_SET_LOCALES_PERMISSION_ID", "LOGGER_LOG_PERMISSION_ID", "PLUGIN_MANAGE_PACKAGE_PERMISSION_ID", "PLUGIN_READ_PACKAGE_PERMISSION_ID", "REGISTRY_PERMISSION_ID", "SERVER_APPS_READ_PERMISSION_ID", "SERVER_SHUTDOWN_PERMISSION_ID", "TRUSTED_ORIGINS_GET_PERMISSION_ID", "TRUSTED_ORIGINS_SET_PERMISSION_ID", "GENERATE_TOKEN_PERMISSION_ID", "REMOTE_APP_REQUEST_PERMISSION_ID", "SESSIONS_READ_PERMISSION_ID", "TABLE_PERMISSION_ID", "OmuPermissions"]
|
|
7
7
|
}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.10.
|
|
1
|
+
export declare const VERSION = "0.10.1";
|
|
2
2
|
export declare const VERSION_MINOR = "0.10.0";
|
package/dist/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const o="0.10.
|
|
1
|
+
const o="0.10.1",t="0.10.0";export{o as VERSION,t as VERSION_MINOR};
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/version.ts"],
|
|
4
|
-
"sourcesContent": ["export const VERSION = '0.10.
|
|
4
|
+
"sourcesContent": ["export const VERSION = '0.10.1';\nexport const VERSION_MINOR = '0.10.0';\n"],
|
|
5
5
|
"mappings": "AAAO,MAAMA,EAAU,SACVC,EAAgB",
|
|
6
6
|
"names": ["VERSION", "VERSION_MINOR"]
|
|
7
7
|
}
|