BangSo/apps/mobile/lib/artifact-open.ts

45 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-09-01 16:51:19 +00:00
import { File, Paths } from "expo-file-system";
import * as Sharing from "expo-sharing";
import { rpc } from "./api";
import { artifactCacheFileName } from "./artifact-file";
export type MobileArtifactTarget = { botId: string } | { groupId: string };
async function cacheMobileArtifact(
target: MobileArtifactTarget,
artifactId: string,
mimeType: string,
): Promise<File> {
const artifact = await rpc<{ contentBase64: string }>("artifacts/get", {
...target,
artifactId,
});
const file = new File(Paths.cache, artifactCacheFileName(artifactId, mimeType));
file.create({ overwrite: true });
file.write(artifact.contentBase64, { encoding: "base64" });
return file;
}
export async function readMobileArtifactText(
target: MobileArtifactTarget,
artifactId: string,
mimeType: string,
): Promise<string> {
const file = await cacheMobileArtifact(target, artifactId, mimeType);
return file.text();
}
export async function openMobileArtifact(
target: MobileArtifactTarget,
artifactId: string,
name: string,
mimeType: string,
): Promise<void> {
const file = await cacheMobileArtifact(target, artifactId, mimeType);
if (await Sharing.isAvailableAsync()) {
await Sharing.shareAsync(file.uri, { mimeType });
return;
}
throw new Error(`Saved ${name} locally`);
}