PageSourceSearch

https://pdfle.com/js/local-file-handoff.js?v=TXOunhZj0NyPUfY4dKnCB2oRP2uNxJdHeo-4hxCZJKQ

js pdfle.com collected 2026-10-03 20:08:18 UTC 2,741 bytes, 65 lines download raw bytes

1(() => {
2    'use strict';
3
4    const databaseName = 'pdfle-local-file-handoff';
5    const storeName = 'files';
6    const pendingKey = 'pending';
7    const maxAgeMs = 2 * 60 * 1000;
8
9    function openDatabase() {
10        return new Promise((resolve, reject) => {
11            const request = indexedDB.open(databaseName, 1);
12            request.onupgradeneeded = () => {
13                if (!request.result.objectStoreNames.contains(storeName)) request.result.createObjectStore(storeName);
14            };
15            request.onsuccess = () => resolve(request.result);
16            request.onerror = () => reject(request.error ?? new Error('Local file handoff is unavailable.'));
17        });
18    }
19
20    async function put(file) {
21        const database = await openDatabase();
22        try {
23            await new Promise((resolve, reject) => {
24                const transaction = database.transaction(storeName, 'readwrite');
25                transaction.objectStore(storeName).put({
26                    file,
27                    name: file.name,
28                    type: file.type,
29                    lastModified: file.lastModified,
30                    createdAt: Date.now()
31                }, pendingKey);
32                transaction.oncomplete = resolve;
33                transaction.onerror = () => reject(transaction.error ?? new Error('Could not prepare this local file.'));
34                transaction.onabort = () => reject(transaction.error ?? new Error('Could not prepare this local file.'));
35            });
36        } finally {
37            database.close();
38        }
39    }
40
41    async function take() {
42        const database = await openDatabase();
43        try {
44            return await new Promise((resolve, reject) => {
45                const transaction = database.transaction(storeName, 'readwrite');
46                const store = transaction.objectStore(storeName);
47                const request = store.get(pendingKey);
48                request.onsuccess = () => {
49                    const record = request.result;
50                    store.delete(pendingKey);
51                    const valid = record?.file instanceof Blob && Date.now() - Number(record.createdAt) <= maxAgeMs;
52                    resolve(valid ? new File([record.file], record.name || 'document', {
53                        type: record.type || record.file.type,
54                        lastModified: Number(record.lastModified) || Date.now()
55                    }) : null);
56                };
57                request.onerror = () => reject(request.error ?? new Error('Could not read the local file.'));
58            });
59        } finally {
60            database.close();
61        }
62    }
63
64    window.PdfleLocalFileHandoff = Object.freeze({ put, take });
65})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.