cloudx-react-native 2.0.0-beta.1

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.
Files changed (171) hide show
  1. package/LICENSE +57 -0
  2. package/README.md +1258 -0
  3. package/android/build.gradle +78 -0
  4. package/android/gradle.properties +7 -0
  5. package/android/src/main/AndroidManifest.xml +7 -0
  6. package/android/src/main/java/com/cloudxreactnative/CloudXAdViewEvent.kt +15 -0
  7. package/android/src/main/java/com/cloudxreactnative/CloudXBannerViewManagerImpl.kt +472 -0
  8. package/android/src/main/java/com/cloudxreactnative/CloudXReactNativeModuleImpl.kt +861 -0
  9. package/android/src/newarch/com/cloudxreactnative/CloudXBannerViewManager.kt +90 -0
  10. package/android/src/newarch/com/cloudxreactnative/CloudXReactNativeModule.kt +73 -0
  11. package/android/src/newarch/com/cloudxreactnative/CloudXReactNativePackage.kt +37 -0
  12. package/android/src/oldarch/com/cloudxreactnative/CloudXBannerViewManager.kt +76 -0
  13. package/android/src/oldarch/com/cloudxreactnative/CloudXReactNativeModule.kt +73 -0
  14. package/android/src/oldarch/com/cloudxreactnative/CloudXReactNativePackage.kt +16 -0
  15. package/cloudx-react-native.podspec +46 -0
  16. package/ios/AppTrackingTransparency.h +13 -0
  17. package/ios/AppTrackingTransparency.mm +59 -0
  18. package/ios/RNCloudXBannerView.h +51 -0
  19. package/ios/RNCloudXBannerView.mm +633 -0
  20. package/ios/RNCloudXBannerViewManager.h +11 -0
  21. package/ios/RNCloudXBannerViewManager.mm +60 -0
  22. package/ios/RNCloudXModule.h +30 -0
  23. package/ios/RNCloudXModule.mm +1088 -0
  24. package/lib/commonjs/AdView.js +151 -0
  25. package/lib/commonjs/AdView.js.map +1 -0
  26. package/lib/commonjs/AppTrackingTransparency.js +62 -0
  27. package/lib/commonjs/AppTrackingTransparency.js.map +1 -0
  28. package/lib/commonjs/BannerAd.js +117 -0
  29. package/lib/commonjs/BannerAd.js.map +1 -0
  30. package/lib/commonjs/CloudX.js +49 -0
  31. package/lib/commonjs/CloudX.js.map +1 -0
  32. package/lib/commonjs/ErrorCode.js +116 -0
  33. package/lib/commonjs/ErrorCode.js.map +1 -0
  34. package/lib/commonjs/EventEmitter.js +44 -0
  35. package/lib/commonjs/EventEmitter.js.map +1 -0
  36. package/lib/commonjs/InterstitialAd.js +94 -0
  37. package/lib/commonjs/InterstitialAd.js.map +1 -0
  38. package/lib/commonjs/MRecAd.js +117 -0
  39. package/lib/commonjs/MRecAd.js.map +1 -0
  40. package/lib/commonjs/RewardedAd.js +103 -0
  41. package/lib/commonjs/RewardedAd.js.map +1 -0
  42. package/lib/commonjs/hooks.js +239 -0
  43. package/lib/commonjs/hooks.js.map +1 -0
  44. package/lib/commonjs/index.js +144 -0
  45. package/lib/commonjs/index.js.map +1 -0
  46. package/lib/commonjs/specs/CloudXAdViewNativeComponent.js +26 -0
  47. package/lib/commonjs/specs/CloudXAdViewNativeComponent.js.map +1 -0
  48. package/lib/commonjs/specs/NativeCloudXModule.js +18 -0
  49. package/lib/commonjs/specs/NativeCloudXModule.js.map +1 -0
  50. package/lib/commonjs/types/AdEvent.js +6 -0
  51. package/lib/commonjs/types/AdEvent.js.map +1 -0
  52. package/lib/commonjs/types/AdInfo.js +6 -0
  53. package/lib/commonjs/types/AdInfo.js.map +1 -0
  54. package/lib/commonjs/types/BannerAd.js +6 -0
  55. package/lib/commonjs/types/BannerAd.js.map +1 -0
  56. package/lib/commonjs/types/CloudX.js +6 -0
  57. package/lib/commonjs/types/CloudX.js.map +1 -0
  58. package/lib/commonjs/types/Configuration.js +2 -0
  59. package/lib/commonjs/types/Configuration.js.map +1 -0
  60. package/lib/commonjs/types/FullscreenAd.js +6 -0
  61. package/lib/commonjs/types/FullscreenAd.js.map +1 -0
  62. package/lib/commonjs/types/RewardedAd.js +6 -0
  63. package/lib/commonjs/types/RewardedAd.js.map +1 -0
  64. package/lib/commonjs/types/index.js +2 -0
  65. package/lib/commonjs/types/index.js.map +1 -0
  66. package/lib/module/AdView.js +144 -0
  67. package/lib/module/AdView.js.map +1 -0
  68. package/lib/module/AppTrackingTransparency.js +55 -0
  69. package/lib/module/AppTrackingTransparency.js.map +1 -0
  70. package/lib/module/BannerAd.js +110 -0
  71. package/lib/module/BannerAd.js.map +1 -0
  72. package/lib/module/CloudX.js +42 -0
  73. package/lib/module/CloudX.js.map +1 -0
  74. package/lib/module/ErrorCode.js +110 -0
  75. package/lib/module/ErrorCode.js.map +1 -0
  76. package/lib/module/EventEmitter.js +35 -0
  77. package/lib/module/EventEmitter.js.map +1 -0
  78. package/lib/module/InterstitialAd.js +87 -0
  79. package/lib/module/InterstitialAd.js.map +1 -0
  80. package/lib/module/MRecAd.js +110 -0
  81. package/lib/module/MRecAd.js.map +1 -0
  82. package/lib/module/RewardedAd.js +96 -0
  83. package/lib/module/RewardedAd.js.map +1 -0
  84. package/lib/module/hooks.js +230 -0
  85. package/lib/module/hooks.js.map +1 -0
  86. package/lib/module/index.js +33 -0
  87. package/lib/module/index.js.map +1 -0
  88. package/lib/module/specs/CloudXAdViewNativeComponent.js +20 -0
  89. package/lib/module/specs/CloudXAdViewNativeComponent.js.map +1 -0
  90. package/lib/module/specs/NativeCloudXModule.js +14 -0
  91. package/lib/module/specs/NativeCloudXModule.js.map +1 -0
  92. package/lib/module/types/AdEvent.js +2 -0
  93. package/lib/module/types/AdEvent.js.map +1 -0
  94. package/lib/module/types/AdInfo.js +2 -0
  95. package/lib/module/types/AdInfo.js.map +1 -0
  96. package/lib/module/types/BannerAd.js +2 -0
  97. package/lib/module/types/BannerAd.js.map +1 -0
  98. package/lib/module/types/CloudX.js +2 -0
  99. package/lib/module/types/CloudX.js.map +1 -0
  100. package/lib/module/types/Configuration.js +2 -0
  101. package/lib/module/types/Configuration.js.map +1 -0
  102. package/lib/module/types/FullscreenAd.js +2 -0
  103. package/lib/module/types/FullscreenAd.js.map +1 -0
  104. package/lib/module/types/RewardedAd.js +2 -0
  105. package/lib/module/types/RewardedAd.js.map +1 -0
  106. package/lib/module/types/index.js +2 -0
  107. package/lib/module/types/index.js.map +1 -0
  108. package/lib/typescript/src/AdView.d.ts +69 -0
  109. package/lib/typescript/src/AdView.d.ts.map +1 -0
  110. package/lib/typescript/src/AppTrackingTransparency.d.ts +28 -0
  111. package/lib/typescript/src/AppTrackingTransparency.d.ts.map +1 -0
  112. package/lib/typescript/src/BannerAd.d.ts +4 -0
  113. package/lib/typescript/src/BannerAd.d.ts.map +1 -0
  114. package/lib/typescript/src/CloudX.d.ts +4 -0
  115. package/lib/typescript/src/CloudX.d.ts.map +1 -0
  116. package/lib/typescript/src/ErrorCode.d.ts +102 -0
  117. package/lib/typescript/src/ErrorCode.d.ts.map +1 -0
  118. package/lib/typescript/src/EventEmitter.d.ts +16 -0
  119. package/lib/typescript/src/EventEmitter.d.ts.map +1 -0
  120. package/lib/typescript/src/InterstitialAd.d.ts +4 -0
  121. package/lib/typescript/src/InterstitialAd.d.ts.map +1 -0
  122. package/lib/typescript/src/MRecAd.d.ts +4 -0
  123. package/lib/typescript/src/MRecAd.d.ts.map +1 -0
  124. package/lib/typescript/src/RewardedAd.d.ts +4 -0
  125. package/lib/typescript/src/RewardedAd.d.ts.map +1 -0
  126. package/lib/typescript/src/hooks.d.ts +50 -0
  127. package/lib/typescript/src/hooks.d.ts.map +1 -0
  128. package/lib/typescript/src/index.d.ts +23 -0
  129. package/lib/typescript/src/index.d.ts.map +1 -0
  130. package/lib/typescript/src/specs/CloudXAdViewNativeComponent.d.ts +61 -0
  131. package/lib/typescript/src/specs/CloudXAdViewNativeComponent.d.ts.map +1 -0
  132. package/lib/typescript/src/specs/NativeCloudXModule.d.ts +106 -0
  133. package/lib/typescript/src/specs/NativeCloudXModule.d.ts.map +1 -0
  134. package/lib/typescript/src/types/AdEvent.d.ts +10 -0
  135. package/lib/typescript/src/types/AdEvent.d.ts.map +1 -0
  136. package/lib/typescript/src/types/AdInfo.d.ts +48 -0
  137. package/lib/typescript/src/types/AdInfo.d.ts.map +1 -0
  138. package/lib/typescript/src/types/BannerAd.d.ts +39 -0
  139. package/lib/typescript/src/types/BannerAd.d.ts.map +1 -0
  140. package/lib/typescript/src/types/CloudX.d.ts +25 -0
  141. package/lib/typescript/src/types/CloudX.d.ts.map +1 -0
  142. package/lib/typescript/src/types/Configuration.d.ts +10 -0
  143. package/lib/typescript/src/types/Configuration.d.ts.map +1 -0
  144. package/lib/typescript/src/types/FullscreenAd.d.ts +29 -0
  145. package/lib/typescript/src/types/FullscreenAd.d.ts.map +1 -0
  146. package/lib/typescript/src/types/RewardedAd.d.ts +10 -0
  147. package/lib/typescript/src/types/RewardedAd.d.ts.map +1 -0
  148. package/lib/typescript/src/types/index.d.ts +8 -0
  149. package/lib/typescript/src/types/index.d.ts.map +1 -0
  150. package/package.json +78 -0
  151. package/src/AdView.tsx +213 -0
  152. package/src/AppTrackingTransparency.ts +56 -0
  153. package/src/BannerAd.ts +133 -0
  154. package/src/CloudX.ts +55 -0
  155. package/src/ErrorCode.ts +157 -0
  156. package/src/EventEmitter.ts +38 -0
  157. package/src/InterstitialAd.ts +103 -0
  158. package/src/MRecAd.ts +133 -0
  159. package/src/RewardedAd.ts +113 -0
  160. package/src/hooks.ts +292 -0
  161. package/src/index.ts +50 -0
  162. package/src/specs/CloudXAdViewNativeComponent.ts +82 -0
  163. package/src/specs/NativeCloudXModule.ts +162 -0
  164. package/src/types/AdEvent.ts +11 -0
  165. package/src/types/AdInfo.ts +60 -0
  166. package/src/types/BannerAd.ts +59 -0
  167. package/src/types/CloudX.ts +33 -0
  168. package/src/types/Configuration.ts +10 -0
  169. package/src/types/FullscreenAd.ts +39 -0
  170. package/src/types/RewardedAd.ts +10 -0
  171. package/src/types/index.ts +7 -0
@@ -0,0 +1,103 @@
1
+ import { addEventListener, removeEventListener } from './EventEmitter';
2
+ import type { AdDisplayFailedInfo, AdInfo, AdLoadFailedInfo } from './types/AdInfo';
3
+ import type { FullscreenAdType } from './types/FullscreenAd';
4
+ import NativeCloudXModule from './specs/NativeCloudXModule';
5
+
6
+ const {
7
+ ON_INTERSTITIAL_LOADED_EVENT,
8
+ ON_INTERSTITIAL_LOAD_FAILED_EVENT,
9
+ ON_INTERSTITIAL_CLICKED_EVENT,
10
+ ON_INTERSTITIAL_DISPLAYED_EVENT,
11
+ ON_INTERSTITIAL_DISPLAY_FAILED_EVENT,
12
+ ON_INTERSTITIAL_HIDDEN_EVENT,
13
+ ON_INTERSTITIAL_AD_REVENUE_PAID,
14
+ } = NativeCloudXModule.getConstants();
15
+
16
+ const isAdReady = (adUnitId: string): Promise<boolean> => {
17
+ return NativeCloudXModule.isInterstitialReady(adUnitId);
18
+ };
19
+
20
+ const loadAd = (adUnitId: string): void => {
21
+ NativeCloudXModule.loadInterstitial(adUnitId);
22
+ };
23
+
24
+ const showAd = (adUnitId: string, placement?: string | null, customData?: string | null): void => {
25
+ NativeCloudXModule.showInterstitial(adUnitId, placement ?? undefined, customData ?? undefined);
26
+ };
27
+
28
+ const destroyAd = (adUnitId: string): void => {
29
+ NativeCloudXModule.destroyInterstitial(adUnitId);
30
+ };
31
+
32
+ const addAdLoadedEventListener = (listener: (adInfo: AdInfo) => void): void => {
33
+ addEventListener(ON_INTERSTITIAL_LOADED_EVENT, listener);
34
+ };
35
+ const removeAdLoadedEventListener = (): void => {
36
+ removeEventListener(ON_INTERSTITIAL_LOADED_EVENT);
37
+ };
38
+
39
+ const addAdLoadFailedEventListener = (listener: (errorInfo: AdLoadFailedInfo) => void): void => {
40
+ addEventListener(ON_INTERSTITIAL_LOAD_FAILED_EVENT, listener);
41
+ };
42
+ const removeAdLoadFailedEventListener = (): void => {
43
+ removeEventListener(ON_INTERSTITIAL_LOAD_FAILED_EVENT);
44
+ };
45
+
46
+ const addAdClickedEventListener = (listener: (adInfo: AdInfo) => void): void => {
47
+ addEventListener(ON_INTERSTITIAL_CLICKED_EVENT, listener);
48
+ };
49
+ const removeAdClickedEventListener = (): void => {
50
+ removeEventListener(ON_INTERSTITIAL_CLICKED_EVENT);
51
+ };
52
+
53
+ const addAdDisplayedEventListener = (listener: (adInfo: AdInfo) => void): void => {
54
+ addEventListener(ON_INTERSTITIAL_DISPLAYED_EVENT, listener);
55
+ };
56
+ const removeAdDisplayedEventListener = (): void => {
57
+ removeEventListener(ON_INTERSTITIAL_DISPLAYED_EVENT);
58
+ };
59
+
60
+ const addAdFailedToDisplayEventListener = (listener: (errorInfo: AdDisplayFailedInfo) => void): void => {
61
+ addEventListener(ON_INTERSTITIAL_DISPLAY_FAILED_EVENT, listener);
62
+ };
63
+ const removeAdFailedToDisplayEventListener = (): void => {
64
+ removeEventListener(ON_INTERSTITIAL_DISPLAY_FAILED_EVENT);
65
+ };
66
+
67
+ const addAdHiddenEventListener = (listener: (adInfo: AdInfo) => void): void => {
68
+ addEventListener(ON_INTERSTITIAL_HIDDEN_EVENT, listener);
69
+ };
70
+ const removeAdHiddenEventListener = (): void => {
71
+ removeEventListener(ON_INTERSTITIAL_HIDDEN_EVENT);
72
+ };
73
+
74
+ const addAdRevenuePaidListener = (listener: (adInfo: AdInfo) => void): void => {
75
+ addEventListener(ON_INTERSTITIAL_AD_REVENUE_PAID, listener);
76
+ };
77
+ const removeAdRevenuePaidListener = (): void => {
78
+ removeEventListener(ON_INTERSTITIAL_AD_REVENUE_PAID);
79
+ };
80
+
81
+ export const InterstitialAd: FullscreenAdType = {
82
+ isAdReady,
83
+ loadAd,
84
+ showAd,
85
+ destroyAd,
86
+
87
+ addAdLoadedEventListener,
88
+ removeAdLoadedEventListener,
89
+ addAdLoadFailedEventListener,
90
+ removeAdLoadFailedEventListener,
91
+ addAdClickedEventListener,
92
+ removeAdClickedEventListener,
93
+ addAdDisplayedEventListener,
94
+ removeAdDisplayedEventListener,
95
+ addAdFailedToDisplayEventListener,
96
+ removeAdFailedToDisplayEventListener,
97
+ addAdHiddenEventListener,
98
+ removeAdHiddenEventListener,
99
+ addAdRevenuePaidListener,
100
+ removeAdRevenuePaidListener,
101
+ };
102
+
103
+ export default InterstitialAd;
package/src/MRecAd.ts ADDED
@@ -0,0 +1,133 @@
1
+ import { addEventListener, removeEventListener } from './EventEmitter';
2
+ import type { AdInfo, AdLoadFailedInfo } from './types/AdInfo';
3
+ import type { MRecAdType, AdViewPositionType } from './types/BannerAd';
4
+ import NativeCloudXModule from './specs/NativeCloudXModule';
5
+
6
+ const {
7
+ ON_MREC_AD_LOADED_EVENT,
8
+ ON_MREC_AD_LOAD_FAILED_EVENT,
9
+ ON_MREC_AD_CLICKED_EVENT,
10
+ ON_MREC_AD_EXPANDED_EVENT,
11
+ ON_MREC_AD_COLLAPSED_EVENT,
12
+ ON_MREC_AD_REVENUE_PAID,
13
+ } = NativeCloudXModule.getConstants();
14
+
15
+ const createAd = (adUnitId: string, position: AdViewPositionType): void => {
16
+ NativeCloudXModule.createMRec(adUnitId, position);
17
+ };
18
+
19
+ const createAdWithOffsets = (adUnitId: string, position: AdViewPositionType, xOffset: number, yOffset: number): void => {
20
+ NativeCloudXModule.createMRecWithOffsets(adUnitId, position, xOffset, yOffset);
21
+ };
22
+
23
+ const destroyAd = (adUnitId: string): void => {
24
+ NativeCloudXModule.destroyMRec(adUnitId);
25
+ };
26
+
27
+ const showAd = (adUnitId: string): void => {
28
+ NativeCloudXModule.showMRec(adUnitId);
29
+ };
30
+
31
+ const hideAd = (adUnitId: string): void => {
32
+ NativeCloudXModule.hideMRec(adUnitId);
33
+ };
34
+
35
+ const setPlacement = (adUnitId: string, placement: string | null): void => {
36
+ NativeCloudXModule.setMRecPlacement(adUnitId, placement);
37
+ };
38
+
39
+ const setCustomData = (adUnitId: string, customData: string | null): void => {
40
+ NativeCloudXModule.setMRecCustomData(adUnitId, customData);
41
+ };
42
+
43
+ const startAutoRefresh = (adUnitId: string): void => {
44
+ NativeCloudXModule.startMRecAutoRefresh(adUnitId);
45
+ };
46
+
47
+ const stopAutoRefresh = (adUnitId: string): void => {
48
+ NativeCloudXModule.stopMRecAutoRefresh(adUnitId);
49
+ };
50
+
51
+ const updatePosition = (adUnitId: string, position: AdViewPositionType): void => {
52
+ NativeCloudXModule.updateMRecPosition(adUnitId, position);
53
+ };
54
+
55
+ const updateOffsets = (adUnitId: string, xOffset: number, yOffset: number): void => {
56
+ NativeCloudXModule.updateMRecOffsets(adUnitId, xOffset, yOffset);
57
+ };
58
+
59
+ const setBackgroundColor = (adUnitId: string, hexColorString: string): void => {
60
+ NativeCloudXModule.setMRecBackgroundColor(adUnitId, hexColorString);
61
+ };
62
+
63
+ const addAdLoadedEventListener = (listener: (adInfo: AdInfo) => void): void => {
64
+ addEventListener(ON_MREC_AD_LOADED_EVENT, listener);
65
+ };
66
+ const removeAdLoadedEventListener = (): void => {
67
+ removeEventListener(ON_MREC_AD_LOADED_EVENT);
68
+ };
69
+
70
+ const addAdLoadFailedEventListener = (listener: (errorInfo: AdLoadFailedInfo) => void): void => {
71
+ addEventListener(ON_MREC_AD_LOAD_FAILED_EVENT, listener);
72
+ };
73
+ const removeAdLoadFailedEventListener = (): void => {
74
+ removeEventListener(ON_MREC_AD_LOAD_FAILED_EVENT);
75
+ };
76
+
77
+ const addAdClickedEventListener = (listener: (adInfo: AdInfo) => void): void => {
78
+ addEventListener(ON_MREC_AD_CLICKED_EVENT, listener);
79
+ };
80
+ const removeAdClickedEventListener = (): void => {
81
+ removeEventListener(ON_MREC_AD_CLICKED_EVENT);
82
+ };
83
+
84
+ const addAdExpandedEventListener = (listener: (adInfo: AdInfo) => void): void => {
85
+ addEventListener(ON_MREC_AD_EXPANDED_EVENT, listener);
86
+ };
87
+ const removeAdExpandedEventListener = (): void => {
88
+ removeEventListener(ON_MREC_AD_EXPANDED_EVENT);
89
+ };
90
+
91
+ const addAdCollapsedEventListener = (listener: (adInfo: AdInfo) => void): void => {
92
+ addEventListener(ON_MREC_AD_COLLAPSED_EVENT, listener);
93
+ };
94
+ const removeAdCollapsedEventListener = (): void => {
95
+ removeEventListener(ON_MREC_AD_COLLAPSED_EVENT);
96
+ };
97
+
98
+ const addAdRevenuePaidListener = (listener: (adInfo: AdInfo) => void): void => {
99
+ addEventListener(ON_MREC_AD_REVENUE_PAID, listener);
100
+ };
101
+ const removeAdRevenuePaidListener = (): void => {
102
+ removeEventListener(ON_MREC_AD_REVENUE_PAID);
103
+ };
104
+
105
+ export const MRecAd: MRecAdType = {
106
+ createAd,
107
+ createAdWithOffsets,
108
+ destroyAd,
109
+ showAd,
110
+ hideAd,
111
+ updatePosition,
112
+ updateOffsets,
113
+ setBackgroundColor,
114
+ setPlacement,
115
+ setCustomData,
116
+ startAutoRefresh,
117
+ stopAutoRefresh,
118
+
119
+ addAdLoadedEventListener,
120
+ removeAdLoadedEventListener,
121
+ addAdLoadFailedEventListener,
122
+ removeAdLoadFailedEventListener,
123
+ addAdClickedEventListener,
124
+ removeAdClickedEventListener,
125
+ addAdExpandedEventListener,
126
+ removeAdExpandedEventListener,
127
+ addAdCollapsedEventListener,
128
+ removeAdCollapsedEventListener,
129
+ addAdRevenuePaidListener,
130
+ removeAdRevenuePaidListener,
131
+ };
132
+
133
+ export default MRecAd;
@@ -0,0 +1,113 @@
1
+ import { addEventListener, removeEventListener } from './EventEmitter';
2
+ import type { AdDisplayFailedInfo, AdInfo, AdLoadFailedInfo, AdRewardInfo } from './types/AdInfo';
3
+ import type { RewardedAdType } from './types/RewardedAd';
4
+ import NativeCloudXModule from './specs/NativeCloudXModule';
5
+
6
+ const {
7
+ ON_REWARDED_AD_LOADED_EVENT,
8
+ ON_REWARDED_AD_LOAD_FAILED_EVENT,
9
+ ON_REWARDED_AD_CLICKED_EVENT,
10
+ ON_REWARDED_AD_DISPLAYED_EVENT,
11
+ ON_REWARDED_AD_DISPLAY_FAILED_EVENT,
12
+ ON_REWARDED_AD_HIDDEN_EVENT,
13
+ ON_REWARDED_AD_RECEIVED_REWARD_EVENT,
14
+ ON_REWARDED_AD_REVENUE_PAID,
15
+ } = NativeCloudXModule.getConstants();
16
+
17
+ const isAdReady = (adUnitId: string): Promise<boolean> => {
18
+ return NativeCloudXModule.isRewardedReady(adUnitId);
19
+ };
20
+
21
+ const loadAd = (adUnitId: string): void => {
22
+ NativeCloudXModule.loadRewarded(adUnitId);
23
+ };
24
+
25
+ const showAd = (adUnitId: string, placement?: string | null, customData?: string | null): void => {
26
+ NativeCloudXModule.showRewarded(adUnitId, placement ?? undefined, customData ?? undefined);
27
+ };
28
+
29
+ const destroyAd = (adUnitId: string): void => {
30
+ NativeCloudXModule.destroyRewarded(adUnitId);
31
+ };
32
+
33
+ const addAdLoadedEventListener = (listener: (adInfo: AdInfo) => void): void => {
34
+ addEventListener(ON_REWARDED_AD_LOADED_EVENT, listener);
35
+ };
36
+ const removeAdLoadedEventListener = (): void => {
37
+ removeEventListener(ON_REWARDED_AD_LOADED_EVENT);
38
+ };
39
+
40
+ const addAdLoadFailedEventListener = (listener: (errorInfo: AdLoadFailedInfo) => void): void => {
41
+ addEventListener(ON_REWARDED_AD_LOAD_FAILED_EVENT, listener);
42
+ };
43
+ const removeAdLoadFailedEventListener = (): void => {
44
+ removeEventListener(ON_REWARDED_AD_LOAD_FAILED_EVENT);
45
+ };
46
+
47
+ const addAdClickedEventListener = (listener: (adInfo: AdInfo) => void): void => {
48
+ addEventListener(ON_REWARDED_AD_CLICKED_EVENT, listener);
49
+ };
50
+ const removeAdClickedEventListener = (): void => {
51
+ removeEventListener(ON_REWARDED_AD_CLICKED_EVENT);
52
+ };
53
+
54
+ const addAdDisplayedEventListener = (listener: (adInfo: AdInfo) => void): void => {
55
+ addEventListener(ON_REWARDED_AD_DISPLAYED_EVENT, listener);
56
+ };
57
+ const removeAdDisplayedEventListener = (): void => {
58
+ removeEventListener(ON_REWARDED_AD_DISPLAYED_EVENT);
59
+ };
60
+
61
+ const addAdFailedToDisplayEventListener = (listener: (errorInfo: AdDisplayFailedInfo) => void): void => {
62
+ addEventListener(ON_REWARDED_AD_DISPLAY_FAILED_EVENT, listener);
63
+ };
64
+ const removeAdFailedToDisplayEventListener = (): void => {
65
+ removeEventListener(ON_REWARDED_AD_DISPLAY_FAILED_EVENT);
66
+ };
67
+
68
+ const addAdHiddenEventListener = (listener: (adInfo: AdInfo) => void): void => {
69
+ addEventListener(ON_REWARDED_AD_HIDDEN_EVENT, listener);
70
+ };
71
+ const removeAdHiddenEventListener = (): void => {
72
+ removeEventListener(ON_REWARDED_AD_HIDDEN_EVENT);
73
+ };
74
+
75
+ const addAdReceivedRewardEventListener = (listener: (rewardInfo: AdRewardInfo) => void): void => {
76
+ addEventListener(ON_REWARDED_AD_RECEIVED_REWARD_EVENT, listener);
77
+ };
78
+ const removeAdReceivedRewardEventListener = (): void => {
79
+ removeEventListener(ON_REWARDED_AD_RECEIVED_REWARD_EVENT);
80
+ };
81
+
82
+ const addAdRevenuePaidListener = (listener: (adInfo: AdInfo) => void): void => {
83
+ addEventListener(ON_REWARDED_AD_REVENUE_PAID, listener);
84
+ };
85
+ const removeAdRevenuePaidListener = (): void => {
86
+ removeEventListener(ON_REWARDED_AD_REVENUE_PAID);
87
+ };
88
+
89
+ export const RewardedAd: RewardedAdType = {
90
+ isAdReady,
91
+ loadAd,
92
+ showAd,
93
+ destroyAd,
94
+
95
+ addAdLoadedEventListener,
96
+ removeAdLoadedEventListener,
97
+ addAdLoadFailedEventListener,
98
+ removeAdLoadFailedEventListener,
99
+ addAdClickedEventListener,
100
+ removeAdClickedEventListener,
101
+ addAdDisplayedEventListener,
102
+ removeAdDisplayedEventListener,
103
+ addAdFailedToDisplayEventListener,
104
+ removeAdFailedToDisplayEventListener,
105
+ addAdHiddenEventListener,
106
+ removeAdHiddenEventListener,
107
+ addAdReceivedRewardEventListener,
108
+ removeAdReceivedRewardEventListener,
109
+ addAdRevenuePaidListener,
110
+ removeAdRevenuePaidListener,
111
+ };
112
+
113
+ export default RewardedAd;
package/src/hooks.ts ADDED
@@ -0,0 +1,292 @@
1
+ /**
2
+ * React Hooks for CloudX SDK.
3
+ *
4
+ * Provides declarative hooks for managing fullscreen and banner ad lifecycles.
5
+ * These are a CloudX-specific convenience layer on top of the static module APIs.
6
+ */
7
+
8
+ import { useEffect, useState, useCallback, useRef } from 'react';
9
+ import { NativeEventEmitter } from 'react-native';
10
+ import type { EventSubscription } from 'react-native';
11
+ import NativeCloudXModule from './specs/NativeCloudXModule';
12
+
13
+ const emitter = new NativeEventEmitter(NativeCloudXModule);
14
+
15
+ const {
16
+ ON_INTERSTITIAL_LOADED_EVENT,
17
+ ON_INTERSTITIAL_LOAD_FAILED_EVENT,
18
+ ON_INTERSTITIAL_DISPLAY_FAILED_EVENT,
19
+ ON_INTERSTITIAL_HIDDEN_EVENT,
20
+ ON_REWARDED_AD_LOADED_EVENT,
21
+ ON_REWARDED_AD_LOAD_FAILED_EVENT,
22
+ ON_REWARDED_AD_DISPLAY_FAILED_EVENT,
23
+ ON_REWARDED_AD_HIDDEN_EVENT,
24
+ ON_REWARDED_AD_RECEIVED_REWARD_EVENT,
25
+ ON_BANNER_AD_LOADED_EVENT,
26
+ ON_BANNER_AD_LOAD_FAILED_EVENT,
27
+ } = NativeCloudXModule.getConstants();
28
+
29
+ // ---------------------------------------------------------------------------
30
+ // useCloudXInterstitial
31
+ // ---------------------------------------------------------------------------
32
+
33
+ export type InterstitialHookResult = {
34
+ isLoaded: boolean;
35
+ isLoading: boolean;
36
+ error: string | null;
37
+ load: () => void;
38
+ show: (placement?: string | null, customData?: string | null) => void;
39
+ destroy: () => void;
40
+ };
41
+
42
+ /**
43
+ * Hook for managing an interstitial ad lifecycle.
44
+ *
45
+ * @param adUnitId - The ad unit identifier.
46
+ */
47
+ export function useCloudXInterstitial(adUnitId: string): InterstitialHookResult {
48
+ const [isLoaded, setIsLoaded] = useState(false);
49
+ const [isLoading, setIsLoading] = useState(false);
50
+ const [error, setError] = useState<string | null>(null);
51
+ const mountedRef = useRef(true);
52
+
53
+ useEffect(() => {
54
+ mountedRef.current = true;
55
+ const subs: EventSubscription[] = [];
56
+
57
+ subs.push(
58
+ emitter.addListener(ON_INTERSTITIAL_LOADED_EVENT, (event: { adUnitId: string }) => {
59
+ if (event.adUnitId === adUnitId && mountedRef.current) {
60
+ setIsLoaded(true);
61
+ setIsLoading(false);
62
+ setError(null);
63
+ }
64
+ }),
65
+ );
66
+
67
+ subs.push(
68
+ emitter.addListener(ON_INTERSTITIAL_LOAD_FAILED_EVENT, (event: { adUnitId: string; message?: string }) => {
69
+ if (event.adUnitId === adUnitId && mountedRef.current) {
70
+ setIsLoaded(false);
71
+ setIsLoading(false);
72
+ setError(event.message ?? 'Failed to load');
73
+ }
74
+ }),
75
+ );
76
+
77
+ subs.push(
78
+ emitter.addListener(ON_INTERSTITIAL_DISPLAY_FAILED_EVENT, (event: { adUnitId: string; message?: string }) => {
79
+ if (event.adUnitId === adUnitId && mountedRef.current) {
80
+ setIsLoaded(false);
81
+ setError(event.message ?? 'Display failed');
82
+ }
83
+ }),
84
+ );
85
+
86
+ subs.push(
87
+ emitter.addListener(ON_INTERSTITIAL_HIDDEN_EVENT, (event: { adUnitId: string }) => {
88
+ if (event.adUnitId === adUnitId && mountedRef.current) {
89
+ setIsLoaded(false);
90
+ }
91
+ }),
92
+ );
93
+
94
+ return () => {
95
+ mountedRef.current = false;
96
+ subs.forEach((s) => s.remove());
97
+ NativeCloudXModule.destroyInterstitial(adUnitId);
98
+ };
99
+ }, [adUnitId]);
100
+
101
+ const load = useCallback(() => {
102
+ setIsLoading(true);
103
+ setError(null);
104
+ NativeCloudXModule.loadInterstitial(adUnitId);
105
+ }, [adUnitId]);
106
+
107
+ const show = useCallback(
108
+ (placement?: string | null, customData?: string | null) => {
109
+ if (!isLoaded) {
110
+ setError('Ad not loaded');
111
+ return;
112
+ }
113
+ NativeCloudXModule.showInterstitial(adUnitId, placement ?? undefined, customData ?? undefined);
114
+ },
115
+ [adUnitId, isLoaded],
116
+ );
117
+
118
+ const destroy = useCallback(() => {
119
+ NativeCloudXModule.destroyInterstitial(adUnitId);
120
+ setIsLoaded(false);
121
+ setIsLoading(false);
122
+ setError(null);
123
+ }, [adUnitId]);
124
+
125
+ return { isLoaded, isLoading, error, load, show, destroy };
126
+ }
127
+
128
+ // ---------------------------------------------------------------------------
129
+ // useCloudXRewarded
130
+ // ---------------------------------------------------------------------------
131
+
132
+ export type RewardedHookResult = {
133
+ isLoaded: boolean;
134
+ isLoading: boolean;
135
+ error: string | null;
136
+ rewardEarned: boolean;
137
+ load: () => void;
138
+ show: (placement?: string | null, customData?: string | null) => void;
139
+ destroy: () => void;
140
+ };
141
+
142
+ /**
143
+ * Hook for managing a rewarded ad lifecycle.
144
+ *
145
+ * @param adUnitId - The ad unit identifier.
146
+ */
147
+ export function useCloudXRewarded(adUnitId: string): RewardedHookResult {
148
+ const [isLoaded, setIsLoaded] = useState(false);
149
+ const [isLoading, setIsLoading] = useState(false);
150
+ const [error, setError] = useState<string | null>(null);
151
+ const [rewardEarned, setRewardEarned] = useState(false);
152
+ const mountedRef = useRef(true);
153
+
154
+ useEffect(() => {
155
+ mountedRef.current = true;
156
+ const subs: EventSubscription[] = [];
157
+
158
+ subs.push(
159
+ emitter.addListener(ON_REWARDED_AD_LOADED_EVENT, (event: { adUnitId: string }) => {
160
+ if (event.adUnitId === adUnitId && mountedRef.current) {
161
+ setIsLoaded(true);
162
+ setIsLoading(false);
163
+ setError(null);
164
+ }
165
+ }),
166
+ );
167
+
168
+ subs.push(
169
+ emitter.addListener(ON_REWARDED_AD_LOAD_FAILED_EVENT, (event: { adUnitId: string; message?: string }) => {
170
+ if (event.adUnitId === adUnitId && mountedRef.current) {
171
+ setIsLoaded(false);
172
+ setIsLoading(false);
173
+ setError(event.message ?? 'Failed to load');
174
+ }
175
+ }),
176
+ );
177
+
178
+ subs.push(
179
+ emitter.addListener(ON_REWARDED_AD_DISPLAY_FAILED_EVENT, (event: { adUnitId: string; message?: string }) => {
180
+ if (event.adUnitId === adUnitId && mountedRef.current) {
181
+ setIsLoaded(false);
182
+ setError(event.message ?? 'Display failed');
183
+ }
184
+ }),
185
+ );
186
+
187
+ subs.push(
188
+ emitter.addListener(ON_REWARDED_AD_HIDDEN_EVENT, (event: { adUnitId: string }) => {
189
+ if (event.adUnitId === adUnitId && mountedRef.current) {
190
+ setIsLoaded(false);
191
+ }
192
+ }),
193
+ );
194
+
195
+ subs.push(
196
+ emitter.addListener(ON_REWARDED_AD_RECEIVED_REWARD_EVENT, (event: { adUnitId: string }) => {
197
+ if (event.adUnitId === adUnitId && mountedRef.current) {
198
+ setRewardEarned(true);
199
+ }
200
+ }),
201
+ );
202
+
203
+ return () => {
204
+ mountedRef.current = false;
205
+ subs.forEach((s) => s.remove());
206
+ NativeCloudXModule.destroyRewarded(adUnitId);
207
+ };
208
+ }, [adUnitId]);
209
+
210
+ const load = useCallback(() => {
211
+ setIsLoading(true);
212
+ setError(null);
213
+ setRewardEarned(false);
214
+ NativeCloudXModule.loadRewarded(adUnitId);
215
+ }, [adUnitId]);
216
+
217
+ const show = useCallback(
218
+ (placement?: string | null, customData?: string | null) => {
219
+ if (!isLoaded) {
220
+ setError('Ad not loaded');
221
+ return;
222
+ }
223
+ NativeCloudXModule.showRewarded(adUnitId, placement ?? undefined, customData ?? undefined);
224
+ },
225
+ [adUnitId, isLoaded],
226
+ );
227
+
228
+ const destroy = useCallback(() => {
229
+ NativeCloudXModule.destroyRewarded(adUnitId);
230
+ setIsLoaded(false);
231
+ setIsLoading(false);
232
+ setError(null);
233
+ setRewardEarned(false);
234
+ }, [adUnitId]);
235
+
236
+ return { isLoaded, isLoading, error, rewardEarned, load, show, destroy };
237
+ }
238
+
239
+ // ---------------------------------------------------------------------------
240
+ // useCloudXBanner
241
+ // ---------------------------------------------------------------------------
242
+
243
+ export type BannerHookResult = {
244
+ isLoaded: boolean;
245
+ error: string | null;
246
+ };
247
+
248
+ /**
249
+ * Hook for listening to programmatic banner ad state.
250
+ *
251
+ * Subscribes to module-level banner events for a given adUnitId.
252
+ * Use with the programmatic BannerAd.createAd() API.
253
+ * For the <AdView> component, use its callback props (onAdLoaded, etc.) directly.
254
+ *
255
+ * @param adUnitId - The ad unit identifier.
256
+ */
257
+ export function useCloudXBanner(adUnitId: string): BannerHookResult {
258
+ const [isLoaded, setIsLoaded] = useState(false);
259
+ const [error, setError] = useState<string | null>(null);
260
+ const mountedRef = useRef(true);
261
+
262
+ useEffect(() => {
263
+ mountedRef.current = true;
264
+ const subs: EventSubscription[] = [];
265
+
266
+ subs.push(
267
+ emitter.addListener(ON_BANNER_AD_LOADED_EVENT, (event: { adUnitId: string }) => {
268
+ if (event.adUnitId === adUnitId && mountedRef.current) {
269
+ setIsLoaded(true);
270
+ setError(null);
271
+ }
272
+ }),
273
+ );
274
+
275
+ subs.push(
276
+ emitter.addListener(ON_BANNER_AD_LOAD_FAILED_EVENT, (event: { adUnitId: string; message?: string }) => {
277
+ if (event.adUnitId === adUnitId && mountedRef.current) {
278
+ setIsLoaded(false);
279
+ setError(event.message ?? 'Failed to load');
280
+ }
281
+ }),
282
+ );
283
+
284
+ return () => {
285
+ mountedRef.current = false;
286
+ subs.forEach((s) => s.remove());
287
+ NativeCloudXModule.destroyBanner(adUnitId);
288
+ };
289
+ }, [adUnitId]);
290
+
291
+ return { isLoaded, error };
292
+ }
package/src/index.ts ADDED
@@ -0,0 +1,50 @@
1
+ // Core SDK
2
+ export { default, CloudX } from './CloudX';
3
+ export { default as NativeCloudXModule } from './specs/NativeCloudXModule';
4
+
5
+ // Ad Modules
6
+ export { InterstitialAd } from './InterstitialAd';
7
+ export { RewardedAd } from './RewardedAd';
8
+ export { BannerAd } from './BannerAd';
9
+ export { MRecAd } from './MRecAd';
10
+
11
+ // AdView Component
12
+ export { AdView, AdFormat, AdViewPosition } from './AdView';
13
+ export type { AdViewProps, AdViewHandler } from './AdView';
14
+
15
+ // Error Codes
16
+ export { ErrorCode } from './ErrorCode';
17
+
18
+ // App Tracking Transparency (iOS)
19
+ export { requestTrackingAuthorization, getTrackingAuthorizationStatus, ATTStatus } from './AppTrackingTransparency';
20
+
21
+ // Hooks
22
+ export { useCloudXInterstitial, useCloudXRewarded, useCloudXBanner } from './hooks';
23
+ export type { InterstitialHookResult, RewardedHookResult, BannerHookResult } from './hooks';
24
+
25
+ // Types
26
+ export type {
27
+ AdInfo,
28
+ AdLoadFailedInfo,
29
+ AdDisplayFailedInfo,
30
+ AdRewardInfo,
31
+ Configuration,
32
+ CloudXType,
33
+ FullscreenAdType,
34
+ RewardedAdType,
35
+ BannerAdType,
36
+ MRecAdType,
37
+ AdViewPositionType,
38
+ } from './types';
39
+
40
+ // Log level constants
41
+ export const LogLevel = {
42
+ VERBOSE: 'verbose',
43
+ DEBUG: 'debug',
44
+ INFO: 'info',
45
+ WARN: 'warn',
46
+ ERROR: 'error',
47
+ NONE: 'none',
48
+ } as const;
49
+
50
+ export type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];