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