wowok_agent
Version:
Agent for WoWok: Unlock Co-Creation, Lighting Transaction, Empower Potential.
47 lines (41 loc) • 1.34 kB
text/typescript
import { LocalMark } from "./local/local.js";
import NodeRSA from 'node-rsa';
import { Level } from 'level';
export const isBrowser = () => {
return typeof window !== 'undefined' && typeof indexedDB !== 'undefined';
}
export const get_object_address = async (object: any) => {
if (typeof(object) === 'string') {
return await LocalMark.Instance().get_address(object)
} else {
return object
}
}
export const crypto_string = (str: string, pubkey:string) : string => {
const rsa = new NodeRSA();
rsa.importKey(pubkey, 'pkcs8-public-pem');
return rsa.encrypt(str, 'base64');
}
const sleep = (ms: number): Promise<void> => {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export const retry_db = async (name_or_db:string | Level, command: (db: Level) => Promise<any>) : Promise<any> => {
if (typeof name_or_db === 'string') {
name_or_db = new Level(name_or_db, { valueEncoding: 'json' });
}
for (let i = 0; i < 3; ++i) {
try {
const r = await command(name_or_db);
return r;
} catch(e) {
if ((e as any)?.code === 'LEVEL_DATABASE_NOT_OPEN') {
await sleep(1000);
} else {
throw e;
}
} finally {
await name_or_db.close();
}
}
throw('LEVEL_DATABASE_NOT_OPEN');
}