@ezoic/react-native-sdk 1.1.0 → 1.3.0

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 (38) hide show
  1. package/EzoicReactNativeSdk.podspec +4 -1
  2. package/README.md +26 -2
  3. package/android/build.gradle +7 -1
  4. package/android/src/main/java/com/ezoic/reactnative/EzoicAdsModule.kt +144 -0
  5. package/android/src/main/java/com/ezoic/reactnative/EzoicNativeAdViewManager.kt +314 -0
  6. package/android/src/main/java/com/ezoic/reactnative/EzoicReactNativeSdkPackage.kt +4 -1
  7. package/ios/EzoicAdsImpl.swift +200 -44
  8. package/ios/EzoicNativeAdHostView.swift +181 -0
  9. package/ios/EzoicNativeAdViewComponentView.mm +99 -0
  10. package/ios/EzoicReactNativeSdk.mm +18 -1
  11. package/lib/module/EzoicInterstitialAd.js +108 -0
  12. package/lib/module/EzoicInterstitialAd.js.map +1 -0
  13. package/lib/module/EzoicNativeAdViewNativeComponent.ts +22 -0
  14. package/lib/module/EzoicRewardedAd.js +4 -1
  15. package/lib/module/EzoicRewardedAd.js.map +1 -1
  16. package/lib/module/NativeEzoicAds.js.map +1 -1
  17. package/lib/module/helpers.js.map +1 -1
  18. package/lib/module/index.js +29 -0
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/typescript/src/EzoicInterstitialAd.d.ts +51 -0
  21. package/lib/typescript/src/EzoicInterstitialAd.d.ts.map +1 -0
  22. package/lib/typescript/src/EzoicNativeAdViewNativeComponent.d.ts +18 -0
  23. package/lib/typescript/src/EzoicNativeAdViewNativeComponent.d.ts.map +1 -0
  24. package/lib/typescript/src/EzoicRewardedAd.d.ts +1 -0
  25. package/lib/typescript/src/EzoicRewardedAd.d.ts.map +1 -1
  26. package/lib/typescript/src/NativeEzoicAds.d.ts +2 -0
  27. package/lib/typescript/src/NativeEzoicAds.d.ts.map +1 -1
  28. package/lib/typescript/src/helpers.d.ts +1 -1
  29. package/lib/typescript/src/helpers.d.ts.map +1 -1
  30. package/lib/typescript/src/index.d.ts +21 -0
  31. package/lib/typescript/src/index.d.ts.map +1 -1
  32. package/package.json +2 -2
  33. package/src/EzoicInterstitialAd.ts +126 -0
  34. package/src/EzoicNativeAdViewNativeComponent.ts +22 -0
  35. package/src/EzoicRewardedAd.ts +8 -2
  36. package/src/NativeEzoicAds.ts +3 -1
  37. package/src/helpers.ts +1 -1
  38. package/src/index.tsx +51 -0
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ import { NativeEventEmitter } from 'react-native';
4
+ import NativeEzoicAds from "./NativeEzoicAds.js";
5
+ import { coerceAdUnitId } from "./helpers.js";
6
+
7
+ /** Lifecycle callbacks for an interstitial ad. All are optional. */
8
+
9
+ /** The single native event name carrying every interstitial lifecycle signal. */
10
+ const INTERSTITIAL_EVENT = 'EzoicInterstitialAdEvent';
11
+ // A single shared emitter is sufficient — events are routed to the right
12
+ // instance by adUnitIdentifier below.
13
+ const emitter = new NativeEventEmitter(NativeEzoicAds);
14
+
15
+ /**
16
+ * An interstitial ad. Use the static `load` to fetch an ad ahead of time, then
17
+ * call `show()` to present it full-screen at a natural transition point.
18
+ * Interstitials carry no reward.
19
+ *
20
+ * ```ts
21
+ * const ad = await EzoicInterstitialAd.load('12345');
22
+ * ad.setListeners({ onDismissed: () => console.log('closed') });
23
+ * await ad.show();
24
+ * ```
25
+ *
26
+ * Mirrors the native `EzoicInterstitialAd` load/show lifecycle on both
27
+ * platforms. Interstitial ads are single-use — load a new one for the next
28
+ * opportunity.
29
+ */
30
+ export class EzoicInterstitialAd {
31
+ /** The Ezoic ad unit identifier this ad was loaded for. */
32
+
33
+ listeners = {};
34
+ subscription = null;
35
+ constructor(adUnitIdentifier) {
36
+ this.adUnitIdentifier = adUnitIdentifier;
37
+ this.subscription = emitter.addListener(INTERSTITIAL_EVENT, raw => {
38
+ const event = raw;
39
+ if (event.adUnitIdentifier !== this.adUnitIdentifier) return;
40
+ this.handleEvent(event);
41
+ });
42
+ }
43
+
44
+ /**
45
+ * Loads an interstitial ad for the given Ezoic ad unit identifier. Resolves
46
+ * with a ready-to-show `EzoicInterstitialAd`, or rejects if no ad could be
47
+ * loaded.
48
+ */
49
+ static async load(adUnitIdentifier) {
50
+ const id = coerceAdUnitId(adUnitIdentifier);
51
+ const ad = new EzoicInterstitialAd(id);
52
+ try {
53
+ await NativeEzoicAds.loadInterstitialAd(id);
54
+ return ad;
55
+ } catch (error) {
56
+ ad.destroy();
57
+ throw error;
58
+ }
59
+ }
60
+
61
+ /** Registers lifecycle callbacks. Replaces any previously set listeners. */
62
+ setListeners(listeners) {
63
+ this.listeners = listeners;
64
+ }
65
+
66
+ /**
67
+ * Presents the interstitial ad full-screen. Resolves when the ad is
68
+ * dismissed. Rejects if the ad was not ready (load first) or failed to
69
+ * present.
70
+ */
71
+ async show() {
72
+ await NativeEzoicAds.showInterstitialAd(this.adUnitIdentifier);
73
+ }
74
+
75
+ /** Releases the event subscription. Safe to call multiple times. */
76
+ destroy() {
77
+ this.subscription?.remove();
78
+ this.subscription = null;
79
+ this.listeners = {};
80
+ }
81
+ handleEvent(event) {
82
+ switch (event.type) {
83
+ case 'shown':
84
+ this.listeners.onShown?.();
85
+ break;
86
+ case 'failedToShow':
87
+ this.listeners.onFailedToShow?.({
88
+ message: event.message ?? '',
89
+ code: event.code
90
+ });
91
+ // Failure to show is terminal — the native ad is single-use.
92
+ this.destroy();
93
+ break;
94
+ case 'impression':
95
+ this.listeners.onImpression?.();
96
+ break;
97
+ case 'clicked':
98
+ this.listeners.onClicked?.();
99
+ break;
100
+ case 'dismissed':
101
+ this.listeners.onDismissed?.();
102
+ // Dismissal is terminal — the native ad is single-use.
103
+ this.destroy();
104
+ break;
105
+ }
106
+ }
107
+ }
108
+ //# sourceMappingURL=EzoicInterstitialAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeEventEmitter","NativeEzoicAds","coerceAdUnitId","INTERSTITIAL_EVENT","emitter","EzoicInterstitialAd","listeners","subscription","constructor","adUnitIdentifier","addListener","raw","event","handleEvent","load","id","ad","loadInterstitialAd","error","destroy","setListeners","show","showInterstitialAd","remove","type","onShown","onFailedToShow","message","code","onImpression","onClicked","onDismissed"],"sourceRoot":"../../src","sources":["EzoicInterstitialAd.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAkC,cAAc;AAC3E,OAAOC,cAAc,MAAM,qBAAkB;AAC7C,SAASC,cAAc,QAAQ,cAAW;;AAE1C;;AASA;AACA,MAAMC,kBAAkB,GAAG,0BAA0B;AASrD;AACA;AACA,MAAMC,OAAO,GAAG,IAAIJ,kBAAkB,CAACC,cAAuB,CAAC;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMI,mBAAmB,CAAC;EAC/B;;EAGQC,SAAS,GAAiC,CAAC,CAAC;EAC5CC,YAAY,GAA+B,IAAI;EAE/CC,WAAWA,CAACC,gBAAwB,EAAE;IAC5C,IAAI,CAACA,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAACF,YAAY,GAAGH,OAAO,CAACM,WAAW,CACrCP,kBAAkB,EACjBQ,GAAY,IAAK;MAChB,MAAMC,KAAK,GAAGD,GAA8B;MAC5C,IAAIC,KAAK,CAACH,gBAAgB,KAAK,IAAI,CAACA,gBAAgB,EAAE;MACtD,IAAI,CAACI,WAAW,CAACD,KAAK,CAAC;IACzB,CACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,aAAaE,IAAIA,CAACL,gBAAwB,EAAgC;IACxE,MAAMM,EAAE,GAAGb,cAAc,CAACO,gBAAgB,CAAC;IAC3C,MAAMO,EAAE,GAAG,IAAIX,mBAAmB,CAACU,EAAE,CAAC;IACtC,IAAI;MACF,MAAMd,cAAc,CAACgB,kBAAkB,CAACF,EAAE,CAAC;MAC3C,OAAOC,EAAE;IACX,CAAC,CAAC,OAAOE,KAAK,EAAE;MACdF,EAAE,CAACG,OAAO,CAAC,CAAC;MACZ,MAAMD,KAAK;IACb;EACF;;EAEA;EACAE,YAAYA,CAACd,SAAuC,EAAQ;IAC1D,IAAI,CAACA,SAAS,GAAGA,SAAS;EAC5B;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMe,IAAIA,CAAA,EAAkB;IAC1B,MAAMpB,cAAc,CAACqB,kBAAkB,CAAC,IAAI,CAACb,gBAAgB,CAAC;EAChE;;EAEA;EACAU,OAAOA,CAAA,EAAS;IACd,IAAI,CAACZ,YAAY,EAAEgB,MAAM,CAAC,CAAC;IAC3B,IAAI,CAAChB,YAAY,GAAG,IAAI;IACxB,IAAI,CAACD,SAAS,GAAG,CAAC,CAAC;EACrB;EAEQO,WAAWA,CAACD,KAA8B,EAAQ;IACxD,QAAQA,KAAK,CAACY,IAAI;MAChB,KAAK,OAAO;QACV,IAAI,CAAClB,SAAS,CAACmB,OAAO,GAAG,CAAC;QAC1B;MACF,KAAK,cAAc;QACjB,IAAI,CAACnB,SAAS,CAACoB,cAAc,GAAG;UAC9BC,OAAO,EAAEf,KAAK,CAACe,OAAO,IAAI,EAAE;UAC5BC,IAAI,EAAEhB,KAAK,CAACgB;QACd,CAAC,CAAC;QACF;QACA,IAAI,CAACT,OAAO,CAAC,CAAC;QACd;MACF,KAAK,YAAY;QACf,IAAI,CAACb,SAAS,CAACuB,YAAY,GAAG,CAAC;QAC/B;MACF,KAAK,SAAS;QACZ,IAAI,CAACvB,SAAS,CAACwB,SAAS,GAAG,CAAC;QAC5B;MACF,KAAK,WAAW;QACd,IAAI,CAACxB,SAAS,CAACyB,WAAW,GAAG,CAAC;QAC9B;QACA,IAAI,CAACZ,OAAO,CAAC,CAAC;QACd;IACJ;EACF;AACF","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ import { codegenNativeComponent } from 'react-native';
2
+ import type { CodegenTypes, HostComponent, ViewProps } from 'react-native';
3
+
4
+ type LoadEvent = Readonly<{}>;
5
+ type ErrorEvent = Readonly<{ message: string; code: CodegenTypes.Int32 }>;
6
+
7
+ export interface NativeProps extends ViewProps {
8
+ adUnitIdentifier: string;
9
+ onLoad?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
10
+ onError?: CodegenTypes.BubblingEventHandler<ErrorEvent> | null;
11
+ onImpression?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
12
+ // `onClick` is reserved by core ViewProps (a gesture handler), so the native
13
+ // native-ad-click event is exposed as `onAdClick`. The public
14
+ // `EzoicNativeAdView` component maps the user-facing `onClick` prop onto this.
15
+ onAdClick?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
16
+ onOpen?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
17
+ onClose?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
18
+ }
19
+
20
+ export default codegenNativeComponent<NativeProps>(
21
+ 'EzoicNativeAdView'
22
+ ) as HostComponent<NativeProps>;
@@ -86,8 +86,11 @@ export class EzoicRewardedAd {
86
86
  break;
87
87
  case 'failedToShow':
88
88
  this.listeners.onFailedToShow?.({
89
- message: event.message ?? ''
89
+ message: event.message ?? '',
90
+ code: event.code
90
91
  });
92
+ // Failure to show is terminal — the native ad is single-use.
93
+ this.destroy();
91
94
  break;
92
95
  case 'impression':
93
96
  this.listeners.onImpression?.();
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","NativeEzoicAds","coerceAdUnitId","mapRewardResult","REWARDED_EVENT","emitter","EzoicRewardedAd","listeners","subscription","constructor","adUnitIdentifier","addListener","raw","event","handleEvent","load","id","ad","loadRewardedAd","error","destroy","setListeners","show","result","showRewardedAd","remove","type","onShown","onFailedToShow","message","onImpression","onClicked","onUserEarnedReward","rewardType","amount","rewardAmount","onDismissed"],"sourceRoot":"../../src","sources":["EzoicRewardedAd.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAkC,cAAc;AAC3E,OAAOC,cAAc,MAAM,qBAAkB;AAC7C,SAASC,cAAc,EAAEC,eAAe,QAAQ,cAAW;;AAE3D;;AAMA;;AAUA;AACA,MAAMC,cAAc,GAAG,sBAAsB;AAgB7C;AACA;AACA,MAAMC,OAAO,GAAG,IAAIL,kBAAkB,CAACC,cAAuB,CAAC;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,eAAe,CAAC;EAC3B;;EAGQC,SAAS,GAA6B,CAAC,CAAC;EACxCC,YAAY,GAA+B,IAAI;EAE/CC,WAAWA,CAACC,gBAAwB,EAAE;IAC5C,IAAI,CAACA,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAACF,YAAY,GAAGH,OAAO,CAACM,WAAW,CAACP,cAAc,EAAGQ,GAAY,IAAK;MACxE,MAAMC,KAAK,GAAGD,GAA0B;MACxC,IAAIC,KAAK,CAACH,gBAAgB,KAAK,IAAI,CAACA,gBAAgB,EAAE;MACtD,IAAI,CAACI,WAAW,CAACD,KAAK,CAAC;IACzB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;EACE,aAAaE,IAAIA,CAACL,gBAAwB,EAA4B;IACpE,MAAMM,EAAE,GAAGd,cAAc,CAACQ,gBAAgB,CAAC;IAC3C,MAAMO,EAAE,GAAG,IAAIX,eAAe,CAACU,EAAE,CAAC;IAClC,IAAI;MACF,MAAMf,cAAc,CAACiB,cAAc,CAACF,EAAE,CAAC;MACvC,OAAOC,EAAE;IACX,CAAC,CAAC,OAAOE,KAAK,EAAE;MACdF,EAAE,CAACG,OAAO,CAAC,CAAC;MACZ,MAAMD,KAAK;IACb;EACF;;EAEA;EACAE,YAAYA,CAACd,SAAmC,EAAQ;IACtD,IAAI,CAACA,SAAS,GAAGA,SAAS;EAC5B;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMe,IAAIA,CAAA,EAAgC;IACxC,MAAMC,MAAM,GAAG,MAAMtB,cAAc,CAACuB,cAAc,CAAC,IAAI,CAACd,gBAAgB,CAAC;IACzE,OAAOP,eAAe,CAACoB,MAAM,CAAC;EAChC;;EAEA;EACAH,OAAOA,CAAA,EAAS;IACd,IAAI,CAACZ,YAAY,EAAEiB,MAAM,CAAC,CAAC;IAC3B,IAAI,CAACjB,YAAY,GAAG,IAAI;IACxB,IAAI,CAACD,SAAS,GAAG,CAAC,CAAC;EACrB;EAEQO,WAAWA,CAACD,KAA0B,EAAQ;IACpD,QAAQA,KAAK,CAACa,IAAI;MAChB,KAAK,OAAO;QACV,IAAI,CAACnB,SAAS,CAACoB,OAAO,GAAG,CAAC;QAC1B;MACF,KAAK,cAAc;QACjB,IAAI,CAACpB,SAAS,CAACqB,cAAc,GAAG;UAAEC,OAAO,EAAEhB,KAAK,CAACgB,OAAO,IAAI;QAAG,CAAC,CAAC;QACjE;MACF,KAAK,YAAY;QACf,IAAI,CAACtB,SAAS,CAACuB,YAAY,GAAG,CAAC;QAC/B;MACF,KAAK,SAAS;QACZ,IAAI,CAACvB,SAAS,CAACwB,SAAS,GAAG,CAAC;QAC5B;MACF,KAAK,QAAQ;QACX,IAAI,CAACxB,SAAS,CAACyB,kBAAkB,GAAG;UAClCN,IAAI,EAAEb,KAAK,CAACoB,UAAU,IAAI,EAAE;UAC5BC,MAAM,EAAErB,KAAK,CAACsB,YAAY,IAAI;QAChC,CAAC,CAAC;QACF;MACF,KAAK,WAAW;QACd,IAAI,CAAC5B,SAAS,CAAC6B,WAAW,GAAG,CAAC;QAC9B;QACA,IAAI,CAAChB,OAAO,CAAC,CAAC;QACd;IACJ;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"names":["NativeEventEmitter","NativeEzoicAds","coerceAdUnitId","mapRewardResult","REWARDED_EVENT","emitter","EzoicRewardedAd","listeners","subscription","constructor","adUnitIdentifier","addListener","raw","event","handleEvent","load","id","ad","loadRewardedAd","error","destroy","setListeners","show","result","showRewardedAd","remove","type","onShown","onFailedToShow","message","code","onImpression","onClicked","onUserEarnedReward","rewardType","amount","rewardAmount","onDismissed"],"sourceRoot":"../../src","sources":["EzoicRewardedAd.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAkC,cAAc;AAC3E,OAAOC,cAAc,MAAM,qBAAkB;AAC7C,SAASC,cAAc,EAAEC,eAAe,QAAQ,cAAW;;AAE3D;;AAMA;;AAUA;AACA,MAAMC,cAAc,GAAG,sBAAsB;AAiB7C;AACA;AACA,MAAMC,OAAO,GAAG,IAAIL,kBAAkB,CAACC,cAAuB,CAAC;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,eAAe,CAAC;EAC3B;;EAGQC,SAAS,GAA6B,CAAC,CAAC;EACxCC,YAAY,GAA+B,IAAI;EAE/CC,WAAWA,CAACC,gBAAwB,EAAE;IAC5C,IAAI,CAACA,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAACF,YAAY,GAAGH,OAAO,CAACM,WAAW,CAACP,cAAc,EAAGQ,GAAY,IAAK;MACxE,MAAMC,KAAK,GAAGD,GAA0B;MACxC,IAAIC,KAAK,CAACH,gBAAgB,KAAK,IAAI,CAACA,gBAAgB,EAAE;MACtD,IAAI,CAACI,WAAW,CAACD,KAAK,CAAC;IACzB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;EACE,aAAaE,IAAIA,CAACL,gBAAwB,EAA4B;IACpE,MAAMM,EAAE,GAAGd,cAAc,CAACQ,gBAAgB,CAAC;IAC3C,MAAMO,EAAE,GAAG,IAAIX,eAAe,CAACU,EAAE,CAAC;IAClC,IAAI;MACF,MAAMf,cAAc,CAACiB,cAAc,CAACF,EAAE,CAAC;MACvC,OAAOC,EAAE;IACX,CAAC,CAAC,OAAOE,KAAK,EAAE;MACdF,EAAE,CAACG,OAAO,CAAC,CAAC;MACZ,MAAMD,KAAK;IACb;EACF;;EAEA;EACAE,YAAYA,CAACd,SAAmC,EAAQ;IACtD,IAAI,CAACA,SAAS,GAAGA,SAAS;EAC5B;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAMe,IAAIA,CAAA,EAAgC;IACxC,MAAMC,MAAM,GAAG,MAAMtB,cAAc,CAACuB,cAAc,CAAC,IAAI,CAACd,gBAAgB,CAAC;IACzE,OAAOP,eAAe,CAACoB,MAAM,CAAC;EAChC;;EAEA;EACAH,OAAOA,CAAA,EAAS;IACd,IAAI,CAACZ,YAAY,EAAEiB,MAAM,CAAC,CAAC;IAC3B,IAAI,CAACjB,YAAY,GAAG,IAAI;IACxB,IAAI,CAACD,SAAS,GAAG,CAAC,CAAC;EACrB;EAEQO,WAAWA,CAACD,KAA0B,EAAQ;IACpD,QAAQA,KAAK,CAACa,IAAI;MAChB,KAAK,OAAO;QACV,IAAI,CAACnB,SAAS,CAACoB,OAAO,GAAG,CAAC;QAC1B;MACF,KAAK,cAAc;QACjB,IAAI,CAACpB,SAAS,CAACqB,cAAc,GAAG;UAC9BC,OAAO,EAAEhB,KAAK,CAACgB,OAAO,IAAI,EAAE;UAC5BC,IAAI,EAAEjB,KAAK,CAACiB;QACd,CAAC,CAAC;QACF;QACA,IAAI,CAACV,OAAO,CAAC,CAAC;QACd;MACF,KAAK,YAAY;QACf,IAAI,CAACb,SAAS,CAACwB,YAAY,GAAG,CAAC;QAC/B;MACF,KAAK,SAAS;QACZ,IAAI,CAACxB,SAAS,CAACyB,SAAS,GAAG,CAAC;QAC5B;MACF,KAAK,QAAQ;QACX,IAAI,CAACzB,SAAS,CAAC0B,kBAAkB,GAAG;UAClCP,IAAI,EAAEb,KAAK,CAACqB,UAAU,IAAI,EAAE;UAC5BC,MAAM,EAAEtB,KAAK,CAACuB,YAAY,IAAI;QAChC,CAAC,CAAC;QACF;MACF,KAAK,WAAW;QACd,IAAI,CAAC7B,SAAS,CAAC8B,WAAW,GAAG,CAAC;QAC9B;QACA,IAAI,CAACjB,OAAO,CAAC,CAAC;QACd;IACJ;EACF;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeEzoicAds.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;;AAWlD;AACA;AACA;AACA;AACA;AACA;;AAoBA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,qBAAqB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeEzoicAds.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;;AAWlD;AACA;AACA;AACA;AACA;AACA;;AAsBA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,qBAAqB,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["normalizeConfig","config","domain","Error","out","autoReadConsent","undefined","subjectToCOPPA","requestATTBeforeAds","debugEnabled","testMode","normalizeSize","size","split","map","s","trim","filter","length","join","coerceAdUnitId","adUnitIdentifier","String","mapRewardResult","result","earned","type","amount"],"sourceRoot":"../../src","sources":["helpers.ts"],"mappings":";;AAEA,OAAO,SAASA,eAAeA,CAACC,MAAmB,EAAe;EAChE,IAAI,CAACA,MAAM,IAAI,CAACA,MAAM,CAACC,MAAM,EAAE;IAC7B,MAAM,IAAIC,KAAK,CAAC,oDAAoD,CAAC;EACvE;EACA,MAAMC,GAAgB,GAAG;IAAEF,MAAM,EAAED,MAAM,CAACC;EAAO,CAAC;EAClD,IAAID,MAAM,CAACI,eAAe,KAAKC,SAAS,EACtCF,GAAG,CAACC,eAAe,GAAGJ,MAAM,CAACI,eAAe;EAC9C,IAAIJ,MAAM,CAACM,cAAc,KAAKD,SAAS,EACrCF,GAAG,CAACG,cAAc,GAAGN,MAAM,CAACM,cAAc;EAC5C,IAAIN,MAAM,CAACO,mBAAmB,KAAKF,SAAS,EAC1CF,GAAG,CAACI,mBAAmB,GAAGP,MAAM,CAACO,mBAAmB;EACtD,IAAIP,MAAM,CAACQ,YAAY,KAAKH,SAAS,EAAEF,GAAG,CAACK,YAAY,GAAGR,MAAM,CAACQ,YAAY;EAC7E,IAAIR,MAAM,CAACS,QAAQ,KAAKJ,SAAS,EAAEF,GAAG,CAACM,QAAQ,GAAGT,MAAM,CAACS,QAAQ;EACjE,OAAON,GAAG;AACZ;AAEA,OAAO,SAASO,aAAaA,CAACC,IAAwB,EAAU;EAC9D,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE;EACpB,OAAOA,IAAI,CACRC,KAAK,CAAC,GAAG,CAAC,CACVC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC,CACpBC,MAAM,CAAEF,CAAC,IAAKA,CAAC,CAACG,MAAM,GAAG,CAAC,CAAC,CAC3BC,IAAI,CAAC,GAAG,CAAC;AACd;AAEA,OAAO,SAASC,cAAcA,CAACC,gBAAwB,EAAU;EAC/D,OAAOC,MAAM,CAACD,gBAAgB,CAAC;AACjC;AAQA;AACA;AACA;AACA;AACA,OAAO,SAASE,eAAeA,CAC7BC,MAA2C,EACF;EACzC,IAAIA,MAAM,IAAIA,MAAM,CAACC,MAAM,EAAE;IAC3B,OAAO;MAAEC,IAAI,EAAEF,MAAM,CAACE,IAAI;MAAEC,MAAM,EAAEH,MAAM,CAACG;IAAO,CAAC;EACrD;EACA,OAAO,IAAI;AACb","ignoreList":[]}
1
+ {"version":3,"names":["normalizeConfig","config","domain","Error","out","autoReadConsent","undefined","subjectToCOPPA","requestATTBeforeAds","debugEnabled","testMode","normalizeSize","size","split","map","s","trim","filter","length","join","coerceAdUnitId","adUnitIdentifier","String","mapRewardResult","result","earned","type","amount"],"sourceRoot":"../../src","sources":["helpers.ts"],"mappings":";;AAEA,OAAO,SAASA,eAAeA,CAACC,MAAmB,EAAe;EAChE,IAAI,CAACA,MAAM,IAAI,CAACA,MAAM,CAACC,MAAM,EAAE;IAC7B,MAAM,IAAIC,KAAK,CAAC,oDAAoD,CAAC;EACvE;EACA,MAAMC,GAAgB,GAAG;IAAEF,MAAM,EAAED,MAAM,CAACC;EAAO,CAAC;EAClD,IAAID,MAAM,CAACI,eAAe,KAAKC,SAAS,EACtCF,GAAG,CAACC,eAAe,GAAGJ,MAAM,CAACI,eAAe;EAC9C,IAAIJ,MAAM,CAACM,cAAc,KAAKD,SAAS,EACrCF,GAAG,CAACG,cAAc,GAAGN,MAAM,CAACM,cAAc;EAC5C,IAAIN,MAAM,CAACO,mBAAmB,KAAKF,SAAS,EAC1CF,GAAG,CAACI,mBAAmB,GAAGP,MAAM,CAACO,mBAAmB;EACtD,IAAIP,MAAM,CAACQ,YAAY,KAAKH,SAAS,EAAEF,GAAG,CAACK,YAAY,GAAGR,MAAM,CAACQ,YAAY;EAC7E,IAAIR,MAAM,CAACS,QAAQ,KAAKJ,SAAS,EAAEF,GAAG,CAACM,QAAQ,GAAGT,MAAM,CAACS,QAAQ;EACjE,OAAON,GAAG;AACZ;AAEA,OAAO,SAASO,aAAaA,CAACC,IAAwB,EAAU;EAC9D,IAAI,CAACA,IAAI,EAAE,OAAO,EAAE;EACpB,OAAOA,IAAI,CACRC,KAAK,CAAC,GAAG,CAAC,CACVC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC,CACpBC,MAAM,CAAEF,CAAC,IAAKA,CAAC,CAACG,MAAM,GAAG,CAAC,CAAC,CAC3BC,IAAI,CAAC,GAAG,CAAC;AACd;AAEA,OAAO,SAASC,cAAcA,CAACC,gBAAiC,EAAU;EACxE,OAAOC,MAAM,CAACD,gBAAgB,CAAC;AACjC;AAQA;AACA;AACA;AACA;AACA,OAAO,SAASE,eAAeA,CAC7BC,MAA2C,EACF;EACzC,IAAIA,MAAM,IAAIA,MAAM,CAACC,MAAM,EAAE;IAC3B,OAAO;MAAEC,IAAI,EAAEF,MAAM,CAACE,IAAI;MAAEC,MAAM,EAAEH,MAAM,CAACG;IAAO,CAAC;EACrD;EACA,OAAO,IAAI;AACb","ignoreList":[]}
@@ -2,9 +2,11 @@
2
2
 
3
3
  import NativeEzoicAds from "./NativeEzoicAds.js";
4
4
  import EzoicBannerNative from './EzoicBannerViewNativeComponent';
5
+ import EzoicNativeAdNative from './EzoicNativeAdViewNativeComponent';
5
6
  import { coerceAdUnitId, normalizeConfig, normalizeSize } from "./helpers.js";
6
7
  import { jsx as _jsx } from "react/jsx-runtime";
7
8
  export { EzoicRewardedAd } from "./EzoicRewardedAd.js";
9
+ export { EzoicInterstitialAd } from "./EzoicInterstitialAd.js";
8
10
  export const EzoicAds = {
9
11
  initialize(config) {
10
12
  return NativeEzoicAds.initialize(normalizeConfig(config));
@@ -46,4 +48,31 @@ export function EzoicBannerView(props) {
46
48
  onClose: onClose ? () => onClose() : undefined
47
49
  });
48
50
  }
51
+ /**
52
+ * Renders a native ad in an SDK-built template `NativeAdView`. The component
53
+ * fills the bounds it is given by its RN style, so size it with `style` (e.g.
54
+ * `{ width: '100%', height: 300 }`); the template lays out its assets inside.
55
+ */
56
+ export function EzoicNativeAdView(props) {
57
+ const {
58
+ adUnitIdentifier,
59
+ onLoad,
60
+ onError,
61
+ onImpression,
62
+ onClick,
63
+ onOpen,
64
+ onClose,
65
+ ...rest
66
+ } = props;
67
+ return /*#__PURE__*/_jsx(EzoicNativeAdNative, {
68
+ ...rest,
69
+ adUnitIdentifier: coerceAdUnitId(adUnitIdentifier),
70
+ onLoad: onLoad ? () => onLoad() : undefined,
71
+ onError: onError ? e => onError(e.nativeEvent) : undefined,
72
+ onImpression: onImpression ? () => onImpression() : undefined,
73
+ onAdClick: onClick ? () => onClick() : undefined,
74
+ onOpen: onOpen ? () => onOpen() : undefined,
75
+ onClose: onClose ? () => onClose() : undefined
76
+ });
77
+ }
49
78
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEzoicAds","EzoicBannerNative","coerceAdUnitId","normalizeConfig","normalizeSize","jsx","_jsx","EzoicRewardedAd","EzoicAds","initialize","config","setGDPRConsent","applies","consentString","setGPPConsent","gppString","sectionIds","setSubjectToCOPPA","value","trackPageview","EzoicBannerView","props","adUnitIdentifier","size","onLoad","onError","onImpression","onClick","onOpen","onClose","rest","undefined","e","nativeEvent","onAdClick"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AACA,OAAOA,cAAc,MAA4B,qBAAkB;AACnE,OAAOC,iBAAiB,MAAM,kCAAkC;AAChE,SAASC,cAAc,EAAEC,eAAe,EAAEC,aAAa,QAAQ,cAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG3E,SACEC,eAAe,QAGV,sBAAmB;AAE1B,OAAO,MAAMC,QAAQ,GAAG;EACtBC,UAAUA,CAACC,MAAmB,EAAiB;IAC7C,OAAOV,cAAc,CAACS,UAAU,CAACN,eAAe,CAACO,MAAM,CAAC,CAAC;EAC3D,CAAC;EACDC,cAAcA,CAACC,OAAgB,EAAEC,aAAsB,EAAQ;IAC7Db,cAAc,CAACW,cAAc,CAACC,OAAO,EAAEC,aAAa,CAAC;EACvD,CAAC;EACDC,aAAaA,CAACC,SAAkB,EAAEC,UAAmB,EAAQ;IAC3DhB,cAAc,CAACc,aAAa,CAACC,SAAS,EAAEC,UAAU,CAAC;EACrD,CAAC;EACDC,iBAAiBA,CAACC,KAAc,EAAQ;IACtClB,cAAc,CAACiB,iBAAiB,CAACC,KAAK,CAAC;EACzC,CAAC;EACDC,aAAaA,CAAA,EAAqB;IAChC,OAAOnB,cAAc,CAACmB,aAAa,CAAC,CAAC;EACvC;AACF,CAAC;AAmBD,OAAO,SAASC,eAAeA,CAACC,KAA2B,EAAE;EAC3D,MAAM;IACJC,gBAAgB;IAChBC,IAAI;IACJC,MAAM;IACNC,OAAO;IACPC,YAAY;IACZC,OAAO;IACPC,MAAM;IACNC,OAAO;IACP,GAAGC;EACL,CAAC,GAAGT,KAAK;EACT,oBACEf,IAAA,CAACL,iBAAiB;IAAA,GACZ6B,IAAI;IACRR,gBAAgB,EAAEpB,cAAc,CAACoB,gBAAgB,CAAE;IACnDC,IAAI,EAAEnB,aAAa,CAACmB,IAAI,CAAE;IAC1BC,MAAM,EAAEA,MAAM,GAAG,MAAMA,MAAM,CAAC,CAAC,GAAGO,SAAU;IAC5CN,OAAO,EAAEA,OAAO,GAAIO,CAAC,IAAKP,OAAO,CAACO,CAAC,CAACC,WAAW,CAAC,GAAGF,SAAU;IAC7DL,YAAY,EAAEA,YAAY,GAAG,MAAMA,YAAY,CAAC,CAAC,GAAGK,SAAU;IAC9DG,SAAS,EAAEP,OAAO,GAAG,MAAMA,OAAO,CAAC,CAAC,GAAGI,SAAU;IACjDH,MAAM,EAAEA,MAAM,GAAG,MAAMA,MAAM,CAAC,CAAC,GAAGG,SAAU;IAC5CF,OAAO,EAAEA,OAAO,GAAG,MAAMA,OAAO,CAAC,CAAC,GAAGE;EAAU,CAChD,CAAC;AAEN","ignoreList":[]}
1
+ {"version":3,"names":["NativeEzoicAds","EzoicBannerNative","EzoicNativeAdNative","coerceAdUnitId","normalizeConfig","normalizeSize","jsx","_jsx","EzoicRewardedAd","EzoicInterstitialAd","EzoicAds","initialize","config","setGDPRConsent","applies","consentString","setGPPConsent","gppString","sectionIds","setSubjectToCOPPA","value","trackPageview","EzoicBannerView","props","adUnitIdentifier","size","onLoad","onError","onImpression","onClick","onOpen","onClose","rest","undefined","e","nativeEvent","onAdClick","EzoicNativeAdView"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ /** Lifecycle callbacks for an interstitial ad. All are optional. */
2
+ export interface EzoicInterstitialAdListeners {
3
+ onShown?: () => void;
4
+ onFailedToShow?: (error: {
5
+ message: string;
6
+ code?: number;
7
+ }) => void;
8
+ onImpression?: () => void;
9
+ onClicked?: () => void;
10
+ onDismissed?: () => void;
11
+ }
12
+ /**
13
+ * An interstitial ad. Use the static `load` to fetch an ad ahead of time, then
14
+ * call `show()` to present it full-screen at a natural transition point.
15
+ * Interstitials carry no reward.
16
+ *
17
+ * ```ts
18
+ * const ad = await EzoicInterstitialAd.load('12345');
19
+ * ad.setListeners({ onDismissed: () => console.log('closed') });
20
+ * await ad.show();
21
+ * ```
22
+ *
23
+ * Mirrors the native `EzoicInterstitialAd` load/show lifecycle on both
24
+ * platforms. Interstitial ads are single-use — load a new one for the next
25
+ * opportunity.
26
+ */
27
+ export declare class EzoicInterstitialAd {
28
+ /** The Ezoic ad unit identifier this ad was loaded for. */
29
+ readonly adUnitIdentifier: string;
30
+ private listeners;
31
+ private subscription;
32
+ private constructor();
33
+ /**
34
+ * Loads an interstitial ad for the given Ezoic ad unit identifier. Resolves
35
+ * with a ready-to-show `EzoicInterstitialAd`, or rejects if no ad could be
36
+ * loaded.
37
+ */
38
+ static load(adUnitIdentifier: string): Promise<EzoicInterstitialAd>;
39
+ /** Registers lifecycle callbacks. Replaces any previously set listeners. */
40
+ setListeners(listeners: EzoicInterstitialAdListeners): void;
41
+ /**
42
+ * Presents the interstitial ad full-screen. Resolves when the ad is
43
+ * dismissed. Rejects if the ad was not ready (load first) or failed to
44
+ * present.
45
+ */
46
+ show(): Promise<void>;
47
+ /** Releases the event subscription. Safe to call multiple times. */
48
+ destroy(): void;
49
+ private handleEvent;
50
+ }
51
+ //# sourceMappingURL=EzoicInterstitialAd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EzoicInterstitialAd.d.ts","sourceRoot":"","sources":["../../../src/EzoicInterstitialAd.ts"],"names":[],"mappings":"AAIA,oEAAoE;AACpE,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAgBD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,mBAAmB;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO;IAYP;;;;OAIG;WACU,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAYzE,4EAA4E;IAC5E,YAAY,CAAC,SAAS,EAAE,4BAA4B,GAAG,IAAI;IAI3D;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,oEAAoE;IACpE,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,WAAW;CA0BpB"}
@@ -0,0 +1,18 @@
1
+ import type { CodegenTypes, HostComponent, ViewProps } from 'react-native';
2
+ type LoadEvent = Readonly<{}>;
3
+ type ErrorEvent = Readonly<{
4
+ message: string;
5
+ code: CodegenTypes.Int32;
6
+ }>;
7
+ export interface NativeProps extends ViewProps {
8
+ adUnitIdentifier: string;
9
+ onLoad?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
10
+ onError?: CodegenTypes.BubblingEventHandler<ErrorEvent> | null;
11
+ onImpression?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
12
+ onAdClick?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
13
+ onOpen?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
14
+ onClose?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
15
+ }
16
+ declare const _default: HostComponent<NativeProps>;
17
+ export default _default;
18
+ //# sourceMappingURL=EzoicNativeAdViewNativeComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EzoicNativeAdViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/EzoicNativeAdViewNativeComponent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3E,KAAK,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC9B,KAAK,UAAU,GAAG,QAAQ,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC,KAAK,CAAA;CAAE,CAAC,CAAC;AAE1E,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAC7D,OAAO,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IAC/D,YAAY,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAInE,SAAS,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAChE,MAAM,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAC7D,OAAO,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;CAC/D;wBAII,aAAa,CAAC,WAAW,CAAC;AAF/B,wBAEgC"}
@@ -8,6 +8,7 @@ export interface EzoicRewardedAdListeners {
8
8
  onShown?: () => void;
9
9
  onFailedToShow?: (error: {
10
10
  message: string;
11
+ code?: number;
11
12
  }) => void;
12
13
  onImpression?: () => void;
13
14
  onClicked?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"EzoicRewardedAd.d.ts","sourceRoot":"","sources":["../../../src/EzoicRewardedAd.ts"],"names":[],"mappings":"AAIA,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,+DAA+D;AAC/D,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACtD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CACpD;AAuBD;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO;IASP;;;OAGG;WACU,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAYrE,4EAA4E;IAC5E,YAAY,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI;IAIvD;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKzC,oEAAoE;IACpE,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,WAAW;CA2BpB"}
1
+ {"version":3,"file":"EzoicRewardedAd.d.ts","sourceRoot":"","sources":["../../../src/EzoicRewardedAd.ts"],"names":[],"mappings":"AAIA,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,+DAA+D;AAC/D,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;CACpD;AAwBD;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,YAAY,CAAoC;IAExD,OAAO;IASP;;;OAGG;WACU,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAYrE,4EAA4E;IAC5E,YAAY,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI;IAIvD;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAKzC,oEAAoE;IACpE,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,WAAW;CAgCpB"}
@@ -26,6 +26,8 @@ export interface Spec extends TurboModule {
26
26
  trackPageview(): Promise<boolean>;
27
27
  loadRewardedAd(adUnitIdentifier: string): Promise<void>;
28
28
  showRewardedAd(adUnitIdentifier: string): Promise<EzoicRewardResult>;
29
+ loadInterstitialAd(adUnitIdentifier: string): Promise<void>;
30
+ showInterstitialAd(adUnitIdentifier: string): Promise<void>;
29
31
  addListener(eventName: string): void;
30
32
  removeListeners(count: number): void;
31
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NativeEzoicAds.d.ts","sourceRoot":"","sources":["../../../src/NativeEzoicAds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7D,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAErE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;;AAED,wBAA6E"}
1
+ {"version":3,"file":"NativeEzoicAds.d.ts","sourceRoot":"","sources":["../../../src/NativeEzoicAds.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7D,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACxC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACrE,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;;AAED,wBAA6E"}
@@ -1,7 +1,7 @@
1
1
  import type { EzoicConfig } from './NativeEzoicAds.js';
2
2
  export declare function normalizeConfig(config: EzoicConfig): EzoicConfig;
3
3
  export declare function normalizeSize(size: string | undefined): string;
4
- export declare function coerceAdUnitId(adUnitIdentifier: string): string;
4
+ export declare function coerceAdUnitId(adUnitIdentifier: string | number): string;
5
5
  export interface RewardResultLike {
6
6
  earned: boolean;
7
7
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAkB,CAAC;AAEpD,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAchE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO9D;AAED,wBAAgB,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKzC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAkB,CAAC;AAEpD,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAchE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAO9D;AAED,wBAAgB,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAExE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKzC"}
@@ -2,6 +2,7 @@ import type { StyleProp, ViewStyle } from 'react-native';
2
2
  import { type EzoicConfig } from './NativeEzoicAds.js';
3
3
  export type { EzoicConfig };
4
4
  export { EzoicRewardedAd, type EzoicReward, type EzoicRewardedAdListeners, } from './EzoicRewardedAd.js';
5
+ export { EzoicInterstitialAd, type EzoicInterstitialAdListeners, } from './EzoicInterstitialAd.js';
5
6
  export declare const EzoicAds: {
6
7
  initialize(config: EzoicConfig): Promise<void>;
7
8
  setGDPRConsent(applies: boolean, consentString?: string): void;
@@ -25,4 +26,24 @@ export interface EzoicBannerViewProps {
25
26
  onClose?: () => void;
26
27
  }
27
28
  export declare function EzoicBannerView(props: EzoicBannerViewProps): import("react").JSX.Element;
29
+ export interface EzoicNativeAdError {
30
+ message: string;
31
+ code: number;
32
+ }
33
+ export interface EzoicNativeAdViewProps {
34
+ adUnitIdentifier: string | number;
35
+ style?: StyleProp<ViewStyle>;
36
+ onLoad?: () => void;
37
+ onError?: (error: EzoicNativeAdError) => void;
38
+ onImpression?: () => void;
39
+ onClick?: () => void;
40
+ onOpen?: () => void;
41
+ onClose?: () => void;
42
+ }
43
+ /**
44
+ * Renders a native ad in an SDK-built template `NativeAdView`. The component
45
+ * fills the bounds it is given by its RN style, so size it with `style` (e.g.
46
+ * `{ width: '100%', height: 300 }`); the template lays out its assets inside.
47
+ */
48
+ export declare function EzoicNativeAdView(props: EzoicNativeAdViewProps): import("react").JSX.Element;
28
49
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAuB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAkB,CAAC;AAIpE,YAAY,EAAE,WAAW,EAAE,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,wBAAwB,GAC9B,MAAM,sBAAmB,CAAC;AAE3B,eAAO,MAAM,QAAQ;uBACA,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;4BAGtB,OAAO,kBAAkB,MAAM,GAAG,IAAI;8BAGpC,MAAM,eAAe,MAAM,GAAG,IAAI;6BAGnC,OAAO,GAAG,IAAI;qBAGtB,OAAO,CAAC,OAAO,CAAC;CAGlC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,+BAyB1D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAuB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAkB,CAAC;AAKpE,YAAY,EAAE,WAAW,EAAE,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,wBAAwB,GAC9B,MAAM,sBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,KAAK,4BAA4B,GAClC,MAAM,0BAAuB,CAAC;AAE/B,eAAO,MAAM,QAAQ;uBACA,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;4BAGtB,OAAO,kBAAkB,MAAM,GAAG,IAAI;8BAGpC,MAAM,eAAe,MAAM,GAAG,IAAI;6BAGnC,OAAO,GAAG,IAAI;qBAGtB,OAAO,CAAC,OAAO,CAAC;CAGlC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,+BAyB1D;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,+BAuB9D"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ezoic/react-native-sdk",
3
- "version": "1.1.0",
4
- "description": "Ezoic Ads SDK for React Native (Prebid + Google Ad Manager banner and rewarded ads).",
3
+ "version": "1.3.0",
4
+ "description": "Ezoic Ads SDK for React Native (Prebid + Google Ad Manager banner, native, interstitial and rewarded ads).",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
7
7
  "exports": {
@@ -0,0 +1,126 @@
1
+ import { NativeEventEmitter, type EmitterSubscription } from 'react-native';
2
+ import NativeEzoicAds from './NativeEzoicAds';
3
+ import { coerceAdUnitId } from './helpers';
4
+
5
+ /** Lifecycle callbacks for an interstitial ad. All are optional. */
6
+ export interface EzoicInterstitialAdListeners {
7
+ onShown?: () => void;
8
+ onFailedToShow?: (error: { message: string; code?: number }) => void;
9
+ onImpression?: () => void;
10
+ onClicked?: () => void;
11
+ onDismissed?: () => void;
12
+ }
13
+
14
+ /** The single native event name carrying every interstitial lifecycle signal. */
15
+ const INTERSTITIAL_EVENT = 'EzoicInterstitialAdEvent';
16
+
17
+ interface InterstitialNativeEvent {
18
+ adUnitIdentifier: string;
19
+ type: 'shown' | 'failedToShow' | 'impression' | 'clicked' | 'dismissed';
20
+ message?: string;
21
+ code?: number;
22
+ }
23
+
24
+ // A single shared emitter is sufficient — events are routed to the right
25
+ // instance by adUnitIdentifier below.
26
+ const emitter = new NativeEventEmitter(NativeEzoicAds as never);
27
+
28
+ /**
29
+ * An interstitial ad. Use the static `load` to fetch an ad ahead of time, then
30
+ * call `show()` to present it full-screen at a natural transition point.
31
+ * Interstitials carry no reward.
32
+ *
33
+ * ```ts
34
+ * const ad = await EzoicInterstitialAd.load('12345');
35
+ * ad.setListeners({ onDismissed: () => console.log('closed') });
36
+ * await ad.show();
37
+ * ```
38
+ *
39
+ * Mirrors the native `EzoicInterstitialAd` load/show lifecycle on both
40
+ * platforms. Interstitial ads are single-use — load a new one for the next
41
+ * opportunity.
42
+ */
43
+ export class EzoicInterstitialAd {
44
+ /** The Ezoic ad unit identifier this ad was loaded for. */
45
+ readonly adUnitIdentifier: string;
46
+
47
+ private listeners: EzoicInterstitialAdListeners = {};
48
+ private subscription: EmitterSubscription | null = null;
49
+
50
+ private constructor(adUnitIdentifier: string) {
51
+ this.adUnitIdentifier = adUnitIdentifier;
52
+ this.subscription = emitter.addListener(
53
+ INTERSTITIAL_EVENT,
54
+ (raw: unknown) => {
55
+ const event = raw as InterstitialNativeEvent;
56
+ if (event.adUnitIdentifier !== this.adUnitIdentifier) return;
57
+ this.handleEvent(event);
58
+ }
59
+ );
60
+ }
61
+
62
+ /**
63
+ * Loads an interstitial ad for the given Ezoic ad unit identifier. Resolves
64
+ * with a ready-to-show `EzoicInterstitialAd`, or rejects if no ad could be
65
+ * loaded.
66
+ */
67
+ static async load(adUnitIdentifier: string): Promise<EzoicInterstitialAd> {
68
+ const id = coerceAdUnitId(adUnitIdentifier);
69
+ const ad = new EzoicInterstitialAd(id);
70
+ try {
71
+ await NativeEzoicAds.loadInterstitialAd(id);
72
+ return ad;
73
+ } catch (error) {
74
+ ad.destroy();
75
+ throw error;
76
+ }
77
+ }
78
+
79
+ /** Registers lifecycle callbacks. Replaces any previously set listeners. */
80
+ setListeners(listeners: EzoicInterstitialAdListeners): void {
81
+ this.listeners = listeners;
82
+ }
83
+
84
+ /**
85
+ * Presents the interstitial ad full-screen. Resolves when the ad is
86
+ * dismissed. Rejects if the ad was not ready (load first) or failed to
87
+ * present.
88
+ */
89
+ async show(): Promise<void> {
90
+ await NativeEzoicAds.showInterstitialAd(this.adUnitIdentifier);
91
+ }
92
+
93
+ /** Releases the event subscription. Safe to call multiple times. */
94
+ destroy(): void {
95
+ this.subscription?.remove();
96
+ this.subscription = null;
97
+ this.listeners = {};
98
+ }
99
+
100
+ private handleEvent(event: InterstitialNativeEvent): void {
101
+ switch (event.type) {
102
+ case 'shown':
103
+ this.listeners.onShown?.();
104
+ break;
105
+ case 'failedToShow':
106
+ this.listeners.onFailedToShow?.({
107
+ message: event.message ?? '',
108
+ code: event.code,
109
+ });
110
+ // Failure to show is terminal — the native ad is single-use.
111
+ this.destroy();
112
+ break;
113
+ case 'impression':
114
+ this.listeners.onImpression?.();
115
+ break;
116
+ case 'clicked':
117
+ this.listeners.onClicked?.();
118
+ break;
119
+ case 'dismissed':
120
+ this.listeners.onDismissed?.();
121
+ // Dismissal is terminal — the native ad is single-use.
122
+ this.destroy();
123
+ break;
124
+ }
125
+ }
126
+ }
@@ -0,0 +1,22 @@
1
+ import { codegenNativeComponent } from 'react-native';
2
+ import type { CodegenTypes, HostComponent, ViewProps } from 'react-native';
3
+
4
+ type LoadEvent = Readonly<{}>;
5
+ type ErrorEvent = Readonly<{ message: string; code: CodegenTypes.Int32 }>;
6
+
7
+ export interface NativeProps extends ViewProps {
8
+ adUnitIdentifier: string;
9
+ onLoad?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
10
+ onError?: CodegenTypes.BubblingEventHandler<ErrorEvent> | null;
11
+ onImpression?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
12
+ // `onClick` is reserved by core ViewProps (a gesture handler), so the native
13
+ // native-ad-click event is exposed as `onAdClick`. The public
14
+ // `EzoicNativeAdView` component maps the user-facing `onClick` prop onto this.
15
+ onAdClick?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
16
+ onOpen?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
17
+ onClose?: CodegenTypes.BubblingEventHandler<LoadEvent> | null;
18
+ }
19
+
20
+ export default codegenNativeComponent<NativeProps>(
21
+ 'EzoicNativeAdView'
22
+ ) as HostComponent<NativeProps>;
@@ -11,7 +11,7 @@ export interface EzoicReward {
11
11
  /** Lifecycle callbacks for a rewarded ad. All are optional. */
12
12
  export interface EzoicRewardedAdListeners {
13
13
  onShown?: () => void;
14
- onFailedToShow?: (error: { message: string }) => void;
14
+ onFailedToShow?: (error: { message: string; code?: number }) => void;
15
15
  onImpression?: () => void;
16
16
  onClicked?: () => void;
17
17
  onDismissed?: () => void;
@@ -31,6 +31,7 @@ interface RewardedNativeEvent {
31
31
  | 'dismissed'
32
32
  | 'reward';
33
33
  message?: string;
34
+ code?: number;
34
35
  rewardType?: string;
35
36
  rewardAmount?: number;
36
37
  }
@@ -113,7 +114,12 @@ export class EzoicRewardedAd {
113
114
  this.listeners.onShown?.();
114
115
  break;
115
116
  case 'failedToShow':
116
- this.listeners.onFailedToShow?.({ message: event.message ?? '' });
117
+ this.listeners.onFailedToShow?.({
118
+ message: event.message ?? '',
119
+ code: event.code,
120
+ });
121
+ // Failure to show is terminal — the native ad is single-use.
122
+ this.destroy();
117
123
  break;
118
124
  case 'impression':
119
125
  this.listeners.onImpression?.();
@@ -30,7 +30,9 @@ export interface Spec extends TurboModule {
30
30
  trackPageview(): Promise<boolean>;
31
31
  loadRewardedAd(adUnitIdentifier: string): Promise<void>;
32
32
  showRewardedAd(adUnitIdentifier: string): Promise<EzoicRewardResult>;
33
- // Required by NativeEventEmitter for the rewarded ad lifecycle events.
33
+ loadInterstitialAd(adUnitIdentifier: string): Promise<void>;
34
+ showInterstitialAd(adUnitIdentifier: string): Promise<void>;
35
+ // Required by NativeEventEmitter for the ad lifecycle events.
34
36
  addListener(eventName: string): void;
35
37
  removeListeners(count: number): void;
36
38
  }
package/src/helpers.ts CHANGED
@@ -25,7 +25,7 @@ export function normalizeSize(size: string | undefined): string {
25
25
  .join(',');
26
26
  }
27
27
 
28
- export function coerceAdUnitId(adUnitIdentifier: string): string {
28
+ export function coerceAdUnitId(adUnitIdentifier: string | number): string {
29
29
  return String(adUnitIdentifier);
30
30
  }
31
31