UNPKG

closevector-web

Version:

CloseVector is fundamentally a vector database. We have made dedicated libraries available for both browsers and node.js, aiming for easy integration no matter your platform. One feature we've been working on is its potential for scalability. Instead of b

141 lines (140 loc) 5.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pathJoin = exports.IDBFS = exports.fetchUsingToken = exports.createGetFileOperationUrl = exports.createPublicGetFileOperationUrl = exports.createUploadFileOperationUrl = exports.encryptToken = exports.chunkArray = exports.FileVisibility = exports.END_POINT = void 0; const closevector_hnswlib_wasm_1 = require("closevector-hnswlib-wasm"); const closevector_crypto_jwt_1 = require("closevector-crypto-jwt"); // you can also use any other JWT library, for example: jsonwebtoken exports.END_POINT = 'https://vector-kv.mega-ug.uk'; var FileVisibility; (function (FileVisibility) { FileVisibility[FileVisibility["Public"] = 0] = "Public"; FileVisibility[FileVisibility["Private"] = 1] = "Private"; })(FileVisibility || (exports.FileVisibility = FileVisibility = {})); const chunkArray = (arr, chunkSize) => arr.reduce((chunks, elem, index) => { const chunkIndex = Math.floor(index / chunkSize); const chunk = chunks[chunkIndex] || []; // eslint-disable-next-line no-param-reassign chunks[chunkIndex] = chunk.concat([elem]); return chunks; }, []); exports.chunkArray = chunkArray; async function encryptToken(object, secret) { const token = await closevector_crypto_jwt_1.default.sign({ // 1 hour from now on ...object, iat: Date.now(), exp: Math.floor((Date.now() + 60 * 60 * 1000) / 1000), }, secret); return token; } exports.encryptToken = encryptToken; async function createUploadFileOperationUrl(options) { const { accessKey, secret } = options; let resp = await (0, exports.fetchUsingToken)(`${exports.END_POINT}/file/url`, { accessKey, secret, method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ uuid: options.uuid, description: options.description, visibility: options.public ? FileVisibility.Public : FileVisibility.Private }), }); const body = await resp.json(); return body; } exports.createUploadFileOperationUrl = createUploadFileOperationUrl; async function createPublicGetFileOperationUrl(options) { const { uuid, accessKey } = options; let resp = await fetch(`https://vector-kv.mega-ug.uk/public/file/${uuid}?accessKey=${accessKey}`, { method: 'GET', }); if (resp.status !== 200) { throw new Error('fetching file fail'); } let json = await resp.json(); return json; } exports.createPublicGetFileOperationUrl = createPublicGetFileOperationUrl; async function createGetFileOperationUrl(options) { const { accessKey, secret, uuid } = options; let resp = await (0, exports.fetchUsingToken)(`${exports.END_POINT}/file/url/${uuid}`, { accessKey, secret, method: 'GET', headers: { 'Content-Type': 'application/json', }, }); const body = await resp.json(); return body; } exports.createGetFileOperationUrl = createGetFileOperationUrl; /** * * @param url * @param options * @returns response returned by fetch * @summary should not be used in web */ const fetchUsingToken = async function fetchUsingToken(url, options) { const { accessKey, secret } = options; let res = await fetch(url, { ...options, headers: { ...options.headers, Authorization: `Bearer ${accessKey}:${await encryptToken({ accessKey }, secret)}`, }, }); if (res.status !== 200) { let json = await res.json(); throw new Error(await json.message); } return res; }; exports.fetchUsingToken = fetchUsingToken; let __lib = undefined; async function getLib() { if (!__lib) { __lib = await (0, closevector_hnswlib_wasm_1.loadHnswlib)(); } return __lib; } class IDBFS { static async writeBufferToFile(path, buffer) { return new Promise(async (resolve, reject) => { const lib = await getLib(); lib.EmscriptenFileSystemManager.writeBufferToFile(path, buffer, resolve); }); } static async writeStringToFile(path, data) { return new Promise(async (resolve, reject) => { const lib = await getLib(); lib.EmscriptenFileSystemManager.writeStringToFile(path, data, resolve); }); } static async getBufferFromFile(path) { const lib = await getLib(); return await lib.EmscriptenFileSystemManager.getBufferFromFile(path); } static async getStringFromFile(path) { const lib = await getLib(); return await lib.EmscriptenFileSystemManager.getStringFromFile(path); } static async writeFs() { const lib = await getLib(); const pr = new Promise((resolve, reject) => { lib.EmscriptenFileSystemManager.syncFS(false, () => { resolve(); }); }); await pr; } } exports.IDBFS = IDBFS; function pathJoin(...parts) { return parts.join('/').replace(/\/+/g, '/'); } exports.pathJoin = pathJoin;