@jolibox/implement 1.1.52 → 1.1.53-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.rush/temp/package-deps_build.json +35 -26
  2. package/CHANGELOG.json +11 -0
  3. package/CHANGELOG.md +9 -0
  4. package/dist/common/rewards/index.d.ts +2 -0
  5. package/dist/common/rewards/registers/use-gem-only.d.ts +10 -0
  6. package/dist/common/rewards/registers/use-gem.d.ts +10 -0
  7. package/dist/common/rewards/registers/utils/coins/commands/currency-handlers.d.ts +15 -0
  8. package/dist/common/rewards/registers/utils/coins/commands/index.d.ts +1 -1
  9. package/dist/common/rewards/registers/utils/coins/commands/use-jolicoin.d.ts +10 -8
  10. package/dist/common/rewards/registers/utils/coins/commands/use-payment.d.ts +10 -8
  11. package/dist/common/rewards/registers/utils/coins/commands/use-unlogin.d.ts +6 -8
  12. package/dist/common/rewards/registers/utils/coins/currency-config.d.ts +8 -0
  13. package/dist/common/rewards/registers/utils/coins/index.d.ts +2 -18
  14. package/dist/common/rewards/registers/utils/coins/jolicoin/jolicoin-handler.d.ts +18 -0
  15. package/dist/common/rewards/registers/utils/coins/joligem/fetch-gem-balance.d.ts +4 -0
  16. package/dist/common/rewards/registers/utils/coins/joligem/gem-handler.d.ts +19 -0
  17. package/dist/common/rewards/registers/utils/index.d.ts +3 -1
  18. package/dist/common/rewards/reward-emitter.d.ts +23 -13
  19. package/dist/common/rewards/reward-helper.d.ts +3 -1
  20. package/dist/common/rewards/type.d.ts +10 -1
  21. package/dist/index.js +25 -25
  22. package/dist/index.native.js +67 -67
  23. package/dist/native/payment/payment-helper.d.ts +5 -1
  24. package/dist/native/rewards/check-frequency.d.ts +24 -0
  25. package/implement.build.log +2 -2
  26. package/package.json +6 -6
  27. package/src/common/rewards/__tests__/can-use-jolicoin.test.ts +265 -9
  28. package/src/common/rewards/fetch-reward.ts +18 -3
  29. package/src/common/rewards/index.ts +2 -0
  30. package/src/common/rewards/registers/use-gem-only.ts +58 -0
  31. package/src/common/rewards/registers/use-gem.ts +53 -0
  32. package/src/common/rewards/registers/use-jolicoin-only.ts +4 -4
  33. package/src/common/rewards/registers/use-jolicoin.ts +4 -4
  34. package/src/common/rewards/registers/utils/coins/commands/currency-handlers.ts +48 -0
  35. package/src/common/rewards/registers/utils/coins/commands/index.ts +1 -1
  36. package/src/common/rewards/registers/utils/coins/commands/use-jolicoin.ts +31 -19
  37. package/src/common/rewards/registers/utils/coins/commands/use-payment.ts +32 -25
  38. package/src/common/rewards/registers/utils/coins/commands/use-unlogin.ts +22 -24
  39. package/src/common/rewards/registers/utils/coins/currency-config.ts +23 -0
  40. package/src/common/rewards/registers/utils/coins/index.ts +2 -139
  41. package/src/common/rewards/registers/utils/coins/jolicoin/jolicoin-handler.ts +149 -0
  42. package/src/common/rewards/registers/utils/coins/joligem/fetch-gem-balance.ts +15 -0
  43. package/src/common/rewards/registers/utils/coins/joligem/gem-handler.ts +131 -0
  44. package/src/common/rewards/registers/utils/index.ts +20 -1
  45. package/src/common/rewards/reward-emitter.ts +23 -13
  46. package/src/common/rewards/reward-helper.ts +3 -1
  47. package/src/common/rewards/type.ts +13 -1
  48. package/src/h5/api/ads.ts +5 -13
  49. package/src/h5/rewards/index.ts +33 -20
  50. package/src/native/api/ads.ts +22 -1
  51. package/src/native/api/call-host-method.ts +36 -1
  52. package/src/native/payment/index.ts +2 -0
  53. package/src/native/payment/payment-helper.ts +2 -1
  54. package/src/native/rewards/check-frequency.ts +10 -0
  55. package/src/native/rewards/ui/payment-modal.ts +110 -33
  56. package/src/native/rewards/ui/unlogin-modal.ts +182 -87
  57. package/src/native/rewards/ui/use-modal.ts +126 -68
  58. /package/dist/common/rewards/registers/utils/coins/{fetch-balance.d.ts → jolicoin/fetch-balance.d.ts} +0 -0
  59. /package/src/common/rewards/registers/utils/coins/{fetch-balance.ts → jolicoin/fetch-balance.ts} +0 -0
@@ -1,4 +1,9 @@
1
- import { checkUseModalFrequency, updateUseModalFrequency } from '../check-frequency';
1
+ import {
2
+ checkUseModalFrequency,
3
+ updateUseModalFrequency,
4
+ checkUseModalFrequencyGem,
5
+ updateUseModalFrequencyGem
6
+ } from '../check-frequency';
2
7
  import { updateAutoDeductConfig } from './utils';
3
8
  import {
4
9
  IUseModalFrequencyConfig,
@@ -10,9 +15,47 @@ import { UseModalEventName, UseModalResultEventName } from '@/common/rewards/rew
10
15
  import { createConfirmJolicoinModal, createLoading } from '@jolibox/ui';
11
16
  import { track } from '@/native/report';
12
17
  import { EventType } from '@jolibox/common';
13
- import {} from '@jolibox/ui';
18
+ import { TrackEvent } from '@jolibox/types';
14
19
  import { createEventPromiseHandler } from '@/common/rewards/registers/utils/event-listener';
15
20
 
21
+ // 货币配置映射
22
+ interface CurrencyModalConfig {
23
+ frequencyConfigKey: keyof IUseModalFrequencyConfig['joliCoinUseAndCharge'];
24
+ trackEvents: {
25
+ popupShow: TrackEvent;
26
+ coinUnlock: TrackEvent;
27
+ adUnlock: TrackEvent;
28
+ };
29
+ frequencyChecker: (config: {
30
+ dailyMaxPopUps?: number;
31
+ minInterval?: number;
32
+ }) => Promise<{ canShow: boolean; isFirst: boolean }>;
33
+ frequencyUpdater: () => Promise<void>;
34
+ }
35
+
36
+ const CURRENCY_MODAL_CONFIG: Record<'JOLI_COIN' | 'JOLI_GEM', CurrencyModalConfig> = {
37
+ JOLI_COIN: {
38
+ frequencyConfigKey: 'useJolicoin',
39
+ trackEvents: {
40
+ popupShow: 'unlock_popup_show',
41
+ coinUnlock: 'coin_unlock_click',
42
+ adUnlock: 'ad_unlock_click'
43
+ },
44
+ frequencyChecker: checkUseModalFrequency,
45
+ frequencyUpdater: updateUseModalFrequency
46
+ },
47
+ JOLI_GEM: {
48
+ frequencyConfigKey: 'useJolicoin', // 暂时复用,可以后续扩展
49
+ trackEvents: {
50
+ popupShow: 'gem_unlock_popup_show',
51
+ coinUnlock: 'gem_unlock_click',
52
+ adUnlock: 'gem_ad_unlock_click'
53
+ },
54
+ frequencyChecker: checkUseModalFrequencyGem,
55
+ frequencyUpdater: updateUseModalFrequencyGem
56
+ }
57
+ };
58
+
16
59
  const loading = createLoading();
17
60
 
18
61
  const modalUseFrequencyConfig = createEventPromiseHandler<
@@ -22,83 +65,98 @@ const modalUseFrequencyConfig = createEventPromiseHandler<
22
65
 
23
66
  modalUseFrequencyConfig.getData();
24
67
  /**
25
- * confirm jolicoin modal
68
+ * confirm currency modal - 支持 jolicoin 和 gem
26
69
  */
27
- rewardsEmitter.on(UseModalEventName, async (type: 'JOLI_COIN' | 'ADS-JOLI_COIN', params: IUseModalEvent) => {
28
- if (type === 'ADS-JOLI_COIN') {
29
- //TODO
30
- await loading.show({
31
- duration: 3000
32
- });
33
- const config = await modalUseFrequencyConfig.getData();
34
- const { canShow: canShowUseModal, isFirst: isFirstUseModal } = await checkUseModalFrequency(
35
- config.joliCoinUseAndCharge.useJolicoin
36
- );
37
- console.log('use modal show by frequency', canShowUseModal, isFirstUseModal);
38
- loading.hide();
70
+ rewardsEmitter.on(
71
+ UseModalEventName,
72
+ async (type: 'JOLI_COIN' | 'ADS-JOLI_COIN' | 'JOLI_GEM' | 'ADS-JOLI_GEM', params: IUseModalEvent) => {
73
+ // 获取货币类型配置
74
+ const currencyType = params.currency;
75
+ const modalConfig = CURRENCY_MODAL_CONFIG[currencyType];
39
76
 
40
- // First, check for direct use: sufficient balance, auto-deduct enabled, and not the first modal.
41
- const { balance } = params.userJoliCoin;
42
- const useDirectly = balance >= params.joliCoinQuantity && params.enableAutoDeduct;
77
+ if (type.includes('ADS-')) {
78
+ await loading.show({
79
+ duration: 3000
80
+ });
81
+ const config = await modalUseFrequencyConfig.getData();
82
+ const { canShow: canShowUseModal, isFirst: isFirstUseModal } = await modalConfig.frequencyChecker(
83
+ config.joliCoinUseAndCharge[modalConfig.frequencyConfigKey]
84
+ );
85
+ console.log(`${currencyType} modal show by frequency`, canShowUseModal, isFirstUseModal);
86
+ loading.hide();
43
87
 
44
- if (useDirectly && !isFirstUseModal) {
45
- rewardsEmitter.emit(UseModalResultEventName, { useModalResult: 'CONFIRM' });
46
- return;
47
- }
88
+ // First, check for direct use: sufficient balance, auto-deduct enabled, and not the first modal.
89
+ const { balance } = params.userCurrency;
90
+ const useDirectly = balance >= params.quantity && params.enableAutoDeduct;
48
91
 
49
- // If not used directly, then check frequency control.
50
- if (!canShowUseModal) {
51
- // confirm by frequency control
52
- rewardsEmitter.emit(UseModalResultEventName, { useModalResult: 'FAILED' });
53
- return;
92
+ if (useDirectly && !isFirstUseModal) {
93
+ rewardsEmitter.emit(UseModalResultEventName, { useModalResult: 'CONFIRM' });
94
+ return;
95
+ }
96
+
97
+ // If not used directly, then check frequency control.
98
+ if (!canShowUseModal) {
99
+ // confirm by frequency control
100
+ rewardsEmitter.emit(UseModalResultEventName, { useModalResult: 'FAILED' });
101
+ return;
102
+ }
54
103
  }
55
- }
56
104
 
57
- track('unlock_popup_show', {
58
- eventType: EventType.View,
59
- targetType: 'game'
60
- });
105
+ // 根据货币类型上报不同的埋点
106
+ track(modalConfig.trackEvents.popupShow, {
107
+ eventType: EventType.View,
108
+ targetType: 'game',
109
+ currency: currencyType
110
+ });
61
111
 
62
- const modal = createConfirmJolicoinModal({
63
- data: {
64
- enableAutoDeduct: params.enableAutoDeduct,
65
- userJolicoin: params.userJoliCoin,
66
- joliCoinQuantity: params.joliCoinQuantity
67
- },
68
- buttons: {
69
- confirm: {
70
- text: params.confirmButtonText,
71
- onPress: () => {
72
- track('coin_unlock_click', {
73
- targetType: 'game',
74
- eventType: EventType.Click,
75
- coinConsume: params.joliCoinQuantity,
76
- ifAutoUnlock: params.enableAutoDeduct
77
- });
78
- rewardsEmitter.emit(UseModalResultEventName, { useModalResult: 'CONFIRM' });
79
- modal.destroy();
80
- }
112
+ const { userCurrency, enableAutoDeduct, quantity } = params;
113
+ const modal = createConfirmJolicoinModal({
114
+ data: {
115
+ enableAutoDeduct,
116
+ userCurrency,
117
+ quantity,
118
+ currency: currencyType
81
119
  },
82
- cancel: {
83
- text: params.cancelButtonText,
84
- onPress: ({ type }) => {
85
- if (type === 'FAILED') {
86
- track('ad_unlock_click', {
120
+ buttons: {
121
+ confirm: {
122
+ text: params.confirmButtonText,
123
+ onPress: () => {
124
+ // 根据货币类型上报不同的埋点
125
+ track(modalConfig.trackEvents.coinUnlock as any, {
87
126
  targetType: 'game',
88
- eventType: EventType.Click
127
+ eventType: EventType.Click,
128
+ coinConsume: params.quantity,
129
+ ifAutoUnlock: params.enableAutoDeduct,
130
+ currency: currencyType
131
+ });
132
+ rewardsEmitter.emit(UseModalResultEventName, { useModalResult: 'CONFIRM' });
133
+ modal.destroy();
134
+ }
135
+ },
136
+ cancel: {
137
+ text: params.cancelButtonText,
138
+ onPress: ({ type }) => {
139
+ if (type === 'FAILED') {
140
+ // 根据货币类型上报不同的埋点
141
+ track(modalConfig.trackEvents.adUnlock as any, {
142
+ targetType: 'game',
143
+ eventType: EventType.Click,
144
+ currency: currencyType
145
+ });
146
+ }
147
+ rewardsEmitter.emit(UseModalResultEventName, {
148
+ useModalResult: (type ?? '') === 'CANCEL' ? 'CANCEL' : 'FAILED'
89
149
  });
150
+ modal.destroy();
90
151
  }
91
- rewardsEmitter.emit(UseModalResultEventName, {
92
- useModalResult: (type ?? '') === 'CANCEL' ? 'CANCEL' : 'FAILED'
93
- });
94
- modal.destroy();
152
+ },
153
+ onEnableDeductChanged: async (enabled: boolean) => {
154
+ await updateAutoDeductConfig(enabled);
95
155
  }
96
- },
97
- onEnableDeductChanged: async (enabled: boolean) => {
98
- await updateAutoDeductConfig(enabled);
99
156
  }
100
- }
101
- });
157
+ });
102
158
 
103
- await updateUseModalFrequency();
104
- });
159
+ // 根据货币类型更新使用频次
160
+ await modalConfig.frequencyUpdater();
161
+ }
162
+ );