novvy-ads-react-native 1.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 (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +210 -0
  3. package/android/build.gradle +84 -0
  4. package/android/gradle.properties +4 -0
  5. package/android/src/main/AndroidManifest.xml +4 -0
  6. package/android/src/main/java/ai/novvy/reactnative/NovvyAdContainerView.kt +63 -0
  7. package/android/src/main/java/ai/novvy/reactnative/NovvyAdsModule.kt +390 -0
  8. package/android/src/main/java/ai/novvy/reactnative/NovvyAdsPackage.kt +46 -0
  9. package/android/src/main/java/ai/novvy/reactnative/NovvyPauseAdViewManager.kt +68 -0
  10. package/android/src/main/java/ai/novvy/reactnative/NovvyScrollAdViewManager.kt +72 -0
  11. package/android/src/main/java/ai/novvy/reactnative/RnPlayerAdapter.kt +18 -0
  12. package/android/src/main/java/ai/novvy/reactnative/ViewReadyEvent.kt +26 -0
  13. package/app.plugin.js +4 -0
  14. package/ios/NovvyAds.mm +168 -0
  15. package/ios/NovvyAdsImpl.swift +409 -0
  16. package/ios/NovvyPauseAdView.mm +79 -0
  17. package/ios/NovvyScrollAdView.mm +80 -0
  18. package/ios/RnPlayerAdapter.swift +14 -0
  19. package/lib/commonjs/NovvyAds.js +87 -0
  20. package/lib/commonjs/NovvyAds.js.map +1 -0
  21. package/lib/commonjs/ads/NovvyAd.js +121 -0
  22. package/lib/commonjs/ads/NovvyAd.js.map +1 -0
  23. package/lib/commonjs/ads/NovvyEndAd.js +19 -0
  24. package/lib/commonjs/ads/NovvyEndAd.js.map +1 -0
  25. package/lib/commonjs/ads/NovvyFullScreenAd.js +49 -0
  26. package/lib/commonjs/ads/NovvyFullScreenAd.js.map +1 -0
  27. package/lib/commonjs/ads/NovvyInterstitialAd.js +19 -0
  28. package/lib/commonjs/ads/NovvyInterstitialAd.js.map +1 -0
  29. package/lib/commonjs/ads/NovvyMidAd.js +19 -0
  30. package/lib/commonjs/ads/NovvyMidAd.js.map +1 -0
  31. package/lib/commonjs/ads/NovvyPauseAd.js +116 -0
  32. package/lib/commonjs/ads/NovvyPauseAd.js.map +1 -0
  33. package/lib/commonjs/ads/NovvyRewardedAd.js +53 -0
  34. package/lib/commonjs/ads/NovvyRewardedAd.js.map +1 -0
  35. package/lib/commonjs/ads/NovvyScrollAd.js +136 -0
  36. package/lib/commonjs/ads/NovvyScrollAd.js.map +1 -0
  37. package/lib/commonjs/eventBus.js +60 -0
  38. package/lib/commonjs/eventBus.js.map +1 -0
  39. package/lib/commonjs/index.js +90 -0
  40. package/lib/commonjs/index.js.map +1 -0
  41. package/lib/commonjs/package.json +1 -0
  42. package/lib/commonjs/spec/NativeNovvyAds.js +27 -0
  43. package/lib/commonjs/spec/NativeNovvyAds.js.map +1 -0
  44. package/lib/commonjs/spec/NovvyPauseAdViewNativeComponent.js +16 -0
  45. package/lib/commonjs/spec/NovvyPauseAdViewNativeComponent.js.map +1 -0
  46. package/lib/commonjs/spec/NovvyScrollAdViewNativeComponent.js +17 -0
  47. package/lib/commonjs/spec/NovvyScrollAdViewNativeComponent.js.map +1 -0
  48. package/lib/commonjs/spec/codegen-event-emitter.d.js +2 -0
  49. package/lib/commonjs/spec/codegen-event-emitter.d.js.map +1 -0
  50. package/lib/commonjs/types.js +54 -0
  51. package/lib/commonjs/types.js.map +1 -0
  52. package/lib/commonjs/views/NovvyPauseAdView.js +76 -0
  53. package/lib/commonjs/views/NovvyPauseAdView.js.map +1 -0
  54. package/lib/commonjs/views/NovvyScrollAdView.js +63 -0
  55. package/lib/commonjs/views/NovvyScrollAdView.js.map +1 -0
  56. package/lib/module/NovvyAds.js +83 -0
  57. package/lib/module/NovvyAds.js.map +1 -0
  58. package/lib/module/ads/NovvyAd.js +117 -0
  59. package/lib/module/ads/NovvyAd.js.map +1 -0
  60. package/lib/module/ads/NovvyEndAd.js +15 -0
  61. package/lib/module/ads/NovvyEndAd.js.map +1 -0
  62. package/lib/module/ads/NovvyFullScreenAd.js +45 -0
  63. package/lib/module/ads/NovvyFullScreenAd.js.map +1 -0
  64. package/lib/module/ads/NovvyInterstitialAd.js +15 -0
  65. package/lib/module/ads/NovvyInterstitialAd.js.map +1 -0
  66. package/lib/module/ads/NovvyMidAd.js +15 -0
  67. package/lib/module/ads/NovvyMidAd.js.map +1 -0
  68. package/lib/module/ads/NovvyPauseAd.js +112 -0
  69. package/lib/module/ads/NovvyPauseAd.js.map +1 -0
  70. package/lib/module/ads/NovvyRewardedAd.js +49 -0
  71. package/lib/module/ads/NovvyRewardedAd.js.map +1 -0
  72. package/lib/module/ads/NovvyScrollAd.js +132 -0
  73. package/lib/module/ads/NovvyScrollAd.js.map +1 -0
  74. package/lib/module/eventBus.js +55 -0
  75. package/lib/module/eventBus.js.map +1 -0
  76. package/lib/module/index.js +22 -0
  77. package/lib/module/index.js.map +1 -0
  78. package/lib/module/package.json +1 -0
  79. package/lib/module/spec/NativeNovvyAds.js +28 -0
  80. package/lib/module/spec/NativeNovvyAds.js.map +1 -0
  81. package/lib/module/spec/NovvyPauseAdViewNativeComponent.js +13 -0
  82. package/lib/module/spec/NovvyPauseAdViewNativeComponent.js.map +1 -0
  83. package/lib/module/spec/NovvyScrollAdViewNativeComponent.js +14 -0
  84. package/lib/module/spec/NovvyScrollAdViewNativeComponent.js.map +1 -0
  85. package/lib/module/spec/codegen-event-emitter.d.js +2 -0
  86. package/lib/module/spec/codegen-event-emitter.d.js.map +1 -0
  87. package/lib/module/types.js +56 -0
  88. package/lib/module/types.js.map +1 -0
  89. package/lib/module/views/NovvyPauseAdView.js +70 -0
  90. package/lib/module/views/NovvyPauseAdView.js.map +1 -0
  91. package/lib/module/views/NovvyScrollAdView.js +57 -0
  92. package/lib/module/views/NovvyScrollAdView.js.map +1 -0
  93. package/lib/typescript/NovvyAds.d.ts +69 -0
  94. package/lib/typescript/NovvyAds.d.ts.map +1 -0
  95. package/lib/typescript/ads/NovvyAd.d.ts +57 -0
  96. package/lib/typescript/ads/NovvyAd.d.ts.map +1 -0
  97. package/lib/typescript/ads/NovvyEndAd.d.ts +7 -0
  98. package/lib/typescript/ads/NovvyEndAd.d.ts.map +1 -0
  99. package/lib/typescript/ads/NovvyFullScreenAd.d.ts +19 -0
  100. package/lib/typescript/ads/NovvyFullScreenAd.d.ts.map +1 -0
  101. package/lib/typescript/ads/NovvyInterstitialAd.d.ts +7 -0
  102. package/lib/typescript/ads/NovvyInterstitialAd.d.ts.map +1 -0
  103. package/lib/typescript/ads/NovvyMidAd.d.ts +7 -0
  104. package/lib/typescript/ads/NovvyMidAd.d.ts.map +1 -0
  105. package/lib/typescript/ads/NovvyPauseAd.d.ts +45 -0
  106. package/lib/typescript/ads/NovvyPauseAd.d.ts.map +1 -0
  107. package/lib/typescript/ads/NovvyRewardedAd.d.ts +19 -0
  108. package/lib/typescript/ads/NovvyRewardedAd.d.ts.map +1 -0
  109. package/lib/typescript/ads/NovvyScrollAd.d.ts +57 -0
  110. package/lib/typescript/ads/NovvyScrollAd.d.ts.map +1 -0
  111. package/lib/typescript/eventBus.d.ts +15 -0
  112. package/lib/typescript/eventBus.d.ts.map +1 -0
  113. package/lib/typescript/index.d.ts +15 -0
  114. package/lib/typescript/index.d.ts.map +1 -0
  115. package/lib/typescript/spec/NativeNovvyAds.d.ts +73 -0
  116. package/lib/typescript/spec/NativeNovvyAds.d.ts.map +1 -0
  117. package/lib/typescript/spec/NovvyPauseAdViewNativeComponent.d.ts +18 -0
  118. package/lib/typescript/spec/NovvyPauseAdViewNativeComponent.d.ts.map +1 -0
  119. package/lib/typescript/spec/NovvyScrollAdViewNativeComponent.d.ts +19 -0
  120. package/lib/typescript/spec/NovvyScrollAdViewNativeComponent.d.ts.map +1 -0
  121. package/lib/typescript/types.d.ts +77 -0
  122. package/lib/typescript/types.d.ts.map +1 -0
  123. package/lib/typescript/views/NovvyPauseAdView.d.ts +21 -0
  124. package/lib/typescript/views/NovvyPauseAdView.d.ts.map +1 -0
  125. package/lib/typescript/views/NovvyScrollAdView.d.ts +22 -0
  126. package/lib/typescript/views/NovvyScrollAdView.d.ts.map +1 -0
  127. package/novvy-ads-react-native.podspec +71 -0
  128. package/package.json +84 -0
  129. package/plugin/build/index.d.ts +11 -0
  130. package/plugin/build/index.js +53 -0
  131. package/react-native.config.js +7 -0
  132. package/src/NovvyAds.ts +98 -0
  133. package/src/ads/NovvyAd.ts +125 -0
  134. package/src/ads/NovvyEndAd.ts +13 -0
  135. package/src/ads/NovvyFullScreenAd.ts +46 -0
  136. package/src/ads/NovvyInterstitialAd.ts +13 -0
  137. package/src/ads/NovvyMidAd.ts +13 -0
  138. package/src/ads/NovvyPauseAd.ts +125 -0
  139. package/src/ads/NovvyRewardedAd.ts +49 -0
  140. package/src/ads/NovvyScrollAd.ts +138 -0
  141. package/src/eventBus.ts +59 -0
  142. package/src/index.tsx +29 -0
  143. package/src/spec/NativeNovvyAds.ts +134 -0
  144. package/src/spec/NovvyPauseAdViewNativeComponent.ts +20 -0
  145. package/src/spec/NovvyScrollAdViewNativeComponent.ts +21 -0
  146. package/src/spec/codegen-event-emitter.d.ts +10 -0
  147. package/src/types.ts +82 -0
  148. package/src/views/NovvyPauseAdView.tsx +80 -0
  149. package/src/views/NovvyScrollAdView.tsx +71 -0
@@ -0,0 +1,80 @@
1
+ #import "NovvyAdsReactNative-Swift.h"
2
+
3
+ #import <React/RCTViewComponentView.h>
4
+ #import <react/renderer/components/NovvyAdsSpec/ComponentDescriptors.h>
5
+ #import <react/renderer/components/NovvyAdsSpec/EventEmitters.h>
6
+ #import <react/renderer/components/NovvyAdsSpec/Props.h>
7
+ #import <react/renderer/components/NovvyAdsSpec/RCTComponentViewHelpers.h>
8
+
9
+ using namespace facebook::react;
10
+
11
+ /**
12
+ * Fabric component for the inline scroll (feed) ad container.
13
+ *
14
+ * Registers a black-backed container with `NovvyAdsImpl` keyed by `adObjectId`,
15
+ * then fires `onViewReady` so JS issues `attachScrollAd`. Mirrors the Flutter
16
+ * plugin's `NovvyScrollPlatformView`.
17
+ */
18
+ @interface NovvyScrollAdView : RCTViewComponentView
19
+ @end
20
+
21
+ @implementation NovvyScrollAdView {
22
+ UIView *_container;
23
+ NSString *_adObjectId;
24
+ // Fabric calls `updateProps` BEFORE `updateEventEmitter`, so the emitter is
25
+ // nil at the moment we learn the adObjectId. Buffer the ready-emit and fire
26
+ // it from `finalizeUpdates:`, which runs after both are set.
27
+ BOOL _viewReadyPending;
28
+ }
29
+
30
+ + (ComponentDescriptorProvider)componentDescriptorProvider {
31
+ return concreteComponentDescriptorProvider<NovvyScrollAdViewComponentDescriptor>();
32
+ }
33
+
34
+ - (instancetype)initWithFrame:(CGRect)frame {
35
+ if (self = [super initWithFrame:frame]) {
36
+ static const auto defaultProps = std::make_shared<const NovvyScrollAdViewProps>();
37
+ _props = defaultProps;
38
+ _container = [[UIView alloc] initWithFrame:self.bounds];
39
+ _container.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
40
+ // Opaque black backdrop until the video decodes its first frame.
41
+ _container.backgroundColor = UIColor.blackColor;
42
+ self.contentView = _container;
43
+ }
44
+ return self;
45
+ }
46
+
47
+ - (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps {
48
+ const auto &newProps = *std::static_pointer_cast<const NovvyScrollAdViewProps>(props);
49
+ NSString *adObjectId = [NSString stringWithUTF8String:newProps.adObjectId.c_str()];
50
+ if (adObjectId.length > 0 && ![adObjectId isEqualToString:_adObjectId]) {
51
+ _adObjectId = adObjectId;
52
+ [NovvyAdsImpl.shared registerScrollContainerWithAdObjectId:adObjectId container:_container];
53
+ _viewReadyPending = YES;
54
+ }
55
+ [super updateProps:props oldProps:oldProps];
56
+ }
57
+
58
+ - (void)finalizeUpdates:(RNComponentViewUpdateMask)updateMask {
59
+ [super finalizeUpdates:updateMask];
60
+ if (_viewReadyPending && _eventEmitter && _adObjectId.length > 0) {
61
+ _viewReadyPending = NO;
62
+ auto emitter = std::static_pointer_cast<const NovvyScrollAdViewEventEmitter>(_eventEmitter);
63
+ emitter->onViewReady({.adObjectId = std::string(_adObjectId.UTF8String)});
64
+ }
65
+ }
66
+
67
+ - (void)prepareForRecycle {
68
+ if (_adObjectId != nil) {
69
+ [NovvyAdsImpl.shared onScrollViewDisposedWithAdObjectId:_adObjectId];
70
+ _adObjectId = nil;
71
+ }
72
+ _viewReadyPending = NO;
73
+ [super prepareForRecycle];
74
+ }
75
+
76
+ @end
77
+
78
+ Class<RCTComponentViewProtocol> NovvyScrollAdViewCls(void) {
79
+ return NovvyScrollAdView.class;
80
+ }
@@ -0,0 +1,14 @@
1
+ import Foundation
2
+ import NovvyAds
3
+
4
+ /**
5
+ * A `NovvyPlayerAdapter` whose state is pushed from JS via TurboModule calls.
6
+ *
7
+ * The SDK's PlaybackMonitor polls this adapter; JS pushes updated values at
8
+ * ~500ms cadence via `updatePauseAdPlayerState`. Mirrors the Flutter plugin's
9
+ * `FlutterPlayerAdapter`.
10
+ */
11
+ final class RnPlayerAdapter: NovvyPlayerAdapter {
12
+ var currentPositionMs: Int64 = 0
13
+ var isPlaying: Bool = false
14
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyAds = void 0;
7
+ var _jsSha = require("js-sha256");
8
+ var _eventBus = require("./eventBus");
9
+ /**
10
+ * SDK entry point for Novvy Ads.
11
+ *
12
+ * A **thin** surface — it only wraps the native SDK's top-level entry (init +
13
+ * user/content context + email hashing). Ads themselves are created and driven
14
+ * directly through their classes ({@link NovvyInterstitialAd},
15
+ * {@link NovvyRewardedAd}, {@link NovvyMidAd}, {@link NovvyEndAd},
16
+ * {@link NovvyScrollAd}, {@link NovvyPauseAd}); the host owns each instance and
17
+ * wires its per-ad callbacks. Mirrors the Flutter plugin's `NovvyAds`.
18
+ *
19
+ * ```ts
20
+ * // 1. Initialize once at app startup (optionally with a user profile).
21
+ * const ok = await NovvyAds.initialize({
22
+ * appId: '...', endpoint: '...', apiKey: '...',
23
+ * userContext: { userId: '...', isPaidUser: true },
24
+ * });
25
+ *
26
+ * // 2. Set / refresh content context (and user profile if not set above).
27
+ * NovvyAds.setContentContext({ seriesName: '...', episodeNumber: 1 });
28
+ *
29
+ * // 3. Create an ad, wire callbacks, load & show.
30
+ * const ad = new NovvyRewardedAd('...');
31
+ * let earned = false;
32
+ * ad.onAdLoaded = () => ad.show();
33
+ * ad.onUserEarnedReward = () => { earned = true; };
34
+ * ad.onAdDismissed = () => { if (earned) grantReward(); };
35
+ * ad.onAdFailedToLoad = () => {};
36
+ * ad.load();
37
+ * ```
38
+ */
39
+ const NovvyAds = exports.NovvyAds = {
40
+ /**
41
+ * Initialize the Novvy SDK. Must be called before creating any ads.
42
+ *
43
+ * Resolves with the native init-complete signal — `true` on success, `false`
44
+ * if initialization failed. May be called again (e.g. after login/logout);
45
+ * the native SDK handles re-initialization idempotently.
46
+ *
47
+ * @param userContext optional user-targeting context applied at init time
48
+ * (equivalent to calling {@link setUserContext} right after).
49
+ */
50
+ async initialize(options) {
51
+ try {
52
+ return await _eventBus.Native.initialize(options.appId, options.endpoint, options.apiKey, options.userContext ?? null);
53
+ } catch {
54
+ return false;
55
+ }
56
+ },
57
+ /**
58
+ * Hashes an email address using SHA-256 for privacy compliance. Use before
59
+ * passing an email to {@link NovvyUserContext.hashedEmail}. Pure JS — mirrors
60
+ * the native SDK's `helperHashEmail()`.
61
+ */
62
+ helperHashEmail(email) {
63
+ return (0, _jsSha.sha256)(email.trim().toLowerCase());
64
+ },
65
+ /** Replaces the entire user context (null fields clear existing values). */
66
+ setUserContext(context) {
67
+ _eventBus.Native.setUserContext(context);
68
+ },
69
+ /** Incrementally merges user context fields (null fields preserve existing values). */
70
+ updateUserContext(partial) {
71
+ _eventBus.Native.updateUserContext(partial);
72
+ },
73
+ /**
74
+ * Replaces the entire content context (null fields clear existing values).
75
+ *
76
+ * Call before each `load()` / `attach()` in drama scenarios — the backend
77
+ * needs the current series/episode or it returns no fill.
78
+ */
79
+ setContentContext(context) {
80
+ _eventBus.Native.setContentContext(context);
81
+ },
82
+ /** Incrementally merges content context fields (null fields preserve existing values). */
83
+ updateContentContext(partial) {
84
+ _eventBus.Native.updateContentContext(partial);
85
+ }
86
+ };
87
+ //# sourceMappingURL=NovvyAds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_jsSha","require","_eventBus","NovvyAds","exports","initialize","options","Native","appId","endpoint","apiKey","userContext","helperHashEmail","email","sha256","trim","toLowerCase","setUserContext","context","updateUserContext","partial","setContentContext","updateContentContext"],"sourceRoot":"../../src","sources":["NovvyAds.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAD,OAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAG;EACtB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAME,UAAUA,CAACC,OAKhB,EAAoB;IACnB,IAAI;MACF,OAAO,MAAMC,gBAAM,CAACF,UAAU,CAC5BC,OAAO,CAACE,KAAK,EACbF,OAAO,CAACG,QAAQ,EAChBH,OAAO,CAACI,MAAM,EACdJ,OAAO,CAACK,WAAW,IAAI,IACzB,CAAC;IACH,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF,CAAC;EAED;AACF;AACA;AACA;AACA;EACEC,eAAeA,CAACC,KAAa,EAAU;IACrC,OAAO,IAAAC,aAAM,EAACD,KAAK,CAACE,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,CAAC;EAC3C,CAAC;EAED;EACAC,cAAcA,CAACC,OAAyB,EAAQ;IAC9CX,gBAAM,CAACU,cAAc,CAACC,OAAO,CAAC;EAChC,CAAC;EAED;EACAC,iBAAiBA,CAACC,OAAyB,EAAQ;IACjDb,gBAAM,CAACY,iBAAiB,CAACC,OAAO,CAAC;EACnC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,iBAAiBA,CAACH,OAA4B,EAAQ;IACpDX,gBAAM,CAACc,iBAAiB,CAACH,OAAO,CAAC;EACnC,CAAC;EAED;EACAI,oBAAoBA,CAACF,OAA4B,EAAQ;IACvDb,gBAAM,CAACe,oBAAoB,CAACF,OAAO,CAAC;EACtC;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyAd = void 0;
7
+ var _eventBus = require("../eventBus");
8
+ var _types = require("../types");
9
+ /**
10
+ * Base class for all Novvy ad types.
11
+ *
12
+ * Mirrors the Flutter plugin's `NovvyAd` (lib/novvy_ads_plugin.dart).
13
+ * Instances are owned by the host: keep a reference alive until the ad
14
+ * completes (`onAdDismissed` / `onAdHidden`) and then call {@link destroy}.
15
+ */
16
+ class NovvyAd {
17
+ _isReady = false;
18
+ _disposed = false;
19
+ _unsubscribe = null;
20
+
21
+ /** Called when the ad has loaded successfully. */
22
+
23
+ /** Called when the ad fails to load / request. */
24
+
25
+ constructor(adUnitId) {
26
+ this.adUnitId = adUnitId;
27
+ this._adObjectId = NovvyAd._generateUniqueId();
28
+ }
29
+
30
+ /** The unique object ID for this ad instance. */
31
+ get adObjectId() {
32
+ return this._adObjectId;
33
+ }
34
+
35
+ /** Whether the ad is loaded and ready to show. */
36
+ get isReady() {
37
+ return this._isReady;
38
+ }
39
+
40
+ /**
41
+ * Subscribes to this ad's native event stream (filtered by object ID).
42
+ * Idempotent.
43
+ */
44
+ _subscribe() {
45
+ if (this._unsubscribe) {
46
+ return;
47
+ }
48
+ this._unsubscribe = (0, _eventBus.subscribe)(this._adObjectId, event => this._handleInternalEvent(event));
49
+ }
50
+
51
+ /**
52
+ * Loads the ad. Not used by {@link NovvyPauseAd} (realtime, no load step).
53
+ *
54
+ * Callback-driven: the outcome is delivered via {@link onAdLoaded} /
55
+ * {@link onAdFailedToLoad}.
56
+ */
57
+ load() {
58
+ if (this._isReady || this._disposed) {
59
+ return;
60
+ }
61
+ this._subscribe();
62
+ try {
63
+ this._loadNative();
64
+ } catch (e) {
65
+ this.onAdFailedToLoad?.(String(e));
66
+ this.destroy();
67
+ }
68
+ }
69
+
70
+ /** Releases the ad resources. Idempotent. */
71
+ destroy() {
72
+ if (this._disposed) {
73
+ return;
74
+ }
75
+ this._disposed = true;
76
+ this._unsubscribe?.();
77
+ this._unsubscribe = null;
78
+ _eventBus.Native.disposeAd(this._adObjectId);
79
+ }
80
+
81
+ // Abstract members
82
+
83
+ /**
84
+ * Shared handling of the common load / fail transitions.
85
+ * Returns true if the event was consumed here.
86
+ */
87
+ _handleCommonLoad(event) {
88
+ switch (event.event) {
89
+ case _types.NovvyAdEvent.Loaded:
90
+ this._isReady = true;
91
+ this.onAdLoaded?.();
92
+ return true;
93
+ case _types.NovvyAdEvent.FailedToLoad:
94
+ this._isReady = false;
95
+ this.onAdFailedToLoad?.(event.error ?? 'Unknown error');
96
+ this.destroy();
97
+ return true;
98
+ default:
99
+ return false;
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Monotonically increasing per-process counter guaranteeing `adObjectId`
105
+ * uniqueness even when many ads are constructed within the same millisecond
106
+ * (e.g. batch-preloading feed items in a synchronous loop). `Date.now()` has
107
+ * only millisecond resolution, so timestamp + random alone left a real
108
+ * (~1/10000 per pair) collision window; a colliding id would cross-wire two
109
+ * ads' event streams. The counter closes that window; the timestamp/random
110
+ * still disambiguate ids across separate app launches.
111
+ */
112
+ static _counter = 0;
113
+ static _generateUniqueId() {
114
+ const timestamp = Date.now();
115
+ const random = Math.floor(Math.random() * 10000);
116
+ const seq = NovvyAd._counter++;
117
+ return `ad_${timestamp}_${random}_${seq}`;
118
+ }
119
+ }
120
+ exports.NovvyAd = NovvyAd;
121
+ //# sourceMappingURL=NovvyAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_eventBus","require","_types","NovvyAd","_isReady","_disposed","_unsubscribe","constructor","adUnitId","_adObjectId","_generateUniqueId","adObjectId","isReady","_subscribe","subscribe","event","_handleInternalEvent","load","_loadNative","e","onAdFailedToLoad","String","destroy","Native","disposeAd","_handleCommonLoad","NovvyAdEvent","Loaded","onAdLoaded","FailedToLoad","error","_counter","timestamp","Date","now","random","Math","floor","seq","exports"],"sourceRoot":"../../../src","sources":["ads/NovvyAd.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAeE,OAAO,CAAC;EAIlBC,QAAQ,GAAG,KAAK;EAChBC,SAAS,GAAG,KAAK;EAEnBC,YAAY,GAAwB,IAAI;;EAEhD;;EAEA;;EAGAC,WAAWA,CAACC,QAAgB,EAAE;IAC5B,IAAI,CAACA,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,WAAW,GAAGN,OAAO,CAACO,iBAAiB,CAAC,CAAC;EAChD;;EAEA;EACA,IAAIC,UAAUA,CAAA,EAAW;IACvB,OAAO,IAAI,CAACF,WAAW;EACzB;;EAEA;EACA,IAAIG,OAAOA,CAAA,EAAY;IACrB,OAAO,IAAI,CAACR,QAAQ;EACtB;;EAEA;AACF;AACA;AACA;EACYS,UAAUA,CAAA,EAAS;IAC3B,IAAI,IAAI,CAACP,YAAY,EAAE;MACrB;IACF;IACA,IAAI,CAACA,YAAY,GAAG,IAAAQ,mBAAS,EAAC,IAAI,CAACL,WAAW,EAAGM,KAAK,IACpD,IAAI,CAACC,oBAAoB,CAACD,KAAK,CACjC,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACEE,IAAIA,CAAA,EAAS;IACX,IAAI,IAAI,CAACb,QAAQ,IAAI,IAAI,CAACC,SAAS,EAAE;MACnC;IACF;IACA,IAAI,CAACQ,UAAU,CAAC,CAAC;IACjB,IAAI;MACF,IAAI,CAACK,WAAW,CAAC,CAAC;IACpB,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV,IAAI,CAACC,gBAAgB,GAAGC,MAAM,CAACF,CAAC,CAAC,CAAC;MAClC,IAAI,CAACG,OAAO,CAAC,CAAC;IAChB;EACF;;EAEA;EACAA,OAAOA,CAAA,EAAS;IACd,IAAI,IAAI,CAACjB,SAAS,EAAE;MAClB;IACF;IACA,IAAI,CAACA,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,YAAY,GAAG,CAAC;IACrB,IAAI,CAACA,YAAY,GAAG,IAAI;IACxBiB,gBAAM,CAACC,SAAS,CAAC,IAAI,CAACf,WAAW,CAAC;EACpC;;EAEA;;EAIA;AACF;AACA;AACA;EACYgB,iBAAiBA,CAACV,KAAoB,EAAW;IACzD,QAAQA,KAAK,CAACA,KAAK;MACjB,KAAKW,mBAAY,CAACC,MAAM;QACtB,IAAI,CAACvB,QAAQ,GAAG,IAAI;QACpB,IAAI,CAACwB,UAAU,GAAG,CAAC;QACnB,OAAO,IAAI;MACb,KAAKF,mBAAY,CAACG,YAAY;QAC5B,IAAI,CAACzB,QAAQ,GAAG,KAAK;QACrB,IAAI,CAACgB,gBAAgB,GAAGL,KAAK,CAACe,KAAK,IAAI,eAAe,CAAC;QACvD,IAAI,CAACR,OAAO,CAAC,CAAC;QACd,OAAO,IAAI;MACb;QACE,OAAO,KAAK;IAChB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAeS,QAAQ,GAAG,CAAC;EAE3B,OAAerB,iBAAiBA,CAAA,EAAW;IACzC,MAAMsB,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;IAC5B,MAAMC,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACD,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC;IAChD,MAAMG,GAAG,GAAGnC,OAAO,CAAC4B,QAAQ,EAAE;IAC9B,OAAO,MAAMC,SAAS,IAAIG,MAAM,IAAIG,GAAG,EAAE;EAC3C;AACF;AAACC,OAAA,CAAApC,OAAA,GAAAA,OAAA","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyEndAd = void 0;
7
+ var _NovvyFullScreenAd = require("./NovvyFullScreenAd");
8
+ /** An end-roll (full-screen) ad, shown after an episode finishes. */
9
+ class NovvyEndAd extends _NovvyFullScreenAd.NovvyFullScreenAd {
10
+ _loadNative() {
11
+ this.native.loadEndAd(this.adUnitId, this.adObjectId);
12
+ }
13
+ show() {
14
+ this._assertReady();
15
+ this.native.showEndAd(this.adObjectId);
16
+ }
17
+ }
18
+ exports.NovvyEndAd = NovvyEndAd;
19
+ //# sourceMappingURL=NovvyEndAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_NovvyFullScreenAd","require","NovvyEndAd","NovvyFullScreenAd","_loadNative","native","loadEndAd","adUnitId","adObjectId","show","_assertReady","showEndAd","exports"],"sourceRoot":"../../../src","sources":["ads/NovvyEndAd.ts"],"mappings":";;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAEA;AACO,MAAMC,UAAU,SAASC,oCAAiB,CAAC;EACtCC,WAAWA,CAAA,EAAS;IAC5B,IAAI,CAACC,MAAM,CAACC,SAAS,CAAC,IAAI,CAACC,QAAQ,EAAE,IAAI,CAACC,UAAU,CAAC;EACvD;EAEAC,IAAIA,CAAA,EAAS;IACX,IAAI,CAACC,YAAY,CAAC,CAAC;IACnB,IAAI,CAACL,MAAM,CAACM,SAAS,CAAC,IAAI,CAACH,UAAU,CAAC;EACxC;AACF;AAACI,OAAA,CAAAV,UAAA,GAAAA,UAAA","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyFullScreenAd = void 0;
7
+ var _eventBus = require("../eventBus");
8
+ var _types = require("../types");
9
+ var _NovvyAd = require("./NovvyAd");
10
+ /**
11
+ * Base for full-screen ads that follow load → show → dismissed.
12
+ * Mirrors the Flutter plugin's `_NovvyFullScreenAd`.
13
+ */
14
+ class NovvyFullScreenAd extends _NovvyAd.NovvyAd {
15
+ /** Called when the ad is displayed. */
16
+
17
+ /** Called when the ad is dismissed (closed) by the user. */
18
+
19
+ /** Shows the ad. Must be called after it has loaded. */
20
+
21
+ _handleInternalEvent(event) {
22
+ if (this._handleCommonLoad(event)) {
23
+ return;
24
+ }
25
+ switch (event.event) {
26
+ case _types.NovvyAdEvent.Showed:
27
+ this.onAdShowed?.();
28
+ break;
29
+ case _types.NovvyAdEvent.Dismissed:
30
+ this.onAdDismissed?.();
31
+ this.destroy();
32
+ break;
33
+ default:
34
+ break;
35
+ }
36
+ }
37
+ _assertReady() {
38
+ if (!this._isReady) {
39
+ throw new Error('Ad must be loaded before showing.');
40
+ }
41
+ }
42
+
43
+ /** Uses the module accessor in subclasses. */
44
+ get native() {
45
+ return _eventBus.Native;
46
+ }
47
+ }
48
+ exports.NovvyFullScreenAd = NovvyFullScreenAd;
49
+ //# sourceMappingURL=NovvyFullScreenAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_eventBus","require","_types","_NovvyAd","NovvyFullScreenAd","NovvyAd","_handleInternalEvent","event","_handleCommonLoad","NovvyAdEvent","Showed","onAdShowed","Dismissed","onAdDismissed","destroy","_assertReady","_isReady","Error","native","Native","exports"],"sourceRoot":"../../../src","sources":["ads/NovvyFullScreenAd.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACO,MAAeG,iBAAiB,SAASC,gBAAO,CAAC;EACtD;;EAEA;;EAGA;;EAGUC,oBAAoBA,CAACC,KAAoB,EAAQ;IACzD,IAAI,IAAI,CAACC,iBAAiB,CAACD,KAAK,CAAC,EAAE;MACjC;IACF;IACA,QAAQA,KAAK,CAACA,KAAK;MACjB,KAAKE,mBAAY,CAACC,MAAM;QACtB,IAAI,CAACC,UAAU,GAAG,CAAC;QACnB;MACF,KAAKF,mBAAY,CAACG,SAAS;QACzB,IAAI,CAACC,aAAa,GAAG,CAAC;QACtB,IAAI,CAACC,OAAO,CAAC,CAAC;QACd;MACF;QACE;IACJ;EACF;EAEUC,YAAYA,CAAA,EAAS;IAC7B,IAAI,CAAC,IAAI,CAACC,QAAQ,EAAE;MAClB,MAAM,IAAIC,KAAK,CAAC,mCAAmC,CAAC;IACtD;EACF;;EAEA;EACA,IAAcC,MAAMA,CAAA,EAAG;IACrB,OAAOC,gBAAM;EACf;AACF;AAACC,OAAA,CAAAhB,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyInterstitialAd = void 0;
7
+ var _NovvyFullScreenAd = require("./NovvyFullScreenAd");
8
+ /** An interstitial (full-screen) ad. */
9
+ class NovvyInterstitialAd extends _NovvyFullScreenAd.NovvyFullScreenAd {
10
+ _loadNative() {
11
+ this.native.loadInterstitialAd(this.adUnitId, this.adObjectId);
12
+ }
13
+ show() {
14
+ this._assertReady();
15
+ this.native.showInterstitialAd(this.adObjectId);
16
+ }
17
+ }
18
+ exports.NovvyInterstitialAd = NovvyInterstitialAd;
19
+ //# sourceMappingURL=NovvyInterstitialAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_NovvyFullScreenAd","require","NovvyInterstitialAd","NovvyFullScreenAd","_loadNative","native","loadInterstitialAd","adUnitId","adObjectId","show","_assertReady","showInterstitialAd","exports"],"sourceRoot":"../../../src","sources":["ads/NovvyInterstitialAd.ts"],"mappings":";;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAEA;AACO,MAAMC,mBAAmB,SAASC,oCAAiB,CAAC;EAC/CC,WAAWA,CAAA,EAAS;IAC5B,IAAI,CAACC,MAAM,CAACC,kBAAkB,CAAC,IAAI,CAACC,QAAQ,EAAE,IAAI,CAACC,UAAU,CAAC;EAChE;EAEAC,IAAIA,CAAA,EAAS;IACX,IAAI,CAACC,YAAY,CAAC,CAAC;IACnB,IAAI,CAACL,MAAM,CAACM,kBAAkB,CAAC,IAAI,CAACH,UAAU,CAAC;EACjD;AACF;AAACI,OAAA,CAAAV,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyMidAd = void 0;
7
+ var _NovvyFullScreenAd = require("./NovvyFullScreenAd");
8
+ /** A mid-roll (full-screen) ad, shown at an in-episode break. */
9
+ class NovvyMidAd extends _NovvyFullScreenAd.NovvyFullScreenAd {
10
+ _loadNative() {
11
+ this.native.loadMidAd(this.adUnitId, this.adObjectId);
12
+ }
13
+ show() {
14
+ this._assertReady();
15
+ this.native.showMidAd(this.adObjectId);
16
+ }
17
+ }
18
+ exports.NovvyMidAd = NovvyMidAd;
19
+ //# sourceMappingURL=NovvyMidAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_NovvyFullScreenAd","require","NovvyMidAd","NovvyFullScreenAd","_loadNative","native","loadMidAd","adUnitId","adObjectId","show","_assertReady","showMidAd","exports"],"sourceRoot":"../../../src","sources":["ads/NovvyMidAd.ts"],"mappings":";;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AAEA;AACO,MAAMC,UAAU,SAASC,oCAAiB,CAAC;EACtCC,WAAWA,CAAA,EAAS;IAC5B,IAAI,CAACC,MAAM,CAACC,SAAS,CAAC,IAAI,CAACC,QAAQ,EAAE,IAAI,CAACC,UAAU,CAAC;EACvD;EAEAC,IAAIA,CAAA,EAAS;IACX,IAAI,CAACC,YAAY,CAAC,CAAC;IACnB,IAAI,CAACL,MAAM,CAACM,SAAS,CAAC,IAAI,CAACH,UAAU,CAAC;EACxC;AACF;AAACI,OAAA,CAAAV,UAAA,GAAAA,UAAA","ignoreList":[]}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyPauseAd = void 0;
7
+ var _eventBus = require("../eventBus");
8
+ var _types = require("../types");
9
+ var _NovvyAd = require("./NovvyAd");
10
+ /** Interval at which player state is pushed to native (mirrors Flutter's 500ms Timer). */
11
+ const PLAYER_PUSH_INTERVAL_MS = 500;
12
+
13
+ /**
14
+ * A realtime pause card (fixed 260×90) shown while the player is paused.
15
+ *
16
+ * Unlike other ads there is **no** {@link load} step: embedding
17
+ * `<NovvyPauseAdView>` issues the request immediately via {@link attach}.
18
+ * Show it the moment playback is paused and {@link destroy} on resume
19
+ * ({@link onAdHidden}). Mirrors the Flutter plugin's `NovvyPauseAd`.
20
+ */
21
+ class NovvyPauseAd extends _NovvyAd.NovvyAd {
22
+ /** The Fabric component name used by `<NovvyPauseAdView>`. */
23
+ static viewType = 'NovvyPauseAdView';
24
+ /** Pause card width in logical pixels (matches native SDK). */
25
+ static cardWidth = 260;
26
+ /** Pause card height in logical pixels (matches native SDK). */
27
+ static cardHeight = 90;
28
+
29
+ /** Called when the pause card is shown. */
30
+
31
+ /** Called when the card is hidden (playback resumed). */
32
+
33
+ /**
34
+ * Called when the native card's shown state changes, so a view can toggle
35
+ * touch passthrough / opacity (mirrors Flutter's `shownNotifier`).
36
+ */
37
+
38
+ _player = null;
39
+ _timer = null;
40
+ _loadNative() {
41
+ throw new Error('NovvyPauseAd has no load step; use attach().');
42
+ }
43
+
44
+ /**
45
+ * Attach the pause ad and issue the request in realtime.
46
+ *
47
+ * The player's current state is read once and sent with the request; a
48
+ * 500ms timer then keeps pushing state so the SDK can detect resumption.
49
+ */
50
+ attach(player) {
51
+ if (this._disposed) {
52
+ return;
53
+ }
54
+ this._player = player;
55
+ this._subscribe();
56
+ _eventBus.Native.attachPauseAd(this.adUnitId, this.adObjectId, player.currentPositionMs, player.isPlaying);
57
+ this._startPlayerTimer();
58
+ }
59
+
60
+ /** Detach the pause ad and stop pushing player state. */
61
+ detach() {
62
+ this._stopPlayerTimer();
63
+ this._player = null;
64
+ _eventBus.Native.detachPauseAd(this.adObjectId);
65
+ }
66
+ destroy() {
67
+ if (this._disposed) {
68
+ return;
69
+ }
70
+ this._stopPlayerTimer();
71
+ this._player = null;
72
+ super.destroy();
73
+ }
74
+ _startPlayerTimer() {
75
+ this._stopPlayerTimer();
76
+ this._timer = setInterval(() => {
77
+ const player = this._player;
78
+ if (!player) {
79
+ return;
80
+ }
81
+ _eventBus.Native.updatePauseAdPlayerState(this.adObjectId, player.currentPositionMs, player.isPlaying);
82
+ }, PLAYER_PUSH_INTERVAL_MS);
83
+ }
84
+ _stopPlayerTimer() {
85
+ if (this._timer) {
86
+ clearInterval(this._timer);
87
+ this._timer = null;
88
+ }
89
+ }
90
+ _handleInternalEvent(event) {
91
+ switch (event.event) {
92
+ case _types.NovvyAdEvent.FailedToLoad:
93
+ this.onAdFailedToLoad?.(event.error ?? 'Unknown error');
94
+ // Stops the player timer + unsubscribes before releasing native —
95
+ // avoids a leaked 500ms push loop on failure.
96
+ this.destroy();
97
+ break;
98
+ case _types.NovvyAdEvent.Showed:
99
+ if (!this._disposed) {
100
+ this.onShownChanged?.(true);
101
+ }
102
+ this.onAdShowed?.();
103
+ break;
104
+ case _types.NovvyAdEvent.Hidden:
105
+ if (!this._disposed) {
106
+ this.onShownChanged?.(false);
107
+ }
108
+ this.onAdHidden?.();
109
+ break;
110
+ default:
111
+ break;
112
+ }
113
+ }
114
+ }
115
+ exports.NovvyPauseAd = NovvyPauseAd;
116
+ //# sourceMappingURL=NovvyPauseAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_eventBus","require","_types","_NovvyAd","PLAYER_PUSH_INTERVAL_MS","NovvyPauseAd","NovvyAd","viewType","cardWidth","cardHeight","_player","_timer","_loadNative","Error","attach","player","_disposed","_subscribe","Native","attachPauseAd","adUnitId","adObjectId","currentPositionMs","isPlaying","_startPlayerTimer","detach","_stopPlayerTimer","detachPauseAd","destroy","setInterval","updatePauseAdPlayerState","clearInterval","_handleInternalEvent","event","NovvyAdEvent","FailedToLoad","onAdFailedToLoad","error","Showed","onShownChanged","onAdShowed","Hidden","onAdHidden","exports"],"sourceRoot":"../../../src","sources":["ads/NovvyPauseAd.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyRewardedAd = void 0;
7
+ var _eventBus = require("../eventBus");
8
+ var _types = require("../types");
9
+ var _NovvyAd = require("./NovvyAd");
10
+ /** A rewarded video ad. */
11
+ class NovvyRewardedAd extends _NovvyAd.NovvyAd {
12
+ /** Called when the ad is displayed. */
13
+
14
+ /** Called when the ad is dismissed by the user. */
15
+
16
+ /**
17
+ * Called once when the user earns the reward. No reward payload — the native
18
+ * SDKs deliver a parameterless signal (grant the host's own reward).
19
+ */
20
+
21
+ _loadNative() {
22
+ _eventBus.Native.loadRewardedAd(this.adUnitId, this.adObjectId);
23
+ }
24
+
25
+ /** Shows the rewarded video ad. Must be called after it has loaded. */
26
+ show() {
27
+ if (!this._isReady) {
28
+ throw new Error('Ad must be loaded before showing.');
29
+ }
30
+ _eventBus.Native.showRewardedAd(this.adObjectId);
31
+ }
32
+ _handleInternalEvent(event) {
33
+ if (this._handleCommonLoad(event)) {
34
+ return;
35
+ }
36
+ switch (event.event) {
37
+ case _types.NovvyAdEvent.Showed:
38
+ this.onAdShowed?.();
39
+ break;
40
+ case _types.NovvyAdEvent.EarnedReward:
41
+ this.onUserEarnedReward?.();
42
+ break;
43
+ case _types.NovvyAdEvent.Dismissed:
44
+ this.onAdDismissed?.();
45
+ this.destroy();
46
+ break;
47
+ default:
48
+ break;
49
+ }
50
+ }
51
+ }
52
+ exports.NovvyRewardedAd = NovvyRewardedAd;
53
+ //# sourceMappingURL=NovvyRewardedAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_eventBus","require","_types","_NovvyAd","NovvyRewardedAd","NovvyAd","_loadNative","Native","loadRewardedAd","adUnitId","adObjectId","show","_isReady","Error","showRewardedAd","_handleInternalEvent","event","_handleCommonLoad","NovvyAdEvent","Showed","onAdShowed","EarnedReward","onUserEarnedReward","Dismissed","onAdDismissed","destroy","exports"],"sourceRoot":"../../../src","sources":["ads/NovvyRewardedAd.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA;AACO,MAAMG,eAAe,SAASC,gBAAO,CAAC;EAC3C;;EAEA;;EAEA;AACF;AACA;AACA;;EAGYC,WAAWA,CAAA,EAAS;IAC5BC,gBAAM,CAACC,cAAc,CAAC,IAAI,CAACC,QAAQ,EAAE,IAAI,CAACC,UAAU,CAAC;EACvD;;EAEA;EACAC,IAAIA,CAAA,EAAS;IACX,IAAI,CAAC,IAAI,CAACC,QAAQ,EAAE;MAClB,MAAM,IAAIC,KAAK,CAAC,mCAAmC,CAAC;IACtD;IACAN,gBAAM,CAACO,cAAc,CAAC,IAAI,CAACJ,UAAU,CAAC;EACxC;EAEUK,oBAAoBA,CAACC,KAAoB,EAAQ;IACzD,IAAI,IAAI,CAACC,iBAAiB,CAACD,KAAK,CAAC,EAAE;MACjC;IACF;IACA,QAAQA,KAAK,CAACA,KAAK;MACjB,KAAKE,mBAAY,CAACC,MAAM;QACtB,IAAI,CAACC,UAAU,GAAG,CAAC;QACnB;MACF,KAAKF,mBAAY,CAACG,YAAY;QAC5B,IAAI,CAACC,kBAAkB,GAAG,CAAC;QAC3B;MACF,KAAKJ,mBAAY,CAACK,SAAS;QACzB,IAAI,CAACC,aAAa,GAAG,CAAC;QACtB,IAAI,CAACC,OAAO,CAAC,CAAC;QACd;MACF;QACE;IACJ;EACF;AACF;AAACC,OAAA,CAAAtB,eAAA,GAAAA,eAAA","ignoreList":[]}