github.com/primecitizens/pcz/std@v0.2.1/plat/js/webext/webrequestinternal/bindings/ffi_bindings.ts (about) 1 import { importModule, Application, heap, Pointer } from "@ffi"; 2 3 importModule("plat/js/webext/webrequestinternal", (A: Application) => { 4 const WEBEXT = typeof globalThis.browser === "undefined" ? globalThis.chrome : globalThis.browser; 5 6 return { 7 "constof_AddEventListenerOptions": (ref: heap.Ref<string>): number => { 8 const idx = [ 9 "requestHeaders", 10 "responseHeaders", 11 "blocking", 12 "asyncBlocking", 13 "requestBody", 14 "extraHeaders", 15 ].indexOf(A.H.get(ref)); 16 return idx < 0 ? 0 : idx + 1; 17 }, 18 "has_AddEventListener": (): heap.Ref<boolean> => { 19 if (WEBEXT?.webRequestInternal && "addEventListener" in WEBEXT?.webRequestInternal) { 20 return A.H.TRUE; 21 } 22 return A.H.FALSE; 23 }, 24 "func_AddEventListener": (fn: Pointer): void => { 25 A.store.Ref(fn, WEBEXT.webRequestInternal.addEventListener); 26 }, 27 "call_AddEventListener": ( 28 retPtr: Pointer, 29 callback: heap.Ref<object>, 30 filter: Pointer, 31 extraInfoSpec: heap.Ref<object>, 32 eventName: heap.Ref<object>, 33 subEventName: heap.Ref<object>, 34 webViewInstanceId: number 35 ): void => { 36 const filter_ffi = {}; 37 38 if (A.load.Bool(filter + 24)) { 39 filter_ffi["tabId"] = A.load.Int64(filter + 0); 40 } 41 filter_ffi["types"] = A.load.Ref(filter + 8, undefined); 42 filter_ffi["urls"] = A.load.Ref(filter + 12, undefined); 43 if (A.load.Bool(filter + 25)) { 44 filter_ffi["windowId"] = A.load.Int64(filter + 16); 45 } 46 47 const _ret = WEBEXT.webRequestInternal.addEventListener( 48 A.H.get<object>(callback), 49 filter_ffi, 50 A.H.get<object>(extraInfoSpec), 51 A.H.get<object>(eventName), 52 A.H.get<object>(subEventName), 53 webViewInstanceId 54 ); 55 }, 56 "try_AddEventListener": ( 57 retPtr: Pointer, 58 errPtr: Pointer, 59 callback: heap.Ref<object>, 60 filter: Pointer, 61 extraInfoSpec: heap.Ref<object>, 62 eventName: heap.Ref<object>, 63 subEventName: heap.Ref<object>, 64 webViewInstanceId: number 65 ): heap.Ref<boolean> => { 66 try { 67 const filter_ffi = {}; 68 69 if (A.load.Bool(filter + 24)) { 70 filter_ffi["tabId"] = A.load.Int64(filter + 0); 71 } 72 filter_ffi["types"] = A.load.Ref(filter + 8, undefined); 73 filter_ffi["urls"] = A.load.Ref(filter + 12, undefined); 74 if (A.load.Bool(filter + 25)) { 75 filter_ffi["windowId"] = A.load.Int64(filter + 16); 76 } 77 78 const _ret = WEBEXT.webRequestInternal.addEventListener( 79 A.H.get<object>(callback), 80 filter_ffi, 81 A.H.get<object>(extraInfoSpec), 82 A.H.get<object>(eventName), 83 A.H.get<object>(subEventName), 84 webViewInstanceId 85 ); 86 return A.H.TRUE; 87 } catch (err: any) { 88 A.store.Ref(errPtr, err); 89 return A.H.FALSE; 90 } 91 }, 92 "has_EventHandled": (): heap.Ref<boolean> => { 93 if (WEBEXT?.webRequestInternal && "eventHandled" in WEBEXT?.webRequestInternal) { 94 return A.H.TRUE; 95 } 96 return A.H.FALSE; 97 }, 98 "func_EventHandled": (fn: Pointer): void => { 99 A.store.Ref(fn, WEBEXT.webRequestInternal.eventHandled); 100 }, 101 "call_EventHandled": ( 102 retPtr: Pointer, 103 eventName: heap.Ref<object>, 104 subEventName: heap.Ref<object>, 105 requestId: heap.Ref<object>, 106 webViewInstanceId: number, 107 response: Pointer 108 ): void => { 109 const response_ffi = {}; 110 111 if (A.load.Bool(response + 0 + 8)) { 112 response_ffi["authCredentials"] = {}; 113 response_ffi["authCredentials"]["password"] = A.load.Ref(response + 0 + 0, undefined); 114 response_ffi["authCredentials"]["username"] = A.load.Ref(response + 0 + 4, undefined); 115 } 116 if (A.load.Bool(response + 24)) { 117 response_ffi["cancel"] = A.load.Bool(response + 9); 118 } 119 response_ffi["redirectUrl"] = A.load.Ref(response + 12, undefined); 120 response_ffi["requestHeaders"] = A.load.Ref(response + 16, undefined); 121 response_ffi["responseHeaders"] = A.load.Ref(response + 20, undefined); 122 123 const _ret = WEBEXT.webRequestInternal.eventHandled( 124 A.H.get<object>(eventName), 125 A.H.get<object>(subEventName), 126 A.H.get<object>(requestId), 127 webViewInstanceId, 128 response_ffi 129 ); 130 }, 131 "try_EventHandled": ( 132 retPtr: Pointer, 133 errPtr: Pointer, 134 eventName: heap.Ref<object>, 135 subEventName: heap.Ref<object>, 136 requestId: heap.Ref<object>, 137 webViewInstanceId: number, 138 response: Pointer 139 ): heap.Ref<boolean> => { 140 try { 141 const response_ffi = {}; 142 143 if (A.load.Bool(response + 0 + 8)) { 144 response_ffi["authCredentials"] = {}; 145 response_ffi["authCredentials"]["password"] = A.load.Ref(response + 0 + 0, undefined); 146 response_ffi["authCredentials"]["username"] = A.load.Ref(response + 0 + 4, undefined); 147 } 148 if (A.load.Bool(response + 24)) { 149 response_ffi["cancel"] = A.load.Bool(response + 9); 150 } 151 response_ffi["redirectUrl"] = A.load.Ref(response + 12, undefined); 152 response_ffi["requestHeaders"] = A.load.Ref(response + 16, undefined); 153 response_ffi["responseHeaders"] = A.load.Ref(response + 20, undefined); 154 155 const _ret = WEBEXT.webRequestInternal.eventHandled( 156 A.H.get<object>(eventName), 157 A.H.get<object>(subEventName), 158 A.H.get<object>(requestId), 159 webViewInstanceId, 160 response_ffi 161 ); 162 return A.H.TRUE; 163 } catch (err: any) { 164 A.store.Ref(errPtr, err); 165 return A.H.FALSE; 166 } 167 }, 168 }; 169 });