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 { 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 { const file = await cacheMobileArtifact(target, artifactId, mimeType); return file.text(); } export async function openMobileArtifact( target: MobileArtifactTarget, artifactId: string, name: string, mimeType: string, ): Promise { const file = await cacheMobileArtifact(target, artifactId, mimeType); if (await Sharing.isAvailableAsync()) { await Sharing.shareAsync(file.uri, { mimeType }); return; } throw new Error(`Saved ${name} locally`); }