@quicktvui/tv-ad-unlock 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export * from './types';
2
- export { useTVAdUnlock, useTVAdUnlockStorage } from './useTVAdUnlock';
2
+ export { useTVAdUnlock, useTVAdUnlockStorage, createStorageKeys } from './useTVAdUnlock';
3
+ export { useTVAdNavigator } from './useTVAdNavigator';
4
+ export { tvAdUnlockPlugin, createTVAdRoute } from './plugin';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export * from './types';
2
- export { useTVAdUnlock, useTVAdUnlockStorage } from './useTVAdUnlock';
2
+ export { useTVAdUnlock, useTVAdUnlockStorage, createStorageKeys } from './useTVAdUnlock';
3
+ export { useTVAdNavigator } from './useTVAdNavigator';
4
+ export { tvAdUnlockPlugin, createTVAdRoute } from './plugin';
3
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { type App, type InjectionKey } from 'vue';
2
+ import { ESRouteType } from '@extscreen/es3-router';
3
+ import type { TVAdUnlockPluginOptions, TVAdUnlockPluginProvided } from './types';
4
+ export declare const TV_AD_UNLOCK_KEY: InjectionKey<TVAdUnlockPluginProvided>;
5
+ export declare const tvAdUnlockPlugin: {
6
+ install(app: App, options: TVAdUnlockPluginOptions): void;
7
+ };
8
+ export declare function createTVAdRoute(): {
9
+ path: string;
10
+ name: string;
11
+ component: import("vue").DefineComponent<{}, {}, any>;
12
+ type: ESRouteType;
13
+ };
14
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,KAAK,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EAEzB,MAAM,SAAS,CAAA;AAGhB,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,wBAAwB,CAAwB,CAAA;AAY5F,eAAO,MAAM,gBAAgB;iBACd,GAAG,WAAW,uBAAuB;CAYnD,CAAA;AAED,wBAAgB,eAAe;;;;;EAO9B"}
package/dist/plugin.js ADDED
@@ -0,0 +1,34 @@
1
+ import { ESRouteType } from '@extscreen/es3-router';
2
+ import TVAdUnlockView from './TVAdUnlockView.vue';
3
+ export const TV_AD_UNLOCK_KEY = Symbol('tvAdUnlock');
4
+ const DEFAULT_PAGE_CONFIG = {
5
+ title: '观看30秒广告 当日解锁',
6
+ subTitle: '手机打开【微信】扫码',
7
+ scanTitle: '观看奖励',
8
+ scanContent: '观看广告后可获得奖励',
9
+ scanToast: '奖励已获得,请前往电视端观看',
10
+ invalidCodeImage: '',
11
+ scannedCodeImage: ''
12
+ };
13
+ export const tvAdUnlockPlugin = {
14
+ install(app, options) {
15
+ const pageConfig = {
16
+ ...DEFAULT_PAGE_CONFIG,
17
+ ...options.pageConfig
18
+ };
19
+ app.provide(TV_AD_UNLOCK_KEY, {
20
+ requestManager: options.requestManager,
21
+ trackEvent: options.trackEvent,
22
+ pageConfig
23
+ });
24
+ }
25
+ };
26
+ export function createTVAdRoute() {
27
+ return {
28
+ path: '/ad',
29
+ name: 'ad',
30
+ component: TVAdUnlockView,
31
+ type: ESRouteType.ES_ROUTE_TYPE_DIALOG
32
+ };
33
+ }
34
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAMnD,OAAO,cAAc,MAAM,sBAAsB,CAAA;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAA2C,MAAM,CAAC,YAAY,CAAC,CAAA;AAE5F,MAAM,mBAAmB,GAAmC;IAC1D,KAAK,EAAE,cAAc;IACrB,QAAQ,EAAE,YAAY;IACtB,SAAS,EAAE,MAAM;IACjB,WAAW,EAAE,YAAY;IACzB,SAAS,EAAE,gBAAgB;IAC3B,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,EAAE;CACrB,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO,CAAC,GAAQ,EAAE,OAAgC;QAChD,MAAM,UAAU,GAAmC;YACjD,GAAG,mBAAmB;YACtB,GAAG,OAAO,CAAC,UAAU;SACtB,CAAA;QAED,GAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE;YAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU;SACX,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO;QACL,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,cAAc;QACzB,IAAI,EAAE,WAAW,CAAC,oBAAoB;KACvC,CAAA;AACH,CAAC"}
package/dist/types.d.ts CHANGED
@@ -23,11 +23,6 @@ export interface TVAdUnlockState {
23
23
  qrCodeState: number;
24
24
  isLoading: boolean;
25
25
  }
26
- export interface TVAdUnlockStorageKeys {
27
- playCountKey: string;
28
- unlockDateKey: string;
29
- unlockedTodayKey: string;
30
- }
31
26
  export interface TVAdUnlockOptions {
32
27
  config: TVAdUnlockConfig;
33
28
  storageKeys: TVAdUnlockStorageKeys;
@@ -48,4 +43,49 @@ export interface TrackEventParams {
48
43
  contentId?: string;
49
44
  contentName?: string;
50
45
  }
46
+ export interface TVAdUnlockPageConfig {
47
+ title?: string;
48
+ subTitle?: string;
49
+ scanTitle?: string;
50
+ scanContent?: string;
51
+ scanToast?: string;
52
+ invalidCodeImage?: string;
53
+ scannedCodeImage?: string;
54
+ }
55
+ export interface TVAdUnlockRuleConfig {
56
+ initialCredits?: number;
57
+ creditsPerAd?: number;
58
+ dailyUnlockEnabled?: boolean;
59
+ permanentUnlockAfterTotalAds?: number;
60
+ }
61
+ export interface TVAdUnlockNavigatorConfig extends TVAdUnlockRuleConfig {
62
+ packageName: string;
63
+ }
64
+ export interface TVAdUnlockStorageKeys {
65
+ credits: string;
66
+ totalAdsWatched: string;
67
+ permanentUnlocked: string;
68
+ todayUnlocked: string;
69
+ todayPlayCount: string;
70
+ todayAdCount: string;
71
+ todayDate: string;
72
+ }
73
+ export interface TVAdUnlockPluginOptions {
74
+ requestManager: RequestManager;
75
+ trackEvent?: (event: TVAdUnlockTrackEvent) => void;
76
+ pageConfig?: TVAdUnlockPageConfig;
77
+ }
78
+ export interface TVAdUnlockTrackEvent {
79
+ type: 'page' | 'click';
80
+ name: string;
81
+ assetId?: string;
82
+ assetName?: string;
83
+ fromId?: string;
84
+ fromName?: string;
85
+ }
86
+ export interface TVAdUnlockPluginProvided {
87
+ requestManager: RequestManager;
88
+ trackEvent?: (event: TVAdUnlockTrackEvent) => void;
89
+ pageConfig: Required<TVAdUnlockPageConfig>;
90
+ }
51
91
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IACvC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;IAC5B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAA;IACxB,WAAW,EAAE,qBAAqB,CAAA;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,mBAAmB,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IAC1D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { TVAdUnlockNavigatorConfig } from './types';
2
+ export declare function useTVAdNavigator(config: TVAdUnlockNavigatorConfig): {
3
+ consume: (amount: number) => Promise<{
4
+ success: boolean;
5
+ consumed: number;
6
+ }>;
7
+ consumeAll: () => Promise<number>;
8
+ consumeAndNavigate: (params?: {
9
+ onUnlockSuccess?: () => void;
10
+ }) => Promise<boolean>;
11
+ getCredits: () => Promise<number>;
12
+ isPermanentlyUnlocked: () => Promise<boolean>;
13
+ getTodayAdCount: () => Promise<number>;
14
+ addCredits: (amount: number) => Promise<void>;
15
+ };
16
+ //# sourceMappingURL=useTVAdNavigator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTVAdNavigator.d.ts","sourceRoot":"","sources":["../src/useTVAdNavigator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAwB,MAAM,SAAS,CAAA;AAS9E,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,yBAAyB;sBAajC,MAAM,KAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;sBAK1D,OAAO,CAAC,MAAM,CAAC;kCAID;QACzC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAA;KAC7B,KAAG,OAAO,CAAC,OAAO,CAAC;sBAiCS,OAAO,CAAC,MAAM,CAAC;iCAIJ,OAAO,CAAC,OAAO,CAAC;2BAKtB,OAAO,CAAC,MAAM,CAAC;yBAIf,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;EAazD"}
@@ -0,0 +1,82 @@
1
+ import { useESRouter } from '@extscreen/es3-router';
2
+ import { useESLocalStorage } from '@extscreen/es3-core';
3
+ import { createStorageKeys, useTVAdUnlockStorage } from './useTVAdUnlock';
4
+ const DEFAULT_RULES = {
5
+ initialCredits: 5,
6
+ creditsPerAd: 5,
7
+ dailyUnlockEnabled: true,
8
+ permanentUnlockAfterTotalAds: 10
9
+ };
10
+ export function useTVAdNavigator(config) {
11
+ const router = useESRouter();
12
+ const storage = useESLocalStorage();
13
+ const keys = createStorageKeys(config.packageName);
14
+ const adStorage = useTVAdUnlockStorage(storage, keys, config.initialCredits ?? DEFAULT_RULES.initialCredits);
15
+ const rules = {
16
+ initialCredits: config.initialCredits ?? DEFAULT_RULES.initialCredits,
17
+ creditsPerAd: config.creditsPerAd ?? DEFAULT_RULES.creditsPerAd,
18
+ dailyUnlockEnabled: config.dailyUnlockEnabled ?? DEFAULT_RULES.dailyUnlockEnabled,
19
+ permanentUnlockAfterTotalAds: config.permanentUnlockAfterTotalAds ?? DEFAULT_RULES.permanentUnlockAfterTotalAds
20
+ };
21
+ async function consume(amount) {
22
+ const consumed = await adStorage.consumeCredits(amount);
23
+ return { success: consumed > 0, consumed };
24
+ }
25
+ async function consumeAll() {
26
+ return adStorage.consumeAllCredits();
27
+ }
28
+ async function consumeAndNavigate(params) {
29
+ await adStorage.checkDailyReset();
30
+ // 规则①:永久解锁 → 放行
31
+ if (rules.permanentUnlockAfterTotalAds > 0) {
32
+ const permanent = await adStorage.isPermanentlyUnlocked();
33
+ if (permanent)
34
+ return false;
35
+ }
36
+ // 规则②:今日已解锁 → 放行
37
+ if (rules.dailyUnlockEnabled) {
38
+ const today = await adStorage.isTodayUnlocked();
39
+ if (today)
40
+ return false;
41
+ }
42
+ // 规则③:信用点 > 0 → 扣 1 分,放行
43
+ const credits = await adStorage.getCredits();
44
+ if (credits > 0) {
45
+ await adStorage.consumeCredits(1);
46
+ return false;
47
+ }
48
+ // 规则④:兜底 → 弹广告
49
+ router.push({
50
+ name: 'ad',
51
+ params: {
52
+ creditsPerAd: String(rules.creditsPerAd),
53
+ permanentUnlockAfterTotalAds: String(rules.permanentUnlockAfterTotalAds)
54
+ }
55
+ });
56
+ return true;
57
+ }
58
+ async function getCredits() {
59
+ return adStorage.getCredits();
60
+ }
61
+ async function isPermanentlyUnlocked() {
62
+ if (rules.permanentUnlockAfterTotalAds <= 0)
63
+ return false;
64
+ return adStorage.isPermanentlyUnlocked();
65
+ }
66
+ async function getTodayAdCount() {
67
+ return adStorage.getTodayAdCount();
68
+ }
69
+ async function addCredits(amount) {
70
+ return adStorage.addCredits(amount);
71
+ }
72
+ return {
73
+ consume,
74
+ consumeAll,
75
+ consumeAndNavigate,
76
+ getCredits,
77
+ isPermanentlyUnlocked,
78
+ getTodayAdCount,
79
+ addCredits
80
+ };
81
+ }
82
+ //# sourceMappingURL=useTVAdNavigator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTVAdNavigator.js","sourceRoot":"","sources":["../src/useTVAdNavigator.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,24 @@
1
- import type { TVAdUnlockConfig, TVAdUnlockStorageKeys, TVAdUnlockCallbacks, RequestManager } from './types';
1
+ import type { ESLocalStorage } from '@extscreen/es3-core';
2
+ import type { TVAdUnlockConfig, TVAdUnlockCallbacks, TVAdUnlockStorageKeys, RequestManager } from './types';
3
+ export declare function createStorageKeys(packageName: string): TVAdUnlockStorageKeys;
4
+ export declare function useTVAdUnlockStorage(storage: ESLocalStorage, keys: TVAdUnlockStorageKeys, initialCredits?: number): {
5
+ checkDailyReset: () => Promise<void>;
6
+ getCredits: () => Promise<number>;
7
+ setCredits: (value: number) => Promise<void>;
8
+ addCredits: (amount: number) => Promise<void>;
9
+ consumeCredits: (amount: number) => Promise<number>;
10
+ consumeAllCredits: () => Promise<number>;
11
+ isTodayUnlocked: () => Promise<boolean>;
12
+ setTodayUnlocked: () => Promise<void>;
13
+ getTodayPlayCount: () => Promise<number>;
14
+ incrementPlayCount: () => Promise<number>;
15
+ getTotalAdsWatched: () => Promise<number>;
16
+ incrementTotalAdsWatched: () => Promise<number>;
17
+ isPermanentlyUnlocked: () => Promise<boolean>;
18
+ setPermanentUnlocked: () => Promise<void>;
19
+ getTodayAdCount: () => Promise<number>;
20
+ incrementTodayAdCount: () => Promise<number>;
21
+ };
2
22
  export declare function useTVAdUnlock(config: TVAdUnlockConfig, storageKeys: TVAdUnlockStorageKeys, requestManager: RequestManager, callbacks?: TVAdUnlockCallbacks): {
3
23
  adQrCode: import("vue").Ref<string, string>;
4
24
  isInvalid: import("vue").Ref<boolean, boolean>;
@@ -12,30 +32,5 @@ export declare function useTVAdUnlock(config: TVAdUnlockConfig, storageKeys: TVA
12
32
  stopInvalidTimer: () => void;
13
33
  invalidQrCode: () => void;
14
34
  reset: () => void;
15
- isTodayUnlocked: (storage: {
16
- getString: (key: string, defaultValue?: string) => Promise<string>;
17
- }) => Promise<boolean>;
18
- getTodayPlayCount: (storage: {
19
- getString: (key: string, defaultValue?: string) => Promise<string>;
20
- putString: (key: string, value: string) => Promise<void>;
21
- }) => Promise<number>;
22
- incrementPlayCount: (storage: {
23
- getString: (key: string, defaultValue?: string) => Promise<string>;
24
- putString: (key: string, value: string) => Promise<void>;
25
- }) => Promise<number>;
26
- checkNeedAd: (storage: {
27
- getString: (key: string, defaultValue?: string) => Promise<string>;
28
- putString: (key: string, value: string) => Promise<void>;
29
- }, freePlayCount: number) => Promise<boolean>;
30
- };
31
- export declare function useTVAdUnlockStorage(storage: {
32
- getString: (key: string, defaultValue?: string) => Promise<string>;
33
- putString: (key: string, value: string) => Promise<void>;
34
- }, storageKeys: TVAdUnlockStorageKeys, freePlayCount?: number): {
35
- isTodayUnlocked: () => Promise<boolean>;
36
- getTodayPlayCount: () => Promise<number>;
37
- incrementPlayCount: () => Promise<number>;
38
- checkNeedAd: () => Promise<boolean>;
39
- setTodayUnlocked: () => Promise<void>;
40
35
  };
41
36
  //# sourceMappingURL=useTVAdUnlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTVAdUnlock.d.ts","sourceRoot":"","sources":["../src/useTVAdUnlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAGhB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACf,MAAM,SAAS,CAAA;AAKhB,wBAAgB,aAAa,CAC3B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,qBAAqB,EAClC,cAAc,EAAE,cAAc,EAC9B,SAAS,CAAC,EAAE,mBAAmB;;;;;;4BA4FM,MAAM,cAAa,MAAM,gBAAwB,MAAM,cAA4B,MAAM,KAAsB,OAAO,CAAC,MAAM,CAAC;yCAkCvH,MAAM,KAAG,IAAI;mCAQrB,IAAI;6BAeV,IAAI;4BAPL,IAAI;yBAeP,IAAI;iBAMZ,IAAI;+BArIkB;QAAE,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,KAAG,OAAO,CAAC,OAAO,CAAC;iCAMvF;QAAE,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,KAAG,OAAO,CAAC,MAAM,CAAC;kCAcjJ;QAAE,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,KAAG,OAAO,CAAC,MAAM,CAAC;2BAOzJ;QAAE,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,iBAAiB,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;EA4I/M;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE;IAAE,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,EACzI,WAAW,EAAE,qBAAqB,EAClC,aAAa,GAAE,MAAW;2BAOQ,OAAO,CAAC,OAAO,CAAC;6BAMd,OAAO,CAAC,MAAM,CAAC;8BAcd,OAAO,CAAC,MAAM,CAAC;uBAOtB,OAAO,CAAC,OAAO,CAAC;4BASX,OAAO,CAAC,IAAI,CAAC;EAcjD"}
1
+ {"version":3,"file":"useTVAdUnlock.d.ts","sourceRoot":"","sources":["../src/useTVAdUnlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EACV,gBAAgB,EAEhB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACf,MAAM,SAAS,CAAA;AAKhB,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,qBAAqB,CAU5E;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,qBAAqB,EAC3B,cAAc,GAAE,MAAU;2BAOQ,OAAO,CAAC,IAAI,CAAC;sBAWlB,OAAO,CAAC,MAAM,CAAC;wBAIX,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;yBAIrB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;6BAKlB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;6BAQ1B,OAAO,CAAC,MAAM,CAAC;2BAQjB,OAAO,CAAC,OAAO,CAAC;4BAKf,OAAO,CAAC,IAAI,CAAC;6BAMZ,OAAO,CAAC,MAAM,CAAC;8BAKd,OAAO,CAAC,MAAM,CAAC;8BAOf,OAAO,CAAC,MAAM,CAAC;oCAIT,OAAO,CAAC,MAAM,CAAC;iCAOlB,OAAO,CAAC,OAAO,CAAC;gCAIjB,OAAO,CAAC,IAAI,CAAC;2BAIlB,OAAO,CAAC,MAAM,CAAC;iCAKT,OAAO,CAAC,MAAM,CAAC;EAyBxD;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,qBAAqB,EAClC,cAAc,EAAE,cAAc,EAC9B,SAAS,CAAC,EAAE,mBAAmB;;;;;;4BAmDM,MAAM,cAAa,MAAM,gBAAwB,MAAM,cAA4B,MAAM,KAAsB,OAAO,CAAC,MAAM,CAAC;yCAkCvH,MAAM,KAAG,IAAI;mCAQrB,IAAI;6BAeV,IAAI;4BAPL,IAAI;yBAeP,IAAI;iBAMZ,IAAI;EA8BvB"}
@@ -1,6 +1,120 @@
1
1
  import { ref, watch, onUnmounted } from 'vue';
2
2
  const DEFAULT_INVALID_TIMEOUT = 300000;
3
3
  const DEFAULT_POLL_INTERVAL = 1000;
4
+ export function createStorageKeys(packageName) {
5
+ return {
6
+ credits: `${packageName}_ad_credits`,
7
+ totalAdsWatched: `${packageName}_ad_total_ads`,
8
+ permanentUnlocked: `${packageName}_ad_permanent`,
9
+ todayUnlocked: `${packageName}_ad_today_unlocked`,
10
+ todayPlayCount: `${packageName}_ad_today_plays`,
11
+ todayAdCount: `${packageName}_ad_today_ad_count`,
12
+ todayDate: `${packageName}_ad_today_date`
13
+ };
14
+ }
15
+ export function useTVAdUnlockStorage(storage, keys, initialCredits = 5) {
16
+ function getTodayString() {
17
+ const today = new Date();
18
+ return `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`;
19
+ }
20
+ async function checkDailyReset() {
21
+ const today = getTodayString();
22
+ const savedDate = await storage.getString(keys.todayDate, '');
23
+ if (savedDate !== today) {
24
+ await storage.putString(keys.todayDate, today);
25
+ await storage.putInt(keys.todayPlayCount, 0);
26
+ await storage.putBoolean(keys.todayUnlocked, false);
27
+ await storage.putInt(keys.todayAdCount, 0);
28
+ }
29
+ }
30
+ async function getCredits() {
31
+ return storage.getInt(keys.credits, initialCredits);
32
+ }
33
+ async function setCredits(value) {
34
+ await storage.putInt(keys.credits, value);
35
+ }
36
+ async function addCredits(amount) {
37
+ const current = await getCredits();
38
+ await storage.putInt(keys.credits, current + amount);
39
+ }
40
+ async function consumeCredits(amount) {
41
+ const current = await getCredits();
42
+ if (current <= 0)
43
+ return 0;
44
+ const consumed = Math.min(current, amount);
45
+ await storage.putInt(keys.credits, current - consumed);
46
+ return consumed;
47
+ }
48
+ async function consumeAllCredits() {
49
+ const current = await getCredits();
50
+ if (current > 0) {
51
+ await storage.putInt(keys.credits, 0);
52
+ }
53
+ return current;
54
+ }
55
+ async function isTodayUnlocked() {
56
+ await checkDailyReset();
57
+ return storage.getBoolean(keys.todayUnlocked, false);
58
+ }
59
+ async function setTodayUnlocked() {
60
+ const today = getTodayString();
61
+ await storage.putString(keys.todayDate, today);
62
+ await storage.putBoolean(keys.todayUnlocked, true);
63
+ }
64
+ async function getTodayPlayCount() {
65
+ await checkDailyReset();
66
+ return storage.getInt(keys.todayPlayCount, 0);
67
+ }
68
+ async function incrementPlayCount() {
69
+ const count = await getTodayPlayCount();
70
+ const newCount = count + 1;
71
+ await storage.putInt(keys.todayPlayCount, newCount);
72
+ return newCount;
73
+ }
74
+ async function getTotalAdsWatched() {
75
+ return storage.getInt(keys.totalAdsWatched, 0);
76
+ }
77
+ async function incrementTotalAdsWatched() {
78
+ const count = await getTotalAdsWatched();
79
+ const newCount = count + 1;
80
+ await storage.putInt(keys.totalAdsWatched, newCount);
81
+ return newCount;
82
+ }
83
+ async function isPermanentlyUnlocked() {
84
+ return storage.getBoolean(keys.permanentUnlocked, false);
85
+ }
86
+ async function setPermanentUnlocked() {
87
+ await storage.putBoolean(keys.permanentUnlocked, true);
88
+ }
89
+ async function getTodayAdCount() {
90
+ await checkDailyReset();
91
+ return storage.getInt(keys.todayAdCount, 0);
92
+ }
93
+ async function incrementTodayAdCount() {
94
+ const count = await getTodayAdCount();
95
+ const newCount = count + 1;
96
+ await storage.putInt(keys.todayAdCount, newCount);
97
+ return newCount;
98
+ }
99
+ return {
100
+ checkDailyReset,
101
+ getCredits,
102
+ setCredits,
103
+ addCredits,
104
+ consumeCredits,
105
+ consumeAllCredits,
106
+ isTodayUnlocked,
107
+ setTodayUnlocked,
108
+ getTodayPlayCount,
109
+ incrementPlayCount,
110
+ getTotalAdsWatched,
111
+ incrementTotalAdsWatched,
112
+ isPermanentlyUnlocked,
113
+ setPermanentUnlocked,
114
+ getTodayAdCount,
115
+ incrementTodayAdCount
116
+ };
117
+ }
4
118
  export function useTVAdUnlock(config, storageKeys, requestManager, callbacks) {
5
119
  const adQrCode = ref('');
6
120
  const isInvalid = ref(false);
@@ -20,40 +134,6 @@ export function useTVAdUnlock(config, storageKeys, requestManager, callbacks) {
20
134
  callbacks?.onQrCodeScanned?.();
21
135
  }
22
136
  });
23
- function getTodayString() {
24
- const today = new Date();
25
- return `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`;
26
- }
27
- async function isTodayUnlocked(storage) {
28
- const today = getTodayString();
29
- const unlockedDate = await storage.getString(storageKeys.unlockedTodayKey, '');
30
- return unlockedDate === today;
31
- }
32
- async function getTodayPlayCount(storage) {
33
- const today = getTodayString();
34
- const savedDate = await storage.getString(storageKeys.unlockDateKey, '');
35
- if (savedDate !== today) {
36
- await storage.putString(storageKeys.unlockDateKey, today);
37
- await storage.putString(storageKeys.playCountKey, '0');
38
- return 0;
39
- }
40
- const count = await storage.getString(storageKeys.playCountKey, '0');
41
- return parseInt(count) || 0;
42
- }
43
- async function incrementPlayCount(storage) {
44
- const count = await getTodayPlayCount(storage);
45
- const newCount = count + 1;
46
- await storage.putString(storageKeys.playCountKey, String(newCount));
47
- return newCount;
48
- }
49
- async function checkNeedAd(storage, freePlayCount) {
50
- const unlocked = await isTodayUnlocked(storage);
51
- if (unlocked) {
52
- return false;
53
- }
54
- const count = await getTodayPlayCount(storage);
55
- return count >= freePlayCount;
56
- }
57
137
  async function pollTVADStatus(deviceId) {
58
138
  try {
59
139
  const res = await requestManager.post(urlPollTVADStatus, {
@@ -169,60 +249,7 @@ export function useTVAdUnlock(config, storageKeys, requestManager, callbacks) {
169
249
  startInvalidTimer,
170
250
  stopInvalidTimer,
171
251
  invalidQrCode,
172
- reset,
173
- isTodayUnlocked,
174
- getTodayPlayCount,
175
- incrementPlayCount,
176
- checkNeedAd
177
- };
178
- }
179
- export function useTVAdUnlockStorage(storage, storageKeys, freePlayCount = 32) {
180
- function getTodayString() {
181
- const today = new Date();
182
- return `${today.getFullYear()}-${today.getMonth() + 1}-${today.getDate()}`;
183
- }
184
- async function isTodayUnlocked() {
185
- const today = getTodayString();
186
- const unlockedDate = await storage.getString(storageKeys.unlockedTodayKey, '');
187
- return unlockedDate === today;
188
- }
189
- async function getTodayPlayCount() {
190
- const today = getTodayString();
191
- const savedDate = await storage.getString(storageKeys.unlockDateKey, '');
192
- if (savedDate !== today) {
193
- await storage.putString(storageKeys.unlockDateKey, today);
194
- await storage.putString(storageKeys.playCountKey, '0');
195
- return 0;
196
- }
197
- const count = await storage.getString(storageKeys.playCountKey, '0');
198
- return parseInt(count) || 0;
199
- }
200
- async function incrementPlayCount() {
201
- const count = await getTodayPlayCount();
202
- const newCount = count + 1;
203
- await storage.putString(storageKeys.playCountKey, String(newCount));
204
- return newCount;
205
- }
206
- async function checkNeedAd() {
207
- const unlocked = await isTodayUnlocked();
208
- if (unlocked) {
209
- return false;
210
- }
211
- const count = await getTodayPlayCount();
212
- return count >= freePlayCount;
213
- }
214
- async function setTodayUnlocked() {
215
- const today = getTodayString();
216
- await storage.putString(storageKeys.unlockedTodayKey, today);
217
- await storage.putString(storageKeys.playCountKey, '0');
218
- await storage.putString(storageKeys.unlockDateKey, today);
219
- }
220
- return {
221
- isTodayUnlocked,
222
- getTodayPlayCount,
223
- incrementPlayCount,
224
- checkNeedAd,
225
- setTodayUnlocked
252
+ reset
226
253
  };
227
254
  }
228
255
  //# sourceMappingURL=useTVAdUnlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTVAdUnlock.js","sourceRoot":"","sources":["../src/useTVAdUnlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAA;AAU7C,MAAM,uBAAuB,GAAG,MAAM,CAAA;AACtC,MAAM,qBAAqB,GAAG,IAAI,CAAA;AAElC,MAAM,UAAU,aAAa,CAC3B,MAAwB,EACxB,WAAkC,EAClC,cAA8B,EAC9B,SAA+B;IAE/B,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;IACxB,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5B,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5B,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;IAC7B,MAAM,kBAAkB,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;IAErC,IAAI,YAAY,GAAyC,IAAI,CAAA;IAC7D,IAAI,SAAS,GAAyC,IAAI,CAAA;IAE1D,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,uBAAuB,CAAA;IACvE,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,qBAAqB,CAAA;IAEjE,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,GAAG,gCAAgC,CAAA;IACtF,MAAM,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,GAAG,sCAAsC,CAAA;IAE7F,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAChD,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,iBAAiB,EAAE,CAAA;YACnB,SAAS,EAAE,eAAe,EAAE,EAAE,CAAA;QAChC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,SAAS,cAAc;QACrB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;QACxB,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAA;IAC5E,CAAC;IAED,KAAK,UAAU,eAAe,CAAC,OAA+E;QAC5G,MAAM,KAAK,GAAG,cAAc,EAAE,CAAA;QAC9B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QAC9E,OAAO,YAAY,KAAK,KAAK,CAAA;IAC/B,CAAC;IAED,KAAK,UAAU,iBAAiB,CAAC,OAAyI;QACxK,MAAM,KAAK,GAAG,cAAc,EAAE,CAAA;QAC9B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;QAExE,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;YACzD,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;YACtD,OAAO,CAAC,CAAA;QACV,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;QACpE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,UAAU,kBAAkB,CAAC,OAAyI;QACzK,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC9C,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAA;QAC1B,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QACnE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,OAAyI,EAAE,aAAqB;QACzL,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAA;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC9C,OAAO,KAAK,IAAI,aAAa,CAAA;IAC/B,CAAC;IAED,KAAK,UAAU,cAAc,CAAC,QAAgB;QAC5C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACvD,IAAI,EAAE,EAAE,QAAQ,EAAE;aACnB,CAAC,CAAA;YAEF,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,OAAM;YACR,CAAC;YAED,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;YAEtC,IAAI,WAAW,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBAC5B,SAAS,EAAE,eAAe,EAAE,EAAE,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC1B,cAAc,CAAC,QAAQ,CAAC,CAAA;gBAC1B,CAAC,EAAE,YAAY,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,cAAc,CAAC,QAAQ,CAAC,CAAA;YAC1B,CAAC,EAAE,YAAY,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,YAAoB,MAAM,EAAE,cAAsB,YAAY,EAAE,YAAoB,gBAAgB;QAC/I,SAAS,CAAC,KAAK,GAAG,IAAI,CAAA;QACtB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA;QACvB,WAAW,CAAC,KAAK,GAAG,CAAC,CAAA;QAErB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACtD,IAAI,EAAE;oBACJ,QAAQ;oBACR,SAAS;oBACT,WAAW;oBACX,SAAS;iBACV;aACF,CAAC,CAAA;YAEF,IAAI,GAAG,EAAE,CAAC;gBACR,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAA;gBACpB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA;gBACvB,wBAAwB,CAAC,QAAQ,CAAC,CAAA;gBAClC,iBAAiB,EAAE,CAAA;gBACnB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA;gBACvB,OAAO,GAAG,CAAA;YACZ,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA;gBACvB,SAAS,EAAE,cAAc,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;gBACjD,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA;YACvB,SAAS,EAAE,cAAc,EAAE,CAAC,CAAU,CAAC,CAAA;YACvC,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED,SAAS,wBAAwB,CAAC,QAAgB;QAChD,uBAAuB,EAAE,CAAA;QACzB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAA;QACxB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,cAAc,CAAC,QAAQ,CAAC,CAAA;QAC1B,CAAC,EAAE,YAAY,CAAC,CAAA;IAClB,CAAC;IAED,SAAS,uBAAuB;QAC9B,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,SAAS,GAAG,IAAI,CAAA;YAChB,UAAU,CAAC,KAAK,GAAG,IAAI,CAAA;QACzB,CAAC;IACH,CAAC;IAED,SAAS,gBAAgB;QACvB,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,YAAY,CAAC,CAAA;YAC1B,YAAY,GAAG,IAAI,CAAA;QACrB,CAAC;IACH,CAAC;IAED,SAAS,iBAAiB;QACxB,gBAAgB,EAAE,CAAA;QAClB,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,aAAa,EAAE,CAAA;YACf,YAAY,GAAG,IAAI,CAAA;QACrB,CAAC,EAAE,cAAc,CAAC,CAAA;IACpB,CAAC;IAED,SAAS,aAAa;QACpB,SAAS,CAAC,KAAK,GAAG,IAAI,CAAA;QACtB,uBAAuB,EAAE,CAAA;QACzB,SAAS,EAAE,eAAe,EAAE,EAAE,CAAA;IAChC,CAAC;IAED,SAAS,KAAK;QACZ,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAA;QACnB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA;QACvB,WAAW,CAAC,KAAK,GAAG,CAAC,CAAA;QACrB,SAAS,CAAC,KAAK,GAAG,KAAK,CAAA;QACvB,UAAU,CAAC,KAAK,GAAG,KAAK,CAAA;QACxB,kBAAkB,CAAC,KAAK,GAAG,KAAK,CAAA;QAChC,uBAAuB,EAAE,CAAA;QACzB,gBAAgB,EAAE,CAAA;IACpB,CAAC;IAED,WAAW,CAAC,GAAG,EAAE;QACf,uBAAuB,EAAE,CAAA;QACzB,gBAAgB,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,QAAQ;QACR,SAAS;QACT,WAAW;QACX,SAAS;QACT,kBAAkB;QAClB,WAAW;QACX,wBAAwB;QACxB,uBAAuB;QACvB,iBAAiB;QACjB,gBAAgB;QAChB,aAAa;QACb,KAAK;QACL,eAAe;QACf,iBAAiB;QACjB,kBAAkB;QAClB,WAAW;KACZ,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAyI,EACzI,WAAkC,EAClC,gBAAwB,EAAE;IAE1B,SAAS,cAAc;QACrB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;QACxB,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAA;IAC5E,CAAC;IAED,KAAK,UAAU,eAAe;QAC5B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAA;QAC9B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QAC9E,OAAO,YAAY,KAAK,KAAK,CAAA;IAC/B,CAAC;IAED,KAAK,UAAU,iBAAiB;QAC9B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAA;QAC9B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;QAExE,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YACxB,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;YACzD,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;YACtD,OAAO,CAAC,CAAA;QACV,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;QACpE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,UAAU,kBAAkB;QAC/B,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACvC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAA;QAC1B,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;QACnE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,UAAU,WAAW;QACxB,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAA;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACvC,OAAO,KAAK,IAAI,aAAa,CAAA;IAC/B,CAAC;IAED,KAAK,UAAU,gBAAgB;QAC7B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAA;QAC9B,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;QAC5D,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;QACtD,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO;QACL,eAAe;QACf,iBAAiB;QACjB,kBAAkB;QAClB,WAAW;QACX,gBAAgB;KACjB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"useTVAdUnlock.js","sourceRoot":"","sources":["../src/useTVAdUnlock.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,18 @@
1
1
  {
2
2
  "name": "@quicktvui/tv-ad-unlock",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "TV广告解锁组件 - 用于QuickTVUI框架的电视端广告解锁功能",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
8
8
  "dist",
9
- "src/TVAdUnlock.vue"
9
+ "src/TVAdUnlock.vue",
10
+ "src/TVAdUnlockView.vue",
11
+ "src/assets"
10
12
  ],
13
+ "scripts": {
14
+ "build": "tsc"
15
+ },
11
16
  "keywords": [
12
17
  "quicktvui",
13
18
  "tv",
@@ -29,8 +34,5 @@
29
34
  "repository": {
30
35
  "type": "git",
31
36
  "url": ""
32
- },
33
- "scripts": {
34
- "build": "tsc"
35
37
  }
36
- }
38
+ }
@@ -0,0 +1,259 @@
1
+ <template>
2
+ <div class="ad-container">
3
+ <div class="content">
4
+ <div class="content-bg" />
5
+ <span class="title">{{ pageConfig.title }}</span>
6
+ <span class="sub-title">{{ pageConfig.subTitle }}</span>
7
+ <div class="qrcode-container">
8
+ <qt-qr-code
9
+ v-if="adQrCode && !isInvalid && qrCodeState !== 1"
10
+ class="qrcode"
11
+ :content="adQrCode"
12
+ />
13
+ <img
14
+ v-if="isInvalid"
15
+ class="invalid-code"
16
+ :src="pageConfig.invalidCodeImage"
17
+ />
18
+ <img
19
+ v-if="qrCodeState === 1"
20
+ class="invalid-code"
21
+ :src="pageConfig.scannedCodeImage"
22
+ />
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </template>
27
+
28
+ <script setup lang="ts">
29
+ import { ref, inject, computed } from 'vue'
30
+ import { ESKeyCode, useESRuntime, useESToast, useESLocalStorage } from '@extscreen/es3-core'
31
+ import { useESRouter } from '@extscreen/es3-router'
32
+ import { TV_AD_UNLOCK_KEY } from './plugin'
33
+ import { createStorageKeys, useTVAdUnlock, useTVAdUnlockStorage } from './useTVAdUnlock'
34
+ import type { TVAdUnlockPluginProvided, TVAdUnlockParams } from './types'
35
+
36
+ const pluginContext = inject(TV_AD_UNLOCK_KEY) as TVAdUnlockPluginProvided
37
+ const { requestManager, pageConfig: rawPageConfig, trackEvent } = pluginContext
38
+
39
+ const toast = useESToast()
40
+ const storage = useESLocalStorage()
41
+ const router = useESRouter()
42
+ const runtime = useESRuntime()
43
+ const dnum = runtime.getRuntimeDeviceId()
44
+
45
+ const packageName = runtime.getESAppName?.() ?? 'unknown'
46
+ const keys = createStorageKeys(packageName)
47
+ const adStorage = useTVAdUnlockStorage(storage, keys)
48
+
49
+ const routeOverrides = ref<Partial<typeof rawPageConfig>>({})
50
+
51
+ const routeRuleParams = ref({
52
+ creditsPerAd: 5,
53
+ permanentUnlockAfterTotalAds: 10
54
+ })
55
+
56
+ const pageConfig = computed(() => ({
57
+ ...rawPageConfig,
58
+ ...routeOverrides.value
59
+ }))
60
+
61
+ const payParams = ref<TVAdUnlockParams>({
62
+ assetId: '',
63
+ assetName: '',
64
+ fromId: '',
65
+ fromName: ''
66
+ })
67
+
68
+ async function handleUnlockSuccess() {
69
+ await adStorage.setTodayUnlocked()
70
+ await adStorage.addCredits(routeRuleParams.value.creditsPerAd)
71
+ const totalAds = await adStorage.incrementTotalAdsWatched()
72
+ await adStorage.incrementTodayAdCount()
73
+
74
+ if (totalAds >= routeRuleParams.value.permanentUnlockAfterTotalAds) {
75
+ await adStorage.setPermanentUnlocked()
76
+ }
77
+
78
+ trackEvent?.({ type: 'page', name: 'unlock_success' })
79
+ toast.showToast('解锁成功,继续观看吧!')
80
+ router.back()
81
+ }
82
+
83
+ const {
84
+ adQrCode,
85
+ isInvalid,
86
+ qrCodeState,
87
+ isLoading,
88
+ isShowConfirmToast,
89
+ getAdQrCode,
90
+ stopPollTvADStatusTimer,
91
+ stopInvalidTimer,
92
+ reset
93
+ } = useTVAdUnlock(
94
+ {
95
+ packageName,
96
+ superRequestBaseUrl: '',
97
+ invalidTimeout: 300000,
98
+ pollInterval: 1000
99
+ },
100
+ keys,
101
+ requestManager,
102
+ {
103
+ onUnlockSuccess: () => handleUnlockSuccess(),
104
+ onUnlockFailed: (error) => {
105
+ trackEvent?.({ type: 'click', name: 'unlock_failed' })
106
+ },
107
+ onQrCodeInvalid: () => {
108
+ trackEvent?.({ type: 'click', name: 'qr_code_invalid' })
109
+ },
110
+ onQrCodeScanned: () => {
111
+ trackEvent?.({ type: 'click', name: 'qr_code_scanned' })
112
+ }
113
+ }
114
+ )
115
+
116
+ function onKeyDown(event: any) {
117
+ switch (event.keyCode) {
118
+ case ESKeyCode.ES_KEYCODE_DPAD_CENTER:
119
+ case ESKeyCode.ES_KEYCODE_ENTER:
120
+ if (isInvalid.value || qrCodeState.value === 1) {
121
+ const cfg = pageConfig.value
122
+ getAdQrCode(dnum, cfg.scanTitle, cfg.scanContent, cfg.scanToast)
123
+ }
124
+ break
125
+ }
126
+ }
127
+
128
+ function onESCreate(params: TVAdUnlockParams & Record<string, string>) {
129
+ payParams.value = {
130
+ assetId: params.assetId || '',
131
+ assetName: params.assetName || '',
132
+ fromId: params.fromId || '',
133
+ fromName: params.fromName || ''
134
+ }
135
+
136
+ if (params.creditsPerAd) {
137
+ routeRuleParams.value.creditsPerAd = parseInt(params.creditsPerAd) || 5
138
+ }
139
+ if (params.permanentUnlockAfterTotalAds) {
140
+ routeRuleParams.value.permanentUnlockAfterTotalAds = parseInt(params.permanentUnlockAfterTotalAds) || 10
141
+ }
142
+
143
+ const extra: Partial<typeof rawPageConfig> = {}
144
+ if (params.title) extra.title = params.title
145
+ if (params.subTitle) extra.subTitle = params.subTitle
146
+ if (params.scanTitle) extra.scanTitle = params.scanTitle
147
+ if (params.scanContent) extra.scanContent = params.scanContent
148
+ if (params.scanToast) extra.scanToast = params.scanToast
149
+ if (params.invalidCodeImage) extra.invalidCodeImage = params.invalidCodeImage
150
+ if (params.scannedCodeImage) extra.scannedCodeImage = params.scannedCodeImage
151
+ routeOverrides.value = extra
152
+
153
+ trackEvent?.({
154
+ type: 'page',
155
+ name: 'ad_page_show',
156
+ assetId: payParams.value.assetId,
157
+ assetName: payParams.value.assetName,
158
+ fromId: payParams.value.fromId,
159
+ fromName: payParams.value.fromName
160
+ })
161
+
162
+ const cfg = pageConfig.value
163
+ getAdQrCode(dnum, cfg.scanTitle, cfg.scanContent, cfg.scanToast)
164
+ }
165
+
166
+ function onBackPressed() {
167
+ if (!isShowConfirmToast.value && qrCodeState.value === 1) {
168
+ toast.showToast('广告播放中,请不要关闭弹窗')
169
+ isShowConfirmToast.value = true
170
+ return true
171
+ } else {
172
+ stopPollTvADStatusTimer()
173
+ stopInvalidTimer()
174
+ router.back()
175
+ }
176
+ }
177
+
178
+ function onESDestroy() {
179
+ stopPollTvADStatusTimer()
180
+ stopInvalidTimer()
181
+ }
182
+
183
+ defineExpose({
184
+ onESCreate,
185
+ onKeyDown,
186
+ onBackPressed,
187
+ onESDestroy
188
+ })
189
+ </script>
190
+
191
+ <style scoped>
192
+ .ad-container {
193
+ width: 1920px;
194
+ height: 1080px;
195
+ background-color: rgba(0, 0, 0, 0.7);
196
+ display: flex;
197
+ justify-content: center;
198
+ align-items: center;
199
+ }
200
+
201
+ .content {
202
+ width: 892px;
203
+ height: 646px;
204
+ display: flex;
205
+ flex-direction: column;
206
+ align-items: center;
207
+ justify-content: center;
208
+ }
209
+
210
+ .content-bg {
211
+ position: absolute;
212
+ width: 892px;
213
+ height: 646px;
214
+ background-color: #FBE6C4;
215
+ border-radius: 30px;
216
+ border-width: 1px;
217
+ border-color: #979797;
218
+ }
219
+
220
+ .title {
221
+ font-weight: 500;
222
+ font-size: 46px;
223
+ color: #000000;
224
+ }
225
+
226
+ .sub-title {
227
+ margin-top: 32px;
228
+ font-weight: 400;
229
+ font-size: 30px;
230
+ color: rgba(0, 0, 0, 0.65);
231
+ }
232
+
233
+ .qrcode-container {
234
+ margin-top: 32px;
235
+ width: 300px;
236
+ height: 300px;
237
+ border-radius: 30px;
238
+ background-color: #FFFFFF;
239
+ display: flex;
240
+ justify-content: center;
241
+ align-items: center;
242
+ }
243
+
244
+ .qrcode {
245
+ position: absolute;
246
+ width: 260px;
247
+ height: 260px;
248
+ border-radius: 30px;
249
+ background-color: #FFFFFF;
250
+ }
251
+
252
+ .invalid-code {
253
+ position: absolute;
254
+ width: 300px;
255
+ height: 300px;
256
+ border-radius: 30px;
257
+ background-color: transparent;
258
+ }
259
+ </style>
Binary file
Binary file