typescript
This commit is contained in:
+20
-11
@@ -1,24 +1,30 @@
|
||||
import { createAssetView, resolveDocumentAssetUrl } from '../asset_manager';
|
||||
import type {
|
||||
DocumentLike as AssetManagerDocumentLike,
|
||||
DocumentVersionLike,
|
||||
AssetLike as AssetManagerAssetLike,
|
||||
GetAsset as AssetManagerGetAsset,
|
||||
} from '../asset_manager';
|
||||
|
||||
const BASE_FETCH_OPTIONS = { start: 1, limit: 1 } as const;
|
||||
|
||||
interface DocumentLike {
|
||||
id?: string | number;
|
||||
current_version?: unknown;
|
||||
interface DocumentVersion extends DocumentVersionLike {
|
||||
download_path?: string | null;
|
||||
}
|
||||
|
||||
interface AssetLike {
|
||||
id?: string | number;
|
||||
[key: string]: unknown;
|
||||
export interface DocumentLike extends AssetManagerDocumentLike {
|
||||
current_version?: DocumentVersion | null;
|
||||
}
|
||||
|
||||
type EnsurePreviewData = (id: string | number) => Promise<DocumentLike | null | undefined>;
|
||||
type GetDocumentAsset = (doc: DocumentLike, type: string) => AssetLike | null | undefined;
|
||||
type EnsureAssetUrl = (
|
||||
export type AssetLike = AssetManagerAssetLike;
|
||||
|
||||
export type EnsurePreviewData = (id: string | number) => Promise<DocumentLike | null | undefined>;
|
||||
export type EnsureAssetUrl = (
|
||||
id: string | number,
|
||||
asset: AssetLike,
|
||||
options?: { start?: number; limit?: number; force?: boolean },
|
||||
) => Promise<AssetLike | null | undefined>;
|
||||
export type GetDocumentAsset = AssetManagerGetAsset;
|
||||
|
||||
interface ResolveOcrTextUrlOptions {
|
||||
document: DocumentLike | null;
|
||||
@@ -62,10 +68,13 @@ export async function resolveOcrTextUrl({
|
||||
const baseView = createAssetView(asset);
|
||||
const hasUrl = Boolean(baseView.getPrimaryUrl());
|
||||
|
||||
let entry = asset;
|
||||
let entry: AssetLike = asset;
|
||||
if (ensureAssetUrl) {
|
||||
const ensureOptions = { ...BASE_FETCH_OPTIONS, force: !hasUrl };
|
||||
entry = (await ensureAssetUrl(docRef.id!, asset, ensureOptions)) || asset;
|
||||
const ensured = await ensureAssetUrl(docRef.id!, asset, ensureOptions);
|
||||
if (ensured) {
|
||||
entry = ensured;
|
||||
}
|
||||
}
|
||||
|
||||
const ensuredView = createAssetView(entry);
|
||||
|
||||
@@ -82,6 +82,13 @@ export const base64urlToUint8Array = (value?: string | null): Uint8Array => {
|
||||
return bytes;
|
||||
};
|
||||
|
||||
const base64urlToBufferSource = (value: string): ArrayBuffer => {
|
||||
const bytes = base64urlToUint8Array(value);
|
||||
const clone = new Uint8Array(bytes.length);
|
||||
clone.set(bytes);
|
||||
return clone.buffer;
|
||||
};
|
||||
|
||||
const toUint8Array = (input?: ArrayBuffer | ArrayBufferView | ArrayLike<number> | null): Uint8Array => {
|
||||
if (!input) {
|
||||
return new Uint8Array();
|
||||
@@ -124,14 +131,14 @@ export const preparePublicKeyCreationOptions = (
|
||||
const publicKey: PublicKeyCredentialCreationOptions = { ...challengeResponse.publicKey };
|
||||
|
||||
if (publicKey.challenge && typeof publicKey.challenge === 'string') {
|
||||
publicKey.challenge = base64urlToUint8Array(publicKey.challenge);
|
||||
publicKey.challenge = base64urlToBufferSource(publicKey.challenge);
|
||||
}
|
||||
|
||||
if (publicKey.user?.id) {
|
||||
publicKey.user = {
|
||||
...publicKey.user,
|
||||
id: typeof publicKey.user.id === 'string'
|
||||
? base64urlToUint8Array(publicKey.user.id)
|
||||
? base64urlToBufferSource(publicKey.user.id)
|
||||
: publicKey.user.id,
|
||||
};
|
||||
}
|
||||
@@ -140,7 +147,7 @@ export const preparePublicKeyCreationOptions = (
|
||||
publicKey.excludeCredentials = publicKey.excludeCredentials.map((descriptor) => ({
|
||||
...descriptor,
|
||||
id: typeof descriptor.id === 'string'
|
||||
? base64urlToUint8Array(descriptor.id)
|
||||
? base64urlToBufferSource(descriptor.id)
|
||||
: descriptor.id,
|
||||
}));
|
||||
}
|
||||
@@ -162,14 +169,14 @@ export const preparePublicKeyRequestOptions = (
|
||||
const publicKey: PublicKeyCredentialRequestOptions = { ...challengeResponse.publicKey };
|
||||
|
||||
if (publicKey.challenge && typeof publicKey.challenge === 'string') {
|
||||
publicKey.challenge = base64urlToUint8Array(publicKey.challenge);
|
||||
publicKey.challenge = base64urlToBufferSource(publicKey.challenge);
|
||||
}
|
||||
|
||||
if (Array.isArray(publicKey.allowCredentials)) {
|
||||
publicKey.allowCredentials = publicKey.allowCredentials.map((descriptor) => ({
|
||||
...descriptor,
|
||||
id: typeof descriptor.id === 'string'
|
||||
? base64urlToUint8Array(descriptor.id)
|
||||
? base64urlToBufferSource(descriptor.id)
|
||||
: descriptor.id,
|
||||
}));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user