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.
- package/LICENSE +21 -0
- package/README.md +210 -0
- package/android/build.gradle +84 -0
- package/android/gradle.properties +4 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/java/ai/novvy/reactnative/NovvyAdContainerView.kt +63 -0
- package/android/src/main/java/ai/novvy/reactnative/NovvyAdsModule.kt +390 -0
- package/android/src/main/java/ai/novvy/reactnative/NovvyAdsPackage.kt +46 -0
- package/android/src/main/java/ai/novvy/reactnative/NovvyPauseAdViewManager.kt +68 -0
- package/android/src/main/java/ai/novvy/reactnative/NovvyScrollAdViewManager.kt +72 -0
- package/android/src/main/java/ai/novvy/reactnative/RnPlayerAdapter.kt +18 -0
- package/android/src/main/java/ai/novvy/reactnative/ViewReadyEvent.kt +26 -0
- package/app.plugin.js +4 -0
- package/ios/NovvyAds.mm +168 -0
- package/ios/NovvyAdsImpl.swift +409 -0
- package/ios/NovvyPauseAdView.mm +79 -0
- package/ios/NovvyScrollAdView.mm +80 -0
- package/ios/RnPlayerAdapter.swift +14 -0
- package/lib/commonjs/NovvyAds.js +87 -0
- package/lib/commonjs/NovvyAds.js.map +1 -0
- package/lib/commonjs/ads/NovvyAd.js +121 -0
- package/lib/commonjs/ads/NovvyAd.js.map +1 -0
- package/lib/commonjs/ads/NovvyEndAd.js +19 -0
- package/lib/commonjs/ads/NovvyEndAd.js.map +1 -0
- package/lib/commonjs/ads/NovvyFullScreenAd.js +49 -0
- package/lib/commonjs/ads/NovvyFullScreenAd.js.map +1 -0
- package/lib/commonjs/ads/NovvyInterstitialAd.js +19 -0
- package/lib/commonjs/ads/NovvyInterstitialAd.js.map +1 -0
- package/lib/commonjs/ads/NovvyMidAd.js +19 -0
- package/lib/commonjs/ads/NovvyMidAd.js.map +1 -0
- package/lib/commonjs/ads/NovvyPauseAd.js +116 -0
- package/lib/commonjs/ads/NovvyPauseAd.js.map +1 -0
- package/lib/commonjs/ads/NovvyRewardedAd.js +53 -0
- package/lib/commonjs/ads/NovvyRewardedAd.js.map +1 -0
- package/lib/commonjs/ads/NovvyScrollAd.js +136 -0
- package/lib/commonjs/ads/NovvyScrollAd.js.map +1 -0
- package/lib/commonjs/eventBus.js +60 -0
- package/lib/commonjs/eventBus.js.map +1 -0
- package/lib/commonjs/index.js +90 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/spec/NativeNovvyAds.js +27 -0
- package/lib/commonjs/spec/NativeNovvyAds.js.map +1 -0
- package/lib/commonjs/spec/NovvyPauseAdViewNativeComponent.js +16 -0
- package/lib/commonjs/spec/NovvyPauseAdViewNativeComponent.js.map +1 -0
- package/lib/commonjs/spec/NovvyScrollAdViewNativeComponent.js +17 -0
- package/lib/commonjs/spec/NovvyScrollAdViewNativeComponent.js.map +1 -0
- package/lib/commonjs/spec/codegen-event-emitter.d.js +2 -0
- package/lib/commonjs/spec/codegen-event-emitter.d.js.map +1 -0
- package/lib/commonjs/types.js +54 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/views/NovvyPauseAdView.js +76 -0
- package/lib/commonjs/views/NovvyPauseAdView.js.map +1 -0
- package/lib/commonjs/views/NovvyScrollAdView.js +63 -0
- package/lib/commonjs/views/NovvyScrollAdView.js.map +1 -0
- package/lib/module/NovvyAds.js +83 -0
- package/lib/module/NovvyAds.js.map +1 -0
- package/lib/module/ads/NovvyAd.js +117 -0
- package/lib/module/ads/NovvyAd.js.map +1 -0
- package/lib/module/ads/NovvyEndAd.js +15 -0
- package/lib/module/ads/NovvyEndAd.js.map +1 -0
- package/lib/module/ads/NovvyFullScreenAd.js +45 -0
- package/lib/module/ads/NovvyFullScreenAd.js.map +1 -0
- package/lib/module/ads/NovvyInterstitialAd.js +15 -0
- package/lib/module/ads/NovvyInterstitialAd.js.map +1 -0
- package/lib/module/ads/NovvyMidAd.js +15 -0
- package/lib/module/ads/NovvyMidAd.js.map +1 -0
- package/lib/module/ads/NovvyPauseAd.js +112 -0
- package/lib/module/ads/NovvyPauseAd.js.map +1 -0
- package/lib/module/ads/NovvyRewardedAd.js +49 -0
- package/lib/module/ads/NovvyRewardedAd.js.map +1 -0
- package/lib/module/ads/NovvyScrollAd.js +132 -0
- package/lib/module/ads/NovvyScrollAd.js.map +1 -0
- package/lib/module/eventBus.js +55 -0
- package/lib/module/eventBus.js.map +1 -0
- package/lib/module/index.js +22 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/spec/NativeNovvyAds.js +28 -0
- package/lib/module/spec/NativeNovvyAds.js.map +1 -0
- package/lib/module/spec/NovvyPauseAdViewNativeComponent.js +13 -0
- package/lib/module/spec/NovvyPauseAdViewNativeComponent.js.map +1 -0
- package/lib/module/spec/NovvyScrollAdViewNativeComponent.js +14 -0
- package/lib/module/spec/NovvyScrollAdViewNativeComponent.js.map +1 -0
- package/lib/module/spec/codegen-event-emitter.d.js +2 -0
- package/lib/module/spec/codegen-event-emitter.d.js.map +1 -0
- package/lib/module/types.js +56 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/views/NovvyPauseAdView.js +70 -0
- package/lib/module/views/NovvyPauseAdView.js.map +1 -0
- package/lib/module/views/NovvyScrollAdView.js +57 -0
- package/lib/module/views/NovvyScrollAdView.js.map +1 -0
- package/lib/typescript/NovvyAds.d.ts +69 -0
- package/lib/typescript/NovvyAds.d.ts.map +1 -0
- package/lib/typescript/ads/NovvyAd.d.ts +57 -0
- package/lib/typescript/ads/NovvyAd.d.ts.map +1 -0
- package/lib/typescript/ads/NovvyEndAd.d.ts +7 -0
- package/lib/typescript/ads/NovvyEndAd.d.ts.map +1 -0
- package/lib/typescript/ads/NovvyFullScreenAd.d.ts +19 -0
- package/lib/typescript/ads/NovvyFullScreenAd.d.ts.map +1 -0
- package/lib/typescript/ads/NovvyInterstitialAd.d.ts +7 -0
- package/lib/typescript/ads/NovvyInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/ads/NovvyMidAd.d.ts +7 -0
- package/lib/typescript/ads/NovvyMidAd.d.ts.map +1 -0
- package/lib/typescript/ads/NovvyPauseAd.d.ts +45 -0
- package/lib/typescript/ads/NovvyPauseAd.d.ts.map +1 -0
- package/lib/typescript/ads/NovvyRewardedAd.d.ts +19 -0
- package/lib/typescript/ads/NovvyRewardedAd.d.ts.map +1 -0
- package/lib/typescript/ads/NovvyScrollAd.d.ts +57 -0
- package/lib/typescript/ads/NovvyScrollAd.d.ts.map +1 -0
- package/lib/typescript/eventBus.d.ts +15 -0
- package/lib/typescript/eventBus.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +15 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/spec/NativeNovvyAds.d.ts +73 -0
- package/lib/typescript/spec/NativeNovvyAds.d.ts.map +1 -0
- package/lib/typescript/spec/NovvyPauseAdViewNativeComponent.d.ts +18 -0
- package/lib/typescript/spec/NovvyPauseAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/spec/NovvyScrollAdViewNativeComponent.d.ts +19 -0
- package/lib/typescript/spec/NovvyScrollAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +77 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/lib/typescript/views/NovvyPauseAdView.d.ts +21 -0
- package/lib/typescript/views/NovvyPauseAdView.d.ts.map +1 -0
- package/lib/typescript/views/NovvyScrollAdView.d.ts +22 -0
- package/lib/typescript/views/NovvyScrollAdView.d.ts.map +1 -0
- package/novvy-ads-react-native.podspec +71 -0
- package/package.json +84 -0
- package/plugin/build/index.d.ts +11 -0
- package/plugin/build/index.js +53 -0
- package/react-native.config.js +7 -0
- package/src/NovvyAds.ts +98 -0
- package/src/ads/NovvyAd.ts +125 -0
- package/src/ads/NovvyEndAd.ts +13 -0
- package/src/ads/NovvyFullScreenAd.ts +46 -0
- package/src/ads/NovvyInterstitialAd.ts +13 -0
- package/src/ads/NovvyMidAd.ts +13 -0
- package/src/ads/NovvyPauseAd.ts +125 -0
- package/src/ads/NovvyRewardedAd.ts +49 -0
- package/src/ads/NovvyScrollAd.ts +138 -0
- package/src/eventBus.ts +59 -0
- package/src/index.tsx +29 -0
- package/src/spec/NativeNovvyAds.ts +134 -0
- package/src/spec/NovvyPauseAdViewNativeComponent.ts +20 -0
- package/src/spec/NovvyScrollAdViewNativeComponent.ts +21 -0
- package/src/spec/codegen-event-emitter.d.ts +10 -0
- package/src/types.ts +82 -0
- package/src/views/NovvyPauseAdView.tsx +80 -0
- package/src/views/NovvyScrollAdView.tsx +71 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import NovvyAdsNative from './spec/NativeNovvyAds';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Central hub over the single native→JS `onAdEvent` stream.
|
|
7
|
+
*
|
|
8
|
+
* Mirrors the Flutter plugin's `_NovvyAdsImpl` broadcast stream: one native
|
|
9
|
+
* event source is fanned out to per-ad handlers filtered by `adObjectId`.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const handlers = new Map();
|
|
13
|
+
let subscription = null;
|
|
14
|
+
function ensureSubscribed() {
|
|
15
|
+
if (subscription) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
subscription = NovvyAdsNative.onAdEvent(event => {
|
|
19
|
+
const set = handlers.get(event.adObjectId);
|
|
20
|
+
if (!set) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
// Copy so a handler may unsubscribe/destroy during dispatch.
|
|
24
|
+
for (const handler of Array.from(set)) {
|
|
25
|
+
handler(event);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Subscribe to events for a single ad instance. Returns an unsubscribe fn.
|
|
32
|
+
*/
|
|
33
|
+
export function subscribe(adObjectId, handler) {
|
|
34
|
+
ensureSubscribed();
|
|
35
|
+
let set = handlers.get(adObjectId);
|
|
36
|
+
if (!set) {
|
|
37
|
+
set = new Set();
|
|
38
|
+
handlers.set(adObjectId, set);
|
|
39
|
+
}
|
|
40
|
+
set.add(handler);
|
|
41
|
+
return () => {
|
|
42
|
+
const current = handlers.get(adObjectId);
|
|
43
|
+
if (!current) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
current.delete(handler);
|
|
47
|
+
if (current.size === 0) {
|
|
48
|
+
handlers.delete(adObjectId);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** The underlying TurboModule instance. */
|
|
54
|
+
export const Native = NovvyAdsNative;
|
|
55
|
+
//# sourceMappingURL=eventBus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NovvyAdsNative","handlers","Map","subscription","ensureSubscribed","onAdEvent","event","set","get","adObjectId","handler","Array","from","subscribe","Set","add","current","delete","size","Native"],"sourceRoot":"../../src","sources":["eventBus.ts"],"mappings":";;AAAA,OAAOA,cAAc,MAAM,uBAAuB;;AAGlD;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAA8B,CAAC;AACvD,IAAIC,YAAuC,GAAG,IAAI;AAElD,SAASC,gBAAgBA,CAAA,EAAS;EAChC,IAAID,YAAY,EAAE;IAChB;EACF;EACAA,YAAY,GAAGH,cAAc,CAACK,SAAS,CAAEC,KAAoB,IAAK;IAChE,MAAMC,GAAG,GAAGN,QAAQ,CAACO,GAAG,CAACF,KAAK,CAACG,UAAU,CAAC;IAC1C,IAAI,CAACF,GAAG,EAAE;MACR;IACF;IACA;IACA,KAAK,MAAMG,OAAO,IAAIC,KAAK,CAACC,IAAI,CAACL,GAAG,CAAC,EAAE;MACrCG,OAAO,CAACJ,KAAK,CAAC;IAChB;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA,OAAO,SAASO,SAASA,CACvBJ,UAAkB,EAClBC,OAAuB,EACX;EACZN,gBAAgB,CAAC,CAAC;EAClB,IAAIG,GAAG,GAAGN,QAAQ,CAACO,GAAG,CAACC,UAAU,CAAC;EAClC,IAAI,CAACF,GAAG,EAAE;IACRA,GAAG,GAAG,IAAIO,GAAG,CAAC,CAAC;IACfb,QAAQ,CAACM,GAAG,CAACE,UAAU,EAAEF,GAAG,CAAC;EAC/B;EACAA,GAAG,CAACQ,GAAG,CAACL,OAAO,CAAC;EAChB,OAAO,MAAM;IACX,MAAMM,OAAO,GAAGf,QAAQ,CAACO,GAAG,CAACC,UAAU,CAAC;IACxC,IAAI,CAACO,OAAO,EAAE;MACZ;IACF;IACAA,OAAO,CAACC,MAAM,CAACP,OAAO,CAAC;IACvB,IAAIM,OAAO,CAACE,IAAI,KAAK,CAAC,EAAE;MACtBjB,QAAQ,CAACgB,MAAM,CAACR,UAAU,CAAC;IAC7B;EACF,CAAC;AACH;;AAEA;AACA,OAAO,MAAMU,MAAM,GAAGnB,cAAc","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// Public entry point for the Novvy Ads React Native SDK.
|
|
4
|
+
|
|
5
|
+
export { NovvyAds } from './NovvyAds';
|
|
6
|
+
|
|
7
|
+
// Ad types
|
|
8
|
+
export { NovvyAd } from './ads/NovvyAd';
|
|
9
|
+
export { NovvyFullScreenAd } from './ads/NovvyFullScreenAd';
|
|
10
|
+
export { NovvyInterstitialAd } from './ads/NovvyInterstitialAd';
|
|
11
|
+
export { NovvyRewardedAd } from './ads/NovvyRewardedAd';
|
|
12
|
+
export { NovvyMidAd } from './ads/NovvyMidAd';
|
|
13
|
+
export { NovvyEndAd } from './ads/NovvyEndAd';
|
|
14
|
+
export { NovvyScrollAd } from './ads/NovvyScrollAd';
|
|
15
|
+
export { NovvyPauseAd } from './ads/NovvyPauseAd';
|
|
16
|
+
|
|
17
|
+
// Embedded views
|
|
18
|
+
export { NovvyScrollAdView } from './views/NovvyScrollAdView';
|
|
19
|
+
export { NovvyPauseAdView } from './views/NovvyPauseAdView';
|
|
20
|
+
// Data types
|
|
21
|
+
export { NovvyAdEvent } from './types';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NovvyAds","NovvyAd","NovvyFullScreenAd","NovvyInterstitialAd","NovvyRewardedAd","NovvyMidAd","NovvyEndAd","NovvyScrollAd","NovvyPauseAd","NovvyScrollAdView","NovvyPauseAdView","NovvyAdEvent"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;;AAEA,SAASA,QAAQ,QAAQ,YAAY;;AAErC;AACA,SAASC,OAAO,QAAQ,eAAe;AACvC,SAASC,iBAAiB,QAAQ,yBAAyB;AAC3D,SAASC,mBAAmB,QAAQ,2BAA2B;AAC/D,SAASC,eAAe,QAAQ,uBAAuB;AACvD,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAAQ,qBAAqB;AACnD,SAASC,YAAY,QAAQ,oBAAoB;;AAEjD;AACA,SAASC,iBAAiB,QAAQ,2BAA2B;AAE7D,SAASC,gBAAgB,QAAQ,0BAA0B;AAG3D;AACA,SACEC,YAAY,QAMP,SAAS","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { TurboModuleRegistry } from 'react-native';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Codegen-facing spec for the Novvy Ads TurboModule (new architecture only).
|
|
7
|
+
*
|
|
8
|
+
* Method surface mirrors the Flutter plugin's Pigeon `NovvyAdHostApi`
|
|
9
|
+
* (pigeons/novvy_ads_api.dart) one-to-one. The single `onAdEvent` emitter
|
|
10
|
+
* mirrors Pigeon's `NovvyAdsFlutterApi.onAdEvent`; each JS ad object filters
|
|
11
|
+
* this stream by its own `adObjectId`.
|
|
12
|
+
*
|
|
13
|
+
* NOTE: Codegen struct/event types must live in this file. The public,
|
|
14
|
+
* richly-documented aliases are re-exported from `../types`.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
// ── Data structs (codegen-facing) ───────────────────────────────────────────
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Single native→JS ad lifecycle event. `event` is one of the NovvyAdEvent
|
|
21
|
+
* string values. `remainingSeconds` is only populated for `playbackTick`
|
|
22
|
+
* (flattened from Pigeon's `data` map for codegen compatibility).
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
// ── TurboModule ─────────────────────────────────────────────────────────────
|
|
26
|
+
|
|
27
|
+
export default TurboModuleRegistry.getEnforcing('NovvyAds');
|
|
28
|
+
//# sourceMappingURL=NativeNovvyAds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["spec/NativeNovvyAds.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;;AAQlD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AA0BA;AACA;AACA;AACA;AACA;;AASA;;AAyEA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,UAAU,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Fabric component for an inline realtime pause-card ad container
|
|
7
|
+
* (fixed 260×90). The native view registers its container in the TurboModule
|
|
8
|
+
* keyed by `adObjectId`, then fires `onViewReady`, at which point JS issues
|
|
9
|
+
* `attachPauseAd` (there is no load step for pause ads).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export default codegenNativeComponent('NovvyPauseAdView');
|
|
13
|
+
//# sourceMappingURL=NovvyPauseAdViewNativeComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../../src","sources":["spec/NovvyPauseAdViewNativeComponent.ts"],"mappings":";;AACA,OAAOA,sBAAsB,MAAM,yDAAyD;;AAG5F;AACA;AACA;AACA;AACA;AACA;;AAQA,eAAeA,sBAAsB,CACnC,kBACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Fabric component for an inline scroll (feed) ad container.
|
|
7
|
+
*
|
|
8
|
+
* The native view registers its container in the TurboModule keyed by
|
|
9
|
+
* `adObjectId`, then fires `onViewReady` (mirrors the Flutter plugin's
|
|
10
|
+
* `onPlatformViewCreated`), at which point JS issues `attachScrollAd`.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export default codegenNativeComponent('NovvyScrollAdView');
|
|
14
|
+
//# sourceMappingURL=NovvyScrollAdViewNativeComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../../src","sources":["spec/NovvyScrollAdViewNativeComponent.ts"],"mappings":";;AACA,OAAOA,sBAAsB,MAAM,yDAAyD;;AAG5F;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA,eAAeA,sBAAsB,CACnC,mBACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["spec/codegen-event-emitter.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Public types for the Novvy Ads React Native SDK.
|
|
5
|
+
*
|
|
6
|
+
* These mirror the Flutter plugin's Pigeon data classes
|
|
7
|
+
* (pigeons/novvy_ads_api.dart). At runtime they are structurally identical to
|
|
8
|
+
* the codegen structs in `spec/NativeNovvyAds.ts`, so instances pass straight
|
|
9
|
+
* through the TurboModule with no conversion.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/** A single drama-watch history entry used for ad targeting. */
|
|
13
|
+
|
|
14
|
+
/** User gender values accepted by the SDK. */
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* User identity and subscription context.
|
|
18
|
+
*
|
|
19
|
+
* Pass to {@link NovvyAds.setUserContext} (full replace) or
|
|
20
|
+
* {@link NovvyAds.updateUserContext} (incremental merge).
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Content and episode context used for ad targeting.
|
|
25
|
+
*
|
|
26
|
+
* Pass to {@link NovvyAds.setContentContext} (full replace) or
|
|
27
|
+
* {@link NovvyAds.updateContentContext} (incremental merge).
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
/** Ad lifecycle event names (mirror Pigeon's `NovvyAdEvent` enum). */
|
|
31
|
+
export let NovvyAdEvent = /*#__PURE__*/function (NovvyAdEvent) {
|
|
32
|
+
/** Ad and creative are ready to show (not emitted for Pause — realtime). */
|
|
33
|
+
NovvyAdEvent["Loaded"] = "loaded";
|
|
34
|
+
/** Ad failed to load / request. */
|
|
35
|
+
NovvyAdEvent["FailedToLoad"] = "failedToLoad";
|
|
36
|
+
/** Ad was shown (full-screen) or became visible (Scroll / Pause). */
|
|
37
|
+
NovvyAdEvent["Showed"] = "showed";
|
|
38
|
+
/** Full-screen ad was closed by the user (Rewarded / Interstitial / Mid / End). */
|
|
39
|
+
NovvyAdEvent["Dismissed"] = "dismissed";
|
|
40
|
+
/** Inline ad was hidden / removed (Scroll onAdHidden, Pause hidden). */
|
|
41
|
+
NovvyAdEvent["Hidden"] = "hidden";
|
|
42
|
+
/** Rewarded ad earned a reward. Carries no data payload. */
|
|
43
|
+
NovvyAdEvent["EarnedReward"] = "earnedReward";
|
|
44
|
+
/** Scroll ad playback tick. Carries `remainingSeconds`. */
|
|
45
|
+
NovvyAdEvent["PlaybackTick"] = "playbackTick";
|
|
46
|
+
return NovvyAdEvent;
|
|
47
|
+
}({});
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Interface for a media player that a {@link NovvyPauseAd} monitors.
|
|
51
|
+
*
|
|
52
|
+
* Implement this to bridge your video/audio player so the SDK can detect
|
|
53
|
+
* playback position and resumption. Mirrors the Flutter plugin's
|
|
54
|
+
* `NovvyPlayerAdapter`.
|
|
55
|
+
*/
|
|
56
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NovvyAdEvent"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAQA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAcA;AACA;AACA;AACA;AACA;AACA;;AAOA;AACA,WAAYA,YAAY,0BAAZA,YAAY;EACtB;EADUA,YAAY;EAGtB;EAHUA,YAAY;EAKtB;EALUA,YAAY;EAOtB;EAPUA,YAAY;EAStB;EATUA,YAAY;EAWtB;EAXUA,YAAY;EAatB;EAbUA,YAAY;EAAA,OAAZA,YAAY;AAAA;;AAiBxB;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
4
|
+
import { StyleSheet, View } from 'react-native';
|
|
5
|
+
import { NovvyPauseAd } from '../ads/NovvyPauseAd';
|
|
6
|
+
import NativePauseView from '../spec/NovvyPauseAdViewNativeComponent';
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
/**
|
|
9
|
+
* Embeds a {@link NovvyPauseAd} as a native view. Fixed to
|
|
10
|
+
* {@link NovvyPauseAd.cardWidth} × {@link NovvyPauseAd.cardHeight}; position it
|
|
11
|
+
* within your own layout. Mirrors the Flutter plugin's `NovvyPauseAdView`.
|
|
12
|
+
*
|
|
13
|
+
* Touch passthrough / opacity follow the card's shown state so the view is
|
|
14
|
+
* transparent and non-interactive until the ad actually appears.
|
|
15
|
+
*/
|
|
16
|
+
export function NovvyPauseAdView({
|
|
17
|
+
ad,
|
|
18
|
+
player,
|
|
19
|
+
style
|
|
20
|
+
}) {
|
|
21
|
+
const attached = useRef(false);
|
|
22
|
+
const [shown, setShown] = useState(false);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const prev = ad.onShownChanged;
|
|
25
|
+
ad.onShownChanged = isShown => {
|
|
26
|
+
setShown(isShown);
|
|
27
|
+
prev?.(isShown);
|
|
28
|
+
};
|
|
29
|
+
return () => {
|
|
30
|
+
ad.onShownChanged = prev;
|
|
31
|
+
if (attached.current) {
|
|
32
|
+
ad.detach();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
36
|
+
}, []);
|
|
37
|
+
return /*#__PURE__*/_jsx(View, {
|
|
38
|
+
style: [styles.container, style],
|
|
39
|
+
pointerEvents: shown ? 'auto' : 'none'
|
|
40
|
+
// Claim the RN JS responder while the card is shown so an outer
|
|
41
|
+
// Pressable/Touchable in the host layout can't also fire onPress on
|
|
42
|
+
// the same tap and race with the SDK's CTA (which would resume the
|
|
43
|
+
// video and destroy the ad before the browser opens). The SDK's
|
|
44
|
+
// native tap handling is unaffected: on Android JSTouchDispatcher
|
|
45
|
+
// runs in parallel to native dispatch, and on iOS RCTTouchHandler
|
|
46
|
+
// uses cancelsTouchesInView=NO so native touches still reach the
|
|
47
|
+
// ad view's own gesture recognizer.
|
|
48
|
+
,
|
|
49
|
+
onStartShouldSetResponder: shown ? () => true : undefined,
|
|
50
|
+
children: /*#__PURE__*/_jsx(NativePauseView, {
|
|
51
|
+
style: [StyleSheet.absoluteFill, {
|
|
52
|
+
opacity: shown ? 1 : 0
|
|
53
|
+
}],
|
|
54
|
+
adObjectId: ad.adObjectId,
|
|
55
|
+
onViewReady: () => {
|
|
56
|
+
if (!attached.current) {
|
|
57
|
+
attached.current = true;
|
|
58
|
+
ad.attach(player);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const styles = StyleSheet.create({
|
|
65
|
+
container: {
|
|
66
|
+
width: NovvyPauseAd.cardWidth,
|
|
67
|
+
height: NovvyPauseAd.cardHeight
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=NovvyPauseAdView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","useState","StyleSheet","View","NovvyPauseAd","NativePauseView","jsx","_jsx","NovvyPauseAdView","ad","player","style","attached","shown","setShown","prev","onShownChanged","isShown","current","detach","styles","container","pointerEvents","onStartShouldSetResponder","undefined","children","absoluteFill","opacity","adObjectId","onViewReady","attach","create","width","cardWidth","height","cardHeight"],"sourceRoot":"../../../src","sources":["views/NovvyPauseAdView.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC1D,SAASC,UAAU,EAAEC,IAAI,QAAwC,cAAc;AAE/E,SAASC,YAAY,QAAQ,qBAAqB;AAElD,OAAOC,eAAe,MAAM,yCAAyC;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAUtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,EAAE;EACFC,MAAM;EACNC;AACqB,CAAC,EAAsB;EAC5C,MAAMC,QAAQ,GAAGZ,MAAM,CAAC,KAAK,CAAC;EAC9B,MAAM,CAACa,KAAK,EAAEC,QAAQ,CAAC,GAAGb,QAAQ,CAAC,KAAK,CAAC;EAEzCF,SAAS,CAAC,MAAM;IACd,MAAMgB,IAAI,GAAGN,EAAE,CAACO,cAAc;IAC9BP,EAAE,CAACO,cAAc,GAAIC,OAAO,IAAK;MAC/BH,QAAQ,CAACG,OAAO,CAAC;MACjBF,IAAI,GAAGE,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,MAAM;MACXR,EAAE,CAACO,cAAc,GAAGD,IAAI;MACxB,IAAIH,QAAQ,CAACM,OAAO,EAAE;QACpBT,EAAE,CAACU,MAAM,CAAC,CAAC;MACb;IACF,CAAC;IACD;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,oBACEZ,IAAA,CAACJ,IAAI;IACHQ,KAAK,EAAE,CAACS,MAAM,CAACC,SAAS,EAAEV,KAAK,CAAE;IACjCW,aAAa,EAAET,KAAK,GAAG,MAAM,GAAG;IAChC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAAA;IACAU,yBAAyB,EAAEV,KAAK,GAAG,MAAM,IAAI,GAAGW,SAAU;IAAAC,QAAA,eAE1DlB,IAAA,CAACF,eAAe;MACdM,KAAK,EAAE,CAACT,UAAU,CAACwB,YAAY,EAAE;QAAEC,OAAO,EAAEd,KAAK,GAAG,CAAC,GAAG;MAAE,CAAC,CAAE;MAC7De,UAAU,EAAEnB,EAAE,CAACmB,UAAW;MAC1BC,WAAW,EAAEA,CAAA,KAAM;QACjB,IAAI,CAACjB,QAAQ,CAACM,OAAO,EAAE;UACrBN,QAAQ,CAACM,OAAO,GAAG,IAAI;UACvBT,EAAE,CAACqB,MAAM,CAACpB,MAAM,CAAC;QACnB;MACF;IAAE,CACH;EAAC,CACE,CAAC;AAEX;AAEA,MAAMU,MAAM,GAAGlB,UAAU,CAAC6B,MAAM,CAAC;EAC/BV,SAAS,EAAE;IACTW,KAAK,EAAE5B,YAAY,CAAC6B,SAAS;IAC7BC,MAAM,EAAE9B,YAAY,CAAC+B;EACvB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useEffect, useRef } from 'react';
|
|
4
|
+
import { StyleSheet, View } from 'react-native';
|
|
5
|
+
import NativeScrollView from '../spec/NovvyScrollAdViewNativeComponent';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
/**
|
|
8
|
+
* Embeds a {@link NovvyScrollAd} as a native view. Wrap it in a container with
|
|
9
|
+
* the desired height for your feed item. Mirrors the Flutter plugin's
|
|
10
|
+
* `NovvyScrollAdView`.
|
|
11
|
+
*
|
|
12
|
+
* A black backdrop paints immediately so the previous page can't show through
|
|
13
|
+
* the slot while the native view is created.
|
|
14
|
+
*/
|
|
15
|
+
export function NovvyScrollAdView({
|
|
16
|
+
ad,
|
|
17
|
+
durationSeconds,
|
|
18
|
+
useDefaultSwipeOverlay = true,
|
|
19
|
+
style
|
|
20
|
+
}) {
|
|
21
|
+
const attached = useRef(false);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
return () => {
|
|
24
|
+
if (attached.current) {
|
|
25
|
+
ad.detach();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
// Detach only on unmount; `ad` identity is stable for the view's lifetime.
|
|
29
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
30
|
+
}, []);
|
|
31
|
+
return /*#__PURE__*/_jsx(View, {
|
|
32
|
+
style: [styles.container, style]
|
|
33
|
+
// Claim the RN JS responder for taps so an outer Pressable/Touchable
|
|
34
|
+
// in the host layout can't also fire onPress and race with the SDK's
|
|
35
|
+
// CTA. Only onStart is claimed — a subsequent move gesture can still
|
|
36
|
+
// migrate to an ancestor ScrollView/FlatList via the normal responder
|
|
37
|
+
// negotiation, so vertical feed swiping is preserved.
|
|
38
|
+
,
|
|
39
|
+
onStartShouldSetResponder: () => true,
|
|
40
|
+
children: /*#__PURE__*/_jsx(NativeScrollView, {
|
|
41
|
+
style: StyleSheet.absoluteFill,
|
|
42
|
+
adObjectId: ad.adObjectId,
|
|
43
|
+
onViewReady: () => {
|
|
44
|
+
if (!attached.current) {
|
|
45
|
+
attached.current = true;
|
|
46
|
+
ad.attach(durationSeconds, useDefaultSwipeOverlay);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
})
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const styles = StyleSheet.create({
|
|
53
|
+
container: {
|
|
54
|
+
backgroundColor: '#000000'
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=NovvyScrollAdView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","StyleSheet","View","NativeScrollView","jsx","_jsx","NovvyScrollAdView","ad","durationSeconds","useDefaultSwipeOverlay","style","attached","current","detach","styles","container","onStartShouldSetResponder","children","absoluteFill","adObjectId","onViewReady","attach","create","backgroundColor"],"sourceRoot":"../../../src","sources":["views/NovvyScrollAdView.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAChD,SAASC,UAAU,EAAEC,IAAI,QAAwC,cAAc;AAG/E,OAAOC,gBAAgB,MAAM,0CAA0C;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAYxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAAC;EAChCC,EAAE;EACFC,eAAe;EACfC,sBAAsB,GAAG,IAAI;EAC7BC;AACsB,CAAC,EAAsB;EAC7C,MAAMC,QAAQ,GAAGX,MAAM,CAAC,KAAK,CAAC;EAE9BD,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACX,IAAIY,QAAQ,CAACC,OAAO,EAAE;QACpBL,EAAE,CAACM,MAAM,CAAC,CAAC;MACb;IACF,CAAC;IACD;IACA;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,oBACER,IAAA,CAACH,IAAI;IACHQ,KAAK,EAAE,CAACI,MAAM,CAACC,SAAS,EAAEL,KAAK;IAC/B;IACA;IACA;IACA;IACA;IAAA;IACAM,yBAAyB,EAAEA,CAAA,KAAM,IAAK;IAAAC,QAAA,eAEtCZ,IAAA,CAACF,gBAAgB;MACfO,KAAK,EAAET,UAAU,CAACiB,YAAa;MAC/BC,UAAU,EAAEZ,EAAE,CAACY,UAAW;MAC1BC,WAAW,EAAEA,CAAA,KAAM;QACjB,IAAI,CAACT,QAAQ,CAACC,OAAO,EAAE;UACrBD,QAAQ,CAACC,OAAO,GAAG,IAAI;UACvBL,EAAE,CAACc,MAAM,CAACb,eAAe,EAAEC,sBAAsB,CAAC;QACpD;MACF;IAAE,CACH;EAAC,CACE,CAAC;AAEX;AAEA,MAAMK,MAAM,GAAGb,UAAU,CAACqB,MAAM,CAAC;EAC/BP,SAAS,EAAE;IACTQ,eAAe,EAAE;EACnB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { NovvyUserContext, NovvyContentContext } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* SDK entry point for Novvy Ads.
|
|
4
|
+
*
|
|
5
|
+
* A **thin** surface — it only wraps the native SDK's top-level entry (init +
|
|
6
|
+
* user/content context + email hashing). Ads themselves are created and driven
|
|
7
|
+
* directly through their classes ({@link NovvyInterstitialAd},
|
|
8
|
+
* {@link NovvyRewardedAd}, {@link NovvyMidAd}, {@link NovvyEndAd},
|
|
9
|
+
* {@link NovvyScrollAd}, {@link NovvyPauseAd}); the host owns each instance and
|
|
10
|
+
* wires its per-ad callbacks. Mirrors the Flutter plugin's `NovvyAds`.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* // 1. Initialize once at app startup (optionally with a user profile).
|
|
14
|
+
* const ok = await NovvyAds.initialize({
|
|
15
|
+
* appId: '...', endpoint: '...', apiKey: '...',
|
|
16
|
+
* userContext: { userId: '...', isPaidUser: true },
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* // 2. Set / refresh content context (and user profile if not set above).
|
|
20
|
+
* NovvyAds.setContentContext({ seriesName: '...', episodeNumber: 1 });
|
|
21
|
+
*
|
|
22
|
+
* // 3. Create an ad, wire callbacks, load & show.
|
|
23
|
+
* const ad = new NovvyRewardedAd('...');
|
|
24
|
+
* let earned = false;
|
|
25
|
+
* ad.onAdLoaded = () => ad.show();
|
|
26
|
+
* ad.onUserEarnedReward = () => { earned = true; };
|
|
27
|
+
* ad.onAdDismissed = () => { if (earned) grantReward(); };
|
|
28
|
+
* ad.onAdFailedToLoad = () => {};
|
|
29
|
+
* ad.load();
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare const NovvyAds: {
|
|
33
|
+
/**
|
|
34
|
+
* Initialize the Novvy SDK. Must be called before creating any ads.
|
|
35
|
+
*
|
|
36
|
+
* Resolves with the native init-complete signal — `true` on success, `false`
|
|
37
|
+
* if initialization failed. May be called again (e.g. after login/logout);
|
|
38
|
+
* the native SDK handles re-initialization idempotently.
|
|
39
|
+
*
|
|
40
|
+
* @param userContext optional user-targeting context applied at init time
|
|
41
|
+
* (equivalent to calling {@link setUserContext} right after).
|
|
42
|
+
*/
|
|
43
|
+
initialize(options: {
|
|
44
|
+
appId: string;
|
|
45
|
+
endpoint: string;
|
|
46
|
+
apiKey: string;
|
|
47
|
+
userContext?: NovvyUserContext | null;
|
|
48
|
+
}): Promise<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* Hashes an email address using SHA-256 for privacy compliance. Use before
|
|
51
|
+
* passing an email to {@link NovvyUserContext.hashedEmail}. Pure JS — mirrors
|
|
52
|
+
* the native SDK's `helperHashEmail()`.
|
|
53
|
+
*/
|
|
54
|
+
helperHashEmail(email: string): string;
|
|
55
|
+
/** Replaces the entire user context (null fields clear existing values). */
|
|
56
|
+
setUserContext(context: NovvyUserContext): void;
|
|
57
|
+
/** Incrementally merges user context fields (null fields preserve existing values). */
|
|
58
|
+
updateUserContext(partial: NovvyUserContext): void;
|
|
59
|
+
/**
|
|
60
|
+
* Replaces the entire content context (null fields clear existing values).
|
|
61
|
+
*
|
|
62
|
+
* Call before each `load()` / `attach()` in drama scenarios — the backend
|
|
63
|
+
* needs the current series/episode or it returns no fill.
|
|
64
|
+
*/
|
|
65
|
+
setContentContext(context: NovvyContentContext): void;
|
|
66
|
+
/** Incrementally merges content context fields (null fields preserve existing values). */
|
|
67
|
+
updateContentContext(partial: NovvyContentContext): void;
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=NovvyAds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NovvyAds.d.ts","sourceRoot":"","sources":["../../src/NovvyAds.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,QAAQ;IACnB;;;;;;;;;OASG;wBACuB;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;KACvC,GAAG,OAAO,CAAC,OAAO,CAAC;IAapB;;;;OAIG;2BACoB,MAAM,GAAG,MAAM;IAItC,4EAA4E;4BACpD,gBAAgB,GAAG,IAAI;IAI/C,uFAAuF;+BAC5D,gBAAgB,GAAG,IAAI;IAIlD;;;;;OAKG;+BACwB,mBAAmB,GAAG,IAAI;IAIrD,0FAA0F;kCAC5D,mBAAmB,GAAG,IAAI;CAGzD,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { NativeAdEvent } from '../spec/NativeNovvyAds';
|
|
2
|
+
/**
|
|
3
|
+
* Base class for all Novvy ad types.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors the Flutter plugin's `NovvyAd` (lib/novvy_ads_plugin.dart).
|
|
6
|
+
* Instances are owned by the host: keep a reference alive until the ad
|
|
7
|
+
* completes (`onAdDismissed` / `onAdHidden`) and then call {@link destroy}.
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class NovvyAd {
|
|
10
|
+
readonly adUnitId: string;
|
|
11
|
+
private readonly _adObjectId;
|
|
12
|
+
protected _isReady: boolean;
|
|
13
|
+
protected _disposed: boolean;
|
|
14
|
+
private _unsubscribe;
|
|
15
|
+
/** Called when the ad has loaded successfully. */
|
|
16
|
+
onAdLoaded?: () => void;
|
|
17
|
+
/** Called when the ad fails to load / request. */
|
|
18
|
+
onAdFailedToLoad?: (error: string) => void;
|
|
19
|
+
constructor(adUnitId: string);
|
|
20
|
+
/** The unique object ID for this ad instance. */
|
|
21
|
+
get adObjectId(): string;
|
|
22
|
+
/** Whether the ad is loaded and ready to show. */
|
|
23
|
+
get isReady(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Subscribes to this ad's native event stream (filtered by object ID).
|
|
26
|
+
* Idempotent.
|
|
27
|
+
*/
|
|
28
|
+
protected _subscribe(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Loads the ad. Not used by {@link NovvyPauseAd} (realtime, no load step).
|
|
31
|
+
*
|
|
32
|
+
* Callback-driven: the outcome is delivered via {@link onAdLoaded} /
|
|
33
|
+
* {@link onAdFailedToLoad}.
|
|
34
|
+
*/
|
|
35
|
+
load(): void;
|
|
36
|
+
/** Releases the ad resources. Idempotent. */
|
|
37
|
+
destroy(): void;
|
|
38
|
+
protected abstract _loadNative(): void;
|
|
39
|
+
protected abstract _handleInternalEvent(event: NativeAdEvent): void;
|
|
40
|
+
/**
|
|
41
|
+
* Shared handling of the common load / fail transitions.
|
|
42
|
+
* Returns true if the event was consumed here.
|
|
43
|
+
*/
|
|
44
|
+
protected _handleCommonLoad(event: NativeAdEvent): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Monotonically increasing per-process counter guaranteeing `adObjectId`
|
|
47
|
+
* uniqueness even when many ads are constructed within the same millisecond
|
|
48
|
+
* (e.g. batch-preloading feed items in a synchronous loop). `Date.now()` has
|
|
49
|
+
* only millisecond resolution, so timestamp + random alone left a real
|
|
50
|
+
* (~1/10000 per pair) collision window; a colliding id would cross-wire two
|
|
51
|
+
* ads' event streams. The counter closes that window; the timestamp/random
|
|
52
|
+
* still disambiguate ids across separate app launches.
|
|
53
|
+
*/
|
|
54
|
+
private static _counter;
|
|
55
|
+
private static _generateUniqueId;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=NovvyAd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NovvyAd.d.ts","sourceRoot":"","sources":["../../../src/ads/NovvyAd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG5D;;;;;;GAMG;AACH,8BAAsB,OAAO;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,SAAS,CAAC,QAAQ,UAAS;IAC3B,SAAS,CAAC,SAAS,UAAS;IAE5B,OAAO,CAAC,YAAY,CAA6B;IAEjD,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;gBAE/B,QAAQ,EAAE,MAAM;IAK5B,iDAAiD;IACjD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,kDAAkD;IAClD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;OAGG;IACH,SAAS,CAAC,UAAU,IAAI,IAAI;IAS5B;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAaZ,6CAA6C;IAC7C,OAAO,IAAI,IAAI;IAWf,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI;IACtC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAEnE;;;OAGG;IACH,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO;IAgB1D;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAK;IAE5B,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAMjC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { NovvyFullScreenAd } from './NovvyFullScreenAd';
|
|
2
|
+
/** An end-roll (full-screen) ad, shown after an episode finishes. */
|
|
3
|
+
export declare class NovvyEndAd extends NovvyFullScreenAd {
|
|
4
|
+
protected _loadNative(): void;
|
|
5
|
+
show(): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=NovvyEndAd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NovvyEndAd.d.ts","sourceRoot":"","sources":["../../../src/ads/NovvyEndAd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qEAAqE;AACrE,qBAAa,UAAW,SAAQ,iBAAiB;IAC/C,SAAS,CAAC,WAAW,IAAI,IAAI;IAI7B,IAAI,IAAI,IAAI;CAIb"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NativeAdEvent } from '../spec/NativeNovvyAds';
|
|
2
|
+
import { NovvyAd } from './NovvyAd';
|
|
3
|
+
/**
|
|
4
|
+
* Base for full-screen ads that follow load → show → dismissed.
|
|
5
|
+
* Mirrors the Flutter plugin's `_NovvyFullScreenAd`.
|
|
6
|
+
*/
|
|
7
|
+
export declare abstract class NovvyFullScreenAd extends NovvyAd {
|
|
8
|
+
/** Called when the ad is displayed. */
|
|
9
|
+
onAdShowed?: () => void;
|
|
10
|
+
/** Called when the ad is dismissed (closed) by the user. */
|
|
11
|
+
onAdDismissed?: () => void;
|
|
12
|
+
/** Shows the ad. Must be called after it has loaded. */
|
|
13
|
+
abstract show(): void;
|
|
14
|
+
protected _handleInternalEvent(event: NativeAdEvent): void;
|
|
15
|
+
protected _assertReady(): void;
|
|
16
|
+
/** Uses the module accessor in subclasses. */
|
|
17
|
+
protected get native(): import("../spec/NativeNovvyAds").Spec;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=NovvyFullScreenAd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NovvyFullScreenAd.d.ts","sourceRoot":"","sources":["../../../src/ads/NovvyFullScreenAd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;GAGG;AACH,8BAAsB,iBAAkB,SAAQ,OAAO;IACrD,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAE3B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,IAAI,IAAI;IAErB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAiB1D,SAAS,CAAC,YAAY,IAAI,IAAI;IAM9B,8CAA8C;IAC9C,SAAS,KAAK,MAAM,0CAEnB;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { NovvyFullScreenAd } from './NovvyFullScreenAd';
|
|
2
|
+
/** An interstitial (full-screen) ad. */
|
|
3
|
+
export declare class NovvyInterstitialAd extends NovvyFullScreenAd {
|
|
4
|
+
protected _loadNative(): void;
|
|
5
|
+
show(): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=NovvyInterstitialAd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NovvyInterstitialAd.d.ts","sourceRoot":"","sources":["../../../src/ads/NovvyInterstitialAd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,wCAAwC;AACxC,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,SAAS,CAAC,WAAW,IAAI,IAAI;IAI7B,IAAI,IAAI,IAAI;CAIb"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { NovvyFullScreenAd } from './NovvyFullScreenAd';
|
|
2
|
+
/** A mid-roll (full-screen) ad, shown at an in-episode break. */
|
|
3
|
+
export declare class NovvyMidAd extends NovvyFullScreenAd {
|
|
4
|
+
protected _loadNative(): void;
|
|
5
|
+
show(): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=NovvyMidAd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NovvyMidAd.d.ts","sourceRoot":"","sources":["../../../src/ads/NovvyMidAd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,iEAAiE;AACjE,qBAAa,UAAW,SAAQ,iBAAiB;IAC/C,SAAS,CAAC,WAAW,IAAI,IAAI;IAI7B,IAAI,IAAI,IAAI;CAIb"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { NativeAdEvent } from '../spec/NativeNovvyAds';
|
|
2
|
+
import { type NovvyPlayerAdapter } from '../types';
|
|
3
|
+
import { NovvyAd } from './NovvyAd';
|
|
4
|
+
/**
|
|
5
|
+
* A realtime pause card (fixed 260×90) shown while the player is paused.
|
|
6
|
+
*
|
|
7
|
+
* Unlike other ads there is **no** {@link load} step: embedding
|
|
8
|
+
* `<NovvyPauseAdView>` issues the request immediately via {@link attach}.
|
|
9
|
+
* Show it the moment playback is paused and {@link destroy} on resume
|
|
10
|
+
* ({@link onAdHidden}). Mirrors the Flutter plugin's `NovvyPauseAd`.
|
|
11
|
+
*/
|
|
12
|
+
export declare class NovvyPauseAd extends NovvyAd {
|
|
13
|
+
/** The Fabric component name used by `<NovvyPauseAdView>`. */
|
|
14
|
+
static readonly viewType = "NovvyPauseAdView";
|
|
15
|
+
/** Pause card width in logical pixels (matches native SDK). */
|
|
16
|
+
static readonly cardWidth = 260;
|
|
17
|
+
/** Pause card height in logical pixels (matches native SDK). */
|
|
18
|
+
static readonly cardHeight = 90;
|
|
19
|
+
/** Called when the pause card is shown. */
|
|
20
|
+
onAdShowed?: () => void;
|
|
21
|
+
/** Called when the card is hidden (playback resumed). */
|
|
22
|
+
onAdHidden?: () => void;
|
|
23
|
+
/**
|
|
24
|
+
* Called when the native card's shown state changes, so a view can toggle
|
|
25
|
+
* touch passthrough / opacity (mirrors Flutter's `shownNotifier`).
|
|
26
|
+
*/
|
|
27
|
+
onShownChanged?: (shown: boolean) => void;
|
|
28
|
+
private _player;
|
|
29
|
+
private _timer;
|
|
30
|
+
protected _loadNative(): never;
|
|
31
|
+
/**
|
|
32
|
+
* Attach the pause ad and issue the request in realtime.
|
|
33
|
+
*
|
|
34
|
+
* The player's current state is read once and sent with the request; a
|
|
35
|
+
* 500ms timer then keeps pushing state so the SDK can detect resumption.
|
|
36
|
+
*/
|
|
37
|
+
attach(player: NovvyPlayerAdapter): void;
|
|
38
|
+
/** Detach the pause ad and stop pushing player state. */
|
|
39
|
+
detach(): void;
|
|
40
|
+
destroy(): void;
|
|
41
|
+
private _startPlayerTimer;
|
|
42
|
+
private _stopPlayerTimer;
|
|
43
|
+
protected _handleInternalEvent(event: NativeAdEvent): void;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=NovvyPauseAd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NovvyPauseAd.d.ts","sourceRoot":"","sources":["../../../src/ads/NovvyPauseAd.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;;;;GAOG;AACH,qBAAa,YAAa,SAAQ,OAAO;IACvC,8DAA8D;IAC9D,MAAM,CAAC,QAAQ,CAAC,QAAQ,sBAAsB;IAC9C,+DAA+D;IAC/D,MAAM,CAAC,QAAQ,CAAC,SAAS,OAAO;IAChC,gEAAgE;IAChE,MAAM,CAAC,QAAQ,CAAC,UAAU,MAAM;IAEhC,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAE1C,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,MAAM,CAA+C;IAE7D,SAAS,CAAC,WAAW,IAAI,KAAK;IAI9B;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAexC,yDAAyD;IACzD,MAAM,IAAI,IAAI;IAMd,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IAOxB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;CAwB3D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NativeAdEvent } from '../spec/NativeNovvyAds';
|
|
2
|
+
import { NovvyAd } from './NovvyAd';
|
|
3
|
+
/** A rewarded video ad. */
|
|
4
|
+
export declare class NovvyRewardedAd extends NovvyAd {
|
|
5
|
+
/** Called when the ad is displayed. */
|
|
6
|
+
onAdShowed?: () => void;
|
|
7
|
+
/** Called when the ad is dismissed by the user. */
|
|
8
|
+
onAdDismissed?: () => void;
|
|
9
|
+
/**
|
|
10
|
+
* Called once when the user earns the reward. No reward payload — the native
|
|
11
|
+
* SDKs deliver a parameterless signal (grant the host's own reward).
|
|
12
|
+
*/
|
|
13
|
+
onUserEarnedReward?: () => void;
|
|
14
|
+
protected _loadNative(): void;
|
|
15
|
+
/** Shows the rewarded video ad. Must be called after it has loaded. */
|
|
16
|
+
show(): void;
|
|
17
|
+
protected _handleInternalEvent(event: NativeAdEvent): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=NovvyRewardedAd.d.ts.map
|