@parlor/capabilities 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +15 -2
- package/dist/adapters/capacitor.d.ts +3 -0
- package/dist/adapters/capacitor.d.ts.map +1 -0
- package/dist/adapters/capacitor.js +21 -0
- package/dist/adapters/capacitor.js.map +1 -0
- package/dist/adapters/tauri.d.ts +3 -0
- package/dist/adapters/tauri.d.ts.map +1 -0
- package/dist/adapters/tauri.js +21 -0
- package/dist/adapters/tauri.js.map +1 -0
- package/dist/adapters/types.d.ts +16 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/web.d.ts +3 -0
- package/dist/adapters/web.d.ts.map +1 -0
- package/dist/adapters/web.js +15 -0
- package/dist/adapters/web.js.map +1 -0
- package/dist/capability.d.ts +21 -0
- package/dist/capability.d.ts.map +1 -0
- package/dist/capability.js +21 -0
- package/dist/capability.js.map +1 -0
- package/dist/deep-link/capacitor.d.ts +16 -0
- package/dist/deep-link/capacitor.d.ts.map +1 -0
- package/dist/deep-link/capacitor.js +28 -0
- package/dist/deep-link/capacitor.js.map +1 -0
- package/dist/deep-link/index.d.ts +7 -0
- package/dist/deep-link/index.d.ts.map +1 -0
- package/dist/deep-link/index.js +10 -0
- package/dist/deep-link/index.js.map +1 -0
- package/dist/deep-link/interface.d.ts +5 -0
- package/dist/deep-link/interface.d.ts.map +1 -0
- package/dist/deep-link/interface.js +2 -0
- package/dist/deep-link/interface.js.map +1 -0
- package/dist/deep-link/tauri.d.ts +8 -0
- package/dist/deep-link/tauri.d.ts.map +1 -0
- package/dist/deep-link/tauri.js +28 -0
- package/dist/deep-link/tauri.js.map +1 -0
- package/dist/deep-link/web.d.ts +4 -0
- package/dist/deep-link/web.d.ts.map +1 -0
- package/dist/deep-link/web.js +20 -0
- package/dist/deep-link/web.js.map +1 -0
- package/dist/device-key/capacitor.d.ts +32 -0
- package/dist/device-key/capacitor.d.ts.map +1 -0
- package/dist/device-key/capacitor.js +9 -0
- package/dist/device-key/capacitor.js.map +1 -0
- package/dist/device-key/encoding.d.ts +12 -0
- package/dist/device-key/encoding.d.ts.map +1 -0
- package/dist/device-key/encoding.js +45 -0
- package/dist/device-key/encoding.js.map +1 -0
- package/dist/device-key/index.d.ts +8 -0
- package/dist/device-key/index.d.ts.map +1 -0
- package/dist/device-key/index.js +11 -0
- package/dist/device-key/index.js.map +1 -0
- package/dist/device-key/interface.d.ts +74 -0
- package/dist/device-key/interface.d.ts.map +1 -0
- package/dist/device-key/interface.js +7 -0
- package/dist/device-key/interface.js.map +1 -0
- package/dist/device-key/native.d.ts +38 -0
- package/dist/device-key/native.d.ts.map +1 -0
- package/dist/device-key/native.js +67 -0
- package/dist/device-key/native.js.map +1 -0
- package/dist/device-key/tauri.d.ts +8 -0
- package/dist/device-key/tauri.d.ts.map +1 -0
- package/dist/device-key/tauri.js +16 -0
- package/dist/device-key/tauri.js.map +1 -0
- package/dist/device-key/web.d.ts +11 -0
- package/dist/device-key/web.d.ts.map +1 -0
- package/dist/device-key/web.js +210 -0
- package/dist/device-key/web.js.map +1 -0
- package/dist/files/capacitor.d.ts +19 -0
- package/dist/files/capacitor.d.ts.map +1 -0
- package/dist/files/capacitor.js +47 -0
- package/dist/files/capacitor.js.map +1 -0
- package/dist/files/index.d.ts +7 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +10 -0
- package/dist/files/index.js.map +1 -0
- package/dist/files/interface.d.ts +29 -0
- package/dist/files/interface.d.ts.map +1 -0
- package/dist/files/interface.js +2 -0
- package/dist/files/interface.js.map +1 -0
- package/dist/files/mime.d.ts +11 -0
- package/dist/files/mime.d.ts.map +1 -0
- package/dist/files/mime.js +56 -0
- package/dist/files/mime.js.map +1 -0
- package/dist/files/tauri.d.ts +27 -0
- package/dist/files/tauri.d.ts.map +1 -0
- package/dist/files/tauri.js +46 -0
- package/dist/files/tauri.js.map +1 -0
- package/dist/files/web.d.ts +21 -0
- package/dist/files/web.d.ts.map +1 -0
- package/dist/files/web.js +82 -0
- package/dist/files/web.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/local-agent-host/capacitor.d.ts +5 -0
- package/dist/local-agent-host/capacitor.d.ts.map +1 -0
- package/dist/local-agent-host/capacitor.js +11 -0
- package/dist/local-agent-host/capacitor.js.map +1 -0
- package/dist/local-agent-host/index.d.ts +7 -0
- package/dist/local-agent-host/index.d.ts.map +1 -0
- package/dist/local-agent-host/index.js +10 -0
- package/dist/local-agent-host/index.js.map +1 -0
- package/dist/local-agent-host/interface.d.ts +62 -0
- package/dist/local-agent-host/interface.d.ts.map +1 -0
- package/dist/local-agent-host/interface.js +2 -0
- package/dist/local-agent-host/interface.js.map +1 -0
- package/dist/local-agent-host/tauri.d.ts +10 -0
- package/dist/local-agent-host/tauri.d.ts.map +1 -0
- package/dist/local-agent-host/tauri.js +38 -0
- package/dist/local-agent-host/tauri.js.map +1 -0
- package/dist/local-agent-host/web.d.ts +5 -0
- package/dist/local-agent-host/web.d.ts.map +1 -0
- package/dist/local-agent-host/web.js +11 -0
- package/dist/local-agent-host/web.js.map +1 -0
- package/dist/notifications/capacitor.d.ts +28 -0
- package/dist/notifications/capacitor.d.ts.map +1 -0
- package/dist/notifications/capacitor.js +39 -0
- package/dist/notifications/capacitor.js.map +1 -0
- package/dist/notifications/index.d.ts +7 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +10 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/interface.d.ts +14 -0
- package/dist/notifications/interface.d.ts.map +1 -0
- package/dist/notifications/interface.js +2 -0
- package/dist/notifications/interface.js.map +1 -0
- package/dist/notifications/tauri.d.ts +12 -0
- package/dist/notifications/tauri.d.ts.map +1 -0
- package/dist/notifications/tauri.js +28 -0
- package/dist/notifications/tauri.js.map +1 -0
- package/dist/notifications/web.d.ts +15 -0
- package/dist/notifications/web.d.ts.map +1 -0
- package/dist/notifications/web.js +23 -0
- package/dist/notifications/web.js.map +1 -0
- package/dist/runtime.d.ts +3 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +9 -0
- package/dist/runtime.js.map +1 -0
- package/dist/session-store/capacitor.d.ts +17 -0
- package/dist/session-store/capacitor.d.ts.map +1 -0
- package/dist/session-store/capacitor.js +21 -0
- package/dist/session-store/capacitor.js.map +1 -0
- package/dist/session-store/index.d.ts +8 -0
- package/dist/session-store/index.d.ts.map +1 -0
- package/dist/session-store/index.js +11 -0
- package/dist/session-store/index.js.map +1 -0
- package/dist/session-store/interface.d.ts +9 -0
- package/dist/session-store/interface.d.ts.map +1 -0
- package/dist/session-store/interface.js +2 -0
- package/dist/session-store/interface.js.map +1 -0
- package/dist/session-store/keychain.d.ts +13 -0
- package/dist/session-store/keychain.d.ts.map +1 -0
- package/dist/session-store/keychain.js +36 -0
- package/dist/session-store/keychain.js.map +1 -0
- package/dist/session-store/local.d.ts +10 -0
- package/dist/session-store/local.d.ts.map +1 -0
- package/dist/session-store/local.js +15 -0
- package/dist/session-store/local.js.map +1 -0
- package/dist/session-store/tauri.d.ts +10 -0
- package/dist/session-store/tauri.d.ts.map +1 -0
- package/dist/session-store/tauri.js +24 -0
- package/dist/session-store/tauri.js.map +1 -0
- package/dist/session-store/web.d.ts +5 -0
- package/dist/session-store/web.d.ts.map +1 -0
- package/dist/session-store/web.js +11 -0
- package/dist/session-store/web.js.map +1 -0
- package/package.json +95 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** A file's MIME type from its extension; `""` when unknown. */
|
|
2
|
+
export declare function typeOf(name: string): string;
|
|
3
|
+
/** The last segment of a path on any platform. */
|
|
4
|
+
export declare function nameOf(path: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* `accept` as file-dialog extensions, or undefined when some entry has no extension to
|
|
7
|
+
* name, so a dialog never hides a file the app would take.
|
|
8
|
+
*/
|
|
9
|
+
export declare function extensionsOf(accept: readonly string[] | undefined): string[] | undefined;
|
|
10
|
+
export declare function bytesOf(data: Blob | Uint8Array | string): Promise<Uint8Array>;
|
|
11
|
+
//# sourceMappingURL=mime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../src/files/mime.ts"],"names":[],"mappings":"AAqBA,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,kDAAkD;AAClD,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACpC,MAAM,EAAE,GAAG,SAAS,CAetB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAInF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const TYPES = {
|
|
2
|
+
csv: "text/csv",
|
|
3
|
+
gif: "image/gif",
|
|
4
|
+
heic: "image/heic",
|
|
5
|
+
html: "text/html",
|
|
6
|
+
jpeg: "image/jpeg",
|
|
7
|
+
jpg: "image/jpeg",
|
|
8
|
+
json: "application/json",
|
|
9
|
+
md: "text/markdown",
|
|
10
|
+
mp3: "audio/mpeg",
|
|
11
|
+
mp4: "video/mp4",
|
|
12
|
+
pdf: "application/pdf",
|
|
13
|
+
png: "image/png",
|
|
14
|
+
svg: "image/svg+xml",
|
|
15
|
+
txt: "text/plain",
|
|
16
|
+
webp: "image/webp",
|
|
17
|
+
zip: "application/zip",
|
|
18
|
+
};
|
|
19
|
+
const extensionOf = (name) => name.split(".").pop()?.toLowerCase() ?? "";
|
|
20
|
+
/** A file's MIME type from its extension; `""` when unknown. */
|
|
21
|
+
export function typeOf(name) {
|
|
22
|
+
return TYPES[extensionOf(name)] ?? "";
|
|
23
|
+
}
|
|
24
|
+
/** The last segment of a path on any platform. */
|
|
25
|
+
export function nameOf(path) {
|
|
26
|
+
return path.split(/[/\\]/).pop() ?? path;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* `accept` as file-dialog extensions, or undefined when some entry has no extension to
|
|
30
|
+
* name, so a dialog never hides a file the app would take.
|
|
31
|
+
*/
|
|
32
|
+
export function extensionsOf(accept) {
|
|
33
|
+
if (!accept?.length)
|
|
34
|
+
return undefined;
|
|
35
|
+
const extensions = new Set();
|
|
36
|
+
for (const entry of accept.map((item) => item.trim().toLowerCase())) {
|
|
37
|
+
if (entry.startsWith(".")) {
|
|
38
|
+
extensions.add(entry.slice(1));
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const known = Object.entries(TYPES).filter(([, type]) => entry.endsWith("/*") ? type.startsWith(entry.slice(0, -1)) : type === entry);
|
|
42
|
+
if (known.length === 0)
|
|
43
|
+
return undefined;
|
|
44
|
+
for (const [extension] of known)
|
|
45
|
+
extensions.add(extension);
|
|
46
|
+
}
|
|
47
|
+
return [...extensions];
|
|
48
|
+
}
|
|
49
|
+
export async function bytesOf(data) {
|
|
50
|
+
if (typeof data === "string")
|
|
51
|
+
return new TextEncoder().encode(data);
|
|
52
|
+
if (data instanceof Uint8Array)
|
|
53
|
+
return data;
|
|
54
|
+
return new Uint8Array(await data.arrayBuffer());
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=mime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../../src/files/mime.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAqC;IAC9C,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,kBAAkB;IACxB,EAAE,EAAE,eAAe;IACnB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,iBAAiB;CACvB,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAEjF,gEAAgE;AAChE,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAqC;IAErC,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACpE,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CACtD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAC5E,CAAC;QACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK;YAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAgC;IAC5D,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpE,IAAI,IAAI,YAAY,UAAU;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { CapabilityAdapter } from "../capability.js";
|
|
2
|
+
import type { Files } from "./interface.js";
|
|
3
|
+
type Filters = {
|
|
4
|
+
name: string;
|
|
5
|
+
extensions: string[];
|
|
6
|
+
}[];
|
|
7
|
+
export interface TauriDialogModule {
|
|
8
|
+
open(options: {
|
|
9
|
+
multiple: boolean;
|
|
10
|
+
directory: false;
|
|
11
|
+
filters?: Filters;
|
|
12
|
+
}): Promise<string | string[] | null>;
|
|
13
|
+
save(options: {
|
|
14
|
+
defaultPath: string;
|
|
15
|
+
filters?: Filters;
|
|
16
|
+
}): Promise<string | null>;
|
|
17
|
+
}
|
|
18
|
+
export interface TauriFsModule {
|
|
19
|
+
readFile(path: string): Promise<Uint8Array>;
|
|
20
|
+
writeFile(path: string, data: Uint8Array): Promise<void>;
|
|
21
|
+
stat(path: string): Promise<{
|
|
22
|
+
size: number;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export declare function tauriFiles(loadDialog?: () => Promise<TauriDialogModule>, loadFs?: () => Promise<TauriFsModule>): CapabilityAdapter<Files>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=tauri.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tauri.d.ts","sourceRoot":"","sources":["../../src/files/tauri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,gBAAgB,CAAC;AAGxD,KAAK,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,OAAO,EAAE;QACZ,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,KAAK,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAKD,wBAAgB,UAAU,CACxB,UAAU,GAAE,MAAM,OAAO,CAAC,iBAAiB,CACN,EACrC,MAAM,GAAE,MAAM,OAAO,CAAC,aAAa,CAAyC,GAC3E,iBAAiB,CAAC,KAAK,CAAC,CA0C1B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { detectPlatform } from "../runtime.js";
|
|
2
|
+
import { bytesOf, extensionsOf, nameOf, typeOf } from "./mime.js";
|
|
3
|
+
const filtersFor = (extensions) => extensions ? [{ name: "Files", extensions }] : undefined;
|
|
4
|
+
export function tauriFiles(loadDialog = () => import("@tauri-apps/plugin-dialog"), loadFs = () => import("@tauri-apps/plugin-fs")) {
|
|
5
|
+
return {
|
|
6
|
+
platform: "tauri",
|
|
7
|
+
available: () => detectPlatform() === "tauri",
|
|
8
|
+
create: async () => {
|
|
9
|
+
const [dialog, fs] = await Promise.all([loadDialog(), loadFs()]);
|
|
10
|
+
const pickedAt = async (path) => {
|
|
11
|
+
const name = nameOf(path);
|
|
12
|
+
return {
|
|
13
|
+
name,
|
|
14
|
+
type: typeOf(name),
|
|
15
|
+
size: (await fs.stat(path)).size,
|
|
16
|
+
bytes: () => fs.readFile(path),
|
|
17
|
+
text: async () => new TextDecoder().decode(await fs.readFile(path)),
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
return {
|
|
21
|
+
pick: async (options = {}) => {
|
|
22
|
+
const filters = filtersFor(extensionsOf(options.accept));
|
|
23
|
+
const chosen = await dialog.open({
|
|
24
|
+
multiple: options.multiple === true,
|
|
25
|
+
directory: false,
|
|
26
|
+
...(filters ? { filters } : {}),
|
|
27
|
+
});
|
|
28
|
+
const paths = chosen === null ? [] : Array.isArray(chosen) ? chosen : [chosen];
|
|
29
|
+
return Promise.all(paths.map(pickedAt));
|
|
30
|
+
},
|
|
31
|
+
save: async (data, options) => {
|
|
32
|
+
const filters = filtersFor(extensionsOf(options.type ? [options.type] : undefined));
|
|
33
|
+
const path = await dialog.save({
|
|
34
|
+
defaultPath: options.name,
|
|
35
|
+
...(filters ? { filters } : {}),
|
|
36
|
+
});
|
|
37
|
+
if (path === null)
|
|
38
|
+
return "cancelled";
|
|
39
|
+
await fs.writeFile(path, await bytesOf(data));
|
|
40
|
+
return "saved";
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=tauri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tauri.js","sourceRoot":"","sources":["../../src/files/tauri.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CapabilityAdapter } from "../capability.js";
|
|
2
|
+
import type { Files, PickedFile, PickOptions } from "./interface.js";
|
|
3
|
+
interface SaveFilePicker {
|
|
4
|
+
(options: {
|
|
5
|
+
suggestedName: string;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
createWritable(): Promise<{
|
|
8
|
+
write(data: Blob): Promise<void>;
|
|
9
|
+
close(): Promise<void>;
|
|
10
|
+
}>;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
export interface WebFilesApis {
|
|
14
|
+
readonly document: Document | undefined;
|
|
15
|
+
readonly showSaveFilePicker?: SaveFilePicker | undefined;
|
|
16
|
+
}
|
|
17
|
+
/** An `<input type="file">` the user answers or cancels; also what a phone's webview shows. */
|
|
18
|
+
export declare function pickWithInput(document: Document, options?: PickOptions): Promise<readonly PickedFile[]>;
|
|
19
|
+
export declare function webFiles(getApis?: () => WebFilesApis): CapabilityAdapter<Files>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/files/web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EACV,KAAK,EACL,UAAU,EACV,WAAW,EAGZ,MAAM,gBAAgB,CAAC;AAGxB,UAAU,cAAc;IACtB,CAAC,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5C,cAAc,IAAI,OAAO,CAAC;YACxB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;SACxB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CAC1D;AAiBD,+FAA+F;AAC/F,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAkBhC;AAwCD,wBAAgB,QAAQ,CACtB,OAAO,GAAE,MAAM,YAA0B,GACxC,iBAAiB,CAAC,KAAK,CAAC,CAc1B"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { bytesOf } from "./mime.js";
|
|
2
|
+
const browserApis = () => ({
|
|
3
|
+
document: globalThis.document,
|
|
4
|
+
showSaveFilePicker: globalThis.showSaveFilePicker?.bind(globalThis),
|
|
5
|
+
});
|
|
6
|
+
const pickedFrom = (file) => ({
|
|
7
|
+
name: file.name,
|
|
8
|
+
type: file.type,
|
|
9
|
+
size: file.size,
|
|
10
|
+
bytes: async () => new Uint8Array(await file.arrayBuffer()),
|
|
11
|
+
text: () => file.text(),
|
|
12
|
+
});
|
|
13
|
+
/** An `<input type="file">` the user answers or cancels; also what a phone's webview shows. */
|
|
14
|
+
export function pickWithInput(document, options = {}) {
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
const input = document.createElement("input");
|
|
17
|
+
input.type = "file";
|
|
18
|
+
input.hidden = true;
|
|
19
|
+
if (options.accept?.length)
|
|
20
|
+
input.accept = options.accept.join(",");
|
|
21
|
+
input.multiple = options.multiple === true;
|
|
22
|
+
const done = (files) => {
|
|
23
|
+
input.remove();
|
|
24
|
+
resolve(files);
|
|
25
|
+
};
|
|
26
|
+
input.addEventListener("change", () => done([...(input.files ?? [])].map(pickedFrom)));
|
|
27
|
+
input.addEventListener("cancel", () => done([]));
|
|
28
|
+
document.body.append(input);
|
|
29
|
+
input.click();
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function download(document, blob, name) {
|
|
33
|
+
const url = URL.createObjectURL(blob);
|
|
34
|
+
const link = document.createElement("a");
|
|
35
|
+
link.href = url;
|
|
36
|
+
link.download = name;
|
|
37
|
+
link.hidden = true;
|
|
38
|
+
document.body.append(link);
|
|
39
|
+
link.click();
|
|
40
|
+
link.remove();
|
|
41
|
+
setTimeout(() => URL.revokeObjectURL(url), 60_000);
|
|
42
|
+
return "saved";
|
|
43
|
+
}
|
|
44
|
+
async function saveInBrowser(apis, document, data, options) {
|
|
45
|
+
const blob = new Blob([new Uint8Array(await bytesOf(data))], {
|
|
46
|
+
type: options.type ?? "",
|
|
47
|
+
});
|
|
48
|
+
if (!apis.showSaveFilePicker)
|
|
49
|
+
return download(document, blob, options.name);
|
|
50
|
+
try {
|
|
51
|
+
const handle = await apis.showSaveFilePicker({ suggestedName: options.name });
|
|
52
|
+
const writable = await handle.createWritable();
|
|
53
|
+
await writable.write(blob);
|
|
54
|
+
await writable.close();
|
|
55
|
+
return "saved";
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (error instanceof Error && error.name === "AbortError")
|
|
59
|
+
return "cancelled";
|
|
60
|
+
if (error instanceof Error && error.name === "SecurityError") {
|
|
61
|
+
return download(document, blob, options.name);
|
|
62
|
+
}
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export function webFiles(getApis = browserApis) {
|
|
67
|
+
return {
|
|
68
|
+
platform: "web",
|
|
69
|
+
available: () => getApis().document !== undefined,
|
|
70
|
+
create: () => {
|
|
71
|
+
const apis = getApis();
|
|
72
|
+
const { document } = apis;
|
|
73
|
+
if (!document)
|
|
74
|
+
throw new Error("Files need a document");
|
|
75
|
+
return {
|
|
76
|
+
pick: (options) => pickWithInput(document, options),
|
|
77
|
+
save: (data, options) => saveInBrowser(apis, document, data, options),
|
|
78
|
+
};
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/files/web.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type { PlatformAdapters } from "./adapters/types.js";
|
|
2
|
+
export { type CapabilityAdapter, type CapabilityDefinition, type CapabilityHandle, defineCapability, resolveCapability, } from "./capability.js";
|
|
3
|
+
export * from "./deep-link/index.js";
|
|
4
|
+
export * from "./device-key/index.js";
|
|
5
|
+
export { capacitorLocalAgentHost, localAgentHost, tauriLocalAgentHost, webLocalAgentHost, } from "./local-agent-host/index.js";
|
|
6
|
+
export type { HostPairing, LocalAgentHost, LocalConnectInput, LocalConnectResult, LocalHostStatus, PairingDevice, PairingPresenceKey, } from "./local-agent-host/interface.js";
|
|
7
|
+
export * from "./files/index.js";
|
|
8
|
+
export * from "./notifications/index.js";
|
|
9
|
+
export { detectPlatform, type Platform } from "./runtime.js";
|
|
10
|
+
export * from "./session-store/index.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,kBAAkB,GACnB,MAAM,iCAAiC,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7D,cAAc,0BAA0B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { defineCapability, resolveCapability, } from "./capability.js";
|
|
2
|
+
export * from "./deep-link/index.js";
|
|
3
|
+
export * from "./device-key/index.js";
|
|
4
|
+
export { capacitorLocalAgentHost, localAgentHost, tauriLocalAgentHost, webLocalAgentHost, } from "./local-agent-host/index.js";
|
|
5
|
+
export * from "./files/index.js";
|
|
6
|
+
export * from "./notifications/index.js";
|
|
7
|
+
export { detectPlatform } from "./runtime.js";
|
|
8
|
+
export * from "./session-store/index.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AAUrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAC7D,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CapabilityAdapter } from "../capability.js";
|
|
2
|
+
import type { LocalAgentHost } from "./interface.js";
|
|
3
|
+
/** A phone cannot spawn an agent process. */
|
|
4
|
+
export declare function capacitorLocalAgentHost(): CapabilityAdapter<LocalAgentHost>;
|
|
5
|
+
//# sourceMappingURL=capacitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitor.d.ts","sourceRoot":"","sources":["../../src/local-agent-host/capacitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,6CAA6C;AAC7C,wBAAgB,uBAAuB,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAQ3E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** A phone cannot spawn an agent process. */
|
|
2
|
+
export function capacitorLocalAgentHost() {
|
|
3
|
+
return {
|
|
4
|
+
platform: "capacitor",
|
|
5
|
+
available: () => false,
|
|
6
|
+
create: () => {
|
|
7
|
+
throw new Error("Agents cannot run on a phone; connect a computer instead.");
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=capacitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitor.js","sourceRoot":"","sources":["../../src/local-agent-host/capacitor.ts"],"names":[],"mappings":"AAGA,6CAA6C;AAC7C,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK;QACtB,MAAM,EAAE,GAAG,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LocalAgentHost } from "./interface.js";
|
|
2
|
+
export { capacitorLocalAgentHost } from "./capacitor.js";
|
|
3
|
+
export type { HostPairing, LocalAgentHost, LocalConnectInput, LocalConnectResult, LocalHostStatus, } from "./interface.js";
|
|
4
|
+
export { tauriLocalAgentHost } from "./tauri.js";
|
|
5
|
+
export { webLocalAgentHost } from "./web.js";
|
|
6
|
+
export declare const localAgentHost: import("../capability.js").CapabilityDefinition<LocalAgentHost>;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/local-agent-host/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EACV,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,cAAc,iEAGzB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { platformAdapters } from "#adapters";
|
|
2
|
+
import { defineCapability } from "../capability.js";
|
|
3
|
+
export { capacitorLocalAgentHost } from "./capacitor.js";
|
|
4
|
+
export { tauriLocalAgentHost } from "./tauri.js";
|
|
5
|
+
export { webLocalAgentHost } from "./web.js";
|
|
6
|
+
export const localAgentHost = defineCapability({
|
|
7
|
+
name: "localAgentHost",
|
|
8
|
+
adapters: platformAdapters.localAgentHost,
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/local-agent-host/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAQzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAiB;IAC7D,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,gBAAgB,CAAC,cAAc;CAC1C,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parlor Host on this very computer, reachable without the network. Available only in a
|
|
3
|
+
* desktop shell built with `desktop.agentHost`; elsewhere the chat shows the install
|
|
4
|
+
* command instead.
|
|
5
|
+
*/
|
|
6
|
+
export interface LocalAgentHost {
|
|
7
|
+
status(): Promise<LocalHostStatus>;
|
|
8
|
+
/**
|
|
9
|
+
* Pairs this computer's host with the signed-in account: the host starts the pairing,
|
|
10
|
+
* `authorize` gets the code from the backend with the page's session, and the host
|
|
11
|
+
* confirms the account and matching code in a native dialog the page cannot skip.
|
|
12
|
+
*/
|
|
13
|
+
connect(input: LocalConnectInput): Promise<LocalConnectResult>;
|
|
14
|
+
}
|
|
15
|
+
export type LocalHostStatus = {
|
|
16
|
+
readonly state: "stopped";
|
|
17
|
+
} | {
|
|
18
|
+
readonly state: "running";
|
|
19
|
+
readonly version: string;
|
|
20
|
+
/** App origins this host holds a grant for. */
|
|
21
|
+
readonly apps: readonly string[];
|
|
22
|
+
};
|
|
23
|
+
export interface LocalConnectInput {
|
|
24
|
+
readonly appOrigin: string;
|
|
25
|
+
authorize(pairing: HostPairing): Promise<string>;
|
|
26
|
+
/** This app's own device, pinned at pairing so its first prompt needs no second approval. */
|
|
27
|
+
readonly device?: PairingDevice | undefined;
|
|
28
|
+
}
|
|
29
|
+
/** The public half of a device's keys, as the account registered them. */
|
|
30
|
+
export interface PairingDevice {
|
|
31
|
+
readonly deviceId: string;
|
|
32
|
+
readonly name: string;
|
|
33
|
+
readonly platform: string;
|
|
34
|
+
readonly signingKey: JsonWebKey;
|
|
35
|
+
readonly presenceKey?: PairingPresenceKey | undefined;
|
|
36
|
+
}
|
|
37
|
+
export type PairingPresenceKey = {
|
|
38
|
+
readonly format: "webauthn";
|
|
39
|
+
readonly credentialId: string;
|
|
40
|
+
readonly rpId: string;
|
|
41
|
+
readonly publicKey: JsonWebKey;
|
|
42
|
+
} | {
|
|
43
|
+
readonly format: "es256-raw";
|
|
44
|
+
readonly keyId: string;
|
|
45
|
+
readonly publicKey: JsonWebKey;
|
|
46
|
+
};
|
|
47
|
+
/** What the backend's host authorize endpoint needs from the host, and shows on consent. */
|
|
48
|
+
export interface HostPairing {
|
|
49
|
+
readonly hostName: string;
|
|
50
|
+
readonly platform: string;
|
|
51
|
+
readonly codeChallenge: string;
|
|
52
|
+
readonly state: string;
|
|
53
|
+
readonly matchingCode: string;
|
|
54
|
+
readonly keyThumbprint: string;
|
|
55
|
+
}
|
|
56
|
+
export type LocalConnectResult = {
|
|
57
|
+
readonly connected: true;
|
|
58
|
+
} | {
|
|
59
|
+
readonly connected: false;
|
|
60
|
+
readonly reason: "declined_locally" | "failed";
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/local-agent-host/interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACnC;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAChE;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAC7B;IACE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAEN,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC7C;AAED,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACvD;AAED,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC,CAAC;AAEN,4FAA4F;AAC5F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,QAAQ,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/local-agent-host/interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CapabilityAdapter } from "../capability.js";
|
|
2
|
+
import type { TauriInvoke } from "../device-key/tauri.js";
|
|
3
|
+
import type { LocalAgentHost } from "./interface.js";
|
|
4
|
+
/**
|
|
5
|
+
* The generated `parlor_host_*` commands, which reach the shared daemon on its control
|
|
6
|
+
* socket (starting the bundled sidecar when none runs) and draw the pairing confirmation
|
|
7
|
+
* as a native dialog outside the webview.
|
|
8
|
+
*/
|
|
9
|
+
export declare function tauriLocalAgentHost(load?: () => Promise<TauriInvoke>): CapabilityAdapter<LocalAgentHost>;
|
|
10
|
+
//# sourceMappingURL=tauri.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tauri.d.ts","sourceRoot":"","sources":["../../src/local-agent-host/tauri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,gBAAgB,CAAC;AAWxB;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,MAAM,OAAO,CAAC,WAAW,CAAwC,GACtE,iBAAiB,CAAC,cAAc,CAAC,CAoBnC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { detectPlatform } from "../runtime.js";
|
|
2
|
+
async function hasBundledHost(load) {
|
|
3
|
+
if (detectPlatform() !== "tauri")
|
|
4
|
+
return false;
|
|
5
|
+
try {
|
|
6
|
+
return (await (await load()).invoke("parlor_host_bundled")) === true;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The generated `parlor_host_*` commands, which reach the shared daemon on its control
|
|
14
|
+
* socket (starting the bundled sidecar when none runs) and draw the pairing confirmation
|
|
15
|
+
* as a native dialog outside the webview.
|
|
16
|
+
*/
|
|
17
|
+
export function tauriLocalAgentHost(load = () => import("@tauri-apps/api/core")) {
|
|
18
|
+
return {
|
|
19
|
+
platform: "tauri",
|
|
20
|
+
available: () => hasBundledHost(load),
|
|
21
|
+
create: async () => {
|
|
22
|
+
const { invoke } = await load();
|
|
23
|
+
return {
|
|
24
|
+
status: () => invoke("parlor_host_status"),
|
|
25
|
+
connect: async ({ appOrigin, authorize, device }) => {
|
|
26
|
+
const pairing = await invoke("parlor_host_begin", { appOrigin });
|
|
27
|
+
const code = await authorize(pairing);
|
|
28
|
+
return invoke("parlor_host_finish", {
|
|
29
|
+
appOrigin,
|
|
30
|
+
code,
|
|
31
|
+
device: device ?? null,
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=tauri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tauri.js","sourceRoot":"","sources":["../../src/local-agent-host/tauri.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAQ/C,KAAK,UAAU,cAAc,CAAC,IAAgC;IAC5D,IAAI,cAAc,EAAE,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAU,qBAAqB,CAAC,CAAC,KAAK,IAAI,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAAI,GAA+B,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC;IAEvE,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;QACrC,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAkB,oBAAoB,CAAC;gBAC3D,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;oBAClD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAc,mBAAmB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC9E,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;oBACtC,OAAO,MAAM,CAAqB,oBAAoB,EAAE;wBACtD,SAAS;wBACT,IAAI;wBACJ,MAAM,EAAE,MAAM,IAAI,IAAI;qBACvB,CAAC,CAAC;gBACL,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CapabilityAdapter } from "../capability.js";
|
|
2
|
+
import type { LocalAgentHost } from "./interface.js";
|
|
3
|
+
/** A web page never reaches a local process: the host has no listener to reach. */
|
|
4
|
+
export declare function webLocalAgentHost(): CapabilityAdapter<LocalAgentHost>;
|
|
5
|
+
//# sourceMappingURL=web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/local-agent-host/web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,mFAAmF;AACnF,wBAAgB,iBAAiB,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAQrE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** A web page never reaches a local process: the host has no listener to reach. */
|
|
2
|
+
export function webLocalAgentHost() {
|
|
3
|
+
return {
|
|
4
|
+
platform: "web",
|
|
5
|
+
available: () => false,
|
|
6
|
+
create: () => {
|
|
7
|
+
throw new Error("Parlor Host is not reachable from a web page.");
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/local-agent-host/web.ts"],"names":[],"mappings":"AAGA,mFAAmF;AACnF,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK;QACtB,MAAM,EAAE,GAAG,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { CapabilityAdapter } from "../capability.js";
|
|
2
|
+
import type { Notifications } from "./interface.js";
|
|
3
|
+
type CapacitorPermissionState = "prompt" | "prompt-with-rationale" | "granted" | "denied";
|
|
4
|
+
export interface CapacitorNotificationModule {
|
|
5
|
+
LocalNotifications: {
|
|
6
|
+
checkPermissions(): Promise<{
|
|
7
|
+
display: CapacitorPermissionState;
|
|
8
|
+
}>;
|
|
9
|
+
requestPermissions(): Promise<{
|
|
10
|
+
display: CapacitorPermissionState;
|
|
11
|
+
}>;
|
|
12
|
+
schedule(options: {
|
|
13
|
+
notifications: Array<{
|
|
14
|
+
id: number;
|
|
15
|
+
title: string;
|
|
16
|
+
body: string;
|
|
17
|
+
}>;
|
|
18
|
+
}): Promise<unknown>;
|
|
19
|
+
cancel(options: {
|
|
20
|
+
notifications: Array<{
|
|
21
|
+
id: number;
|
|
22
|
+
}>;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare function capacitorNotifications(load?: () => Promise<CapacitorNotificationModule>): CapabilityAdapter<Notifications>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=capacitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitor.d.ts","sourceRoot":"","sources":["../../src/notifications/capacitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAA0B,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5E,KAAK,wBAAwB,GAAG,QAAQ,GAAG,uBAAuB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1F,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB,EAAE;QAClB,gBAAgB,IAAI,OAAO,CAAC;YAAE,OAAO,EAAE,wBAAwB,CAAA;SAAE,CAAC,CAAC;QACnE,kBAAkB,IAAI,OAAO,CAAC;YAAE,OAAO,EAAE,wBAAwB,CAAA;SAAE,CAAC,CAAC;QACrE,QAAQ,CAAC,OAAO,EAAE;YAChB,aAAa,EAAE,KAAK,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SACnE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,OAAO,EAAE;YAAE,aAAa,EAAE,KAAK,CAAC;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1E,CAAC;CACH;AAQD,wBAAgB,sBAAsB,CACpC,IAAI,GAAE,MAAM,OAAO,CAAC,2BAA2B,CACL,GACzC,iBAAiB,CAAC,aAAa,CAAC,CAiClC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { detectPlatform } from "../runtime.js";
|
|
2
|
+
function toPermission(state) {
|
|
3
|
+
if (state === "granted")
|
|
4
|
+
return "granted";
|
|
5
|
+
if (state === "denied")
|
|
6
|
+
return "denied";
|
|
7
|
+
return "default";
|
|
8
|
+
}
|
|
9
|
+
export function capacitorNotifications(load = () => import("@capacitor/local-notifications")) {
|
|
10
|
+
return {
|
|
11
|
+
platform: "capacitor",
|
|
12
|
+
available: () => detectPlatform() === "capacitor",
|
|
13
|
+
create: async () => {
|
|
14
|
+
const { LocalNotifications } = await load();
|
|
15
|
+
let permission = toPermission((await LocalNotifications.checkPermissions()).display);
|
|
16
|
+
let nextId = Date.now() % 2_000_000_000;
|
|
17
|
+
return {
|
|
18
|
+
permission: () => permission,
|
|
19
|
+
request: async () => {
|
|
20
|
+
permission = toPermission((await LocalNotifications.requestPermissions()).display);
|
|
21
|
+
return permission;
|
|
22
|
+
},
|
|
23
|
+
show: async (title, options) => {
|
|
24
|
+
if (permission !== "granted") {
|
|
25
|
+
throw new Error("Notification permission has not been granted");
|
|
26
|
+
}
|
|
27
|
+
const id = nextId++;
|
|
28
|
+
await LocalNotifications.schedule({
|
|
29
|
+
notifications: [{ id, title, body: options?.body ?? "" }],
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
close: () => void LocalNotifications.cancel({ notifications: [{ id }] }),
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=capacitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitor.js","sourceRoot":"","sources":["../../src/notifications/capacitor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAgB/C,SAAS,YAAY,CAAC,KAA+B;IACnD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAI,GAA+C,GAAG,EAAE,CACtD,MAAM,CAAC,gCAAgC,CAAC;IAE1C,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,KAAK,WAAW;QACjD,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;YAC5C,IAAI,UAAU,GAAG,YAAY,CAC3B,CAAC,MAAM,kBAAkB,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,CACtD,CAAC;YACF,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;YACxC,OAAO;gBACL,UAAU,EAAE,GAAG,EAAE,CAAC,UAAU;gBAC5B,OAAO,EAAE,KAAK,IAAI,EAAE;oBAClB,UAAU,GAAG,YAAY,CACvB,CAAC,MAAM,kBAAkB,CAAC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CACxD,CAAC;oBACF,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBAC7B,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;wBAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;oBAClE,CAAC;oBACD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;oBACpB,MAAM,kBAAkB,CAAC,QAAQ,CAAC;wBAChC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;qBAC1D,CAAC,CAAC;oBACH,OAAO;wBACL,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,kBAAkB,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;qBACzE,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Notifications } from "./interface.js";
|
|
2
|
+
export type { NotificationHandle, NotificationOptions, NotificationPermission, Notifications, } from "./interface.js";
|
|
3
|
+
export { capacitorNotifications, type CapacitorNotificationModule } from "./capacitor.js";
|
|
4
|
+
export { tauriNotifications, type TauriNotificationModule } from "./tauri.js";
|
|
5
|
+
export { webNotifications } from "./web.js";
|
|
6
|
+
export declare const notifications: import("../capability.js").CapabilityDefinition<Notifications>;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,KAAK,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,eAAO,MAAM,aAAa,gEAGxB,CAAC"}
|