@singcl/ad-execute-manager 1.0.6 → 1.0.8

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,5 +1,6 @@
1
1
  export default RewardAdNovelUnlock;
2
2
  export type IRewordAdConfig = import("../../typings/ad.js").IRewordAdConfig;
3
+ export type ICallbackArgs = import("../../typings/ad.js").ICallbackArgs;
3
4
  export type IConnection = {
4
5
  /**
5
6
  * 广告中途退出回调
@@ -53,6 +54,9 @@ export type IConstructArgs = {
53
54
  /**
54
55
  * @typedef {import('../../typings/ad.js').IRewordAdConfig} IRewordAdConfig
55
56
  */
57
+ /**
58
+ * @typedef {import('../../typings/ad.js').ICallbackArgs} ICallbackArgs
59
+ */
56
60
  /**
57
61
  * @typedef IConnection
58
62
  * @property {(args: ICallbackArgs) => void} [onHalfway] 广告中途退出回调
@@ -3,11 +3,11 @@ declare class UnlockSettings {
3
3
  /**
4
4
  *
5
5
  * @param {object} args
6
- * @param {InitSign} args.sign 初始化标识
6
+ * @param {string} args.sign 初始化标识
7
7
  * @returns {UnlockSettings}
8
8
  */
9
9
  static "new"(args: {
10
- sign: InitSign;
10
+ sign: string;
11
11
  }): UnlockSettings;
12
12
  /**
13
13
  *
@@ -115,11 +115,11 @@ declare class CommonSettings {
115
115
  /**
116
116
  *
117
117
  * @param {object} args
118
- * @param {InitSign} args.sign 初始化标识
118
+ * @param {string} args.sign 初始化标识
119
119
  * @returns {CommonSettings}
120
120
  */
121
121
  static build(args: {
122
- sign: InitSign;
122
+ sign: string;
123
123
  }): CommonSettings;
124
124
  /**
125
125
  *
@@ -129,11 +129,11 @@ declare class CommonSettings {
129
129
  /**
130
130
  *
131
131
  * @param {object} args
132
- * @param {InitSign} args.sign 初始化标识
132
+ * @param {string} args.sign 初始化标识
133
133
  * @returns {CommonSettings}
134
134
  */
135
135
  static "new"(args: {
136
- sign: InitSign;
136
+ sign: string;
137
137
  }): CommonSettings;
138
138
  /**
139
139
  * @param {object} args
@@ -69,17 +69,15 @@ declare class RewardAdFather {
69
69
  }, next?: Function): Promise<unknown>;
70
70
  /**
71
71
  * 确保广告按顺序执行
72
- * @template T
73
- * @param {T} value - 泛型参数
74
72
  * @param {Object} [ctx] 上下文对象,用于传递数据和状态
75
73
  * @param {IRewordAdConfig} [ctx.options] 广告执行选项
76
74
  * @param {CallbackCollection} [ctx.collection] 回调集合
77
- * @returns {Promise.<T>} 广告执行结果的Promise
75
+ * @returns {Promise.<unknown>} 广告执行结果的Promise
78
76
  */
79
- addExecuteManager<T>(ctx?: {
77
+ addExecuteManager(ctx?: {
80
78
  options?: IRewordAdConfig;
81
79
  collection?: CallbackCollection;
82
- }): Promise<T>;
80
+ }): Promise<unknown>;
83
81
  destroy(): void;
84
82
  clear(): void;
85
83
  /**
@@ -8,11 +8,11 @@ declare class RewardAdGlobalRecorder {
8
8
  /**
9
9
  *
10
10
  * @param {object} args
11
- * @param {InitSign} args.sign 初始化标识
11
+ * @param {string} args.sign 初始化标识
12
12
  * @returns {RewardAdGlobalRecorder}
13
13
  */
14
14
  static build(args: {
15
- sign: InitSign;
15
+ sign: string;
16
16
  }): RewardAdGlobalRecorder;
17
17
  /**
18
18
  *
@@ -1,8 +1,12 @@
1
1
  export default RewardAdLaunch;
2
2
  export type IRewordAdConfig = import("../typings/ad.js").IRewordAdConfig;
3
+ export type IConstructArgs = import("../typings/ad.js").IConstructArgs;
3
4
  /**
4
5
  * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
5
6
  */
7
+ /**
8
+ * @typedef {import('../typings/ad.js').IConstructArgs} IConstructArgs
9
+ */
6
10
  declare class RewardAdLaunch extends RewardAdNovel {
7
11
  /**
8
12
  *
@@ -58,11 +62,11 @@ declare class RewardAdLaunchSettings {
58
62
  /**
59
63
  *
60
64
  * @param {object} args
61
- * @param {InitSign} args.sign 初始化标识
65
+ * @param {string} args.sign 初始化标识
62
66
  * @returns {RewardAdLaunchSettings}
63
67
  */
64
68
  static "new"(args: {
65
- sign: InitSign;
69
+ sign: string;
66
70
  }): RewardAdLaunchSettings;
67
71
  _fixedFrequency: any;
68
72
  frequency: {
@@ -1,9 +1,13 @@
1
1
  export default RewardAdLaunchAlone;
2
2
  export type IRewordAdConfig = import("../typings/ad.js").IRewordAdConfig;
3
+ export type IConstructArgs = import("../typings/ad.js").IConstructArgs;
3
4
  export type CallbackCollection = import("../typings/ad.js").CallbackCollection;
4
5
  /**
5
6
  * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
6
7
  */
8
+ /**
9
+ * @typedef {import('../typings/ad.js').IConstructArgs} IConstructArgs
10
+ */
7
11
  /**
8
12
  * @typedef {import('../typings/ad.js').CallbackCollection} CallbackCollection
9
13
  */
@@ -97,6 +97,12 @@ export type IEndArgs = {
97
97
  */
98
98
  end_type?: "halfway" | "finished";
99
99
  };
100
+ export type IRewardedVideoAd = {
101
+ /**
102
+ * 显示激励视频广告
103
+ */
104
+ show: () => Promise<void>;
105
+ };
100
106
  /**
101
107
  * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
102
108
  */
@@ -138,6 +144,10 @@ export type IEndArgs = {
138
144
  * @property {'halfway' | 'finished'} [end_type] 结束类型
139
145
  *
140
146
  */
147
+ /**
148
+ * @typedef IRewardedVideoAd
149
+ * @property {() => Promise.<void>} show 显示激励视频广告
150
+ */
141
151
  declare class RewardAdNovel extends RewardAdFather {
142
152
  /**
143
153
  *
@@ -171,7 +181,8 @@ declare class RewardAdNovel extends RewardAdFather {
171
181
  _finishedCallback: any;
172
182
  _resolve: any;
173
183
  _next: any;
174
- _scene: 6;
184
+ /** @type {number} 广告执行场景 */
185
+ _scene: number;
175
186
  _adTimeout: any;
176
187
  _adTimeoutTime: number;
177
188
  _adBeforeShowTimer: any;
@@ -317,12 +328,12 @@ declare class RewardAdNovelConfig {
317
328
  /**
318
329
  *
319
330
  * @param {object} args
320
- * @param {InitSign} args.sign 初始化标识
331
+ * @param {string} args.sign 初始化标识
321
332
  * @param {number} [args.retry] 重试次数
322
333
  * @returns {RewardAdNovelConfig}
323
334
  */
324
335
  static "new"(args: {
325
- sign: InitSign;
336
+ sign: string;
326
337
  retry?: number;
327
338
  }): RewardAdNovelConfig;
328
339
  /**
@@ -14,9 +14,13 @@ export type ISysConfig = {
14
14
  read_load_times?: number | undefined;
15
15
  };
16
16
  export type IRewordAdConfig = import("../typings/ad.js").IRewordAdConfig;
17
+ export type IConstructArgs = import("../typings/ad.js").IConstructArgs;
17
18
  /**
18
19
  * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
19
20
  */
21
+ /**
22
+ * @typedef {import('../typings/ad.js').IConstructArgs} IConstructArgs
23
+ */
20
24
  declare class RewardAdReadingLoad extends RewardAdNovel {
21
25
  /**
22
26
  *
@@ -36,7 +40,6 @@ declare class RewardAdReadingLoad extends RewardAdNovel {
36
40
  */
37
41
  static "new"(args: IConstructArgs): RewardAdReadingLoad;
38
42
  constructor(args: any);
39
- _scene: number;
40
43
  loadSettings: RewardAdReadingLoadSettings;
41
44
  /**
42
45
  * @param {object} options
@@ -49,11 +52,11 @@ declare class RewardAdReadingLoadSettings {
49
52
  /**
50
53
  *
51
54
  * @param {object} args
52
- * @param {InitSign} args.sign 初始化标识
55
+ * @param {string} args.sign 初始化标识
53
56
  * @returns {RewardAdReadingLoadSettings}
54
57
  */
55
58
  static "new"(args: {
56
- sign: InitSign;
59
+ sign: string;
57
60
  }): RewardAdReadingLoadSettings;
58
61
  frequency: {
59
62
  total: number;
@@ -14,9 +14,13 @@ export type ISysConfig = {
14
14
  read_page_back_ad?: number | undefined;
15
15
  };
16
16
  export type IRewordAdConfig = import("../typings/ad.js").IRewordAdConfig;
17
+ export type IConstructArgs = import("../typings/ad.js").IConstructArgs;
17
18
  /**
18
19
  * @typedef {import('../typings/ad.js').IRewordAdConfig} IRewordAdConfig
19
20
  */
21
+ /**
22
+ * @typedef {import('../typings/ad.js').IConstructArgs} IConstructArgs
23
+ */
20
24
  declare class RewardAdReadingUnload extends RewardAdNovel {
21
25
  /**
22
26
  *
@@ -24,11 +28,6 @@ declare class RewardAdReadingUnload extends RewardAdNovel {
24
28
  * @returns {RewardAdReadingUnload}
25
29
  */
26
30
  static build(args: IConstructArgs): RewardAdReadingUnload;
27
- /**
28
- *
29
- * @returns {RewardAdReadingUnload}
30
- */
31
- static getInstance(): RewardAdReadingUnload;
32
31
  /**
33
32
  *
34
33
  * @param {IConstructArgs} args
@@ -41,6 +40,5 @@ declare class RewardAdReadingUnload extends RewardAdNovel {
41
40
  */
42
41
  static satisfy(options: object, callback?: (con: boolean, options: object) => void): void | Promise<void>;
43
42
  constructor(args: any);
44
- _scene: number;
45
43
  }
46
44
  import RewardAdNovel from './RewardAdNovel';
@@ -12,11 +12,11 @@ declare class RewardAdSceneTriggerManager {
12
12
  /**
13
13
  *
14
14
  * @param {object} args
15
- * @param {InitSign} args.sign 初始化标识
15
+ * @param {string} args.sign 初始化标识
16
16
  * @returns {RewardAdSceneTriggerManager}
17
17
  */
18
18
  static build(args: {
19
- sign: InitSign;
19
+ sign: string;
20
20
  }): RewardAdSceneTriggerManager;
21
21
  /**
22
22
  *
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__,{RewardAdFather:()=>ad_RewardAdFather,Logger:()=>Logger,SerializableError:()=>SerializableError,AdExecuteManager:()=>ad_AdExecuteManager,default:()=>src});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().toLocaleString();return`[${t}] [${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))},d=await a.initialize(s).ad({options:s,collection:i},c),_=Object.assign({id:o},d);this.logger.info(`任务执行成功,成功信息:${JSON.stringify(_)}`),e._isResolved=!0,n(_)}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,src=ad_AdExecuteManager;for(var __rspack_i in exports.AdExecuteManager=__webpack_exports__.AdExecuteManager,exports.Logger=__webpack_exports__.Logger,exports.RewardAdFather=__webpack_exports__.RewardAdFather,exports.SerializableError=__webpack_exports__.SerializableError,exports.default=__webpack_exports__.default,__webpack_exports__)-1===["AdExecuteManager","Logger","RewardAdFather","SerializableError","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__,{RewardAdFather:()=>ad_RewardAdFather,Logger:()=>Logger,SerializableError:()=>SerializableError,AdExecuteManager:()=>ad_AdExecuteManager,default:()=>src});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))},d=await a.initialize(s).ad({options:s,collection:i},c),_=Object.assign({id:o},d);this.logger.info(`任务执行成功,成功信息:${JSON.stringify(_)}`),e._isResolved=!0,n(_)}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,src=ad_AdExecuteManager;for(var __rspack_i in exports.AdExecuteManager=__webpack_exports__.AdExecuteManager,exports.Logger=__webpack_exports__.Logger,exports.RewardAdFather=__webpack_exports__.RewardAdFather,exports.SerializableError=__webpack_exports__.SerializableError,exports.default=__webpack_exports__.default,__webpack_exports__)-1===["AdExecuteManager","Logger","RewardAdFather","SerializableError","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:r="Logger",level:t="info",enabled:s=!0}=e;this.prefix=r,this.enabled=s,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().toLocaleString();return`[${t}] [${e.toUpperCase()}] [${this.prefix}] ${r}`}_log(e,r,...t){if(!this.enabled)return;let s=this.levels[e];if(void 0!==s&&this.currentLevel>=s){let s=this.formatMessage(e,r);switch(e){case"error":console.error(s,...t);break;case"warn":console.warn(s,...t);break;case"info":console.info(s,...t);break;case"debug":console.debug(s,...t);break;default:console.log(s,...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 r{static _instance=null;_taskStack=[];_currentBatchTasks=[];_isRunning=!1;_currentTask=null;constructor(t){if(this.logger=new e({prefix:"AdExecuteManager",enabled:!!t?.log}),r._instance)return r._instance;r._instance=this}static getInstance(e){return r._instance||(r._instance=new r(e)),r._instance}addTask(e,r){return e&&"function"==typeof e.ad?new Promise((t,s)=>{let a={adInstance:e,options:r.options??{},callbackCollection:r.collection??{},resolve:t,reject:s,id:`ad_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_isResolved:!1,_isRejected:!1};this._taskStack.push(a),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:s,options:a,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 s.initialize(a).ad({options:a,collection:i},c),d=Object.assign({id:o},l);this.logger.info(`任务执行成功,成功信息:${JSON.stringify(d)}`),e._isResolved=!0,n(d)}catch(i){let a=Object.assign({id:o,apiError:i});this.logger.error(`任务执行失败, 继续下一个任务,错误信息:${JSON.stringify(a)}`),e._isRejected=!0;try{s?.clear()}catch(e){this.logger.error("clear error: ",JSON.stringify(Object.assign({id:o,apiError:e})))}n(a),await t(r)}}),t={roundTasks:r.length};r.map(e=>(r,t)=>async s=>await e(Object.assign({},r,s),t)).reduce((e,r)=>(t,s)=>e(t,r(t,s)))(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}}let t=r;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 a{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({},a.args,this._adConfig,e);if(!t.adUnitId)throw console.error("[RewardAdFather] reward args adUnitId is required",t),new s("[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 a.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"),a.args=e}static async executeWithManager(e,r){return e&&e instanceof a?t.getInstance({log:r?.options?.log??!0}).addTask(e,r):(console.error("RewardAdFather: executeWithManager - 无效的广告实例"),Promise.reject(Error("无效的广告实例")))}}let i=a,n=t;export{t as AdExecuteManager,e as Logger,i as RewardAdFather,s as SerializableError,n as default};
1
+ class e{constructor(e={}){let{prefix:r="Logger",level:t="info",enabled:s=!0}=e;this.prefix=r,this.enabled=s,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,s=`${t.getFullYear()}/${t.getMonth()+1}/${t.getDate()} ${t.getHours()}:${t.getMinutes()}:${t.getSeconds()}`;return`[${s}] [${e.toUpperCase()}] [${this.prefix}] ${r}`}_log(e,r,...t){if(!this.enabled)return;let s=this.levels[e];if(void 0!==s&&this.currentLevel>=s){let s=this.formatMessage(e,r);switch(e){case"error":console.error(s,...t);break;case"warn":console.warn(s,...t);break;case"info":console.info(s,...t);break;case"debug":console.debug(s,...t);break;default:console.log(s,...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 r{static _instance=null;_taskStack=[];_currentBatchTasks=[];_isRunning=!1;_currentTask=null;constructor(t){if(this.logger=new e({prefix:"AdExecuteManager",enabled:!!t?.log}),r._instance)return r._instance;r._instance=this}static getInstance(e){return r._instance||(r._instance=new r(e)),r._instance}addTask(e,r){return e&&"function"==typeof e.ad?new Promise((t,s)=>{let a={adInstance:e,options:r.options??{},callbackCollection:r.collection??{},resolve:t,reject:s,id:`ad_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,_isResolved:!1,_isRejected:!1};this._taskStack.push(a),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:s,options:a,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 s.initialize(a).ad({options:a,collection:i},c),d=Object.assign({id:o},l);this.logger.info(`任务执行成功,成功信息:${JSON.stringify(d)}`),e._isResolved=!0,n(d)}catch(i){let a=Object.assign({id:o,apiError:i});this.logger.error(`任务执行失败, 继续下一个任务,错误信息:${JSON.stringify(a)}`),e._isRejected=!0;try{s?.clear()}catch(e){this.logger.error("clear error: ",JSON.stringify(Object.assign({id:o,apiError:e})))}n(a),await t(r)}}),t={roundTasks:r.length};r.map(e=>(r,t)=>async s=>await e(Object.assign({},r,s),t)).reduce((e,r)=>(t,s)=>e(t,r(t,s)))(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}}let t=r;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 a{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({},a.args,this._adConfig,e);if(!t.adUnitId)throw console.error("[RewardAdFather] reward args adUnitId is required",t),new s("[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 a.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"),a.args=e}static async executeWithManager(e,r){return e&&e instanceof a?t.getInstance({log:r?.options?.log??!0}).addTask(e,r):(console.error("RewardAdFather: executeWithManager - 无效的广告实例"),Promise.reject(Error("无效的广告实例")))}}let i=a,n=t;export{t as AdExecuteManager,e as Logger,i as RewardAdFather,s as SerializableError,n as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@singcl/ad-execute-manager",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {