@billdog.io/react-native 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BillDogReactNative.podspec +30 -0
- package/LICENSE +21 -0
- package/README.md +330 -0
- package/android/build.gradle +99 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/kotlin/io/billdog/reactnative/BillDogABTestModule.kt +317 -0
- package/android/src/main/kotlin/io/billdog/reactnative/BillDogAnalyticsModule.kt +389 -0
- package/android/src/main/kotlin/io/billdog/reactnative/BillDogModule.kt +817 -0
- package/android/src/main/kotlin/io/billdog/reactnative/BillDogPaywallViewManager.kt +383 -0
- package/android/src/main/kotlin/io/billdog/reactnative/BillDogSurveyModule.kt +427 -0
- package/android/src/main/kotlin/io/billdog/reactnative/BillDogVirtualCurrencyModule.kt +407 -0
- package/android/src/main/kotlin/io/billdog/virtualcurrency/BillDogVirtualCurrencyPackage.kt +44 -0
- package/dist/AdvancedPaywallCache.d.ts +70 -0
- package/dist/AdvancedPaywallCache.js +344 -0
- package/dist/BillDog.d.ts +255 -0
- package/dist/BillDog.js +918 -0
- package/dist/BillDogConfiguration.d.ts +145 -0
- package/dist/BillDogConfiguration.js +229 -0
- package/dist/ComponentRenderer.d.ts +17 -0
- package/dist/ComponentRenderer.js +886 -0
- package/dist/LayoutEngine.d.ts +101 -0
- package/dist/LayoutEngine.js +394 -0
- package/dist/LocalizationResolver.d.ts +99 -0
- package/dist/LocalizationResolver.js +266 -0
- package/dist/NativePaywallView.d.ts +36 -0
- package/dist/NativePaywallView.js +59 -0
- package/dist/PaywallCache.d.ts +74 -0
- package/dist/PaywallCache.js +293 -0
- package/dist/PaywallStateManager.d.ts +62 -0
- package/dist/PaywallStateManager.js +147 -0
- package/dist/PaywallView.d.ts +42 -0
- package/dist/PaywallView.js +275 -0
- package/dist/ProductVariableProvider.d.ts +60 -0
- package/dist/ProductVariableProvider.js +239 -0
- package/dist/VariableResolver.d.ts +120 -0
- package/dist/VariableResolver.js +379 -0
- package/dist/WebViewPaywall.d.ts +75 -0
- package/dist/WebViewPaywall.js +360 -0
- package/dist/animations/presets.d.ts +49 -0
- package/dist/animations/presets.js +367 -0
- package/dist/components/AccoladeCpsComponent.d.ts +13 -0
- package/dist/components/AccoladeCpsComponent.js +248 -0
- package/dist/components/AccordionComponent.d.ts +10 -0
- package/dist/components/AccordionComponent.js +187 -0
- package/dist/components/AnimatedWrapper.d.ts +35 -0
- package/dist/components/AnimatedWrapper.js +277 -0
- package/dist/components/CarouselComponent.d.ts +23 -0
- package/dist/components/CarouselComponent.js +484 -0
- package/dist/components/ChartCurveComponent.d.ts +13 -0
- package/dist/components/ChartCurveComponent.js +333 -0
- package/dist/components/CheckboxComponent.d.ts +9 -0
- package/dist/components/CheckboxComponent.js +172 -0
- package/dist/components/ConfettiComponent.d.ts +9 -0
- package/dist/components/ConfettiComponent.js +172 -0
- package/dist/components/CountdownComponent.d.ts +16 -0
- package/dist/components/CountdownComponent.js +414 -0
- package/dist/components/DelayedXComponent.d.ts +12 -0
- package/dist/components/DelayedXComponent.js +240 -0
- package/dist/components/DrawerModalComponent.d.ts +20 -0
- package/dist/components/DrawerModalComponent.js +286 -0
- package/dist/components/GradientView.d.ts +38 -0
- package/dist/components/GradientView.js +126 -0
- package/dist/components/HapticFeedbackComponent.d.ts +16 -0
- package/dist/components/HapticFeedbackComponent.js +64 -0
- package/dist/components/HorizontalProductsComponent.d.ts +17 -0
- package/dist/components/HorizontalProductsComponent.js +284 -0
- package/dist/components/MultiChoiceGridComponent.d.ts +13 -0
- package/dist/components/MultiChoiceGridComponent.js +234 -0
- package/dist/components/NPSScaleComponent.d.ts +16 -0
- package/dist/components/NPSScaleComponent.js +260 -0
- package/dist/components/NavigationComponent.d.ts +26 -0
- package/dist/components/NavigationComponent.js +302 -0
- package/dist/components/OAuthButtonComponent.d.ts +20 -0
- package/dist/components/OAuthButtonComponent.js +237 -0
- package/dist/components/ProgressLoaderComponent.d.ts +13 -0
- package/dist/components/ProgressLoaderComponent.js +308 -0
- package/dist/components/ProgressStepperComponent.d.ts +18 -0
- package/dist/components/ProgressStepperComponent.js +228 -0
- package/dist/components/SegmentedPickerComponent.d.ts +10 -0
- package/dist/components/SegmentedPickerComponent.js +221 -0
- package/dist/components/ShareButtonsComponent.d.ts +21 -0
- package/dist/components/ShareButtonsComponent.js +265 -0
- package/dist/components/ShareCodeComponent.d.ts +16 -0
- package/dist/components/ShareCodeComponent.js +274 -0
- package/dist/components/SingleChoiceGridComponent.d.ts +13 -0
- package/dist/components/SingleChoiceGridComponent.js +210 -0
- package/dist/components/SliderComponent.d.ts +9 -0
- package/dist/components/SliderComponent.js +263 -0
- package/dist/components/StarRatingInputComponent.d.ts +20 -0
- package/dist/components/StarRatingInputComponent.js +198 -0
- package/dist/components/StickerCompositeComponent.d.ts +13 -0
- package/dist/components/StickerCompositeComponent.js +136 -0
- package/dist/components/TabsComponent.d.ts +19 -0
- package/dist/components/TabsComponent.js +431 -0
- package/dist/components/TextInputComponent.d.ts +18 -0
- package/dist/components/TextInputComponent.js +227 -0
- package/dist/components/TimelineComponent.d.ts +19 -0
- package/dist/components/TimelineComponent.js +104 -0
- package/dist/components/ToggleComponent.d.ts +14 -0
- package/dist/components/ToggleComponent.js +132 -0
- package/dist/components/VerticalProductsComponent.d.ts +17 -0
- package/dist/components/VerticalProductsComponent.js +311 -0
- package/dist/dynamicValues.d.ts +36 -0
- package/dist/dynamicValues.js +142 -0
- package/dist/filters/dateFilters.d.ts +50 -0
- package/dist/filters/dateFilters.js +390 -0
- package/dist/filters/index.d.ts +18 -0
- package/dist/filters/index.js +253 -0
- package/dist/hooks/useOfferings.d.ts +76 -0
- package/dist/hooks/useOfferings.js +99 -0
- package/dist/hooks/usePaywall.d.ts +27 -0
- package/dist/hooks/usePaywall.js +114 -0
- package/dist/hooks/usePlacement.d.ts +34 -0
- package/dist/hooks/usePlacement.js +89 -0
- package/dist/hooks/useSubscription.d.ts +40 -0
- package/dist/hooks/useSubscription.js +97 -0
- package/dist/index.d.ts +98 -0
- package/dist/index.js +198 -0
- package/dist/models/BillDogError.d.ts +40 -0
- package/dist/models/BillDogError.js +11 -0
- package/dist/models/CacheFetchPolicy.d.ts +8 -0
- package/dist/models/CacheFetchPolicy.js +4 -0
- package/dist/models/CustomProduct.d.ts +32 -0
- package/dist/models/CustomProduct.js +15 -0
- package/dist/models/CustomerInfo.d.ts +17 -0
- package/dist/models/CustomerInfo.js +11 -0
- package/dist/models/Delegate.d.ts +20 -0
- package/dist/models/Delegate.js +11 -0
- package/dist/models/EntitlementInfo.d.ts +19 -0
- package/dist/models/EntitlementInfo.js +2 -0
- package/dist/models/Placement.d.ts +54 -0
- package/dist/models/Placement.js +15 -0
- package/dist/models/PurchaseParams.d.ts +39 -0
- package/dist/models/PurchaseParams.js +60 -0
- package/dist/models/PurchaseResult.d.ts +30 -0
- package/dist/models/PurchaseResult.js +15 -0
- package/dist/models/RestoreResult.d.ts +30 -0
- package/dist/models/RestoreResult.js +22 -0
- package/dist/models/RestoredItem.d.ts +26 -0
- package/dist/models/RestoredItem.js +13 -0
- package/dist/modules/ABTest.d.ts +65 -0
- package/dist/modules/ABTest.js +113 -0
- package/dist/modules/Analytics.d.ts +91 -0
- package/dist/modules/Analytics.js +182 -0
- package/dist/modules/Survey.d.ts +65 -0
- package/dist/modules/Survey.js +82 -0
- package/dist/modules/VirtualCurrency.d.ts +63 -0
- package/dist/modules/VirtualCurrency.js +147 -0
- package/dist/murmur.d.ts +23 -0
- package/dist/murmur.js +104 -0
- package/dist/notifications/LiveActivitiesManager.d.ts +47 -0
- package/dist/notifications/LiveActivitiesManager.js +106 -0
- package/dist/notifications/NotificationScheduler.d.ts +55 -0
- package/dist/notifications/NotificationScheduler.js +199 -0
- package/dist/notifications/PurchaseNotificationHandler.d.ts +24 -0
- package/dist/notifications/PurchaseNotificationHandler.js +55 -0
- package/dist/notifications/useDeviceToken.d.ts +36 -0
- package/dist/notifications/useDeviceToken.js +97 -0
- package/dist/notifications/useLiveActivity.d.ts +39 -0
- package/dist/notifications/useLiveActivity.js +104 -0
- package/dist/review/ReviewAnalytics.d.ts +34 -0
- package/dist/review/ReviewAnalytics.js +73 -0
- package/dist/review/ReviewManager.d.ts +83 -0
- package/dist/review/ReviewManager.js +339 -0
- package/dist/review/ReviewTimingManager.d.ts +82 -0
- package/dist/review/ReviewTimingManager.js +224 -0
- package/dist/survey-core/types.d.ts +215 -0
- package/dist/survey-core/types.js +8 -0
- package/dist/types.d.ts +438 -0
- package/dist/types.js +158 -0
- package/dist/utils/ApiClient.d.ts +65 -0
- package/dist/utils/ApiClient.js +132 -0
- package/dist/utils/CSSConverter.d.ts +49 -0
- package/dist/utils/CSSConverter.js +470 -0
- package/dist/utils/animations.d.ts +41 -0
- package/dist/utils/animations.js +194 -0
- package/dist/utils/calendarIntegration.d.ts +36 -0
- package/dist/utils/calendarIntegration.js +89 -0
- package/dist/utils/configurationResolver.d.ts +23 -0
- package/dist/utils/configurationResolver.js +78 -0
- package/dist/utils/deviceDetection.d.ts +38 -0
- package/dist/utils/deviceDetection.js +59 -0
- package/dist/utils/hapticFeedback.d.ts +17 -0
- package/dist/utils/hapticFeedback.js +53 -0
- package/dist/utils/iconMapper.d.ts +26 -0
- package/dist/utils/iconMapper.js +113 -0
- package/dist/utils/notificationPermissions.d.ts +13 -0
- package/dist/utils/notificationPermissions.js +51 -0
- package/dist/utils/priceFormatting.d.ts +19 -0
- package/dist/utils/priceFormatting.js +99 -0
- package/dist/utils/shareSheet.d.ts +17 -0
- package/dist/utils/shareSheet.js +42 -0
- package/dist/utils/subscriptionUpgrade.d.ts +84 -0
- package/dist/utils/subscriptionUpgrade.js +100 -0
- package/dist/valueUtils.d.ts +48 -0
- package/dist/valueUtils.js +129 -0
- package/dist/xFlowTags.d.ts +18 -0
- package/dist/xFlowTags.js +385 -0
- package/ios/BillDogABTest.m +50 -0
- package/ios/BillDogABTest.swift +188 -0
- package/ios/BillDogAnalytics.m +105 -0
- package/ios/BillDogAnalytics.swift +324 -0
- package/ios/BillDogBridge.m +222 -0
- package/ios/BillDogBridge.swift +715 -0
- package/ios/BillDogLiveActivities.m +41 -0
- package/ios/BillDogLiveActivities.swift +104 -0
- package/ios/BillDogPaywallViewManager.m +39 -0
- package/ios/BillDogPaywallViewManager.swift +361 -0
- package/ios/BillDogSurvey.m +34 -0
- package/ios/BillDogSurvey.swift +257 -0
- package/ios/BillDogVirtualCurrencyBridge.m +63 -0
- package/ios/BillDogVirtualCurrencyBridge.swift +511 -0
- package/junit.xml +25 -0
- package/package.json +61 -0
- package/react-native.config.js +13 -0
- package/src/AdvancedPaywallCache.ts +433 -0
- package/src/BillDog.ts +983 -0
- package/src/BillDogConfiguration.ts +318 -0
- package/src/ComponentRenderer.tsx +1325 -0
- package/src/LayoutEngine.ts +459 -0
- package/src/LocalizationResolver.ts +311 -0
- package/src/NativePaywallView.tsx +132 -0
- package/src/PaywallCache.ts +358 -0
- package/src/PaywallStateManager.ts +154 -0
- package/src/PaywallView.tsx +328 -0
- package/src/ProductVariableProvider.ts +282 -0
- package/src/VariableResolver.ts +516 -0
- package/src/WebViewPaywall.tsx +454 -0
- package/src/animations/presets.ts +421 -0
- package/src/components/AccoladeCpsComponent.tsx +259 -0
- package/src/components/AccordionComponent.tsx +213 -0
- package/src/components/AnimatedWrapper.tsx +316 -0
- package/src/components/CarouselComponent.tsx +615 -0
- package/src/components/ChartCurveComponent.tsx +452 -0
- package/src/components/CheckboxComponent.tsx +185 -0
- package/src/components/ConfettiComponent.tsx +178 -0
- package/src/components/CountdownComponent.tsx +454 -0
- package/src/components/DelayedXComponent.tsx +266 -0
- package/src/components/DrawerModalComponent.tsx +324 -0
- package/src/components/GradientView.tsx +129 -0
- package/src/components/HapticFeedbackComponent.tsx +39 -0
- package/src/components/HorizontalProductsComponent.tsx +329 -0
- package/src/components/MultiChoiceGridComponent.tsx +265 -0
- package/src/components/NPSScaleComponent.tsx +294 -0
- package/src/components/NavigationComponent.tsx +329 -0
- package/src/components/OAuthButtonComponent.tsx +266 -0
- package/src/components/ProgressLoaderComponent.tsx +366 -0
- package/src/components/ProgressStepperComponent.tsx +250 -0
- package/src/components/SegmentedPickerComponent.tsx +245 -0
- package/src/components/ShareButtonsComponent.tsx +299 -0
- package/src/components/ShareCodeComponent.tsx +303 -0
- package/src/components/SingleChoiceGridComponent.tsx +229 -0
- package/src/components/SliderComponent.tsx +280 -0
- package/src/components/StarRatingInputComponent.tsx +223 -0
- package/src/components/StickerCompositeComponent.tsx +168 -0
- package/src/components/TabsComponent.tsx +496 -0
- package/src/components/TextInputComponent.tsx +258 -0
- package/src/components/TimelineComponent.tsx +129 -0
- package/src/components/ToggleComponent.tsx +142 -0
- package/src/components/VerticalProductsComponent.tsx +357 -0
- package/src/dynamicValues.ts +180 -0
- package/src/filters/dateFilters.ts +411 -0
- package/src/filters/index.ts +281 -0
- package/src/hooks/useOfferings.ts +192 -0
- package/src/hooks/usePaywall.ts +154 -0
- package/src/hooks/usePlacement.ts +143 -0
- package/src/hooks/useSubscription.ts +154 -0
- package/src/index.ts +245 -0
- package/src/models/BillDogError.ts +24 -0
- package/src/models/CacheFetchPolicy.ts +13 -0
- package/src/models/CustomProduct.ts +33 -0
- package/src/models/CustomerInfo.ts +26 -0
- package/src/models/Delegate.ts +22 -0
- package/src/models/EntitlementInfo.ts +27 -0
- package/src/models/Placement.ts +50 -0
- package/src/models/PurchaseParams.ts +81 -0
- package/src/models/PurchaseResult.ts +32 -0
- package/src/models/RestoreResult.ts +27 -0
- package/src/models/RestoredItem.ts +25 -0
- package/src/modules/ABTest.ts +131 -0
- package/src/modules/Analytics.ts +227 -0
- package/src/modules/Survey.ts +126 -0
- package/src/modules/VirtualCurrency.ts +223 -0
- package/src/murmur.ts +102 -0
- package/src/notifications/LiveActivitiesManager.ts +140 -0
- package/src/notifications/NotificationScheduler.ts +292 -0
- package/src/notifications/PurchaseNotificationHandler.ts +67 -0
- package/src/notifications/useDeviceToken.ts +116 -0
- package/src/notifications/useLiveActivity.ts +125 -0
- package/src/review/ReviewAnalytics.ts +89 -0
- package/src/review/ReviewManager.ts +355 -0
- package/src/review/ReviewTimingManager.ts +265 -0
- package/src/survey-core/types.ts +244 -0
- package/src/types/ambient.d.ts +9 -0
- package/src/types.ts +680 -0
- package/src/utils/ApiClient.ts +163 -0
- package/src/utils/CSSConverter.ts +552 -0
- package/src/utils/animations.ts +232 -0
- package/src/utils/calendarIntegration.ts +113 -0
- package/src/utils/configurationResolver.ts +106 -0
- package/src/utils/deviceDetection.ts +83 -0
- package/src/utils/hapticFeedback.ts +55 -0
- package/src/utils/iconMapper.ts +102 -0
- package/src/utils/notificationPermissions.ts +48 -0
- package/src/utils/priceFormatting.ts +119 -0
- package/src/utils/shareSheet.ts +55 -0
- package/src/utils/subscriptionUpgrade.ts +183 -0
- package/src/valueUtils.ts +108 -0
- package/src/xFlowTags.ts +463 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
//
|
|
2
|
+
// BillDogAnalytics.m
|
|
3
|
+
// @billdog.io/react-native
|
|
4
|
+
//
|
|
5
|
+
// RCT_EXTERN bridge declarations for the BillDogAnalytics Swift module.
|
|
6
|
+
// ⚠️ Requires `pod install` + Xcode to compile/verify — no iOS toolchain in
|
|
7
|
+
// the authoring environment.
|
|
8
|
+
//
|
|
9
|
+
|
|
10
|
+
#import <React/RCTBridgeModule.h>
|
|
11
|
+
#import <React/RCTEventEmitter.h>
|
|
12
|
+
|
|
13
|
+
@interface RCT_EXTERN_MODULE(BillDogAnalytics, RCTEventEmitter)
|
|
14
|
+
|
|
15
|
+
RCT_EXTERN_METHOD(initialize:(RCTPromiseResolveBlock)resolve
|
|
16
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
17
|
+
|
|
18
|
+
RCT_EXTERN_METHOD(track:(NSString *)name
|
|
19
|
+
properties:(NSDictionary *)properties
|
|
20
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
21
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
22
|
+
|
|
23
|
+
RCT_EXTERN_METHOD(trackRevenue:(nonnull NSNumber *)amount
|
|
24
|
+
currency:(NSString *)currency
|
|
25
|
+
productId:(NSString *)productId
|
|
26
|
+
properties:(NSDictionary *)properties
|
|
27
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
28
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
29
|
+
|
|
30
|
+
RCT_EXTERN_METHOD(identify:(NSString *)userId
|
|
31
|
+
properties:(NSDictionary *)properties
|
|
32
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
33
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
34
|
+
|
|
35
|
+
RCT_EXTERN_METHOD(setSuperProperties:(NSDictionary *)properties
|
|
36
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
37
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
38
|
+
|
|
39
|
+
RCT_EXTERN_METHOD(updateUserProperties:(NSString *)operation
|
|
40
|
+
properties:(NSDictionary *)properties
|
|
41
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
42
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
43
|
+
|
|
44
|
+
RCT_EXTERN_METHOD(flush:(RCTPromiseResolveBlock)resolve
|
|
45
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
46
|
+
|
|
47
|
+
RCT_EXTERN_METHOD(optOut:(RCTPromiseResolveBlock)resolve
|
|
48
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
49
|
+
|
|
50
|
+
RCT_EXTERN_METHOD(optIn:(RCTPromiseResolveBlock)resolve
|
|
51
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
52
|
+
|
|
53
|
+
RCT_EXTERN_METHOD(reset:(RCTPromiseResolveBlock)resolve
|
|
54
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
55
|
+
|
|
56
|
+
RCT_EXTERN_METHOD(alias:(NSString *)newId
|
|
57
|
+
originalId:(NSString *)originalId
|
|
58
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
59
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
60
|
+
|
|
61
|
+
RCT_EXTERN_METHOD(timeEvent:(NSString *)eventName
|
|
62
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
63
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
64
|
+
|
|
65
|
+
RCT_EXTERN_METHOD(setGroup:(NSString *)groupType
|
|
66
|
+
groupId:(NSString *)groupId
|
|
67
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
68
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
69
|
+
|
|
70
|
+
RCT_EXTERN_METHOD(setGroupProperties:(NSString *)groupType
|
|
71
|
+
groupId:(NSString *)groupId
|
|
72
|
+
properties:(NSDictionary *)properties
|
|
73
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
74
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
75
|
+
|
|
76
|
+
RCT_EXTERN_METHOD(trackScreen:(NSString *)screenName
|
|
77
|
+
properties:(NSDictionary *)properties
|
|
78
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
79
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
80
|
+
|
|
81
|
+
RCT_EXTERN_METHOD(trackDeepLink:(NSString *)url
|
|
82
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
83
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
84
|
+
|
|
85
|
+
RCT_EXTERN_METHOD(getDeviceId:(RCTPromiseResolveBlock)resolve
|
|
86
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
87
|
+
|
|
88
|
+
RCT_EXTERN_METHOD(getDistinctId:(RCTPromiseResolveBlock)resolve
|
|
89
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
90
|
+
|
|
91
|
+
RCT_EXTERN_METHOD(getSessionId:(RCTPromiseResolveBlock)resolve
|
|
92
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
93
|
+
|
|
94
|
+
RCT_EXTERN_METHOD(registerSuperPropertiesOnce:(NSDictionary *)properties
|
|
95
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
96
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
97
|
+
|
|
98
|
+
RCT_EXTERN_METHOD(unregisterSuperProperty:(NSString *)key
|
|
99
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
100
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
101
|
+
|
|
102
|
+
RCT_EXTERN_METHOD(clearSuperProperties:(RCTPromiseResolveBlock)resolve
|
|
103
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
104
|
+
|
|
105
|
+
@end
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
//
|
|
2
|
+
// BillDogAnalytics.swift
|
|
3
|
+
// @billdog.io/react-native
|
|
4
|
+
//
|
|
5
|
+
// React Native bridge → native `BillDogAnalyticsManager`.
|
|
6
|
+
//
|
|
7
|
+
// ⚠️ VERIFICATION: there is no iOS/CocoaPods toolchain in the authoring
|
|
8
|
+
// environment. This file is written to be internally consistent and
|
|
9
|
+
// compile-ready against the verified native signatures (cited inline as
|
|
10
|
+
// `BillDogAnalytics.swift:<line>` / `BillDog.swift:<line>`), but it REQUIRES a
|
|
11
|
+
// `pod install` + Xcode build to actually compile and run.
|
|
12
|
+
//
|
|
13
|
+
// Manager is looked up per-call via `BillDog.shared.getModules()`
|
|
14
|
+
// (BillDog.swift:579) — cheap array compactMap. When the analytics module is
|
|
15
|
+
// not registered (SDK not configured), every mutating call is a best-effort
|
|
16
|
+
// NO-OP that resolves nil, matching the JS side (which silently no-ops when the
|
|
17
|
+
// native module is unlinked). Mirrors packages/flutter/.../BillDogAnalyticsChannel.swift.
|
|
18
|
+
//
|
|
19
|
+
|
|
20
|
+
import Foundation
|
|
21
|
+
import React
|
|
22
|
+
import BillDogFull
|
|
23
|
+
|
|
24
|
+
@objc(BillDogAnalytics)
|
|
25
|
+
class BillDogAnalytics: RCTEventEmitter {
|
|
26
|
+
|
|
27
|
+
private var hasListeners = false
|
|
28
|
+
|
|
29
|
+
override static func requiresMainQueueSetup() -> Bool {
|
|
30
|
+
return false
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
override func supportedEvents() -> [String]! {
|
|
34
|
+
return ["onAnalyticsFlush"]
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
override func startObserving() {
|
|
38
|
+
hasListeners = true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
override func stopObserving() {
|
|
42
|
+
hasListeners = false
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// MARK: - Native manager access
|
|
46
|
+
|
|
47
|
+
// BillDog.shared.getModules() -> [BillDogModule] (BillDog.swift:579)
|
|
48
|
+
// BillDogAnalyticsManager: BillDogModule (BillDogAnalytics.swift:18)
|
|
49
|
+
private func manager() -> BillDogAnalyticsManager? {
|
|
50
|
+
return BillDog.shared.getModules()
|
|
51
|
+
.compactMap { $0 as? BillDogAnalyticsManager }
|
|
52
|
+
.first
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// MARK: - Lifecycle
|
|
56
|
+
|
|
57
|
+
// The analytics module is registered by BillDogBridge.configure() via
|
|
58
|
+
// `BillDog.shared.use(module:)` — NOT by `configure(config:)`, which registers
|
|
59
|
+
// nothing. (An earlier comment here claimed the latter, which masked the fact
|
|
60
|
+
// that nothing registered analytics at all and every event was dropped.)
|
|
61
|
+
// Resolve as a no-op so the JS init handshake completes; warn loudly when the
|
|
62
|
+
// registry is still empty.
|
|
63
|
+
@objc
|
|
64
|
+
func initialize(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
65
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
66
|
+
if manager() == nil {
|
|
67
|
+
NSLog("[BillDogAnalytics] initialize(): analytics module NOT registered — "
|
|
68
|
+
+ "call BillDog configure() first; track()/identify() will no-op")
|
|
69
|
+
}
|
|
70
|
+
resolve(nil)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// MARK: - Tracking
|
|
74
|
+
|
|
75
|
+
@objc
|
|
76
|
+
func track(_ name: String,
|
|
77
|
+
properties: NSDictionary,
|
|
78
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
79
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
80
|
+
// Facade: BillDog.shared.trackEvent(_:properties:) (BillDog.swift:2682)
|
|
81
|
+
BillDog.shared.trackEvent(name, properties: properties as? [String: Any] ?? [:])
|
|
82
|
+
resolve(nil)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@objc
|
|
86
|
+
func trackRevenue(_ amount: NSNumber,
|
|
87
|
+
currency: String,
|
|
88
|
+
productId: String?,
|
|
89
|
+
properties: NSDictionary,
|
|
90
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
91
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
92
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
93
|
+
// mgr.trackRevenue(amount:currency:productId:properties:) (BillDogAnalytics.swift:729)
|
|
94
|
+
mgr.trackRevenue(
|
|
95
|
+
amount: amount.doubleValue,
|
|
96
|
+
currency: currency,
|
|
97
|
+
productId: productId,
|
|
98
|
+
properties: properties as? [String: Any] ?? [:]
|
|
99
|
+
)
|
|
100
|
+
resolve(nil)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@objc
|
|
104
|
+
func identify(_ userId: String,
|
|
105
|
+
properties: NSDictionary,
|
|
106
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
107
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
108
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
109
|
+
// mgr.identify(userId:properties:) (BillDogAnalytics.swift:717)
|
|
110
|
+
mgr.identify(userId: userId, properties: properties as? [String: Any] ?? [:])
|
|
111
|
+
resolve(nil)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@objc
|
|
115
|
+
func setSuperProperties(_ properties: NSDictionary,
|
|
116
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
117
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
118
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
119
|
+
// mgr.registerSuperProperties(_:) (BillDogAnalytics.swift:479)
|
|
120
|
+
mgr.registerSuperProperties(properties as? [String: Any] ?? [:])
|
|
121
|
+
resolve(nil)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@objc
|
|
125
|
+
func updateUserProperties(_ operation: String,
|
|
126
|
+
properties: NSDictionary,
|
|
127
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
128
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
129
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
130
|
+
let props = properties as? [String: Any] ?? [:]
|
|
131
|
+
// Route by operation to the matching per-key / bulk user-property methods.
|
|
132
|
+
switch operation {
|
|
133
|
+
case "$set":
|
|
134
|
+
// mgr.setUserProperties(_:) (BillDogAnalytics.swift:760)
|
|
135
|
+
mgr.setUserProperties(props)
|
|
136
|
+
case "$set_once":
|
|
137
|
+
// mgr.setUserPropertyOnce(_:value:) (BillDogAnalytics.swift:764) — per key
|
|
138
|
+
for (key, value) in props { mgr.setUserPropertyOnce(key, value: value) }
|
|
139
|
+
case "$add":
|
|
140
|
+
// mgr.incrementUserProperty(_:by:) (BillDogAnalytics.swift:768) — per key, Double
|
|
141
|
+
for (key, value) in props {
|
|
142
|
+
let by = (value as? NSNumber)?.doubleValue ?? (value as? Double) ?? 0
|
|
143
|
+
mgr.incrementUserProperty(key, by: by)
|
|
144
|
+
}
|
|
145
|
+
case "$append":
|
|
146
|
+
// mgr.appendToUserProperty(_:value:) (BillDogAnalytics.swift:772) — per key
|
|
147
|
+
for (key, value) in props { mgr.appendToUserProperty(key, value: value) }
|
|
148
|
+
case "$unset":
|
|
149
|
+
// mgr.unsetUserProperties(_:) (BillDogAnalytics.swift:780) — keys
|
|
150
|
+
mgr.unsetUserProperties(Array(props.keys))
|
|
151
|
+
case "$remove":
|
|
152
|
+
// No native counterpart — best-effort no-op.
|
|
153
|
+
break
|
|
154
|
+
default:
|
|
155
|
+
break
|
|
156
|
+
}
|
|
157
|
+
resolve(nil)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
@objc
|
|
161
|
+
func flush(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
162
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
163
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
164
|
+
// mgr.flush() (BillDogAnalytics.swift:792)
|
|
165
|
+
mgr.flush()
|
|
166
|
+
// The native flush() returns Void (no batch count), so `eventCount` is
|
|
167
|
+
// reported as 0 — there is no native equivalent for the flushed count.
|
|
168
|
+
if hasListeners {
|
|
169
|
+
sendEvent(withName: "onAnalyticsFlush", body: ["eventCount": 0])
|
|
170
|
+
}
|
|
171
|
+
resolve(nil)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@objc
|
|
175
|
+
func optOut(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
176
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
177
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
178
|
+
// mgr.optOut() (BillDogAnalytics.swift:446)
|
|
179
|
+
mgr.optOut()
|
|
180
|
+
resolve(nil)
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@objc
|
|
184
|
+
func optIn(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
185
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
186
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
187
|
+
// mgr.optIn() (BillDogAnalytics.swift:465)
|
|
188
|
+
mgr.optIn()
|
|
189
|
+
resolve(nil)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
@objc
|
|
193
|
+
func reset(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
194
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
195
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
196
|
+
// mgr.reset() (BillDogAnalytics.swift:959)
|
|
197
|
+
mgr.reset()
|
|
198
|
+
resolve(nil)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
@objc
|
|
202
|
+
func alias(_ newId: String,
|
|
203
|
+
originalId: String?,
|
|
204
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
205
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
206
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
207
|
+
// mgr.alias(newId:previousId:) (BillDogAnalytics.swift:1138) — originalId -> previousId
|
|
208
|
+
mgr.alias(newId: newId, previousId: originalId)
|
|
209
|
+
resolve(nil)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
@objc
|
|
213
|
+
func timeEvent(_ eventName: String,
|
|
214
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
215
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
216
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
217
|
+
// mgr.timeEvent(_:) (BillDogAnalytics.swift:1130)
|
|
218
|
+
mgr.timeEvent(eventName)
|
|
219
|
+
resolve(nil)
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
@objc
|
|
223
|
+
func setGroup(_ groupType: String,
|
|
224
|
+
groupId: String,
|
|
225
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
226
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
227
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
228
|
+
// mgr.setGroup(groupType:groupId:) (BillDogAnalytics.swift:1104)
|
|
229
|
+
mgr.setGroup(groupType: groupType, groupId: groupId)
|
|
230
|
+
resolve(nil)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
@objc
|
|
234
|
+
func setGroupProperties(_ groupType: String,
|
|
235
|
+
groupId: String,
|
|
236
|
+
properties: NSDictionary,
|
|
237
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
238
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
239
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
240
|
+
// mgr.setGroupProperties(groupType:groupId:properties:) (BillDogAnalytics.swift:1116)
|
|
241
|
+
mgr.setGroupProperties(
|
|
242
|
+
groupType: groupType,
|
|
243
|
+
groupId: groupId,
|
|
244
|
+
properties: properties as? [String: Any] ?? [:]
|
|
245
|
+
)
|
|
246
|
+
resolve(nil)
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
@objc
|
|
250
|
+
func trackScreen(_ screenName: String,
|
|
251
|
+
properties: NSDictionary,
|
|
252
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
253
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
254
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
255
|
+
// mgr.trackScreen(_:properties:) (BillDogAnalytics.swift:1039)
|
|
256
|
+
mgr.trackScreen(screenName, properties: properties as? [String: Any] ?? [:])
|
|
257
|
+
resolve(nil)
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
@objc
|
|
261
|
+
func trackDeepLink(_ url: String,
|
|
262
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
263
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
264
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
265
|
+
// mgr.trackDeepLink(_:) (BillDogAnalytics.swift:1028) — takes URL, guard nil
|
|
266
|
+
if let parsed = URL(string: url) {
|
|
267
|
+
mgr.trackDeepLink(parsed)
|
|
268
|
+
}
|
|
269
|
+
resolve(nil)
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
@objc
|
|
273
|
+
func getDeviceId(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
274
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
275
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
276
|
+
// mgr.getDeviceId() -> String (BillDogAnalytics.swift:1082)
|
|
277
|
+
resolve(mgr.getDeviceId())
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
@objc
|
|
281
|
+
func getDistinctId(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
282
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
283
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
284
|
+
// mgr.getDistinctId() -> String (BillDogAnalytics.swift:1095)
|
|
285
|
+
resolve(mgr.getDistinctId())
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
@objc
|
|
289
|
+
func getSessionId(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
290
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
291
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
292
|
+
// mgr.getSessionId() -> String (BillDogAnalytics.swift:1045)
|
|
293
|
+
resolve(mgr.getSessionId())
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
@objc
|
|
297
|
+
func registerSuperPropertiesOnce(_ properties: NSDictionary,
|
|
298
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
299
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
300
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
301
|
+
// mgr.registerSuperPropertiesOnce(_:) (BillDogAnalytics.swift:485)
|
|
302
|
+
mgr.registerSuperPropertiesOnce(properties as? [String: Any] ?? [:])
|
|
303
|
+
resolve(nil)
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
@objc
|
|
307
|
+
func unregisterSuperProperty(_ key: String,
|
|
308
|
+
resolver resolve: @escaping RCTPromiseResolveBlock,
|
|
309
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
310
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
311
|
+
// mgr.unregisterSuperProperty(_:) (BillDogAnalytics.swift:497)
|
|
312
|
+
mgr.unregisterSuperProperty(key)
|
|
313
|
+
resolve(nil)
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
@objc
|
|
317
|
+
func clearSuperProperties(_ resolve: @escaping RCTPromiseResolveBlock,
|
|
318
|
+
rejecter reject: @escaping RCTPromiseRejectBlock) {
|
|
319
|
+
guard let mgr = manager() else { resolve(nil); return }
|
|
320
|
+
// mgr.clearSuperProperties() (BillDogAnalytics.swift:503)
|
|
321
|
+
mgr.clearSuperProperties()
|
|
322
|
+
resolve(nil)
|
|
323
|
+
}
|
|
324
|
+
}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
//
|
|
2
|
+
// BillDogBridge.m
|
|
3
|
+
// @billdog.io/react-native
|
|
4
|
+
//
|
|
5
|
+
// React Native bridge for the core BillDog module (JS: NativeModules.BillDog).
|
|
6
|
+
//
|
|
7
|
+
// RCT_EXTERN_MODULE / RCT_EXTERN_METHOD declarations only — the Swift file
|
|
8
|
+
// (BillDogBridge.swift, `@objc(BillDog) class BillDogBridge`) carries the
|
|
9
|
+
// implementations, delegating to `BillDog.shared` from the native iOS SDK.
|
|
10
|
+
//
|
|
11
|
+
// ⚠️ VERIFICATION: there is no iOS/CocoaPods/Xcode toolchain in the authoring
|
|
12
|
+
// environment. This file is written to be internally consistent and
|
|
13
|
+
// compile-ready against the verified native signatures (cited inline in the
|
|
14
|
+
// Swift file as `BillDog.swift:<line>` etc.), but it REQUIRES a `pod install`
|
|
15
|
+
// + Xcode build in a host RN app to actually compile and run.
|
|
16
|
+
//
|
|
17
|
+
// Method names + argument shapes are the AUTHORITATIVE contract from
|
|
18
|
+
// `../src/BillDog.ts` (every `native.<method>(...)` call). Do NOT rename.
|
|
19
|
+
//
|
|
20
|
+
|
|
21
|
+
#import <React/RCTBridgeModule.h>
|
|
22
|
+
|
|
23
|
+
@interface RCT_EXTERN_MODULE(BillDog, NSObject)
|
|
24
|
+
|
|
25
|
+
// ── Configuration ─────────────────────────────────────────────────────────────
|
|
26
|
+
|
|
27
|
+
// native.configure(apiKey, options) → BillDog.shared.configure(config:)
|
|
28
|
+
RCT_EXTERN_METHOD(configure:(NSString *)apiKey
|
|
29
|
+
options:(NSDictionary *)options
|
|
30
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
31
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
32
|
+
|
|
33
|
+
// ── Purchases ───────────────────────────────────────────────────────────────
|
|
34
|
+
|
|
35
|
+
// BillDog.ts:221 — native.purchase({ ...PurchaseParams, source })
|
|
36
|
+
RCT_EXTERN_METHOD(purchase:(NSDictionary *)params
|
|
37
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
38
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
39
|
+
|
|
40
|
+
// BillDog.ts:266 — native.setPurchaseControllerActive(bool). Fire-and-forget.
|
|
41
|
+
RCT_EXTERN_METHOD(setPurchaseControllerActive:(BOOL)active)
|
|
42
|
+
|
|
43
|
+
// BillDog.ts:296 — native.restore()
|
|
44
|
+
RCT_EXTERN_METHOD(restore:(RCTPromiseResolveBlock)resolve
|
|
45
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
46
|
+
|
|
47
|
+
// ── CustomerInfo ─────────────────────────────────────────────────────────────
|
|
48
|
+
|
|
49
|
+
// BillDog.ts:320 — native.getCustomerInfo(policy) — policy is a wire-name string.
|
|
50
|
+
RCT_EXTERN_METHOD(getCustomerInfo:(NSString *)policy
|
|
51
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
52
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
53
|
+
|
|
54
|
+
// BillDog.ts:792 — native.invalidateCustomerInfoCache()
|
|
55
|
+
RCT_EXTERN_METHOD(invalidateCustomerInfoCache:(RCTPromiseResolveBlock)resolve
|
|
56
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
57
|
+
|
|
58
|
+
// ── Store capability surface ─────────────────────────────────────────────────
|
|
59
|
+
|
|
60
|
+
// BillDog.ts:350 — native.canMakePayments()
|
|
61
|
+
RCT_EXTERN_METHOD(canMakePayments:(RCTPromiseResolveBlock)resolve
|
|
62
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
63
|
+
|
|
64
|
+
// BillDog.ts:359 — native.presentCodeRedemptionSheet()
|
|
65
|
+
RCT_EXTERN_METHOD(presentCodeRedemptionSheet:(RCTPromiseResolveBlock)resolve
|
|
66
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
67
|
+
|
|
68
|
+
// BillDog.ts:375 — native.checkTrialOrIntroDiscountEligibility([productId])
|
|
69
|
+
RCT_EXTERN_METHOD(checkTrialOrIntroDiscountEligibility:(NSArray *)productIds
|
|
70
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
71
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
72
|
+
|
|
73
|
+
// BillDog.ts:388 — native.subscribeStorefront(). Fire-and-forget.
|
|
74
|
+
RCT_EXTERN_METHOD(subscribeStorefront)
|
|
75
|
+
|
|
76
|
+
// ── Self-hosted proxy ────────────────────────────────────────────────────────
|
|
77
|
+
|
|
78
|
+
// BillDog.ts:404 — native.setProxyURL(url|null). Fire-and-forget.
|
|
79
|
+
RCT_EXTERN_METHOD(setProxyURL:(NSString *)url)
|
|
80
|
+
|
|
81
|
+
// BillDog.ts:453 — native.getProxyURL() — read SYNCHRONOUSLY by the JS facade.
|
|
82
|
+
RCT_EXTERN__BLOCKING_SYNCHRONOUS_METHOD(getProxyURL)
|
|
83
|
+
|
|
84
|
+
// ── Consent ──────────────────────────────────────────────────────────────────
|
|
85
|
+
|
|
86
|
+
// BillDog.ts:419 — native.setConsentRequired(bool). Fire-and-forget.
|
|
87
|
+
RCT_EXTERN_METHOD(setConsentRequired:(BOOL)required)
|
|
88
|
+
|
|
89
|
+
// BillDog.ts:428 — native.setConsent(purpose, granted). Fire-and-forget.
|
|
90
|
+
RCT_EXTERN_METHOD(setConsent:(NSString *)purpose
|
|
91
|
+
granted:(BOOL)granted)
|
|
92
|
+
|
|
93
|
+
// BillDog.ts:437 — native.setConsentGiven(bool). Fire-and-forget.
|
|
94
|
+
RCT_EXTERN_METHOD(setConsentGiven:(BOOL)given)
|
|
95
|
+
|
|
96
|
+
// BillDog.ts:446 — native.consentHeaderValue() (awaited)
|
|
97
|
+
RCT_EXTERN_METHOD(consentHeaderValue:(RCTPromiseResolveBlock)resolve
|
|
98
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
99
|
+
|
|
100
|
+
// ── Attribution ──────────────────────────────────────────────────────────────
|
|
101
|
+
|
|
102
|
+
// BillDog.ts:484 — native.collectDeviceIdentifiers(). Fire-and-forget.
|
|
103
|
+
RCT_EXTERN_METHOD(collectDeviceIdentifiers)
|
|
104
|
+
|
|
105
|
+
// native.setAttribution({ key: id, … }) → matching native provider setter.
|
|
106
|
+
RCT_EXTERN_METHOD(setAttribution:(NSDictionary *)data
|
|
107
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
108
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
109
|
+
|
|
110
|
+
// ── Identity ─────────────────────────────────────────────────────────────────
|
|
111
|
+
|
|
112
|
+
// BillDog.ts:513 — native.logIn(appUserId)
|
|
113
|
+
RCT_EXTERN_METHOD(logIn:(NSString *)appUserId
|
|
114
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
115
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
116
|
+
|
|
117
|
+
// BillDog.ts:536 — native.logOut()
|
|
118
|
+
RCT_EXTERN_METHOD(logOut:(RCTPromiseResolveBlock)resolve
|
|
119
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
120
|
+
|
|
121
|
+
// BillDog.ts:589 — native.setSandboxMode(bool). Fire-and-forget.
|
|
122
|
+
RCT_EXTERN_METHOD(setSandboxMode:(BOOL)enabled)
|
|
123
|
+
|
|
124
|
+
// ── Placements ───────────────────────────────────────────────────────────────
|
|
125
|
+
|
|
126
|
+
// BillDog.ts:634 — native.registerPlacement({ placementId, params })
|
|
127
|
+
RCT_EXTERN_METHOD(registerPlacement:(NSDictionary *)args
|
|
128
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
129
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
130
|
+
|
|
131
|
+
// BillDog.ts:679 — native.hasAccessForPlacement(placementId) — read SYNCHRONOUSLY.
|
|
132
|
+
RCT_EXTERN__BLOCKING_SYNCHRONOUS_METHOD(hasAccessForPlacement:(NSString *)placementId)
|
|
133
|
+
|
|
134
|
+
// BillDog.ts:878 — native.getPresentationResult(placementId)
|
|
135
|
+
RCT_EXTERN_METHOD(getPresentationResult:(NSString *)placementId
|
|
136
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
137
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
138
|
+
|
|
139
|
+
// Experiments & feature flags: the paywall-facade shim was removed. Use the
|
|
140
|
+
// standalone BillDogABTest module (bridged separately) instead.
|
|
141
|
+
|
|
142
|
+
// ── In-app messages ──────────────────────────────────────────────────────────
|
|
143
|
+
|
|
144
|
+
// BillDog.ts:722 — native.showInAppMessages(placementId|null)
|
|
145
|
+
RCT_EXTERN_METHOD(showInAppMessages:(NSString *)placementId
|
|
146
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
147
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
148
|
+
|
|
149
|
+
// ── Deep linking ─────────────────────────────────────────────────────────────
|
|
150
|
+
|
|
151
|
+
// BillDog.ts:731 — native.handleDeepLink(uri)
|
|
152
|
+
RCT_EXTERN_METHOD(handleDeepLink:(NSString *)uri
|
|
153
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
154
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
155
|
+
|
|
156
|
+
// ── Component selection state ─────────────────────────────────────────────────
|
|
157
|
+
|
|
158
|
+
// BillDog.ts:740 — native.getSelectedProductIndex(componentId) — read SYNCHRONOUSLY.
|
|
159
|
+
RCT_EXTERN__BLOCKING_SYNCHRONOUS_METHOD(getSelectedProductIndex:(NSString *)componentId)
|
|
160
|
+
|
|
161
|
+
// BillDog.ts:747 — native.setSelectedProductIndex(componentId, index). Fire-and-forget.
|
|
162
|
+
RCT_EXTERN_METHOD(setSelectedProductIndex:(NSString *)componentId
|
|
163
|
+
index:(nonnull NSNumber *)index)
|
|
164
|
+
|
|
165
|
+
// ── Theming ──────────────────────────────────────────────────────────────────
|
|
166
|
+
|
|
167
|
+
// BillDog.ts:755 — native.updateTheme(overrides). Fire-and-forget.
|
|
168
|
+
RCT_EXTERN_METHOD(updateTheme:(NSDictionary *)overrides)
|
|
169
|
+
|
|
170
|
+
// BillDog.ts:762 — native.setInterfaceStyle('light'|'dark'|null). Fire-and-forget.
|
|
171
|
+
RCT_EXTERN_METHOD(setInterfaceStyle:(NSString *)style)
|
|
172
|
+
|
|
173
|
+
// ── Subscription management ──────────────────────────────────────────────────
|
|
174
|
+
|
|
175
|
+
// BillDog.ts:776 — native.showManageSubscriptions(subscriptionId|null)
|
|
176
|
+
RCT_EXTERN_METHOD(showManageSubscriptions:(NSString *)subscriptionId
|
|
177
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
178
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
179
|
+
|
|
180
|
+
// ── Cache control ────────────────────────────────────────────────────────────
|
|
181
|
+
|
|
182
|
+
// BillDog.ts:785 — native.clearCache()
|
|
183
|
+
RCT_EXTERN_METHOD(clearCache:(RCTPromiseResolveBlock)resolve
|
|
184
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
185
|
+
|
|
186
|
+
// ── User attributes ──────────────────────────────────────────────────────────
|
|
187
|
+
|
|
188
|
+
// BillDog.ts:801 — native.setUserAttributes(attributes)
|
|
189
|
+
RCT_EXTERN_METHOD(setUserAttributes:(NSDictionary *)attributes
|
|
190
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
191
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
192
|
+
|
|
193
|
+
// BillDog.ts:812 — native.getUserAttributes() (awaited)
|
|
194
|
+
RCT_EXTERN_METHOD(getUserAttributes:(RCTPromiseResolveBlock)resolve
|
|
195
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
196
|
+
|
|
197
|
+
// ── External-purchase observation ────────────────────────────────────────────
|
|
198
|
+
|
|
199
|
+
// BillDog.ts:822 — native.observePurchaseStart(productId). Fire-and-forget.
|
|
200
|
+
RCT_EXTERN_METHOD(observePurchaseStart:(NSString *)productId)
|
|
201
|
+
|
|
202
|
+
// BillDog.ts:829 — native.observePurchaseResult(productId, orderId|null). Fire-and-forget.
|
|
203
|
+
RCT_EXTERN_METHOD(observePurchaseResult:(NSString *)productId
|
|
204
|
+
orderId:(NSString *)orderId)
|
|
205
|
+
|
|
206
|
+
// BillDog.ts:835 — native.observePurchaseError(productId, error). Fire-and-forget.
|
|
207
|
+
RCT_EXTERN_METHOD(observePurchaseError:(NSString *)productId
|
|
208
|
+
error:(NSString *)error)
|
|
209
|
+
|
|
210
|
+
// ── Server-side actions ──────────────────────────────────────────────────────
|
|
211
|
+
|
|
212
|
+
// BillDog.ts:900 — native.executeAction(paywallId|null, componentId, actionType,
|
|
213
|
+
// idempotencyKey|null, metadata?)
|
|
214
|
+
RCT_EXTERN_METHOD(executeAction:(NSString *)paywallId
|
|
215
|
+
componentId:(NSString *)componentId
|
|
216
|
+
actionType:(NSString *)actionType
|
|
217
|
+
idempotencyKey:(NSString *)idempotencyKey
|
|
218
|
+
metadata:(NSDictionary *)metadata
|
|
219
|
+
resolver:(RCTPromiseResolveBlock)resolve
|
|
220
|
+
rejecter:(RCTPromiseRejectBlock)reject)
|
|
221
|
+
|
|
222
|
+
@end
|