github.com/primecitizens/pcz/std@v0.2.1/plat/js/webext/dns/bindings/ffi_bindings.ts (about) 1 import { importModule, Application, heap, Pointer } from "@ffi"; 2 3 importModule("plat/js/webext/dns", (A: Application) => { 4 const WEBEXT = typeof globalThis.browser === "undefined" ? globalThis.chrome : globalThis.browser; 5 6 return { 7 "store_ResolveCallbackResolveInfo": (ptr: Pointer, ref: heap.Ref<any>) => { 8 const x = A.H.get<any>(ref); 9 10 if (typeof x === "undefined") { 11 A.store.Bool(ptr + 9, false); 12 A.store.Bool(ptr + 8, false); 13 A.store.Int32(ptr + 0, 0); 14 A.store.Ref(ptr + 4, undefined); 15 } else { 16 A.store.Bool(ptr + 9, true); 17 A.store.Bool(ptr + 8, "resultCode" in x ? true : false); 18 A.store.Int32(ptr + 0, x["resultCode"] === undefined ? 0 : (x["resultCode"] as number)); 19 A.store.Ref(ptr + 4, x["address"]); 20 } 21 }, 22 "load_ResolveCallbackResolveInfo": (ptr: Pointer, create: heap.Ref<boolean>, ref: heap.Ref<any>): heap.Ref<any> => { 23 const x = create === A.H.TRUE ? {} : A.H.get<any>(ref); 24 25 if (A.load.Bool(ptr + 8)) { 26 x["resultCode"] = A.load.Int32(ptr + 0); 27 } else { 28 delete x["resultCode"]; 29 } 30 x["address"] = A.load.Ref(ptr + 4, undefined); 31 return create === A.H.TRUE ? A.H.push(x) : ref; 32 }, 33 "has_Resolve": (): heap.Ref<boolean> => { 34 if (WEBEXT?.dns && "resolve" in WEBEXT?.dns) { 35 return A.H.TRUE; 36 } 37 return A.H.FALSE; 38 }, 39 "func_Resolve": (fn: Pointer): void => { 40 A.store.Ref(fn, WEBEXT.dns.resolve); 41 }, 42 "call_Resolve": (retPtr: Pointer, hostname: heap.Ref<object>): void => { 43 const _ret = WEBEXT.dns.resolve(A.H.get<object>(hostname)); 44 A.store.Ref(retPtr, _ret); 45 }, 46 "try_Resolve": (retPtr: Pointer, errPtr: Pointer, hostname: heap.Ref<object>): heap.Ref<boolean> => { 47 try { 48 const _ret = WEBEXT.dns.resolve(A.H.get<object>(hostname)); 49 A.store.Ref(retPtr, _ret); 50 return A.H.TRUE; 51 } catch (err: any) { 52 A.store.Ref(errPtr, err); 53 return A.H.FALSE; 54 } 55 }, 56 }; 57 });