@singcl/ad-execute-manager 1.0.11 → 1.0.12

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.
@@ -1,6 +1,6 @@
1
1
  export default RewardAdNovelUnlock;
2
- export type IRewordAdConfig = import("../../typings/ad.js").IRewordAdConfig;
3
- export type ICallbackArgs = import("../../typings/ad.js").ICallbackArgs;
2
+ export type IRewordAdConfig = any;
3
+ export type ICallbackArgs = any;
4
4
  export type IConnection = {
5
5
  /**
6
6
  * 广告中途退出回调
@@ -111,4 +111,4 @@ declare class RewardAdNovelUnlock extends RewardAdNovel {
111
111
  */
112
112
  unlockSettings: import("./UnlockSettings").default;
113
113
  }
114
- import RewardAdNovel from '../RewardAdNovel';
114
+ import RewardAdNovel from '../RewardAdNovel.js';
@@ -1,11 +1,11 @@
1
1
  export default RewardAdLaunch;
2
- export type IRewordAdConfig = import("../typings/ad.js").IRewordAdConfig;
3
- export type IConstructArgs = import("../typings/ad.js").IConstructArgs;
2
+ export type IRewordAdConfig = import("../src/typings/ad.js").IRewordAdConfig;
3
+ export type IConstructArgs = import("../src/typings/ad.js").IConstructArgs;
4
4
  /**
5
- * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
5
+ * @typedef {import('../src/typings/ad.js').IRewordAdConfig} IRewordAdConfig
6
6
  */
7
7
  /**
8
- * @typedef {import('../typings/ad.js').IConstructArgs} IConstructArgs
8
+ * @typedef {import('../src/typings/ad.js').IConstructArgs} IConstructArgs
9
9
  */
10
10
  declare class RewardAdLaunch extends RewardAdNovel {
11
11
  /**
@@ -57,7 +57,7 @@ declare class RewardAdLaunch extends RewardAdNovel {
57
57
  _scene: 0;
58
58
  launchSettings: RewardAdLaunchSettings;
59
59
  }
60
- import RewardAdNovel from './RewardAdNovel';
60
+ import RewardAdNovel from './RewardAdNovel.js';
61
61
  declare class RewardAdLaunchSettings {
62
62
  /**
63
63
  *
@@ -88,4 +88,4 @@ declare class RewardAdLaunchSettings {
88
88
  condition(): boolean;
89
89
  }
90
90
  import CommonSettings from './CommonSettings';
91
- import { CountRecorder } from './CountRecorder';
91
+ import { CountRecorder } from '../src/ad/CountRecorder.js';
@@ -1,15 +1,15 @@
1
1
  export default RewardAdLaunchAlone;
2
- export type IRewordAdConfig = import("../typings/ad.js").IRewordAdConfig;
3
- export type IConstructArgs = import("../typings/ad.js").IConstructArgs;
4
- export type CallbackCollection = import("../typings/ad.js").CallbackCollection;
2
+ export type IRewordAdConfig = import("../src/typings/ad.js").IRewordAdConfig;
3
+ export type IConstructArgs = import("../src/typings/ad.js").IConstructArgs;
4
+ export type CallbackCollection = import("../src/typings/ad.js").CallbackCollection;
5
5
  /**
6
- * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
6
+ * @typedef {import('../src/typings/ad.js').IRewordAdConfig} IRewordAdConfig
7
7
  */
8
8
  /**
9
- * @typedef {import('../typings/ad.js').IConstructArgs} IConstructArgs
9
+ * @typedef {import('../src/typings/ad.js').IConstructArgs} IConstructArgs
10
10
  */
11
11
  /**
12
- * @typedef {import('../typings/ad.js').CallbackCollection} CallbackCollection
12
+ * @typedef {import('../src/typings/ad.js').CallbackCollection} CallbackCollection
13
13
  */
14
14
  declare class RewardAdLaunchAlone extends RewardAdNovel {
15
15
  /**
@@ -60,4 +60,4 @@ declare class RewardAdLaunchAlone extends RewardAdNovel {
60
60
  });
61
61
  _scene: 9;
62
62
  }
63
- import RewardAdNovel from './RewardAdNovel';
63
+ import RewardAdNovel from './RewardAdNovel.js';
@@ -1,5 +1,5 @@
1
1
  export default RewardAdNovel;
2
- export type IRewordAdConfig = import("../typings/ad.js").IRewordAdConfig;
2
+ export type IRewordAdConfig = import("../src/typings/ad.js").IRewordAdConfig;
3
3
  export type ICallbackArgs = {
4
4
  /**
5
5
  * 广告执行场景
@@ -104,7 +104,7 @@ export type IRewardedVideoAd = {
104
104
  show: () => Promise<void>;
105
105
  };
106
106
  /**
107
- * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
107
+ * @typedef {import('../src/typings/ad.js').IRewordAdConfig} IRewordAdConfig
108
108
  */
109
109
  /**
110
110
  * @typedef ICallbackArgs
@@ -243,25 +243,25 @@ declare class RewardAdNovel extends RewardAdFather {
243
243
  * 确保广告按顺序执行
244
244
  * @param {Object} [ctx] 上下文对象,用于传递数据和状态
245
245
  * @param {IRewordAdConfig} [ctx.options] 广告执行选项
246
- * @param {import('../typings/ad.js').CallbackCollection} [ctx.collection] 回调集合
246
+ * @param {import('../src/typings/ad.js').CallbackCollection} [ctx.collection] 回调集合
247
247
  *
248
248
  * @returns {Promise.<IEndArgs & ICloseArgs | Undefined>}
249
249
  */
250
250
  addExecuteManager(ctx?: {
251
251
  options?: IRewordAdConfig;
252
- collection?: import("../typings/ad.js").CallbackCollection;
252
+ collection?: import("../src/typings/ad.js").CallbackCollection;
253
253
  }): Promise<(IEndArgs & ICloseArgs) | undefined>;
254
254
  /**
255
255
  * @param {object} [ctx] 广告执行上下文
256
- * @param {import('../typings/ad.js').IRewordAdConfig} [ctx.options] 广告执行选项
257
- * @param {import('../typings/ad.js').CallbackCollection} [ctx.collection] 回调集合
256
+ * @param {import('../src/typings/ad.js').IRewordAdConfig} [ctx.options] 广告执行选项
257
+ * @param {import('../src/typings/ad.js').CallbackCollection} [ctx.collection] 回调集合
258
258
  * @param {Function} next 执行下一个任务的回调函数,手动调用以继续执行流程
259
259
  *
260
260
  * @returns {Promise.<IEndArgs & ICloseArgs | Undefined>}
261
261
  */
262
262
  ad(ctx?: {
263
- options?: import("../typings/ad.js").IRewordAdConfig;
264
- collection?: import("../typings/ad.js").CallbackCollection;
263
+ options?: import("../src/typings/ad.js").IRewordAdConfig;
264
+ collection?: import("../src/typings/ad.js").CallbackCollection;
265
265
  }, next?: Function): Promise<(IEndArgs & ICloseArgs) | undefined>;
266
266
  /**
267
267
  * @param {object} [ctx] 广告执行上下文
@@ -323,7 +323,7 @@ declare class RewardAdNovel extends RewardAdFather {
323
323
  */
324
324
  shift(): void;
325
325
  }
326
- import RewardAdFather from './RewardAdFather';
326
+ import RewardAdFather from '../src/ad/RewardAdFather.js';
327
327
  declare class RewardAdNovelConfig {
328
328
  /**
329
329
  *
@@ -381,4 +381,4 @@ declare class RewardAdNovelConfig {
381
381
  progressTip?: undefined;
382
382
  };
383
383
  }
384
- import CommonSettings from './CommonSettings';
384
+ import CommonSettings from './CommonSettings.js';
@@ -13,13 +13,13 @@ export type ISysConfig = {
13
13
  */
14
14
  read_load_times?: number | undefined;
15
15
  };
16
- export type IRewordAdConfig = import("../typings/ad.js").IRewordAdConfig;
17
- export type IConstructArgs = import("../typings/ad.js").IConstructArgs;
16
+ export type IRewordAdConfig = import("../src/typings/ad.js").IRewordAdConfig;
17
+ export type IConstructArgs = import("../src/typings/ad.js").IConstructArgs;
18
18
  /**
19
- * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
19
+ * @typedef {import('../src/typings/ad.js').IRewordAdConfig} IRewordAdConfig
20
20
  */
21
21
  /**
22
- * @typedef {import('../typings/ad.js').IConstructArgs} IConstructArgs
22
+ * @typedef {import('../src/typings/ad.js').IConstructArgs} IConstructArgs
23
23
  */
24
24
  declare class RewardAdReadingLoad extends RewardAdNovel {
25
25
  /**
@@ -47,7 +47,7 @@ declare class RewardAdReadingLoad extends RewardAdNovel {
47
47
  */
48
48
  satisfy(options: object, callback?: (con: boolean, options: object) => void): void | Promise<void>;
49
49
  }
50
- import RewardAdNovel from './RewardAdNovel';
50
+ import RewardAdNovel from './RewardAdNovel.js';
51
51
  declare class RewardAdReadingLoadSettings {
52
52
  /**
53
53
  *
@@ -80,4 +80,4 @@ declare class RewardAdReadingLoadSettings {
80
80
  condition(): boolean;
81
81
  }
82
82
  import CommonSettings from './CommonSettings';
83
- import Storage from './Storage';
83
+ import Storage from '../src/ad/Storage.js';
@@ -13,13 +13,13 @@ export type ISysConfig = {
13
13
  */
14
14
  read_page_back_ad?: number | undefined;
15
15
  };
16
- export type IRewordAdConfig = import("../typings/ad.js").IRewordAdConfig;
17
- export type IConstructArgs = import("../typings/ad.js").IConstructArgs;
16
+ export type IRewordAdConfig = import("../src/typings/ad.js").IRewordAdConfig;
17
+ export type IConstructArgs = import("../src/typings/ad.js").IConstructArgs;
18
18
  /**
19
- * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
19
+ * @typedef {import('../src/typings/ad.js').IRewordAdConfig} IRewordAdConfig
20
20
  */
21
21
  /**
22
- * @typedef {import('../typings/ad.js').IConstructArgs} IConstructArgs
22
+ * @typedef {import('../src/typings/ad.js').IConstructArgs} IConstructArgs
23
23
  */
24
24
  declare class RewardAdReadingUnload extends RewardAdNovel {
25
25
  /**
@@ -41,4 +41,4 @@ declare class RewardAdReadingUnload extends RewardAdNovel {
41
41
  static satisfy(options: object, callback?: (con: boolean, options: object) => void): void | Promise<void>;
42
42
  constructor(args: any);
43
43
  }
44
- import RewardAdNovel from './RewardAdNovel';
44
+ import RewardAdNovel from './RewardAdNovel.js';
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,r)=>{for(var t in r)__webpack_require__.o(r,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},__webpack_require__.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>src,Storage:()=>ad_Storage,RewardAdGlobalRecorder:()=>ad_RewardAdGlobalRecorder,CountRecorder:()=>CountRecorder,RewardAdSceneTriggerManager:()=>ad_RewardAdSceneTriggerManager,RewardAdFather:()=>ad_RewardAdFather,Logger:()=>Logger,ExbAnalyticsJS:()=>ad_ExbAnalyticsJS,AdExecuteManager:()=>ad_AdExecuteManager,SerializableError:()=>SerializableError});const compose=e=>e.map(e=>(r,t)=>async a=>await e(Object.assign({},r,a),t)).reduce((e,r)=>(t,a)=>e(t,r(t,a))),ad_compose=compose;class Logger{constructor(e={}){const{prefix:r="Logger",level:t="info",enabled:a=!0}=e;this.prefix=r,this.enabled=a,this.levels={error:0,warn:1,info:2,debug:3},this.currentLevel=this.levels[t]||this.levels.info}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}setLevel(e){Object.prototype.hasOwnProperty.call(this.levels,e)&&(this.currentLevel=this.levels[e])}formatMessage(e,r){let t=new Date,a=`${t.getFullYear()}/${t.getMonth()+1}/${t.getDate()} ${t.getHours()}:${t.getMinutes()}:${t.getSeconds()}`;return`[${a}] [${e.toUpperCase()}] [${this.prefix}] ${r}`}_log(e,r,...t){if(!this.enabled)return;let a=this.levels[e];if(void 0!==a&&this.currentLevel>=a){let a=this.formatMessage(e,r);switch(e){case"error":console.error(a,...t);break;case"warn":console.warn(a,...t);break;case"info":console.info(a,...t);break;case"debug":console.debug(a,...t);break;default:console.log(a,...t)}}}error(e,...r){this._log("error",e,...r)}warn(e,...r){this._log("warn",e,...r)}info(e,...r){this._log("info",e,...r)}debug(e,...r){this._log("debug",e,...r)}log(e,r,...t){this._log(e,r,...t)}}class AdExecuteManager{static _instance=null;_taskStack=[];_currentBatchTasks=[];_isRunning=!1;_currentTask=null;constructor(e){if(this.logger=new Logger({prefix:"AdExecuteManager",enabled:!!e?.log}),AdExecuteManager._instance)return AdExecuteManager._instance;AdExecuteManager._instance=this}static getInstance(e){return AdExecuteManager._instance||(AdExecuteManager._instance=new AdExecuteManager(e)),AdExecuteManager._instance}addTask(e,r){return e&&"function"==typeof e.ad?new Promise((t,a)=>{let s={adInstance:e,options:r.options??{},callbackCollection:r.collection??{},resolve:t,reject:a,id:`ad_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_isResolved:!1,_isRejected:!1};this._taskStack.push(s),this._isRunning||this._compose()}):(this.logger.error("无效的广告实例 请正确实现.ad方法"),Promise.reject(Error("无效的广告实例")))}_compose(){if(0===this._taskStack.length){this._isRunning=!1,this._currentTask=null;return}this._isRunning=!0;let e=[...this._taskStack];this._taskStack=[],this._currentBatchTasks=e;let r=e.map(e=>async(r,t)=>{let{adInstance:a,options:s,callbackCollection:n,resolve:i,id:o}=e;if(e._isResolved||e._isRejected)return void await t(r);this._currentTask=e;try{let c=async e=>{await t(Object.assign({},r,e))},l=await a.initialize(s).ad({options:s,collection:n},c),d=Object.assign({id:o},l);this.logger.info(`任务执行成功,成功信息:${JSON.stringify(d)}`),e._isResolved=!0,i(d)}catch(n){let s=Object.assign({id:o,apiError:n});this.logger.error(`任务执行失败, 继续下一个任务,错误信息:${JSON.stringify(s)}`),e._isRejected=!0;try{a?.clear()}catch(e){this.logger.error("clear error: ",JSON.stringify(Object.assign({id:o,apiError:e})))}i(s),await t(r)}}),t={roundTasks:r.length};compose(r)(t,async e=>{this.logger.info("本轮活动队列已经清空",e),this._taskStack.length>0?Promise.resolve().then(()=>{this._compose()}):(this._isRunning=!1,this._currentTask=null,this._currentBatchTasks=[])})()}clearTasks(){if(this._currentTask){if(this._currentTask._isResolved||this._currentTask._isRejected){this._currentTask=null;return}try{this._currentTask.callbackCollection&&this._currentTask.callbackCollection.onCancel&&this._currentTask.callbackCollection.onCancel(),this._currentTask._isResolved=!0,this._currentTask.resolve()}catch(e){this.logger.error("clear current task error: ",e)}this._currentTask=null}this._currentBatchTasks.length>0&&(this._currentBatchTasks.forEach(e=>{if(e!==this._currentTask&&!e._isResolved&&!e._isRejected)try{e.callbackCollection&&e.callbackCollection.onCancel&&e.callbackCollection.onCancel(),e._isResolved=!0,e.resolve()}catch(e){this.logger.error("clear current batch task error: ",e)}}),this._currentBatchTasks=[]),this._taskStack.forEach(e=>{if(!e._isResolved&&!e._isRejected&&(e._isResolved=!0,e.resolve(),e.callbackCollection&&e.callbackCollection.onCancel))try{e.callbackCollection.onCancel()}catch(e){this.logger.error("clear task error: ",e)}}),this._taskStack=[],this._isRunning=!1}getTaskCount(){return this._taskStack.filter(e=>!e._isResolved&&!e._isRejected).length+this._currentBatchTasks.filter(e=>e!==this._currentTask&&!e._isResolved&&!e._isRejected).length+(!this._currentTask||this._currentTask._isResolved||this._currentTask._isRejected?0:1)}isRunning(){return this._isRunning}getCurrentTaskId(){return this._currentTask?.id||null}}const ad_AdExecuteManager=AdExecuteManager;class SerializableError extends Error{constructor(e){super(e),this.name=this.constructor.name,this.stack=Error(e).stack,Object.defineProperty(this,"message",{enumerable:!0}),Object.defineProperty(this,"name",{enumerable:!0}),Object.defineProperty(this,"stack",{enumerable:!0})}toJSON(){return{name:this.name,message:this.message,stack:this.stack}}}class RewardAdFather{static args=null;_initSign="";_preserveOnEnd=!1;_rewardAd=null;_ttErrorMsgs=["The adUnitId is closed","The adUnitId is prohibit","The adUnitId is invalid","The adUnitId is empty","feature is not supported in app"];_ttErrorCodes=[139902,123302];constructor(e){this._initSign=e?.sign??"",this._adConfig=e?.adConfig??{},this._preserveOnEnd=e?.preserveOnEnd??!1}initialize(e,r){if(this._rewardAd)return console.warn("RewardAdFather: rewardAd has been initialized"),r?.(this._rewardAd),this;let t=Object.assign({},RewardAdFather.args,this._adConfig,e);if(!t.adUnitId)throw console.error("[RewardAdFather] reward args adUnitId is required",t),new SerializableError("[RewardAdFather] reward args adUnitId is required");return this._rewardAd=tt.createRewardedVideoAd(t),r?.(this._rewardAd),this}initialized(){return!!this._rewardAd}async ad(e,r=null){throw Error("子类必须实现ad方法")}async addExecuteManager(e){let r=Object.assign({},this._adConfig,e?.options??{});return RewardAdFather.executeWithManager(this,Object.assign({},e,{options:r}))}destroy(){this._rewardAd&&!this._preserveOnEnd&&(this._rewardAd.destroy(),this._rewardAd=null)}clear(){throw Error("子类必须实现clear方法")}onClose(e){this._rewardAd&&this._rewardAd.onClose(e)}offClose(e){this._rewardAd&&this._rewardAd.offClose(e)}show(){return this._rewardAd?this._rewardAd.show():Promise.reject({errMsg:"rewardAd is null"})}load(){if(this._rewardAd)return this._rewardAd.load()}onError(e){this._rewardAd&&this._rewardAd.onError(e)}offError(e){this._rewardAd&&this._rewardAd.offError(e)}onLoad(e){this._rewardAd&&this._rewardAd.onLoad(e)}offLoad(e){this._rewardAd&&this._rewardAd.offLoad(e)}placeholder(){return null}static buildArgs(e){e?.adUnitId||console.error("[RewardAdFather] RewardParams.adUnitId is required"),RewardAdFather.args=e}static async executeWithManager(e,r){return e&&e instanceof RewardAdFather?ad_AdExecuteManager.getInstance({log:r?.options?.log??!0}).addTask(e,r):(console.error("RewardAdFather: executeWithManager - 无效的广告实例"),Promise.reject(Error("无效的广告实例")))}}const ad_RewardAdFather=RewardAdFather;class Storage{constructor(e={}){this.config={prefix:"storage_",expire:null,...e},this.logger=new Logger({prefix:"Storage"})}getTodayEndTimestamp(){let e=new Date;return new Date(e.getFullYear(),e.getMonth(),e.getDate(),23,59,59,999).getTime()}_setItem(e,r,t){let a=void 0!==t?t:this.config.expire;"today"===a&&(a=this.getTodayEndTimestamp()-Date.now());let s={value:r,expire:a,timestamp:Date.now()};try{tt.setStorageSync(e,JSON.stringify(s))}catch(e){console.error("Storage setItem error:",e)}}_getItem(e){try{let r=tt.getStorageSync(e);if(!r)return null;let t=JSON.parse(r);if(t.expire&&Date.now()-t.timestamp>t.expire)return this.removeItem(e),null;return t.value}catch(e){return console.error("Storage getItem error:",e),null}}setItem(e,r,t){let a=this.config.prefix+e;return this._setItem(a,r,t)}getItem(e){let r=this.config.prefix+e;return this._getItem(r)}getUserItem(e){let r=this.config.userId??"null";if("null"===r)return this.logger.error("userId is required"),null;let t=`${this.config.prefix}_${r}_${e}`;return this._getItem(t)}setUserItem(e,r,t){let a=this.config.userId??"null";if("null"===a)return void this.logger.error("userId is required");let s=`${this.config.prefix}_${a}_${e}`;return this._setItem(s,r,t)}removeItem(e){try{tt.removeStorageSync(e)}catch(e){console.error("Storage removeItem error:",e)}}clear(){try{tt.clearStorageSync()}catch(e){console.error("Storage clear error:",e)}}keys(){try{let e=[];return(tt.getStorageInfoSync().keys??[]).forEach(r=>{if(r.startsWith(this.config.prefix)){let t=JSON.parse(tt.getStorageSync(r));(!t.expire||Date.now()-t.timestamp<=t.expire)&&e.push(r.replace(this.config.prefix,""))}}),e}catch(e){return console.error("Storage keys error:",e),[]}}static new(e){return new Storage(e)}}const ad_Storage=Storage;class CountRecorder{_total=0;_local_sign="";_expire="today";constructor(e){if(this.storage=ad_Storage.new({userId:e.userId}),!e.local_sign)throw Error("local_sign is required");this._local_sign=e.local_sign,this._total=e.total??0,this._expire=e.expire??"today",this._init()}_init(){this._initLocalTimes()}_adTimes(){return this._total}_safeLocalValue(e){return"object"!=typeof e||null===e?{}:e}_initLocalTimes(){let e=this._adTimes(),r=this.storage.getUserItem(this._local_sign),t=this._safeLocalValue(r);t&&t?.total==e||this.storage.setUserItem(this._local_sign,{total:e,today:t?.today??0},this._expire)}updateToday(){let e=this._adTimes(),r=this.storage.getUserItem(this._local_sign),t=this._safeLocalValue(r),a=t?.today??0;this.storage.setUserItem(this._local_sign,{total:e,today:a+1},this._expire)}remain(){let e=this.storage.getUserItem(this._local_sign),r=this._safeLocalValue(e),t=r?.today??0;return Number(r?.total??0)-Number(t)}static new(e){return new CountRecorder(e)}}const SCENT_TYPE_OBJ={0:"launch_ad",1:"novel_plugin_strong_ad",2:"novel_plugin_unlock_btn",3:"novel_plugin_free_benefit_btn",4:"home_free_welfare_btn",5:"home_free_popup",6:"other",7:"home_back_show",8:"novel_plugin_free_time_btn",9:"launch_ad_alone"},SCENT_TEXT_OBJ=Object.entries(SCENT_TYPE_OBJ).reduce((e,[r,t])=>(e[t]=Number(r),e),{});class RewardAdGlobalRecorder{static instance=null;_initSign="";_halfway=[{scene:SCENT_TEXT_OBJ.other,count:0}];_finished=[{scene:SCENT_TEXT_OBJ.other,count:0}];constructor(e){if(RewardAdGlobalRecorder.instance)return RewardAdGlobalRecorder.instance;this._initSign=e?.sign??"",RewardAdGlobalRecorder.instance=this}initialize(e){}_halfwayUpdate(e){let r=this._halfway.find(r=>r.scene===e.scene);r?r.count+=1:this._halfway.push({scene:e.scene,count:1})}_halfwayGet(e){let r=e?.scenes??[];return(r.length>0?this._halfway.filter(e=>r.includes(e.scene)):this._halfway).reduce((e,r)=>e+r.count,0)}_halfwayReset(){this._halfway=[{scene:SCENT_TEXT_OBJ.other,count:0}]}_finishedUpdate(e){let r=this._finished.find(r=>r.scene===e.scene);r?r.count+=1:this._finished.push({scene:e.scene,count:1})}_finishedGet(e){let r=e?.scenes??[];return(r.length>0?this._finished.filter(e=>r.includes(e.scene)):this._finished).reduce((e,r)=>e+r.count,0)}_finishedReset(){this._finished=[{scene:SCENT_TEXT_OBJ.other,count:0}]}record(e){switch(e.type){case"halfway":this._halfwayUpdate(e);break;case"finished":this._finishedUpdate(e)}}rest(e){switch(e){case"halfway":this._halfwayReset();break;case"finished":this._finishedReset()}}get(e){switch(e.type){case"halfway":return this._halfwayGet(e);case"finished":return this._finishedGet(e);default:return null}}placeholder(){return null}static build(e){return RewardAdGlobalRecorder.instance||(RewardAdGlobalRecorder.instance=new RewardAdGlobalRecorder(e)),RewardAdGlobalRecorder.instance}static getInstance(){if(!RewardAdGlobalRecorder.instance)throw Error("RewardAdGlobalRecorder instance is not init");return RewardAdGlobalRecorder.instance}}const ad_RewardAdGlobalRecorder=RewardAdGlobalRecorder;class RewardAdSceneTriggerManager{static instance=null;_initSign="";_currScene=null;constructor(e){if(RewardAdSceneTriggerManager.instance)return RewardAdSceneTriggerManager.instance;this._initSign=e?.sign??"",RewardAdSceneTriggerManager.instance=this}initialize(e){}addScene(e){return console.log("----------------------AD触发场景:--------------------",e),this._currScene=e,this}addSceneType(e=1){return this.addScene(SCENT_TYPE_OBJ[e]),this}getCurrentScene(){return this._currScene}placeholder(){return null}static build(e){return RewardAdSceneTriggerManager.instance||(RewardAdSceneTriggerManager.instance=new RewardAdSceneTriggerManager(e)),RewardAdSceneTriggerManager.instance}static getInstance(){if(!RewardAdSceneTriggerManager.instance)throw Error("RewardAdSceneTriggerManager instance is not init");return RewardAdSceneTriggerManager.instance}}const ad_RewardAdSceneTriggerManager=RewardAdSceneTriggerManager;class ExbAnalyticsJS{static instance=null;_initSign="";_needReport=!1;constructor(e){if(ExbAnalyticsJS.instance)return ExbAnalyticsJS.instance;this._initSign=e?.sign??"",this._needReport=e?.needReport??!1,this._userConfig=e?.userConfig??null,ExbAnalyticsJS.instance=this}initialize(e){return this._needReport?e:void console.warn("ExbAnalyticsJS needReport is false, do not report")}track(e,r,t){if(!this._needReport)return;if(!e)throw Error("eventName is required");let a=Object.assign({},this._getCommonUserInfo(),r),s=t?.sign??"track";console.log(`-------------${s}-----------------------:`,e,a),tt.reportAnalytics(e,a)}_getCommonUserInfo(){let{user_id:e,user_type:r,user_group:t}=this._userConfig??{};return{user_id:e,user_type:r,user_group:t}}identify(){return null}alias(){return null}pages(){return null}page(e,r){this.track(e,r,{sign:"page"})}cpage(e){return this.page("cpage",e)}placeholder(){return null}static build(e){return ExbAnalyticsJS.instance||(ExbAnalyticsJS.instance=new ExbAnalyticsJS(e)),ExbAnalyticsJS.instance}static getInstance(){if(!ExbAnalyticsJS.instance)throw Error("ExbAnalyticsJS instance is not init");return ExbAnalyticsJS.instance}static new(e){return new ExbAnalyticsJS(e)}}const ad_ExbAnalyticsJS=ExbAnalyticsJS,src=ad_AdExecuteManager;for(var __rspack_i in exports.AdExecuteManager=__webpack_exports__.AdExecuteManager,exports.CountRecorder=__webpack_exports__.CountRecorder,exports.ExbAnalyticsJS=__webpack_exports__.ExbAnalyticsJS,exports.Logger=__webpack_exports__.Logger,exports.RewardAdFather=__webpack_exports__.RewardAdFather,exports.RewardAdGlobalRecorder=__webpack_exports__.RewardAdGlobalRecorder,exports.RewardAdSceneTriggerManager=__webpack_exports__.RewardAdSceneTriggerManager,exports.SerializableError=__webpack_exports__.SerializableError,exports.Storage=__webpack_exports__.Storage,exports.default=__webpack_exports__.default,__webpack_exports__)-1===["AdExecuteManager","CountRecorder","ExbAnalyticsJS","Logger","RewardAdFather","RewardAdGlobalRecorder","RewardAdSceneTriggerManager","SerializableError","Storage","default"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,r)=>{for(var t in r)__webpack_require__.o(r,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},__webpack_require__.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>src,Storage:()=>ad_Storage,RewardAdGlobalRecorder:()=>ad_RewardAdGlobalRecorder,CountRecorder:()=>CountRecorder,RewardAdSceneTriggerManager:()=>ad_RewardAdSceneTriggerManager,RewardAdFather:()=>ad_RewardAdFather,Logger:()=>Logger,ExbAnalyticsJS:()=>ad_ExbAnalyticsJS,AdExecuteManager:()=>ad_AdExecuteManager,SerializableError:()=>SerializableError});const compose=e=>e.map(e=>(r,t)=>async a=>await e(Object.assign({},r,a),t)).reduce((e,r)=>(t,a)=>e(t,r(t,a))),ad_compose=compose;class Logger{constructor(e={}){const{prefix:r="Logger",level:t="info",enabled:a=!0}=e;this.prefix=r,this.enabled=a,this.levels={error:0,warn:1,info:2,debug:3},this.currentLevel=this.levels[t]||this.levels.info}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}setLevel(e){Object.prototype.hasOwnProperty.call(this.levels,e)&&(this.currentLevel=this.levels[e])}formatMessage(e,r){let t=new Date,a=`${t.getFullYear()}/${t.getMonth()+1}/${t.getDate()} ${t.getHours()}:${t.getMinutes()}:${t.getSeconds()}`;return`[${a}] [${e.toUpperCase()}] [${this.prefix}] ${r}`}_log(e,r,...t){if(!this.enabled)return;let a=this.levels[e];if(void 0!==a&&this.currentLevel>=a){let a=this.formatMessage(e,r);switch(e){case"error":console.error(a,...t);break;case"warn":console.warn(a,...t);break;case"info":console.info(a,...t);break;case"debug":console.debug(a,...t);break;default:console.log(a,...t)}}}error(e,...r){this._log("error",e,...r)}warn(e,...r){this._log("warn",e,...r)}info(e,...r){this._log("info",e,...r)}debug(e,...r){this._log("debug",e,...r)}log(e,r,...t){this._log(e,r,...t)}}class AdExecuteManager{static _instance=null;_taskStack=[];_currentBatchTasks=[];_isRunning=!1;_currentTask=null;constructor(e){if(this.logger=new Logger({prefix:"AdExecuteManager",enabled:!!e?.log}),AdExecuteManager._instance)return AdExecuteManager._instance;AdExecuteManager._instance=this}static getInstance(e){return AdExecuteManager._instance||(AdExecuteManager._instance=new AdExecuteManager(e)),AdExecuteManager._instance}addTask(e,r){return e&&"function"==typeof e.ad?new Promise((t,a)=>{let s={adInstance:e,options:r.options??{},callbackCollection:r.collection??{},resolve:t,reject:a,id:`ad_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_isResolved:!1,_isRejected:!1};this._taskStack.push(s),this._isRunning||this._compose()}):(this.logger.error("无效的广告实例 请正确实现.ad方法"),Promise.reject(Error("无效的广告实例")))}_compose(){if(0===this._taskStack.length){this._isRunning=!1,this._currentTask=null;return}this._isRunning=!0;let e=[...this._taskStack];this._taskStack=[],this._currentBatchTasks=e;let r=e.map(e=>async(r,t)=>{let{adInstance:a,options:s,callbackCollection:i,resolve:n,id:o}=e;if(e._isResolved||e._isRejected)return void await t(r);this._currentTask=e;try{let c=async e=>{await t(Object.assign({},r,e))},l=await a.initialize(s).ad({options:s,collection:i},c),d=Object.assign({id:o},l);this.logger.info(`任务执行成功,成功信息:${JSON.stringify(d)}`),e._isResolved=!0,n(d)}catch(i){let s=Object.assign({id:o,apiError:i});this.logger.error(`任务执行失败, 继续下一个任务,错误信息:${JSON.stringify(s)}`),e._isRejected=!0;try{a?.clear()}catch(e){this.logger.error("clear error: ",JSON.stringify(Object.assign({id:o,apiError:e})))}n(s),await t(r)}}),t={roundTasks:r.length};compose(r)(t,async e=>{this.logger.info("本轮活动队列已经清空",e),this._taskStack.length>0?Promise.resolve().then(()=>{this._compose()}):(this._isRunning=!1,this._currentTask=null,this._currentBatchTasks=[])})()}clearTasks(){if(this._currentTask){if(this._currentTask._isResolved||this._currentTask._isRejected){this._currentTask=null;return}try{this._currentTask.callbackCollection&&this._currentTask.callbackCollection.onCancel&&this._currentTask.callbackCollection.onCancel(),this._currentTask._isResolved=!0,this._currentTask.resolve()}catch(e){this.logger.error("clear current task error: ",e)}this._currentTask=null}this._currentBatchTasks.length>0&&(this._currentBatchTasks.forEach(e=>{if(e!==this._currentTask&&!e._isResolved&&!e._isRejected)try{e.callbackCollection&&e.callbackCollection.onCancel&&e.callbackCollection.onCancel(),e._isResolved=!0,e.resolve()}catch(e){this.logger.error("clear current batch task error: ",e)}}),this._currentBatchTasks=[]),this._taskStack.forEach(e=>{if(!e._isResolved&&!e._isRejected&&(e._isResolved=!0,e.resolve(),e.callbackCollection&&e.callbackCollection.onCancel))try{e.callbackCollection.onCancel()}catch(e){this.logger.error("clear task error: ",e)}}),this._taskStack=[],this._isRunning=!1}getTaskCount(){return this._taskStack.filter(e=>!e._isResolved&&!e._isRejected).length+this._currentBatchTasks.filter(e=>e!==this._currentTask&&!e._isResolved&&!e._isRejected).length+(!this._currentTask||this._currentTask._isResolved||this._currentTask._isRejected?0:1)}isRunning(){return this._isRunning}getCurrentTaskId(){return this._currentTask?.id||null}}const ad_AdExecuteManager=AdExecuteManager;class SerializableError extends Error{constructor(e){super(e),this.name=this.constructor.name,this.stack=Error(e).stack,Object.defineProperty(this,"message",{enumerable:!0}),Object.defineProperty(this,"name",{enumerable:!0}),Object.defineProperty(this,"stack",{enumerable:!0})}toJSON(){return{name:this.name,message:this.message,stack:this.stack}}}class RewardAdFather{static args=null;_initSign="";_preserveOnEnd=!1;_rewardAd=null;_ttErrorMsgs=["The adUnitId is closed","The adUnitId is prohibit","The adUnitId is invalid","The adUnitId is empty","feature is not supported in app"];_ttErrorCodes=[139902,123302];constructor(e){this._initSign=e?.sign??"",this._adConfig=e?.adConfig??{},this._preserveOnEnd=e?.preserveOnEnd??!1}initialize(e,r){if(this._rewardAd)return console.warn("RewardAdFather: rewardAd has been initialized"),r?.(this._rewardAd),this;let t=Object.assign({},RewardAdFather.args,this._adConfig,e);if(!t.adUnitId)throw console.error("[RewardAdFather] reward args adUnitId is required",t),new SerializableError("[RewardAdFather] reward args adUnitId is required");return this._rewardAd=tt.createRewardedVideoAd(t),r?.(this._rewardAd),this}initialized(){return!!this._rewardAd}async ad(e,r=null){throw Error("子类必须实现ad方法")}async addExecuteManager(e){let r=Object.assign({},this._adConfig,e?.options??{});return RewardAdFather.executeWithManager(this,Object.assign({},e,{options:r}))}destroy(){this._rewardAd&&!this._preserveOnEnd&&(this._rewardAd.destroy(),this._rewardAd=null)}clear(){throw Error("子类必须实现clear方法")}onClose(e){this._rewardAd&&this._rewardAd.onClose(e)}offClose(e){this._rewardAd&&this._rewardAd.offClose(e)}show(){return this._rewardAd?this._rewardAd.show():Promise.reject({errMsg:"rewardAd is null"})}load(){if(this._rewardAd)return this._rewardAd.load()}onError(e){this._rewardAd&&this._rewardAd.onError(e)}offError(e){this._rewardAd&&this._rewardAd.offError(e)}onLoad(e){this._rewardAd&&this._rewardAd.onLoad(e)}offLoad(e){this._rewardAd&&this._rewardAd.offLoad(e)}placeholder(){return null}static buildArgs(e){e?.adUnitId||console.error("[RewardAdFather] RewardParams.adUnitId is required"),RewardAdFather.args=e}static async executeWithManager(e,r){return e&&e instanceof RewardAdFather?ad_AdExecuteManager.getInstance({log:r?.options?.log??!0}).addTask(e,r):(console.error("RewardAdFather: executeWithManager - 无效的广告实例"),Promise.reject(Error("无效的广告实例")))}}const ad_RewardAdFather=RewardAdFather;class Storage{constructor(e={}){this.config={prefix:"storage_",expire:null,...e},this.logger=new Logger({prefix:"Storage"})}getTodayEndTimestamp(){let e=new Date;return new Date(e.getFullYear(),e.getMonth(),e.getDate(),23,59,59,999).getTime()}_setItem(e,r,t){let a=void 0!==t?t:this.config.expire;"today"===a&&(a=this.getTodayEndTimestamp()-Date.now());let s={value:r,expire:a,timestamp:Date.now()};try{tt.setStorageSync(e,JSON.stringify(s))}catch(e){console.error("Storage setItem error:",e)}}_getItem(e){try{let r=tt.getStorageSync(e);if(!r)return null;let t=JSON.parse(r);if(t.expire&&Date.now()-t.timestamp>t.expire)return this.removeItem(e),null;return t.value}catch(e){return console.error("Storage getItem error:",e),null}}setItem(e,r,t){let a=this.config.prefix+e;return this._setItem(a,r,t)}getItem(e){let r=this.config.prefix+e;return this._getItem(r)}getUserItem(e){let r=this.config.userId??"null";if("null"===r)return this.logger.error("userId is required"),null;let t=`${this.config.prefix}_${r}_${e}`;return this._getItem(t)}setUserItem(e,r,t){let a=this.config.userId??"null";if("null"===a)return void this.logger.error("userId is required");let s=`${this.config.prefix}_${a}_${e}`;return this._setItem(s,r,t)}removeItem(e){try{tt.removeStorageSync(e)}catch(e){console.error("Storage removeItem error:",e)}}clear(){try{tt.clearStorageSync()}catch(e){console.error("Storage clear error:",e)}}keys(){try{let e=[];return(tt.getStorageInfoSync().keys??[]).forEach(r=>{if(r.startsWith(this.config.prefix)){let t=JSON.parse(tt.getStorageSync(r));(!t.expire||Date.now()-t.timestamp<=t.expire)&&e.push(r.replace(this.config.prefix,""))}}),e}catch(e){return console.error("Storage keys error:",e),[]}}static new(e){return new Storage(e)}}const ad_Storage=Storage;class CountRecorder{_total=0;_local_sign="";_expire="today";constructor(e){if(this.storage=ad_Storage.new({userId:e.userId}),!e.local_sign)throw Error("local_sign is required");this._local_sign=e.local_sign,this._total=e.total??0,this._expire=e.expire??"today",this._init()}_init(){this._initLocalTimes()}_adTimes(){return this._total}_safeLocalValue(e){return"object"!=typeof e||null===e?{}:e}_initLocalTimes(){let e=this._adTimes(),r=this.storage.getUserItem(this._local_sign),t=this._safeLocalValue(r);t&&t?.total==e||this.storage.setUserItem(this._local_sign,{total:e,today:t?.today??0},this._expire)}updateToday(){let e=this._adTimes(),r=this.storage.getUserItem(this._local_sign),t=this._safeLocalValue(r),a=t?.today??0;this.storage.setUserItem(this._local_sign,{total:e,today:a+1},this._expire)}remain(){let e=this.storage.getUserItem(this._local_sign),r=this._safeLocalValue(e),t=r?.today??0;return Number(r?.total??0)-Number(t)}static new(e){return new CountRecorder(e)}}const SCENT_TYPE_OBJ={0:"launch_ad",1:"novel_plugin_strong_ad",2:"novel_plugin_unlock_btn",3:"novel_plugin_free_benefit_btn",4:"home_free_welfare_btn",5:"home_free_popup",6:"other",7:"home_back_show",8:"novel_plugin_free_time_btn",9:"launch_ad_alone"},SCENT_TEXT_OBJ=Object.entries(SCENT_TYPE_OBJ).reduce((e,[r,t])=>(e[t]=Number(r),e),{});class RewardAdGlobalRecorder{static instance=null;_initSign="";_halfway=[{scene:SCENT_TEXT_OBJ.other,count:0}];_finished=[{scene:SCENT_TEXT_OBJ.other,count:0}];constructor(e){if(RewardAdGlobalRecorder.instance)return RewardAdGlobalRecorder.instance;this._initSign=e?.sign??"",RewardAdGlobalRecorder.instance=this}initialize(e){}_halfwayUpdate(e){let r=this._halfway.find(r=>r.scene===e.scene);r?r.count+=1:this._halfway.push({scene:e.scene,count:1})}_halfwayGet(e){let r=e?.scenes??[];return(r.length>0?this._halfway.filter(e=>r.includes(e.scene)):this._halfway).reduce((e,r)=>e+r.count,0)}_halfwayReset(){this._halfway=[{scene:SCENT_TEXT_OBJ.other,count:0}]}_finishedUpdate(e){let r=this._finished.find(r=>r.scene===e.scene);r?r.count+=1:this._finished.push({scene:e.scene,count:1})}_finishedGet(e){let r=e?.scenes??[];return(r.length>0?this._finished.filter(e=>r.includes(e.scene)):this._finished).reduce((e,r)=>e+r.count,0)}_finishedReset(){this._finished=[{scene:SCENT_TEXT_OBJ.other,count:0}]}record(e){switch(e.type){case"halfway":this._halfwayUpdate(e);break;case"finished":this._finishedUpdate(e)}}rest(e){switch(e){case"halfway":this._halfwayReset();break;case"finished":this._finishedReset()}}get(e){switch(e.type){case"halfway":return this._halfwayGet(e);case"finished":return this._finishedGet(e);default:return null}}placeholder(){return null}static build(e){return RewardAdGlobalRecorder.instance||(RewardAdGlobalRecorder.instance=new RewardAdGlobalRecorder(e)),RewardAdGlobalRecorder.instance}static getInstance(){if(!RewardAdGlobalRecorder.instance)throw Error("RewardAdGlobalRecorder instance is not init");return RewardAdGlobalRecorder.instance}}const ad_RewardAdGlobalRecorder=RewardAdGlobalRecorder;class RewardAdSceneTriggerManager{static instance=null;_initSign="";_currScene=null;constructor(e){if(RewardAdSceneTriggerManager.instance)return RewardAdSceneTriggerManager.instance;this._initSign=e?.sign??"",RewardAdSceneTriggerManager.instance=this}initialize(e){}addScene(e){return console.log("----------------------AD触发场景:--------------------",e),this._currScene=e,this}addSceneType(e=1){return this.addScene(SCENT_TYPE_OBJ[e]),this}getCurrentScene(){return this._currScene}placeholder(){return null}static build(e){return RewardAdSceneTriggerManager.instance||(RewardAdSceneTriggerManager.instance=new RewardAdSceneTriggerManager(e)),RewardAdSceneTriggerManager.instance}static getInstance(){if(!RewardAdSceneTriggerManager.instance)throw Error("RewardAdSceneTriggerManager instance is not init");return RewardAdSceneTriggerManager.instance}}const ad_RewardAdSceneTriggerManager=RewardAdSceneTriggerManager;class ExbAnalyticsJS{static instance=null;_initSign="";_needReport=!1;constructor(e){if(ExbAnalyticsJS.instance)return ExbAnalyticsJS.instance;this._initSign=e?.sign??"",this._needReport=e?.needReport??!1,this._userConfig=e?.userConfig??null,ExbAnalyticsJS.instance=this}initialize(e){return this._needReport?e:void console.warn("ExbAnalyticsJS needReport is false, do not report")}track(e,r,t){if(!this._needReport)return;if(!e)throw Error("eventName is required");let a=Object.assign({},this._getCommonUserInfo(),r),s=t?.sign??"track";console.log(`-------------${s}-----------------------:`,e,a),tt.reportAnalytics(e,a)}_getCommonUserInfo(){let{user_id:e,user_type:r,user_group:t}=this._userConfig??{};return{user_id:e,user_type:r,user_group:t}}identify(e){if(!e)throw Error("userInfo is required");if(!e.user_id)throw Error("user_id is required");return this._userConfig={user_id:e.user_id,user_type:e.user_type??0,user_group:e.user_group??0},this}alias(){return null}pages(){return null}page(e,r){this.track(e,r,{sign:"page"})}cpage(e){return this.page("cpage",e)}placeholder(){return null}static build(e){return ExbAnalyticsJS.instance||(ExbAnalyticsJS.instance=new ExbAnalyticsJS(e)),ExbAnalyticsJS.instance}static getInstance(){if(!ExbAnalyticsJS.instance)throw Error("ExbAnalyticsJS instance is not init");return ExbAnalyticsJS.instance}static new(e){return new ExbAnalyticsJS(e)}}const ad_ExbAnalyticsJS=ExbAnalyticsJS,src=ad_AdExecuteManager;for(var __rspack_i in exports.AdExecuteManager=__webpack_exports__.AdExecuteManager,exports.CountRecorder=__webpack_exports__.CountRecorder,exports.ExbAnalyticsJS=__webpack_exports__.ExbAnalyticsJS,exports.Logger=__webpack_exports__.Logger,exports.RewardAdFather=__webpack_exports__.RewardAdFather,exports.RewardAdGlobalRecorder=__webpack_exports__.RewardAdGlobalRecorder,exports.RewardAdSceneTriggerManager=__webpack_exports__.RewardAdSceneTriggerManager,exports.SerializableError=__webpack_exports__.SerializableError,exports.Storage=__webpack_exports__.Storage,exports.default=__webpack_exports__.default,__webpack_exports__)-1===["AdExecuteManager","CountRecorder","ExbAnalyticsJS","Logger","RewardAdFather","RewardAdGlobalRecorder","RewardAdSceneTriggerManager","SerializableError","Storage","default"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- class e{constructor(e={}){let{prefix:t="Logger",level:r="info",enabled:s=!0}=e;this.prefix=t,this.enabled=s,this.levels={error:0,warn:1,info:2,debug:3},this.currentLevel=this.levels[r]||this.levels.info}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}setLevel(e){Object.prototype.hasOwnProperty.call(this.levels,e)&&(this.currentLevel=this.levels[e])}formatMessage(e,t){let r=new Date,s=`${r.getFullYear()}/${r.getMonth()+1}/${r.getDate()} ${r.getHours()}:${r.getMinutes()}:${r.getSeconds()}`;return`[${s}] [${e.toUpperCase()}] [${this.prefix}] ${t}`}_log(e,t,...r){if(!this.enabled)return;let s=this.levels[e];if(void 0!==s&&this.currentLevel>=s){let s=this.formatMessage(e,t);switch(e){case"error":console.error(s,...r);break;case"warn":console.warn(s,...r);break;case"info":console.info(s,...r);break;case"debug":console.debug(s,...r);break;default:console.log(s,...r)}}}error(e,...t){this._log("error",e,...t)}warn(e,...t){this._log("warn",e,...t)}info(e,...t){this._log("info",e,...t)}debug(e,...t){this._log("debug",e,...t)}log(e,t,...r){this._log(e,t,...r)}}class t{static _instance=null;_taskStack=[];_currentBatchTasks=[];_isRunning=!1;_currentTask=null;constructor(r){if(this.logger=new e({prefix:"AdExecuteManager",enabled:!!r?.log}),t._instance)return t._instance;t._instance=this}static getInstance(e){return t._instance||(t._instance=new t(e)),t._instance}addTask(e,t){return e&&"function"==typeof e.ad?new Promise((r,s)=>{let i={adInstance:e,options:t.options??{},callbackCollection:t.collection??{},resolve:r,reject:s,id:`ad_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_isResolved:!1,_isRejected:!1};this._taskStack.push(i),this._isRunning||this._compose()}):(this.logger.error("无效的广告实例 请正确实现.ad方法"),Promise.reject(Error("无效的广告实例")))}_compose(){if(0===this._taskStack.length){this._isRunning=!1,this._currentTask=null;return}this._isRunning=!0;let e=[...this._taskStack];this._taskStack=[],this._currentBatchTasks=e;let t=e.map(e=>async(t,r)=>{let{adInstance:s,options:i,callbackCollection:n,resolve:a,id:o}=e;if(e._isResolved||e._isRejected)return void await r(t);this._currentTask=e;try{let l=async e=>{await r(Object.assign({},t,e))},c=await s.initialize(i).ad({options:i,collection:n},l),h=Object.assign({id:o},c);this.logger.info(`任务执行成功,成功信息:${JSON.stringify(h)}`),e._isResolved=!0,a(h)}catch(n){let i=Object.assign({id:o,apiError:n});this.logger.error(`任务执行失败, 继续下一个任务,错误信息:${JSON.stringify(i)}`),e._isRejected=!0;try{s?.clear()}catch(e){this.logger.error("clear error: ",JSON.stringify(Object.assign({id:o,apiError:e})))}a(i),await r(t)}}),r={roundTasks:t.length};t.map(e=>(t,r)=>async s=>await e(Object.assign({},t,s),r)).reduce((e,t)=>(r,s)=>e(r,t(r,s)))(r,async e=>{this.logger.info("本轮活动队列已经清空",e),this._taskStack.length>0?Promise.resolve().then(()=>{this._compose()}):(this._isRunning=!1,this._currentTask=null,this._currentBatchTasks=[])})()}clearTasks(){if(this._currentTask){if(this._currentTask._isResolved||this._currentTask._isRejected){this._currentTask=null;return}try{this._currentTask.callbackCollection&&this._currentTask.callbackCollection.onCancel&&this._currentTask.callbackCollection.onCancel(),this._currentTask._isResolved=!0,this._currentTask.resolve()}catch(e){this.logger.error("clear current task error: ",e)}this._currentTask=null}this._currentBatchTasks.length>0&&(this._currentBatchTasks.forEach(e=>{if(e!==this._currentTask&&!e._isResolved&&!e._isRejected)try{e.callbackCollection&&e.callbackCollection.onCancel&&e.callbackCollection.onCancel(),e._isResolved=!0,e.resolve()}catch(e){this.logger.error("clear current batch task error: ",e)}}),this._currentBatchTasks=[]),this._taskStack.forEach(e=>{if(!e._isResolved&&!e._isRejected&&(e._isResolved=!0,e.resolve(),e.callbackCollection&&e.callbackCollection.onCancel))try{e.callbackCollection.onCancel()}catch(e){this.logger.error("clear task error: ",e)}}),this._taskStack=[],this._isRunning=!1}getTaskCount(){return this._taskStack.filter(e=>!e._isResolved&&!e._isRejected).length+this._currentBatchTasks.filter(e=>e!==this._currentTask&&!e._isResolved&&!e._isRejected).length+(!this._currentTask||this._currentTask._isResolved||this._currentTask._isRejected?0:1)}isRunning(){return this._isRunning}getCurrentTaskId(){return this._currentTask?.id||null}}let r=t;class s extends Error{constructor(e){super(e),this.name=this.constructor.name,this.stack=Error(e).stack,Object.defineProperty(this,"message",{enumerable:!0}),Object.defineProperty(this,"name",{enumerable:!0}),Object.defineProperty(this,"stack",{enumerable:!0})}toJSON(){return{name:this.name,message:this.message,stack:this.stack}}}class i{static args=null;_initSign="";_preserveOnEnd=!1;_rewardAd=null;_ttErrorMsgs=["The adUnitId is closed","The adUnitId is prohibit","The adUnitId is invalid","The adUnitId is empty","feature is not supported in app"];_ttErrorCodes=[139902,123302];constructor(e){this._initSign=e?.sign??"",this._adConfig=e?.adConfig??{},this._preserveOnEnd=e?.preserveOnEnd??!1}initialize(e,t){if(this._rewardAd)return console.warn("RewardAdFather: rewardAd has been initialized"),t?.(this._rewardAd),this;let r=Object.assign({},i.args,this._adConfig,e);if(!r.adUnitId)throw console.error("[RewardAdFather] reward args adUnitId is required",r),new s("[RewardAdFather] reward args adUnitId is required");return this._rewardAd=tt.createRewardedVideoAd(r),t?.(this._rewardAd),this}initialized(){return!!this._rewardAd}async ad(e,t=null){throw Error("子类必须实现ad方法")}async addExecuteManager(e){let t=Object.assign({},this._adConfig,e?.options??{});return i.executeWithManager(this,Object.assign({},e,{options:t}))}destroy(){this._rewardAd&&!this._preserveOnEnd&&(this._rewardAd.destroy(),this._rewardAd=null)}clear(){throw Error("子类必须实现clear方法")}onClose(e){this._rewardAd&&this._rewardAd.onClose(e)}offClose(e){this._rewardAd&&this._rewardAd.offClose(e)}show(){return this._rewardAd?this._rewardAd.show():Promise.reject({errMsg:"rewardAd is null"})}load(){if(this._rewardAd)return this._rewardAd.load()}onError(e){this._rewardAd&&this._rewardAd.onError(e)}offError(e){this._rewardAd&&this._rewardAd.offError(e)}onLoad(e){this._rewardAd&&this._rewardAd.onLoad(e)}offLoad(e){this._rewardAd&&this._rewardAd.offLoad(e)}placeholder(){return null}static buildArgs(e){e?.adUnitId||console.error("[RewardAdFather] RewardParams.adUnitId is required"),i.args=e}static async executeWithManager(e,t){return e&&e instanceof i?r.getInstance({log:t?.options?.log??!0}).addTask(e,t):(console.error("RewardAdFather: executeWithManager - 无效的广告实例"),Promise.reject(Error("无效的广告实例")))}}let n=i;class a{constructor(t={}){this.config={prefix:"storage_",expire:null,...t},this.logger=new e({prefix:"Storage"})}getTodayEndTimestamp(){let e=new Date;return new Date(e.getFullYear(),e.getMonth(),e.getDate(),23,59,59,999).getTime()}_setItem(e,t,r){let s=void 0!==r?r:this.config.expire;"today"===s&&(s=this.getTodayEndTimestamp()-Date.now());let i={value:t,expire:s,timestamp:Date.now()};try{tt.setStorageSync(e,JSON.stringify(i))}catch(e){console.error("Storage setItem error:",e)}}_getItem(e){try{let t=tt.getStorageSync(e);if(!t)return null;let r=JSON.parse(t);if(r.expire&&Date.now()-r.timestamp>r.expire)return this.removeItem(e),null;return r.value}catch(e){return console.error("Storage getItem error:",e),null}}setItem(e,t,r){let s=this.config.prefix+e;return this._setItem(s,t,r)}getItem(e){let t=this.config.prefix+e;return this._getItem(t)}getUserItem(e){let t=this.config.userId??"null";if("null"===t)return this.logger.error("userId is required"),null;let r=`${this.config.prefix}_${t}_${e}`;return this._getItem(r)}setUserItem(e,t,r){let s=this.config.userId??"null";if("null"===s)return void this.logger.error("userId is required");let i=`${this.config.prefix}_${s}_${e}`;return this._setItem(i,t,r)}removeItem(e){try{tt.removeStorageSync(e)}catch(e){console.error("Storage removeItem error:",e)}}clear(){try{tt.clearStorageSync()}catch(e){console.error("Storage clear error:",e)}}keys(){try{let e=[];return(tt.getStorageInfoSync().keys??[]).forEach(t=>{if(t.startsWith(this.config.prefix)){let r=JSON.parse(tt.getStorageSync(t));(!r.expire||Date.now()-r.timestamp<=r.expire)&&e.push(t.replace(this.config.prefix,""))}}),e}catch(e){return console.error("Storage keys error:",e),[]}}static new(e){return new a(e)}}let o=a;class l{_total=0;_local_sign="";_expire="today";constructor(e){if(this.storage=o.new({userId:e.userId}),!e.local_sign)throw Error("local_sign is required");this._local_sign=e.local_sign,this._total=e.total??0,this._expire=e.expire??"today",this._init()}_init(){this._initLocalTimes()}_adTimes(){return this._total}_safeLocalValue(e){return"object"!=typeof e||null===e?{}:e}_initLocalTimes(){let e=this._adTimes(),t=this.storage.getUserItem(this._local_sign),r=this._safeLocalValue(t);r&&r?.total==e||this.storage.setUserItem(this._local_sign,{total:e,today:r?.today??0},this._expire)}updateToday(){let e=this._adTimes(),t=this.storage.getUserItem(this._local_sign),r=this._safeLocalValue(t),s=r?.today??0;this.storage.setUserItem(this._local_sign,{total:e,today:s+1},this._expire)}remain(){let e=this.storage.getUserItem(this._local_sign),t=this._safeLocalValue(e),r=t?.today??0;return Number(t?.total??0)-Number(r)}static new(e){return new l(e)}}let c={0:"launch_ad",1:"novel_plugin_strong_ad",2:"novel_plugin_unlock_btn",3:"novel_plugin_free_benefit_btn",4:"home_free_welfare_btn",5:"home_free_popup",6:"other",7:"home_back_show",8:"novel_plugin_free_time_btn",9:"launch_ad_alone"},h=Object.entries(c).reduce((e,[t,r])=>(e[r]=Number(t),e),{});class d{static instance=null;_initSign="";_halfway=[{scene:h.other,count:0}];_finished=[{scene:h.other,count:0}];constructor(e){if(d.instance)return d.instance;this._initSign=e?.sign??"",d.instance=this}initialize(e){}_halfwayUpdate(e){let t=this._halfway.find(t=>t.scene===e.scene);t?t.count+=1:this._halfway.push({scene:e.scene,count:1})}_halfwayGet(e){let t=e?.scenes??[];return(t.length>0?this._halfway.filter(e=>t.includes(e.scene)):this._halfway).reduce((e,t)=>e+t.count,0)}_halfwayReset(){this._halfway=[{scene:h.other,count:0}]}_finishedUpdate(e){let t=this._finished.find(t=>t.scene===e.scene);t?t.count+=1:this._finished.push({scene:e.scene,count:1})}_finishedGet(e){let t=e?.scenes??[];return(t.length>0?this._finished.filter(e=>t.includes(e.scene)):this._finished).reduce((e,t)=>e+t.count,0)}_finishedReset(){this._finished=[{scene:h.other,count:0}]}record(e){switch(e.type){case"halfway":this._halfwayUpdate(e);break;case"finished":this._finishedUpdate(e)}}rest(e){switch(e){case"halfway":this._halfwayReset();break;case"finished":this._finishedReset()}}get(e){switch(e.type){case"halfway":return this._halfwayGet(e);case"finished":return this._finishedGet(e);default:return null}}placeholder(){return null}static build(e){return d.instance||(d.instance=new d(e)),d.instance}static getInstance(){if(!d.instance)throw Error("RewardAdGlobalRecorder instance is not init");return d.instance}}let u=d;class _{static instance=null;_initSign="";_currScene=null;constructor(e){if(_.instance)return _.instance;this._initSign=e?.sign??"",_.instance=this}initialize(e){}addScene(e){return console.log("----------------------AD触发场景:--------------------",e),this._currScene=e,this}addSceneType(e=1){return this.addScene(c[e]),this}getCurrentScene(){return this._currScene}placeholder(){return null}static build(e){return _.instance||(_.instance=new _(e)),_.instance}static getInstance(){if(!_.instance)throw Error("RewardAdSceneTriggerManager instance is not init");return _.instance}}let g=_;class f{static instance=null;_initSign="";_needReport=!1;constructor(e){if(f.instance)return f.instance;this._initSign=e?.sign??"",this._needReport=e?.needReport??!1,this._userConfig=e?.userConfig??null,f.instance=this}initialize(e){return this._needReport?e:void console.warn("ExbAnalyticsJS needReport is false, do not report")}track(e,t,r){if(!this._needReport)return;if(!e)throw Error("eventName is required");let s=Object.assign({},this._getCommonUserInfo(),t),i=r?.sign??"track";console.log(`-------------${i}-----------------------:`,e,s),tt.reportAnalytics(e,s)}_getCommonUserInfo(){let{user_id:e,user_type:t,user_group:r}=this._userConfig??{};return{user_id:e,user_type:t,user_group:r}}identify(){return null}alias(){return null}pages(){return null}page(e,t){this.track(e,t,{sign:"page"})}cpage(e){return this.page("cpage",e)}placeholder(){return null}static build(e){return f.instance||(f.instance=new f(e)),f.instance}static getInstance(){if(!f.instance)throw Error("ExbAnalyticsJS instance is not init");return f.instance}static new(e){return new f(e)}}let w=f,p=r;export{r as AdExecuteManager,l as CountRecorder,w as ExbAnalyticsJS,e as Logger,n as RewardAdFather,u as RewardAdGlobalRecorder,g as RewardAdSceneTriggerManager,s as SerializableError,o as Storage,p as default};
1
+ class e{constructor(e={}){let{prefix:t="Logger",level:r="info",enabled:s=!0}=e;this.prefix=t,this.enabled=s,this.levels={error:0,warn:1,info:2,debug:3},this.currentLevel=this.levels[r]||this.levels.info}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}setLevel(e){Object.prototype.hasOwnProperty.call(this.levels,e)&&(this.currentLevel=this.levels[e])}formatMessage(e,t){let r=new Date,s=`${r.getFullYear()}/${r.getMonth()+1}/${r.getDate()} ${r.getHours()}:${r.getMinutes()}:${r.getSeconds()}`;return`[${s}] [${e.toUpperCase()}] [${this.prefix}] ${t}`}_log(e,t,...r){if(!this.enabled)return;let s=this.levels[e];if(void 0!==s&&this.currentLevel>=s){let s=this.formatMessage(e,t);switch(e){case"error":console.error(s,...r);break;case"warn":console.warn(s,...r);break;case"info":console.info(s,...r);break;case"debug":console.debug(s,...r);break;default:console.log(s,...r)}}}error(e,...t){this._log("error",e,...t)}warn(e,...t){this._log("warn",e,...t)}info(e,...t){this._log("info",e,...t)}debug(e,...t){this._log("debug",e,...t)}log(e,t,...r){this._log(e,t,...r)}}class t{static _instance=null;_taskStack=[];_currentBatchTasks=[];_isRunning=!1;_currentTask=null;constructor(r){if(this.logger=new e({prefix:"AdExecuteManager",enabled:!!r?.log}),t._instance)return t._instance;t._instance=this}static getInstance(e){return t._instance||(t._instance=new t(e)),t._instance}addTask(e,t){return e&&"function"==typeof e.ad?new Promise((r,s)=>{let i={adInstance:e,options:t.options??{},callbackCollection:t.collection??{},resolve:r,reject:s,id:`ad_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_isResolved:!1,_isRejected:!1};this._taskStack.push(i),this._isRunning||this._compose()}):(this.logger.error("无效的广告实例 请正确实现.ad方法"),Promise.reject(Error("无效的广告实例")))}_compose(){if(0===this._taskStack.length){this._isRunning=!1,this._currentTask=null;return}this._isRunning=!0;let e=[...this._taskStack];this._taskStack=[],this._currentBatchTasks=e;let t=e.map(e=>async(t,r)=>{let{adInstance:s,options:i,callbackCollection:n,resolve:a,id:o}=e;if(e._isResolved||e._isRejected)return void await r(t);this._currentTask=e;try{let c=async e=>{await r(Object.assign({},t,e))},l=await s.initialize(i).ad({options:i,collection:n},c),h=Object.assign({id:o},l);this.logger.info(`任务执行成功,成功信息:${JSON.stringify(h)}`),e._isResolved=!0,a(h)}catch(n){let i=Object.assign({id:o,apiError:n});this.logger.error(`任务执行失败, 继续下一个任务,错误信息:${JSON.stringify(i)}`),e._isRejected=!0;try{s?.clear()}catch(e){this.logger.error("clear error: ",JSON.stringify(Object.assign({id:o,apiError:e})))}a(i),await r(t)}}),r={roundTasks:t.length};t.map(e=>(t,r)=>async s=>await e(Object.assign({},t,s),r)).reduce((e,t)=>(r,s)=>e(r,t(r,s)))(r,async e=>{this.logger.info("本轮活动队列已经清空",e),this._taskStack.length>0?Promise.resolve().then(()=>{this._compose()}):(this._isRunning=!1,this._currentTask=null,this._currentBatchTasks=[])})()}clearTasks(){if(this._currentTask){if(this._currentTask._isResolved||this._currentTask._isRejected){this._currentTask=null;return}try{this._currentTask.callbackCollection&&this._currentTask.callbackCollection.onCancel&&this._currentTask.callbackCollection.onCancel(),this._currentTask._isResolved=!0,this._currentTask.resolve()}catch(e){this.logger.error("clear current task error: ",e)}this._currentTask=null}this._currentBatchTasks.length>0&&(this._currentBatchTasks.forEach(e=>{if(e!==this._currentTask&&!e._isResolved&&!e._isRejected)try{e.callbackCollection&&e.callbackCollection.onCancel&&e.callbackCollection.onCancel(),e._isResolved=!0,e.resolve()}catch(e){this.logger.error("clear current batch task error: ",e)}}),this._currentBatchTasks=[]),this._taskStack.forEach(e=>{if(!e._isResolved&&!e._isRejected&&(e._isResolved=!0,e.resolve(),e.callbackCollection&&e.callbackCollection.onCancel))try{e.callbackCollection.onCancel()}catch(e){this.logger.error("clear task error: ",e)}}),this._taskStack=[],this._isRunning=!1}getTaskCount(){return this._taskStack.filter(e=>!e._isResolved&&!e._isRejected).length+this._currentBatchTasks.filter(e=>e!==this._currentTask&&!e._isResolved&&!e._isRejected).length+(!this._currentTask||this._currentTask._isResolved||this._currentTask._isRejected?0:1)}isRunning(){return this._isRunning}getCurrentTaskId(){return this._currentTask?.id||null}}let r=t;class s extends Error{constructor(e){super(e),this.name=this.constructor.name,this.stack=Error(e).stack,Object.defineProperty(this,"message",{enumerable:!0}),Object.defineProperty(this,"name",{enumerable:!0}),Object.defineProperty(this,"stack",{enumerable:!0})}toJSON(){return{name:this.name,message:this.message,stack:this.stack}}}class i{static args=null;_initSign="";_preserveOnEnd=!1;_rewardAd=null;_ttErrorMsgs=["The adUnitId is closed","The adUnitId is prohibit","The adUnitId is invalid","The adUnitId is empty","feature is not supported in app"];_ttErrorCodes=[139902,123302];constructor(e){this._initSign=e?.sign??"",this._adConfig=e?.adConfig??{},this._preserveOnEnd=e?.preserveOnEnd??!1}initialize(e,t){if(this._rewardAd)return console.warn("RewardAdFather: rewardAd has been initialized"),t?.(this._rewardAd),this;let r=Object.assign({},i.args,this._adConfig,e);if(!r.adUnitId)throw console.error("[RewardAdFather] reward args adUnitId is required",r),new s("[RewardAdFather] reward args adUnitId is required");return this._rewardAd=tt.createRewardedVideoAd(r),t?.(this._rewardAd),this}initialized(){return!!this._rewardAd}async ad(e,t=null){throw Error("子类必须实现ad方法")}async addExecuteManager(e){let t=Object.assign({},this._adConfig,e?.options??{});return i.executeWithManager(this,Object.assign({},e,{options:t}))}destroy(){this._rewardAd&&!this._preserveOnEnd&&(this._rewardAd.destroy(),this._rewardAd=null)}clear(){throw Error("子类必须实现clear方法")}onClose(e){this._rewardAd&&this._rewardAd.onClose(e)}offClose(e){this._rewardAd&&this._rewardAd.offClose(e)}show(){return this._rewardAd?this._rewardAd.show():Promise.reject({errMsg:"rewardAd is null"})}load(){if(this._rewardAd)return this._rewardAd.load()}onError(e){this._rewardAd&&this._rewardAd.onError(e)}offError(e){this._rewardAd&&this._rewardAd.offError(e)}onLoad(e){this._rewardAd&&this._rewardAd.onLoad(e)}offLoad(e){this._rewardAd&&this._rewardAd.offLoad(e)}placeholder(){return null}static buildArgs(e){e?.adUnitId||console.error("[RewardAdFather] RewardParams.adUnitId is required"),i.args=e}static async executeWithManager(e,t){return e&&e instanceof i?r.getInstance({log:t?.options?.log??!0}).addTask(e,t):(console.error("RewardAdFather: executeWithManager - 无效的广告实例"),Promise.reject(Error("无效的广告实例")))}}let n=i;class a{constructor(t={}){this.config={prefix:"storage_",expire:null,...t},this.logger=new e({prefix:"Storage"})}getTodayEndTimestamp(){let e=new Date;return new Date(e.getFullYear(),e.getMonth(),e.getDate(),23,59,59,999).getTime()}_setItem(e,t,r){let s=void 0!==r?r:this.config.expire;"today"===s&&(s=this.getTodayEndTimestamp()-Date.now());let i={value:t,expire:s,timestamp:Date.now()};try{tt.setStorageSync(e,JSON.stringify(i))}catch(e){console.error("Storage setItem error:",e)}}_getItem(e){try{let t=tt.getStorageSync(e);if(!t)return null;let r=JSON.parse(t);if(r.expire&&Date.now()-r.timestamp>r.expire)return this.removeItem(e),null;return r.value}catch(e){return console.error("Storage getItem error:",e),null}}setItem(e,t,r){let s=this.config.prefix+e;return this._setItem(s,t,r)}getItem(e){let t=this.config.prefix+e;return this._getItem(t)}getUserItem(e){let t=this.config.userId??"null";if("null"===t)return this.logger.error("userId is required"),null;let r=`${this.config.prefix}_${t}_${e}`;return this._getItem(r)}setUserItem(e,t,r){let s=this.config.userId??"null";if("null"===s)return void this.logger.error("userId is required");let i=`${this.config.prefix}_${s}_${e}`;return this._setItem(i,t,r)}removeItem(e){try{tt.removeStorageSync(e)}catch(e){console.error("Storage removeItem error:",e)}}clear(){try{tt.clearStorageSync()}catch(e){console.error("Storage clear error:",e)}}keys(){try{let e=[];return(tt.getStorageInfoSync().keys??[]).forEach(t=>{if(t.startsWith(this.config.prefix)){let r=JSON.parse(tt.getStorageSync(t));(!r.expire||Date.now()-r.timestamp<=r.expire)&&e.push(t.replace(this.config.prefix,""))}}),e}catch(e){return console.error("Storage keys error:",e),[]}}static new(e){return new a(e)}}let o=a;class c{_total=0;_local_sign="";_expire="today";constructor(e){if(this.storage=o.new({userId:e.userId}),!e.local_sign)throw Error("local_sign is required");this._local_sign=e.local_sign,this._total=e.total??0,this._expire=e.expire??"today",this._init()}_init(){this._initLocalTimes()}_adTimes(){return this._total}_safeLocalValue(e){return"object"!=typeof e||null===e?{}:e}_initLocalTimes(){let e=this._adTimes(),t=this.storage.getUserItem(this._local_sign),r=this._safeLocalValue(t);r&&r?.total==e||this.storage.setUserItem(this._local_sign,{total:e,today:r?.today??0},this._expire)}updateToday(){let e=this._adTimes(),t=this.storage.getUserItem(this._local_sign),r=this._safeLocalValue(t),s=r?.today??0;this.storage.setUserItem(this._local_sign,{total:e,today:s+1},this._expire)}remain(){let e=this.storage.getUserItem(this._local_sign),t=this._safeLocalValue(e),r=t?.today??0;return Number(t?.total??0)-Number(r)}static new(e){return new c(e)}}let l={0:"launch_ad",1:"novel_plugin_strong_ad",2:"novel_plugin_unlock_btn",3:"novel_plugin_free_benefit_btn",4:"home_free_welfare_btn",5:"home_free_popup",6:"other",7:"home_back_show",8:"novel_plugin_free_time_btn",9:"launch_ad_alone"},h=Object.entries(l).reduce((e,[t,r])=>(e[r]=Number(t),e),{});class d{static instance=null;_initSign="";_halfway=[{scene:h.other,count:0}];_finished=[{scene:h.other,count:0}];constructor(e){if(d.instance)return d.instance;this._initSign=e?.sign??"",d.instance=this}initialize(e){}_halfwayUpdate(e){let t=this._halfway.find(t=>t.scene===e.scene);t?t.count+=1:this._halfway.push({scene:e.scene,count:1})}_halfwayGet(e){let t=e?.scenes??[];return(t.length>0?this._halfway.filter(e=>t.includes(e.scene)):this._halfway).reduce((e,t)=>e+t.count,0)}_halfwayReset(){this._halfway=[{scene:h.other,count:0}]}_finishedUpdate(e){let t=this._finished.find(t=>t.scene===e.scene);t?t.count+=1:this._finished.push({scene:e.scene,count:1})}_finishedGet(e){let t=e?.scenes??[];return(t.length>0?this._finished.filter(e=>t.includes(e.scene)):this._finished).reduce((e,t)=>e+t.count,0)}_finishedReset(){this._finished=[{scene:h.other,count:0}]}record(e){switch(e.type){case"halfway":this._halfwayUpdate(e);break;case"finished":this._finishedUpdate(e)}}rest(e){switch(e){case"halfway":this._halfwayReset();break;case"finished":this._finishedReset()}}get(e){switch(e.type){case"halfway":return this._halfwayGet(e);case"finished":return this._finishedGet(e);default:return null}}placeholder(){return null}static build(e){return d.instance||(d.instance=new d(e)),d.instance}static getInstance(){if(!d.instance)throw Error("RewardAdGlobalRecorder instance is not init");return d.instance}}let u=d;class _{static instance=null;_initSign="";_currScene=null;constructor(e){if(_.instance)return _.instance;this._initSign=e?.sign??"",_.instance=this}initialize(e){}addScene(e){return console.log("----------------------AD触发场景:--------------------",e),this._currScene=e,this}addSceneType(e=1){return this.addScene(l[e]),this}getCurrentScene(){return this._currScene}placeholder(){return null}static build(e){return _.instance||(_.instance=new _(e)),_.instance}static getInstance(){if(!_.instance)throw Error("RewardAdSceneTriggerManager instance is not init");return _.instance}}let g=_;class f{static instance=null;_initSign="";_needReport=!1;constructor(e){if(f.instance)return f.instance;this._initSign=e?.sign??"",this._needReport=e?.needReport??!1,this._userConfig=e?.userConfig??null,f.instance=this}initialize(e){return this._needReport?e:void console.warn("ExbAnalyticsJS needReport is false, do not report")}track(e,t,r){if(!this._needReport)return;if(!e)throw Error("eventName is required");let s=Object.assign({},this._getCommonUserInfo(),t),i=r?.sign??"track";console.log(`-------------${i}-----------------------:`,e,s),tt.reportAnalytics(e,s)}_getCommonUserInfo(){let{user_id:e,user_type:t,user_group:r}=this._userConfig??{};return{user_id:e,user_type:t,user_group:r}}identify(e){if(!e)throw Error("userInfo is required");if(!e.user_id)throw Error("user_id is required");return this._userConfig={user_id:e.user_id,user_type:e.user_type??0,user_group:e.user_group??0},this}alias(){return null}pages(){return null}page(e,t){this.track(e,t,{sign:"page"})}cpage(e){return this.page("cpage",e)}placeholder(){return null}static build(e){return f.instance||(f.instance=new f(e)),f.instance}static getInstance(){if(!f.instance)throw Error("ExbAnalyticsJS instance is not init");return f.instance}static new(e){return new f(e)}}let w=f,p=r;export{r as AdExecuteManager,c as CountRecorder,w as ExbAnalyticsJS,e as Logger,n as RewardAdFather,u as RewardAdGlobalRecorder,g as RewardAdSceneTriggerManager,s as SerializableError,o as Storage,p as default};
@@ -98,9 +98,10 @@ declare class ExbAnalyticsJS {
98
98
  /**
99
99
  * 识别用户身份
100
100
  * 用户登录后,关联用户信息
101
- * @returns
101
+ * @param {ICommonUserInfo} userInfo - 用户信息
102
+ * @returns {ExbAnalyticsJS} 返回实例本身,支持链式调用
102
103
  */
103
- identify(): any;
104
+ identify(userInfo: ICommonUserInfo): ExbAnalyticsJS;
104
105
  /**
105
106
  * 合并用户身份
106
107
  * 匿名用户转为登录用户
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@singcl/ad-execute-manager",
3
- "version": "1.0.11",
3
+ "version": "1.0.12",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes