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  });