signal-desktop/sticker-creator/src/util/api.ts
2024-08-26 13:16:10 -04:00

58 lines
1.3 KiB
TypeScript

// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { type ArtType } from '../constants';
import { type EncryptResult } from './crypto';
declare global {
// eslint-disable-next-line no-restricted-syntax
interface Window {
uploadStickerPack(
manifest: Uint8Array,
stickers: ReadonlyArray<Uint8Array>,
onProgres?: () => void
): Promise<string>;
installStickerPack(packId: string, key: string): void;
getFilePath(file: File): string;
}
}
export type UploadOptions = Readonly<{
artType: ArtType;
onProgress?: () => void;
}>;
export class APIError extends Error {
constructor(message: string, public readonly errorMessageI18nKey: string) {
super(message);
}
}
export type UploadResult = Readonly<{
key: string;
packId: string;
}>;
export async function upload(
encryptResult: EncryptResult,
{ onProgress }: UploadOptions
): Promise<UploadResult> {
const { encryptedManifest, encryptedImages, key } = encryptResult;
const packId = await window.uploadStickerPack(
encryptedManifest,
encryptedImages,
onProgress
);
window.installStickerPack(packId, key);
return {
key,
packId,
};
}
export function getFilePath(file: File): string {
return window.getFilePath(file);
}