/**
 * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
 *
 * Do not edit this file as changes may cause incorrect behavior and will be lost
 * once the code is regenerated.
 *
 * @generated by codegen project: GenerateModuleH.js
 */

#pragma once

#include <ReactCommon/TurboModule.h>
#include <react/bridging/Bridging.h>

namespace facebook::react {


  class JSI_EXPORT NativeCleverTapModuleCxxSpecJSI : public TurboModule {
protected:
  NativeCleverTapModuleCxxSpecJSI(std::shared_ptr<CallInvoker> jsInvoker);

public:
  virtual jsi::Object getConstants(jsi::Runtime &rt) = 0;
  virtual void setInstanceWithAccountId(jsi::Runtime &rt, jsi::String accountId) = 0;
  virtual void getInitialUrl(jsi::Runtime &rt, jsi::Function callback) = 0;
  virtual void setLibrary(jsi::Runtime &rt, jsi::String name, double andVersion) = 0;
  virtual void setLocale(jsi::Runtime &rt, jsi::String locale) = 0;
  virtual void registerForPush(jsi::Runtime &rt) = 0;
  virtual void setPushTokenAsString(jsi::Runtime &rt, jsi::String token, jsi::String withType) = 0;
  virtual void setPushTokenAsStringWithRegion(jsi::Runtime &rt, jsi::String token, jsi::String withType, jsi::String withRegion) = 0;
  virtual void enablePersonalization(jsi::Runtime &rt) = 0;
  virtual void disablePersonalization(jsi::Runtime &rt) = 0;
  virtual void setOffline(jsi::Runtime &rt, bool enabled) = 0;
  virtual void setOptOut(jsi::Runtime &rt, bool enabled) = 0;
  virtual void enableDeviceNetworkInfoReporting(jsi::Runtime &rt, bool enabled) = 0;
  virtual void recordScreenView(jsi::Runtime &rt, jsi::String screenName) = 0;
  virtual void recordEvent(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Object> withProps) = 0;
  virtual void recordChargedEvent(jsi::Runtime &rt, std::optional<jsi::Object> details, jsi::Array andItems) = 0;
  virtual void eventGetFirstTime(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) = 0;
  virtual void eventGetLastTime(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) = 0;
  virtual void eventGetOccurrences(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) = 0;
  virtual void eventGetDetail(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) = 0;
  virtual void getUserEventLog(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) = 0;
  virtual void getUserEventLogCount(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) = 0;
  virtual void getEventHistory(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getUserEventLogHistory(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void setLocation(jsi::Runtime &rt, double location, double longitude) = 0;
  virtual void profileGetCleverTapAttributionIdentifier(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void profileGetCleverTapID(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getCleverTapID(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void onUserLogin(jsi::Runtime &rt, std::optional<jsi::Object> profile) = 0;
  virtual void profileSet(jsi::Runtime &rt, std::optional<jsi::Object> profile) = 0;
  virtual void profileGetProperty(jsi::Runtime &rt, jsi::String propertyName, std::optional<jsi::Function> callback) = 0;
  virtual void profileRemoveValueForKey(jsi::Runtime &rt, jsi::String key) = 0;
  virtual void profileSetMultiValues(jsi::Runtime &rt, jsi::Array values, jsi::String forKey) = 0;
  virtual void profileAddMultiValue(jsi::Runtime &rt, jsi::String value, jsi::String forKey) = 0;
  virtual void profileAddMultiValues(jsi::Runtime &rt, jsi::Array values, jsi::String forKey) = 0;
  virtual void profileRemoveMultiValue(jsi::Runtime &rt, jsi::String value, jsi::String forKey) = 0;
  virtual void profileRemoveMultiValues(jsi::Runtime &rt, jsi::Array values, jsi::String forKey) = 0;
  virtual void profileIncrementValueForKey(jsi::Runtime &rt, std::optional<double> value, jsi::String forKey) = 0;
  virtual void profileDecrementValueForKey(jsi::Runtime &rt, std::optional<double> value, jsi::String forKey) = 0;
  virtual void pushInstallReferrer(jsi::Runtime &rt, jsi::String source, jsi::String medium, jsi::String campaign) = 0;
  virtual void sessionGetTimeElapsed(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void sessionGetTotalVisits(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void sessionGetScreenCount(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void sessionGetPreviousVisitTime(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void sessionGetUTMDetails(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getUserLastVisitTs(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getUserAppLaunchCount(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void createNotificationChannel(jsi::Runtime &rt, jsi::String channelId, jsi::String withChannelName, jsi::String withChannelDescription, double withImportance, bool withShowBadge) = 0;
  virtual void createNotificationChannelWithSound(jsi::Runtime &rt, jsi::String channelId, jsi::String withChannelName, jsi::String withChannelDescription, double withImportance, bool withShowBadge, jsi::String withSound) = 0;
  virtual void createNotificationChannelWithGroupId(jsi::Runtime &rt, jsi::String channelId, jsi::String withChannelName, jsi::String withChannelDescription, double withImportance, jsi::String withGroupId, bool withShowBadge) = 0;
  virtual void createNotificationChannelWithGroupIdAndSound(jsi::Runtime &rt, jsi::String channelId, jsi::String withChannelName, jsi::String withChannelDescription, double withImportance, jsi::String withGroupId, bool withShowBadge, jsi::String withSound) = 0;
  virtual void createNotificationChannelGroup(jsi::Runtime &rt, jsi::String groupId, jsi::String withGroupName) = 0;
  virtual void deleteNotificationChannel(jsi::Runtime &rt, jsi::String channelId) = 0;
  virtual void deleteNotificationChannelGroup(jsi::Runtime &rt, jsi::String groupId) = 0;
  virtual void createNotification(jsi::Runtime &rt, std::optional<jsi::Object> extras) = 0;
  virtual void setDebugLevel(jsi::Runtime &rt, double level) = 0;
  virtual void getInboxMessageCount(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getInboxMessageUnreadCount(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getAllInboxMessages(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getUnreadInboxMessages(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getInboxMessageForId(jsi::Runtime &rt, jsi::String messageId, std::optional<jsi::Function> callback) = 0;
  virtual void pushInboxNotificationViewedEventForId(jsi::Runtime &rt, jsi::String messageId) = 0;
  virtual void pushInboxNotificationClickedEventForId(jsi::Runtime &rt, jsi::String messageId) = 0;
  virtual void markReadInboxMessageForId(jsi::Runtime &rt, jsi::String messageId) = 0;
  virtual void deleteInboxMessageForId(jsi::Runtime &rt, jsi::String messageId) = 0;
  virtual void markReadInboxMessagesForIDs(jsi::Runtime &rt, jsi::Array messageIds) = 0;
  virtual void deleteInboxMessagesForIDs(jsi::Runtime &rt, jsi::Array messageIds) = 0;
  virtual void dismissInbox(jsi::Runtime &rt) = 0;
  virtual void initializeInbox(jsi::Runtime &rt) = 0;
  virtual void showInbox(jsi::Runtime &rt, std::optional<jsi::Object> styleConfig) = 0;
  virtual void getAllDisplayUnits(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getDisplayUnitForId(jsi::Runtime &rt, jsi::String unitId, std::optional<jsi::Function> callback) = 0;
  virtual void pushDisplayUnitViewedEventForID(jsi::Runtime &rt, jsi::String unitId) = 0;
  virtual void pushDisplayUnitClickedEventForID(jsi::Runtime &rt, jsi::String unitId) = 0;
  virtual void getFeatureFlag(jsi::Runtime &rt, jsi::String flag, bool withdefaultValue, std::optional<jsi::Function> callback) = 0;
  virtual void setDefaultsMap(jsi::Runtime &rt, std::optional<jsi::Object> jsonDict) = 0;
  virtual void fetch(jsi::Runtime &rt) = 0;
  virtual void fetchWithMinimumFetchIntervalInSeconds(jsi::Runtime &rt, double time) = 0;
  virtual void activate(jsi::Runtime &rt) = 0;
  virtual void fetchAndActivate(jsi::Runtime &rt) = 0;
  virtual void setMinimumFetchIntervalInSeconds(jsi::Runtime &rt, double time) = 0;
  virtual void getLastFetchTimeStampInMillis(jsi::Runtime &rt, jsi::Function callback) = 0;
  virtual void getString(jsi::Runtime &rt, jsi::String key, std::optional<jsi::Function> callback) = 0;
  virtual void getBoolean(jsi::Runtime &rt, jsi::String key, std::optional<jsi::Function> callback) = 0;
  virtual void getDouble(jsi::Runtime &rt, jsi::String key, std::optional<jsi::Function> callback) = 0;
  virtual void reset(jsi::Runtime &rt) = 0;
  virtual void suspendInAppNotifications(jsi::Runtime &rt) = 0;
  virtual void discardInAppNotifications(jsi::Runtime &rt) = 0;
  virtual void resumeInAppNotifications(jsi::Runtime &rt) = 0;
  virtual void fetchInApps(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void clearInAppResources(jsi::Runtime &rt, bool expiredOnly) = 0;
  virtual jsi::Value customTemplateSetDismissed(jsi::Runtime &rt, jsi::String templateName) = 0;
  virtual jsi::Value customTemplateSetPresented(jsi::Runtime &rt, jsi::String templateName) = 0;
  virtual jsi::Value customTemplateRunAction(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) = 0;
  virtual jsi::Value customTemplateGetStringArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) = 0;
  virtual jsi::Value customTemplateGetNumberArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) = 0;
  virtual jsi::Value customTemplateGetBooleanArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) = 0;
  virtual jsi::Value customTemplateGetFileArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) = 0;
  virtual jsi::Value customTemplateGetObjectArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) = 0;
  virtual jsi::Value customTemplateContextToString(jsi::Runtime &rt, jsi::String templateName) = 0;
  virtual void syncCustomTemplates(jsi::Runtime &rt) = 0;
  virtual void syncCustomTemplatesInProd(jsi::Runtime &rt, bool isProduction) = 0;
  virtual void promptForPushPermission(jsi::Runtime &rt, bool showFallbackSettings) = 0;
  virtual void promptPushPrimer(jsi::Runtime &rt, jsi::Object json) = 0;
  virtual void isPushPermissionGranted(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void syncVariables(jsi::Runtime &rt) = 0;
  virtual void syncVariablesinProd(jsi::Runtime &rt, bool isProduction) = 0;
  virtual void getVariable(jsi::Runtime &rt, jsi::String name, std::optional<jsi::Function> callback) = 0;
  virtual void fetchVariables(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void getVariables(jsi::Runtime &rt, std::optional<jsi::Function> callback) = 0;
  virtual void defineVariables(jsi::Runtime &rt, std::optional<jsi::Object> variables) = 0;
  virtual void defineFileVariable(jsi::Runtime &rt, jsi::String name) = 0;
  virtual void onVariablesChanged(jsi::Runtime &rt) = 0;
  virtual void onOneTimeVariablesChanged(jsi::Runtime &rt) = 0;
  virtual void onValueChanged(jsi::Runtime &rt, jsi::String name) = 0;
  virtual void onVariablesChangedAndNoDownloadsPending(jsi::Runtime &rt) = 0;
  virtual void onceVariablesChangedAndNoDownloadsPending(jsi::Runtime &rt) = 0;
  virtual void onFileValueChanged(jsi::Runtime &rt, jsi::String name) = 0;
  virtual void onEventListenerAdded(jsi::Runtime &rt, jsi::String eventType) = 0;
  virtual void addListener(jsi::Runtime &rt, jsi::String eventType) = 0;
  virtual void removeListeners(jsi::Runtime &rt, double count) = 0;

};

template <typename T>
class JSI_EXPORT NativeCleverTapModuleCxxSpec : public TurboModule {
public:
  jsi::Value get(jsi::Runtime &rt, const jsi::PropNameID &propName) override {
    return delegate_.get(rt, propName);
  }

  static constexpr std::string_view kModuleName = "CleverTapReact";

protected:
  NativeCleverTapModuleCxxSpec(std::shared_ptr<CallInvoker> jsInvoker)
    : TurboModule(std::string{NativeCleverTapModuleCxxSpec::kModuleName}, jsInvoker),
      delegate_(reinterpret_cast<T*>(this), jsInvoker) {}

private:
  class Delegate : public NativeCleverTapModuleCxxSpecJSI {
  public:
    Delegate(T *instance, std::shared_ptr<CallInvoker> jsInvoker) :
      NativeCleverTapModuleCxxSpecJSI(std::move(jsInvoker)), instance_(instance) {}

    jsi::Object getConstants(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::getConstants) == 1,
          "Expected getConstants(...) to have 1 parameters");

      return bridging::callFromJs<jsi::Object>(
          rt, &T::getConstants, jsInvoker_, instance_);
    }
    void setInstanceWithAccountId(jsi::Runtime &rt, jsi::String accountId) override {
      static_assert(
          bridging::getParameterCount(&T::setInstanceWithAccountId) == 2,
          "Expected setInstanceWithAccountId(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setInstanceWithAccountId, jsInvoker_, instance_, std::move(accountId));
    }
    void getInitialUrl(jsi::Runtime &rt, jsi::Function callback) override {
      static_assert(
          bridging::getParameterCount(&T::getInitialUrl) == 2,
          "Expected getInitialUrl(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getInitialUrl, jsInvoker_, instance_, std::move(callback));
    }
    void setLibrary(jsi::Runtime &rt, jsi::String name, double andVersion) override {
      static_assert(
          bridging::getParameterCount(&T::setLibrary) == 3,
          "Expected setLibrary(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setLibrary, jsInvoker_, instance_, std::move(name), std::move(andVersion));
    }
    void setLocale(jsi::Runtime &rt, jsi::String locale) override {
      static_assert(
          bridging::getParameterCount(&T::setLocale) == 2,
          "Expected setLocale(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setLocale, jsInvoker_, instance_, std::move(locale));
    }
    void registerForPush(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::registerForPush) == 1,
          "Expected registerForPush(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::registerForPush, jsInvoker_, instance_);
    }
    void setPushTokenAsString(jsi::Runtime &rt, jsi::String token, jsi::String withType) override {
      static_assert(
          bridging::getParameterCount(&T::setPushTokenAsString) == 3,
          "Expected setPushTokenAsString(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setPushTokenAsString, jsInvoker_, instance_, std::move(token), std::move(withType));
    }
    void setPushTokenAsStringWithRegion(jsi::Runtime &rt, jsi::String token, jsi::String withType, jsi::String withRegion) override {
      static_assert(
          bridging::getParameterCount(&T::setPushTokenAsStringWithRegion) == 4,
          "Expected setPushTokenAsStringWithRegion(...) to have 4 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setPushTokenAsStringWithRegion, jsInvoker_, instance_, std::move(token), std::move(withType), std::move(withRegion));
    }
    void enablePersonalization(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::enablePersonalization) == 1,
          "Expected enablePersonalization(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::enablePersonalization, jsInvoker_, instance_);
    }
    void disablePersonalization(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::disablePersonalization) == 1,
          "Expected disablePersonalization(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::disablePersonalization, jsInvoker_, instance_);
    }
    void setOffline(jsi::Runtime &rt, bool enabled) override {
      static_assert(
          bridging::getParameterCount(&T::setOffline) == 2,
          "Expected setOffline(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setOffline, jsInvoker_, instance_, std::move(enabled));
    }
    void setOptOut(jsi::Runtime &rt, bool enabled) override {
      static_assert(
          bridging::getParameterCount(&T::setOptOut) == 2,
          "Expected setOptOut(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setOptOut, jsInvoker_, instance_, std::move(enabled));
    }
    void enableDeviceNetworkInfoReporting(jsi::Runtime &rt, bool enabled) override {
      static_assert(
          bridging::getParameterCount(&T::enableDeviceNetworkInfoReporting) == 2,
          "Expected enableDeviceNetworkInfoReporting(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::enableDeviceNetworkInfoReporting, jsInvoker_, instance_, std::move(enabled));
    }
    void recordScreenView(jsi::Runtime &rt, jsi::String screenName) override {
      static_assert(
          bridging::getParameterCount(&T::recordScreenView) == 2,
          "Expected recordScreenView(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::recordScreenView, jsInvoker_, instance_, std::move(screenName));
    }
    void recordEvent(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Object> withProps) override {
      static_assert(
          bridging::getParameterCount(&T::recordEvent) == 3,
          "Expected recordEvent(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::recordEvent, jsInvoker_, instance_, std::move(eventName), std::move(withProps));
    }
    void recordChargedEvent(jsi::Runtime &rt, std::optional<jsi::Object> details, jsi::Array andItems) override {
      static_assert(
          bridging::getParameterCount(&T::recordChargedEvent) == 3,
          "Expected recordChargedEvent(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::recordChargedEvent, jsInvoker_, instance_, std::move(details), std::move(andItems));
    }
    void eventGetFirstTime(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::eventGetFirstTime) == 3,
          "Expected eventGetFirstTime(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::eventGetFirstTime, jsInvoker_, instance_, std::move(eventName), std::move(callback));
    }
    void eventGetLastTime(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::eventGetLastTime) == 3,
          "Expected eventGetLastTime(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::eventGetLastTime, jsInvoker_, instance_, std::move(eventName), std::move(callback));
    }
    void eventGetOccurrences(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::eventGetOccurrences) == 3,
          "Expected eventGetOccurrences(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::eventGetOccurrences, jsInvoker_, instance_, std::move(eventName), std::move(callback));
    }
    void eventGetDetail(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::eventGetDetail) == 3,
          "Expected eventGetDetail(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::eventGetDetail, jsInvoker_, instance_, std::move(eventName), std::move(callback));
    }
    void getUserEventLog(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getUserEventLog) == 3,
          "Expected getUserEventLog(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getUserEventLog, jsInvoker_, instance_, std::move(eventName), std::move(callback));
    }
    void getUserEventLogCount(jsi::Runtime &rt, jsi::String eventName, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getUserEventLogCount) == 3,
          "Expected getUserEventLogCount(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getUserEventLogCount, jsInvoker_, instance_, std::move(eventName), std::move(callback));
    }
    void getEventHistory(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getEventHistory) == 2,
          "Expected getEventHistory(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getEventHistory, jsInvoker_, instance_, std::move(callback));
    }
    void getUserEventLogHistory(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getUserEventLogHistory) == 2,
          "Expected getUserEventLogHistory(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getUserEventLogHistory, jsInvoker_, instance_, std::move(callback));
    }
    void setLocation(jsi::Runtime &rt, double location, double longitude) override {
      static_assert(
          bridging::getParameterCount(&T::setLocation) == 3,
          "Expected setLocation(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setLocation, jsInvoker_, instance_, std::move(location), std::move(longitude));
    }
    void profileGetCleverTapAttributionIdentifier(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::profileGetCleverTapAttributionIdentifier) == 2,
          "Expected profileGetCleverTapAttributionIdentifier(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileGetCleverTapAttributionIdentifier, jsInvoker_, instance_, std::move(callback));
    }
    void profileGetCleverTapID(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::profileGetCleverTapID) == 2,
          "Expected profileGetCleverTapID(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileGetCleverTapID, jsInvoker_, instance_, std::move(callback));
    }
    void getCleverTapID(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getCleverTapID) == 2,
          "Expected getCleverTapID(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getCleverTapID, jsInvoker_, instance_, std::move(callback));
    }
    void onUserLogin(jsi::Runtime &rt, std::optional<jsi::Object> profile) override {
      static_assert(
          bridging::getParameterCount(&T::onUserLogin) == 2,
          "Expected onUserLogin(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::onUserLogin, jsInvoker_, instance_, std::move(profile));
    }
    void profileSet(jsi::Runtime &rt, std::optional<jsi::Object> profile) override {
      static_assert(
          bridging::getParameterCount(&T::profileSet) == 2,
          "Expected profileSet(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileSet, jsInvoker_, instance_, std::move(profile));
    }
    void profileGetProperty(jsi::Runtime &rt, jsi::String propertyName, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::profileGetProperty) == 3,
          "Expected profileGetProperty(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileGetProperty, jsInvoker_, instance_, std::move(propertyName), std::move(callback));
    }
    void profileRemoveValueForKey(jsi::Runtime &rt, jsi::String key) override {
      static_assert(
          bridging::getParameterCount(&T::profileRemoveValueForKey) == 2,
          "Expected profileRemoveValueForKey(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileRemoveValueForKey, jsInvoker_, instance_, std::move(key));
    }
    void profileSetMultiValues(jsi::Runtime &rt, jsi::Array values, jsi::String forKey) override {
      static_assert(
          bridging::getParameterCount(&T::profileSetMultiValues) == 3,
          "Expected profileSetMultiValues(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileSetMultiValues, jsInvoker_, instance_, std::move(values), std::move(forKey));
    }
    void profileAddMultiValue(jsi::Runtime &rt, jsi::String value, jsi::String forKey) override {
      static_assert(
          bridging::getParameterCount(&T::profileAddMultiValue) == 3,
          "Expected profileAddMultiValue(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileAddMultiValue, jsInvoker_, instance_, std::move(value), std::move(forKey));
    }
    void profileAddMultiValues(jsi::Runtime &rt, jsi::Array values, jsi::String forKey) override {
      static_assert(
          bridging::getParameterCount(&T::profileAddMultiValues) == 3,
          "Expected profileAddMultiValues(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileAddMultiValues, jsInvoker_, instance_, std::move(values), std::move(forKey));
    }
    void profileRemoveMultiValue(jsi::Runtime &rt, jsi::String value, jsi::String forKey) override {
      static_assert(
          bridging::getParameterCount(&T::profileRemoveMultiValue) == 3,
          "Expected profileRemoveMultiValue(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileRemoveMultiValue, jsInvoker_, instance_, std::move(value), std::move(forKey));
    }
    void profileRemoveMultiValues(jsi::Runtime &rt, jsi::Array values, jsi::String forKey) override {
      static_assert(
          bridging::getParameterCount(&T::profileRemoveMultiValues) == 3,
          "Expected profileRemoveMultiValues(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileRemoveMultiValues, jsInvoker_, instance_, std::move(values), std::move(forKey));
    }
    void profileIncrementValueForKey(jsi::Runtime &rt, std::optional<double> value, jsi::String forKey) override {
      static_assert(
          bridging::getParameterCount(&T::profileIncrementValueForKey) == 3,
          "Expected profileIncrementValueForKey(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileIncrementValueForKey, jsInvoker_, instance_, std::move(value), std::move(forKey));
    }
    void profileDecrementValueForKey(jsi::Runtime &rt, std::optional<double> value, jsi::String forKey) override {
      static_assert(
          bridging::getParameterCount(&T::profileDecrementValueForKey) == 3,
          "Expected profileDecrementValueForKey(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::profileDecrementValueForKey, jsInvoker_, instance_, std::move(value), std::move(forKey));
    }
    void pushInstallReferrer(jsi::Runtime &rt, jsi::String source, jsi::String medium, jsi::String campaign) override {
      static_assert(
          bridging::getParameterCount(&T::pushInstallReferrer) == 4,
          "Expected pushInstallReferrer(...) to have 4 parameters");

      return bridging::callFromJs<void>(
          rt, &T::pushInstallReferrer, jsInvoker_, instance_, std::move(source), std::move(medium), std::move(campaign));
    }
    void sessionGetTimeElapsed(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::sessionGetTimeElapsed) == 2,
          "Expected sessionGetTimeElapsed(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::sessionGetTimeElapsed, jsInvoker_, instance_, std::move(callback));
    }
    void sessionGetTotalVisits(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::sessionGetTotalVisits) == 2,
          "Expected sessionGetTotalVisits(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::sessionGetTotalVisits, jsInvoker_, instance_, std::move(callback));
    }
    void sessionGetScreenCount(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::sessionGetScreenCount) == 2,
          "Expected sessionGetScreenCount(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::sessionGetScreenCount, jsInvoker_, instance_, std::move(callback));
    }
    void sessionGetPreviousVisitTime(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::sessionGetPreviousVisitTime) == 2,
          "Expected sessionGetPreviousVisitTime(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::sessionGetPreviousVisitTime, jsInvoker_, instance_, std::move(callback));
    }
    void sessionGetUTMDetails(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::sessionGetUTMDetails) == 2,
          "Expected sessionGetUTMDetails(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::sessionGetUTMDetails, jsInvoker_, instance_, std::move(callback));
    }
    void getUserLastVisitTs(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getUserLastVisitTs) == 2,
          "Expected getUserLastVisitTs(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getUserLastVisitTs, jsInvoker_, instance_, std::move(callback));
    }
    void getUserAppLaunchCount(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getUserAppLaunchCount) == 2,
          "Expected getUserAppLaunchCount(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getUserAppLaunchCount, jsInvoker_, instance_, std::move(callback));
    }
    void createNotificationChannel(jsi::Runtime &rt, jsi::String channelId, jsi::String withChannelName, jsi::String withChannelDescription, double withImportance, bool withShowBadge) override {
      static_assert(
          bridging::getParameterCount(&T::createNotificationChannel) == 6,
          "Expected createNotificationChannel(...) to have 6 parameters");

      return bridging::callFromJs<void>(
          rt, &T::createNotificationChannel, jsInvoker_, instance_, std::move(channelId), std::move(withChannelName), std::move(withChannelDescription), std::move(withImportance), std::move(withShowBadge));
    }
    void createNotificationChannelWithSound(jsi::Runtime &rt, jsi::String channelId, jsi::String withChannelName, jsi::String withChannelDescription, double withImportance, bool withShowBadge, jsi::String withSound) override {
      static_assert(
          bridging::getParameterCount(&T::createNotificationChannelWithSound) == 7,
          "Expected createNotificationChannelWithSound(...) to have 7 parameters");

      return bridging::callFromJs<void>(
          rt, &T::createNotificationChannelWithSound, jsInvoker_, instance_, std::move(channelId), std::move(withChannelName), std::move(withChannelDescription), std::move(withImportance), std::move(withShowBadge), std::move(withSound));
    }
    void createNotificationChannelWithGroupId(jsi::Runtime &rt, jsi::String channelId, jsi::String withChannelName, jsi::String withChannelDescription, double withImportance, jsi::String withGroupId, bool withShowBadge) override {
      static_assert(
          bridging::getParameterCount(&T::createNotificationChannelWithGroupId) == 7,
          "Expected createNotificationChannelWithGroupId(...) to have 7 parameters");

      return bridging::callFromJs<void>(
          rt, &T::createNotificationChannelWithGroupId, jsInvoker_, instance_, std::move(channelId), std::move(withChannelName), std::move(withChannelDescription), std::move(withImportance), std::move(withGroupId), std::move(withShowBadge));
    }
    void createNotificationChannelWithGroupIdAndSound(jsi::Runtime &rt, jsi::String channelId, jsi::String withChannelName, jsi::String withChannelDescription, double withImportance, jsi::String withGroupId, bool withShowBadge, jsi::String withSound) override {
      static_assert(
          bridging::getParameterCount(&T::createNotificationChannelWithGroupIdAndSound) == 8,
          "Expected createNotificationChannelWithGroupIdAndSound(...) to have 8 parameters");

      return bridging::callFromJs<void>(
          rt, &T::createNotificationChannelWithGroupIdAndSound, jsInvoker_, instance_, std::move(channelId), std::move(withChannelName), std::move(withChannelDescription), std::move(withImportance), std::move(withGroupId), std::move(withShowBadge), std::move(withSound));
    }
    void createNotificationChannelGroup(jsi::Runtime &rt, jsi::String groupId, jsi::String withGroupName) override {
      static_assert(
          bridging::getParameterCount(&T::createNotificationChannelGroup) == 3,
          "Expected createNotificationChannelGroup(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::createNotificationChannelGroup, jsInvoker_, instance_, std::move(groupId), std::move(withGroupName));
    }
    void deleteNotificationChannel(jsi::Runtime &rt, jsi::String channelId) override {
      static_assert(
          bridging::getParameterCount(&T::deleteNotificationChannel) == 2,
          "Expected deleteNotificationChannel(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::deleteNotificationChannel, jsInvoker_, instance_, std::move(channelId));
    }
    void deleteNotificationChannelGroup(jsi::Runtime &rt, jsi::String groupId) override {
      static_assert(
          bridging::getParameterCount(&T::deleteNotificationChannelGroup) == 2,
          "Expected deleteNotificationChannelGroup(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::deleteNotificationChannelGroup, jsInvoker_, instance_, std::move(groupId));
    }
    void createNotification(jsi::Runtime &rt, std::optional<jsi::Object> extras) override {
      static_assert(
          bridging::getParameterCount(&T::createNotification) == 2,
          "Expected createNotification(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::createNotification, jsInvoker_, instance_, std::move(extras));
    }
    void setDebugLevel(jsi::Runtime &rt, double level) override {
      static_assert(
          bridging::getParameterCount(&T::setDebugLevel) == 2,
          "Expected setDebugLevel(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setDebugLevel, jsInvoker_, instance_, std::move(level));
    }
    void getInboxMessageCount(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getInboxMessageCount) == 2,
          "Expected getInboxMessageCount(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getInboxMessageCount, jsInvoker_, instance_, std::move(callback));
    }
    void getInboxMessageUnreadCount(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getInboxMessageUnreadCount) == 2,
          "Expected getInboxMessageUnreadCount(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getInboxMessageUnreadCount, jsInvoker_, instance_, std::move(callback));
    }
    void getAllInboxMessages(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getAllInboxMessages) == 2,
          "Expected getAllInboxMessages(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getAllInboxMessages, jsInvoker_, instance_, std::move(callback));
    }
    void getUnreadInboxMessages(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getUnreadInboxMessages) == 2,
          "Expected getUnreadInboxMessages(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getUnreadInboxMessages, jsInvoker_, instance_, std::move(callback));
    }
    void getInboxMessageForId(jsi::Runtime &rt, jsi::String messageId, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getInboxMessageForId) == 3,
          "Expected getInboxMessageForId(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getInboxMessageForId, jsInvoker_, instance_, std::move(messageId), std::move(callback));
    }
    void pushInboxNotificationViewedEventForId(jsi::Runtime &rt, jsi::String messageId) override {
      static_assert(
          bridging::getParameterCount(&T::pushInboxNotificationViewedEventForId) == 2,
          "Expected pushInboxNotificationViewedEventForId(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::pushInboxNotificationViewedEventForId, jsInvoker_, instance_, std::move(messageId));
    }
    void pushInboxNotificationClickedEventForId(jsi::Runtime &rt, jsi::String messageId) override {
      static_assert(
          bridging::getParameterCount(&T::pushInboxNotificationClickedEventForId) == 2,
          "Expected pushInboxNotificationClickedEventForId(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::pushInboxNotificationClickedEventForId, jsInvoker_, instance_, std::move(messageId));
    }
    void markReadInboxMessageForId(jsi::Runtime &rt, jsi::String messageId) override {
      static_assert(
          bridging::getParameterCount(&T::markReadInboxMessageForId) == 2,
          "Expected markReadInboxMessageForId(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::markReadInboxMessageForId, jsInvoker_, instance_, std::move(messageId));
    }
    void deleteInboxMessageForId(jsi::Runtime &rt, jsi::String messageId) override {
      static_assert(
          bridging::getParameterCount(&T::deleteInboxMessageForId) == 2,
          "Expected deleteInboxMessageForId(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::deleteInboxMessageForId, jsInvoker_, instance_, std::move(messageId));
    }
    void markReadInboxMessagesForIDs(jsi::Runtime &rt, jsi::Array messageIds) override {
      static_assert(
          bridging::getParameterCount(&T::markReadInboxMessagesForIDs) == 2,
          "Expected markReadInboxMessagesForIDs(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::markReadInboxMessagesForIDs, jsInvoker_, instance_, std::move(messageIds));
    }
    void deleteInboxMessagesForIDs(jsi::Runtime &rt, jsi::Array messageIds) override {
      static_assert(
          bridging::getParameterCount(&T::deleteInboxMessagesForIDs) == 2,
          "Expected deleteInboxMessagesForIDs(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::deleteInboxMessagesForIDs, jsInvoker_, instance_, std::move(messageIds));
    }
    void dismissInbox(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::dismissInbox) == 1,
          "Expected dismissInbox(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::dismissInbox, jsInvoker_, instance_);
    }
    void initializeInbox(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::initializeInbox) == 1,
          "Expected initializeInbox(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::initializeInbox, jsInvoker_, instance_);
    }
    void showInbox(jsi::Runtime &rt, std::optional<jsi::Object> styleConfig) override {
      static_assert(
          bridging::getParameterCount(&T::showInbox) == 2,
          "Expected showInbox(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::showInbox, jsInvoker_, instance_, std::move(styleConfig));
    }
    void getAllDisplayUnits(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getAllDisplayUnits) == 2,
          "Expected getAllDisplayUnits(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getAllDisplayUnits, jsInvoker_, instance_, std::move(callback));
    }
    void getDisplayUnitForId(jsi::Runtime &rt, jsi::String unitId, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getDisplayUnitForId) == 3,
          "Expected getDisplayUnitForId(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getDisplayUnitForId, jsInvoker_, instance_, std::move(unitId), std::move(callback));
    }
    void pushDisplayUnitViewedEventForID(jsi::Runtime &rt, jsi::String unitId) override {
      static_assert(
          bridging::getParameterCount(&T::pushDisplayUnitViewedEventForID) == 2,
          "Expected pushDisplayUnitViewedEventForID(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::pushDisplayUnitViewedEventForID, jsInvoker_, instance_, std::move(unitId));
    }
    void pushDisplayUnitClickedEventForID(jsi::Runtime &rt, jsi::String unitId) override {
      static_assert(
          bridging::getParameterCount(&T::pushDisplayUnitClickedEventForID) == 2,
          "Expected pushDisplayUnitClickedEventForID(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::pushDisplayUnitClickedEventForID, jsInvoker_, instance_, std::move(unitId));
    }
    void getFeatureFlag(jsi::Runtime &rt, jsi::String flag, bool withdefaultValue, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getFeatureFlag) == 4,
          "Expected getFeatureFlag(...) to have 4 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getFeatureFlag, jsInvoker_, instance_, std::move(flag), std::move(withdefaultValue), std::move(callback));
    }
    void setDefaultsMap(jsi::Runtime &rt, std::optional<jsi::Object> jsonDict) override {
      static_assert(
          bridging::getParameterCount(&T::setDefaultsMap) == 2,
          "Expected setDefaultsMap(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setDefaultsMap, jsInvoker_, instance_, std::move(jsonDict));
    }
    void fetch(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::fetch) == 1,
          "Expected fetch(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::fetch, jsInvoker_, instance_);
    }
    void fetchWithMinimumFetchIntervalInSeconds(jsi::Runtime &rt, double time) override {
      static_assert(
          bridging::getParameterCount(&T::fetchWithMinimumFetchIntervalInSeconds) == 2,
          "Expected fetchWithMinimumFetchIntervalInSeconds(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::fetchWithMinimumFetchIntervalInSeconds, jsInvoker_, instance_, std::move(time));
    }
    void activate(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::activate) == 1,
          "Expected activate(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::activate, jsInvoker_, instance_);
    }
    void fetchAndActivate(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::fetchAndActivate) == 1,
          "Expected fetchAndActivate(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::fetchAndActivate, jsInvoker_, instance_);
    }
    void setMinimumFetchIntervalInSeconds(jsi::Runtime &rt, double time) override {
      static_assert(
          bridging::getParameterCount(&T::setMinimumFetchIntervalInSeconds) == 2,
          "Expected setMinimumFetchIntervalInSeconds(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::setMinimumFetchIntervalInSeconds, jsInvoker_, instance_, std::move(time));
    }
    void getLastFetchTimeStampInMillis(jsi::Runtime &rt, jsi::Function callback) override {
      static_assert(
          bridging::getParameterCount(&T::getLastFetchTimeStampInMillis) == 2,
          "Expected getLastFetchTimeStampInMillis(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getLastFetchTimeStampInMillis, jsInvoker_, instance_, std::move(callback));
    }
    void getString(jsi::Runtime &rt, jsi::String key, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getString) == 3,
          "Expected getString(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getString, jsInvoker_, instance_, std::move(key), std::move(callback));
    }
    void getBoolean(jsi::Runtime &rt, jsi::String key, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getBoolean) == 3,
          "Expected getBoolean(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getBoolean, jsInvoker_, instance_, std::move(key), std::move(callback));
    }
    void getDouble(jsi::Runtime &rt, jsi::String key, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getDouble) == 3,
          "Expected getDouble(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getDouble, jsInvoker_, instance_, std::move(key), std::move(callback));
    }
    void reset(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::reset) == 1,
          "Expected reset(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::reset, jsInvoker_, instance_);
    }
    void suspendInAppNotifications(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::suspendInAppNotifications) == 1,
          "Expected suspendInAppNotifications(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::suspendInAppNotifications, jsInvoker_, instance_);
    }
    void discardInAppNotifications(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::discardInAppNotifications) == 1,
          "Expected discardInAppNotifications(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::discardInAppNotifications, jsInvoker_, instance_);
    }
    void resumeInAppNotifications(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::resumeInAppNotifications) == 1,
          "Expected resumeInAppNotifications(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::resumeInAppNotifications, jsInvoker_, instance_);
    }
    void fetchInApps(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::fetchInApps) == 2,
          "Expected fetchInApps(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::fetchInApps, jsInvoker_, instance_, std::move(callback));
    }
    void clearInAppResources(jsi::Runtime &rt, bool expiredOnly) override {
      static_assert(
          bridging::getParameterCount(&T::clearInAppResources) == 2,
          "Expected clearInAppResources(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::clearInAppResources, jsInvoker_, instance_, std::move(expiredOnly));
    }
    jsi::Value customTemplateSetDismissed(jsi::Runtime &rt, jsi::String templateName) override {
      static_assert(
          bridging::getParameterCount(&T::customTemplateSetDismissed) == 2,
          "Expected customTemplateSetDismissed(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::customTemplateSetDismissed, jsInvoker_, instance_, std::move(templateName));
    }
    jsi::Value customTemplateSetPresented(jsi::Runtime &rt, jsi::String templateName) override {
      static_assert(
          bridging::getParameterCount(&T::customTemplateSetPresented) == 2,
          "Expected customTemplateSetPresented(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::customTemplateSetPresented, jsInvoker_, instance_, std::move(templateName));
    }
    jsi::Value customTemplateRunAction(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) override {
      static_assert(
          bridging::getParameterCount(&T::customTemplateRunAction) == 3,
          "Expected customTemplateRunAction(...) to have 3 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::customTemplateRunAction, jsInvoker_, instance_, std::move(templateName), std::move(argName));
    }
    jsi::Value customTemplateGetStringArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) override {
      static_assert(
          bridging::getParameterCount(&T::customTemplateGetStringArg) == 3,
          "Expected customTemplateGetStringArg(...) to have 3 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::customTemplateGetStringArg, jsInvoker_, instance_, std::move(templateName), std::move(argName));
    }
    jsi::Value customTemplateGetNumberArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) override {
      static_assert(
          bridging::getParameterCount(&T::customTemplateGetNumberArg) == 3,
          "Expected customTemplateGetNumberArg(...) to have 3 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::customTemplateGetNumberArg, jsInvoker_, instance_, std::move(templateName), std::move(argName));
    }
    jsi::Value customTemplateGetBooleanArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) override {
      static_assert(
          bridging::getParameterCount(&T::customTemplateGetBooleanArg) == 3,
          "Expected customTemplateGetBooleanArg(...) to have 3 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::customTemplateGetBooleanArg, jsInvoker_, instance_, std::move(templateName), std::move(argName));
    }
    jsi::Value customTemplateGetFileArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) override {
      static_assert(
          bridging::getParameterCount(&T::customTemplateGetFileArg) == 3,
          "Expected customTemplateGetFileArg(...) to have 3 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::customTemplateGetFileArg, jsInvoker_, instance_, std::move(templateName), std::move(argName));
    }
    jsi::Value customTemplateGetObjectArg(jsi::Runtime &rt, jsi::String templateName, jsi::String argName) override {
      static_assert(
          bridging::getParameterCount(&T::customTemplateGetObjectArg) == 3,
          "Expected customTemplateGetObjectArg(...) to have 3 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::customTemplateGetObjectArg, jsInvoker_, instance_, std::move(templateName), std::move(argName));
    }
    jsi::Value customTemplateContextToString(jsi::Runtime &rt, jsi::String templateName) override {
      static_assert(
          bridging::getParameterCount(&T::customTemplateContextToString) == 2,
          "Expected customTemplateContextToString(...) to have 2 parameters");

      return bridging::callFromJs<jsi::Value>(
          rt, &T::customTemplateContextToString, jsInvoker_, instance_, std::move(templateName));
    }
    void syncCustomTemplates(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::syncCustomTemplates) == 1,
          "Expected syncCustomTemplates(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::syncCustomTemplates, jsInvoker_, instance_);
    }
    void syncCustomTemplatesInProd(jsi::Runtime &rt, bool isProduction) override {
      static_assert(
          bridging::getParameterCount(&T::syncCustomTemplatesInProd) == 2,
          "Expected syncCustomTemplatesInProd(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::syncCustomTemplatesInProd, jsInvoker_, instance_, std::move(isProduction));
    }
    void promptForPushPermission(jsi::Runtime &rt, bool showFallbackSettings) override {
      static_assert(
          bridging::getParameterCount(&T::promptForPushPermission) == 2,
          "Expected promptForPushPermission(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::promptForPushPermission, jsInvoker_, instance_, std::move(showFallbackSettings));
    }
    void promptPushPrimer(jsi::Runtime &rt, jsi::Object json) override {
      static_assert(
          bridging::getParameterCount(&T::promptPushPrimer) == 2,
          "Expected promptPushPrimer(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::promptPushPrimer, jsInvoker_, instance_, std::move(json));
    }
    void isPushPermissionGranted(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::isPushPermissionGranted) == 2,
          "Expected isPushPermissionGranted(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::isPushPermissionGranted, jsInvoker_, instance_, std::move(callback));
    }
    void syncVariables(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::syncVariables) == 1,
          "Expected syncVariables(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::syncVariables, jsInvoker_, instance_);
    }
    void syncVariablesinProd(jsi::Runtime &rt, bool isProduction) override {
      static_assert(
          bridging::getParameterCount(&T::syncVariablesinProd) == 2,
          "Expected syncVariablesinProd(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::syncVariablesinProd, jsInvoker_, instance_, std::move(isProduction));
    }
    void getVariable(jsi::Runtime &rt, jsi::String name, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getVariable) == 3,
          "Expected getVariable(...) to have 3 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getVariable, jsInvoker_, instance_, std::move(name), std::move(callback));
    }
    void fetchVariables(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::fetchVariables) == 2,
          "Expected fetchVariables(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::fetchVariables, jsInvoker_, instance_, std::move(callback));
    }
    void getVariables(jsi::Runtime &rt, std::optional<jsi::Function> callback) override {
      static_assert(
          bridging::getParameterCount(&T::getVariables) == 2,
          "Expected getVariables(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::getVariables, jsInvoker_, instance_, std::move(callback));
    }
    void defineVariables(jsi::Runtime &rt, std::optional<jsi::Object> variables) override {
      static_assert(
          bridging::getParameterCount(&T::defineVariables) == 2,
          "Expected defineVariables(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::defineVariables, jsInvoker_, instance_, std::move(variables));
    }
    void defineFileVariable(jsi::Runtime &rt, jsi::String name) override {
      static_assert(
          bridging::getParameterCount(&T::defineFileVariable) == 2,
          "Expected defineFileVariable(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::defineFileVariable, jsInvoker_, instance_, std::move(name));
    }
    void onVariablesChanged(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::onVariablesChanged) == 1,
          "Expected onVariablesChanged(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::onVariablesChanged, jsInvoker_, instance_);
    }
    void onOneTimeVariablesChanged(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::onOneTimeVariablesChanged) == 1,
          "Expected onOneTimeVariablesChanged(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::onOneTimeVariablesChanged, jsInvoker_, instance_);
    }
    void onValueChanged(jsi::Runtime &rt, jsi::String name) override {
      static_assert(
          bridging::getParameterCount(&T::onValueChanged) == 2,
          "Expected onValueChanged(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::onValueChanged, jsInvoker_, instance_, std::move(name));
    }
    void onVariablesChangedAndNoDownloadsPending(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::onVariablesChangedAndNoDownloadsPending) == 1,
          "Expected onVariablesChangedAndNoDownloadsPending(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::onVariablesChangedAndNoDownloadsPending, jsInvoker_, instance_);
    }
    void onceVariablesChangedAndNoDownloadsPending(jsi::Runtime &rt) override {
      static_assert(
          bridging::getParameterCount(&T::onceVariablesChangedAndNoDownloadsPending) == 1,
          "Expected onceVariablesChangedAndNoDownloadsPending(...) to have 1 parameters");

      return bridging::callFromJs<void>(
          rt, &T::onceVariablesChangedAndNoDownloadsPending, jsInvoker_, instance_);
    }
    void onFileValueChanged(jsi::Runtime &rt, jsi::String name) override {
      static_assert(
          bridging::getParameterCount(&T::onFileValueChanged) == 2,
          "Expected onFileValueChanged(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::onFileValueChanged, jsInvoker_, instance_, std::move(name));
    }
    void onEventListenerAdded(jsi::Runtime &rt, jsi::String eventType) override {
      static_assert(
          bridging::getParameterCount(&T::onEventListenerAdded) == 2,
          "Expected onEventListenerAdded(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::onEventListenerAdded, jsInvoker_, instance_, std::move(eventType));
    }
    void addListener(jsi::Runtime &rt, jsi::String eventType) override {
      static_assert(
          bridging::getParameterCount(&T::addListener) == 2,
          "Expected addListener(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::addListener, jsInvoker_, instance_, std::move(eventType));
    }
    void removeListeners(jsi::Runtime &rt, double count) override {
      static_assert(
          bridging::getParameterCount(&T::removeListeners) == 2,
          "Expected removeListeners(...) to have 2 parameters");

      return bridging::callFromJs<void>(
          rt, &T::removeListeners, jsInvoker_, instance_, std::move(count));
    }

  private:
    T *instance_;
  };

  Delegate delegate_;
};

} // namespace facebook::react
