@hayanmind/monetai-react-native 0.4.1-beta.0 → 1.0.0-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.
- package/lib/commonjs/ApiRequest.js +54 -3
- package/lib/commonjs/ApiRequest.js.map +1 -1
- package/lib/commonjs/MonetaiSDK.js +47 -0
- package/lib/commonjs/MonetaiSDK.js.map +1 -1
- package/lib/commonjs/lib.js +2 -2
- package/lib/module/ApiRequest.js +51 -2
- package/lib/module/ApiRequest.js.map +1 -1
- package/lib/module/MonetaiSDK.js +47 -0
- package/lib/module/MonetaiSDK.js.map +1 -1
- package/lib/module/lib.js +2 -2
- package/lib/typescript/commonjs/src/ApiRequest.d.ts +18 -1
- package/lib/typescript/commonjs/src/ApiRequest.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/MonetaiSDK.d.ts +14 -1
- package/lib/typescript/commonjs/src/MonetaiSDK.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +1 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types.d.ts +11 -0
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -1
- package/lib/typescript/module/src/ApiRequest.d.ts +18 -1
- package/lib/typescript/module/src/ApiRequest.d.ts.map +1 -1
- package/lib/typescript/module/src/MonetaiSDK.d.ts +14 -1
- package/lib/typescript/module/src/MonetaiSDK.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +1 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/types.d.ts +11 -0
- package/lib/typescript/module/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ApiRequest.ts +79 -1
- package/src/MonetaiSDK.ts +56 -0
- package/src/index.tsx +1 -0
- package/src/types.ts +13 -0
|
@@ -3,13 +3,19 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.predict = exports.initialize = exports.getAppUserDiscount = exports.createEvent = exports.createAppUserDiscount = void 0;
|
|
6
|
+
exports.predict = exports.initialize = exports.getPriceDecision = exports.getAppUserDiscount = exports.createViewProductItemEvent = exports.createEvent = exports.createAppUserDiscount = void 0;
|
|
7
7
|
var _axios = _interopRequireDefault(require("axios"));
|
|
8
8
|
var _lib = require("./lib.js");
|
|
9
9
|
var _reactNative = require("react-native");
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
11
|
const axiosInstance = _axios.default.create({
|
|
12
|
-
baseURL: 'https://monetai-api-414410537412.us-central1.run.app/sdk'
|
|
12
|
+
baseURL: 'https://monetai-api-414410537412.us-central1.run.app/sdk',
|
|
13
|
+
// 필요에 따라 베이스 URL 설정
|
|
14
|
+
headers: {
|
|
15
|
+
'X-SDK-Platform': 'react_native',
|
|
16
|
+
'X-SDK-Version': (0, _lib.getSDKVersion)(),
|
|
17
|
+
'X-Device-OS': _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : _reactNative.Platform.OS
|
|
18
|
+
}
|
|
13
19
|
});
|
|
14
20
|
const initialize = async ({
|
|
15
21
|
sdkKey,
|
|
@@ -24,7 +30,7 @@ const initialize = async ({
|
|
|
24
30
|
const abTestGroupResponse = await axiosInstance.post('/ab-test', {
|
|
25
31
|
sdkKey,
|
|
26
32
|
userId,
|
|
27
|
-
platform: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' :
|
|
33
|
+
platform: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : _reactNative.Platform.OS
|
|
28
34
|
});
|
|
29
35
|
return {
|
|
30
36
|
organizationId: response.data.organization_id,
|
|
@@ -61,6 +67,29 @@ const createEvent = async ({
|
|
|
61
67
|
}
|
|
62
68
|
};
|
|
63
69
|
exports.createEvent = createEvent;
|
|
70
|
+
const createViewProductItemEvent = async ({
|
|
71
|
+
sdkKey,
|
|
72
|
+
userId,
|
|
73
|
+
params,
|
|
74
|
+
createdAt
|
|
75
|
+
}) => {
|
|
76
|
+
try {
|
|
77
|
+
await axiosInstance.post('/events/view-product-item', {
|
|
78
|
+
sdkKey,
|
|
79
|
+
userId,
|
|
80
|
+
productId: params.productId,
|
|
81
|
+
price: params.price,
|
|
82
|
+
regularPrice: params.regularPrice,
|
|
83
|
+
currencyCode: params.currencyCode,
|
|
84
|
+
month: params.month,
|
|
85
|
+
createdAt: createdAt ?? new Date(),
|
|
86
|
+
platform: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : _reactNative.Platform.OS
|
|
87
|
+
});
|
|
88
|
+
} catch (error) {
|
|
89
|
+
console.error('Failed to log view product item event:', error.message);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
exports.createViewProductItemEvent = createViewProductItemEvent;
|
|
64
93
|
const predict = async ({
|
|
65
94
|
userId,
|
|
66
95
|
sdkKey
|
|
@@ -114,5 +143,27 @@ const getAppUserDiscount = async ({
|
|
|
114
143
|
throw new Error(error.response?.data?.message || 'Failed to get discount info');
|
|
115
144
|
}
|
|
116
145
|
};
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
149
|
+
* API POST /dynamic-pricing/decision 엔드포인트를 호출합니다.
|
|
150
|
+
*/
|
|
117
151
|
exports.getAppUserDiscount = getAppUserDiscount;
|
|
152
|
+
const getPriceDecision = async ({
|
|
153
|
+
sdkKey,
|
|
154
|
+
userId
|
|
155
|
+
}) => {
|
|
156
|
+
try {
|
|
157
|
+
const response = await axiosInstance.post('/dynamic-pricing/decision', {
|
|
158
|
+
sdkKey,
|
|
159
|
+
userId,
|
|
160
|
+
platform: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : _reactNative.Platform.OS
|
|
161
|
+
});
|
|
162
|
+
return response.data;
|
|
163
|
+
} catch (error) {
|
|
164
|
+
console.error('Failed to get price decision:', error.message);
|
|
165
|
+
throw new Error(error.response?.data?.message || 'Failed to get price decision');
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
exports.getPriceDecision = getPriceDecision;
|
|
118
169
|
//# sourceMappingURL=ApiRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_axios","_interopRequireDefault","require","_lib","_reactNative","e","__esModule","default","axiosInstance","axios","create","baseURL","
|
|
1
|
+
{"version":3,"names":["_axios","_interopRequireDefault","require","_lib","_reactNative","e","__esModule","default","axiosInstance","axios","create","baseURL","headers","getSDKVersion","Platform","OS","initialize","sdkKey","userId","response","post","platform","version","abTestGroupResponse","organizationId","data","organization_id","group","campaign","error","console","message","Error","exports","createEvent","eventName","params","createdAt","Date","createViewProductItemEvent","productId","price","regularPrice","currencyCode","month","predict","createAppUserDiscount","discountInfo","appUserId","startedAt","endedAt","discount","getAppUserDiscount","get","getPriceDecision"],"sourceRoot":"../../src","sources":["ApiRequest.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -134,6 +134,37 @@ class MonetaiSDK {
|
|
|
134
134
|
console.log('[MonetaiSDK] Logged event', eventName, params);
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
+
/**
|
|
138
|
+
* 사용자가 구매 아이템을 조회했을 때 호출하는 이벤트입니다.
|
|
139
|
+
* @param params ViewProductItemParams
|
|
140
|
+
*/
|
|
141
|
+
async logViewProductItem(params) {
|
|
142
|
+
const sdkKey = await this.getSdkKey();
|
|
143
|
+
const userId = await this.getUserId();
|
|
144
|
+
if (!sdkKey || !userId) {
|
|
145
|
+
// SDK가 초기화되지 않았거나 키가 없는 경우, 일반 이벤트 큐에 저장해두었다가
|
|
146
|
+
// 나중에 initialize 시점에 일반 logEvent로 처리하거나,
|
|
147
|
+
// 별도의 큐 처리가 필요할 수 있습니다.
|
|
148
|
+
// 현재 구조상 pendingEvents는 logEvent 형태(이벤트명+파라미터)를 저장하므로,
|
|
149
|
+
// 여기서도 'ma_view_product_item' 이름으로 저장해두면
|
|
150
|
+
// 추후 initialize()에서 processPendingEvents 할 때
|
|
151
|
+
// createEvent를 호출하게 되는데, 이때 'ma_' prefix 때문에 서버에서 거절될 수 있습니다.
|
|
152
|
+
//
|
|
153
|
+
// 해결책: pendingEvents 처리 로직도 'ma_' 여부를 체크해서 분기하거나,
|
|
154
|
+
// 단순하게는 여기서도 'ma_' 이벤트를 큐에 넣되,
|
|
155
|
+
// initialize()의 pending 처리 로직을 수정해야 합니다.
|
|
156
|
+
// 일단은 콘솔 경고를 남기고 리턴하거나, 큐에 넣습니다.
|
|
157
|
+
console.warn('[MonetaiSDK] SDK not initialized. ViewProductItem event will be ignored or queued.');
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
await ApiRequest.createViewProductItemEvent({
|
|
161
|
+
sdkKey,
|
|
162
|
+
userId,
|
|
163
|
+
params,
|
|
164
|
+
createdAt: new Date()
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
|
|
137
168
|
// Non-Purchaser 예측
|
|
138
169
|
async predict() {
|
|
139
170
|
const sdkKey = await this.getSdkKey();
|
|
@@ -165,6 +196,22 @@ class MonetaiSDK {
|
|
|
165
196
|
}
|
|
166
197
|
return result;
|
|
167
198
|
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
202
|
+
* @returns productId와 할인율
|
|
203
|
+
*/
|
|
204
|
+
async getPriceDecision() {
|
|
205
|
+
const sdkKey = await this.getSdkKey();
|
|
206
|
+
const userId = await this.getUserId();
|
|
207
|
+
if (!sdkKey || !userId) {
|
|
208
|
+
throw new Error('MonetaiSDK is not initialized. Call initialize() first.');
|
|
209
|
+
}
|
|
210
|
+
return await ApiRequest.getPriceDecision({
|
|
211
|
+
sdkKey,
|
|
212
|
+
userId
|
|
213
|
+
});
|
|
214
|
+
}
|
|
168
215
|
getInitialized() {
|
|
169
216
|
return this.initialized;
|
|
170
217
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_mitt","_interopRequireDefault","_dayjs","_ApiRequest","_interopRequireWildcard","ApiRequest","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LINKING_ERROR","Platform","select","ios","MonetaiReactNative","NativeModules","Proxy","Error","MonetaiSDK","exposureTimeSec","initialized","pendingEvents","emitter","mitt","getEmitter","getExposureTimeSec","initialize","sdkKey","userId","useStoreKit2","setSdkKey","setUserId","startObserving","sendReceipt","catch","err","console","error","result","campaign","exposure_time_sec","pendingPromises","map","eventName","params","createdAt","createEvent","log","Promise","all","then","emit","organizationId","platform","version","group","logEvent","getSdkKey","getUserId","push","Date","predict","prediction","discountInfo","getAppUserDiscount","hasActiveDiscount","app_user_id","dayjs","ended_at","isAfter","startedAt","endedAt","clone","add","createAppUserDiscount","toDate","getInitialized","reset","monetaiSDK","_default","exports"],"sourceRoot":"../../src","sources":["MonetaiSDK.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,MAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,WAAA,GAAAC,uBAAA,CAAAL,OAAA;AAA2C,IAAAM,UAAA,GAAAF,WAAA;AAAA,SAAAC,wBAAAE,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAJ,uBAAA,YAAAA,CAAAE,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAN,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAK,UAAA,GAAAL,CAAA,KAAAU,OAAA,EAAAV,CAAA;
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_mitt","_interopRequireDefault","_dayjs","_ApiRequest","_interopRequireWildcard","ApiRequest","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LINKING_ERROR","Platform","select","ios","MonetaiReactNative","NativeModules","Proxy","Error","MonetaiSDK","exposureTimeSec","initialized","pendingEvents","emitter","mitt","getEmitter","getExposureTimeSec","initialize","sdkKey","userId","useStoreKit2","setSdkKey","setUserId","startObserving","sendReceipt","catch","err","console","error","result","campaign","exposure_time_sec","pendingPromises","map","eventName","params","createdAt","createEvent","log","Promise","all","then","emit","organizationId","platform","version","group","logEvent","getSdkKey","getUserId","push","Date","logViewProductItem","warn","createViewProductItemEvent","predict","prediction","discountInfo","getAppUserDiscount","hasActiveDiscount","app_user_id","dayjs","ended_at","isAfter","startedAt","endedAt","clone","add","createAppUserDiscount","toDate","getPriceDecision","getInitialized","reset","monetaiSDK","_default","exports"],"sourceRoot":"../../src","sources":["MonetaiSDK.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/lib.js
CHANGED
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getSDKVersion = getSDKVersion;
|
|
7
7
|
function getSDKVersion() {
|
|
8
8
|
// __SDK_VERSION__이 정의되어 있으면 해당 값을 사용
|
|
9
|
-
if (typeof "0.
|
|
10
|
-
return "0.
|
|
9
|
+
if (typeof "1.0.0-beta.0" === 'string') {
|
|
10
|
+
return "1.0.0-beta.0";
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
// 그렇지 않으면, package.json을 lazy하게 불러와 version을 반환
|
package/lib/module/ApiRequest.js
CHANGED
|
@@ -4,7 +4,13 @@ import axios from 'axios';
|
|
|
4
4
|
import { getSDKVersion } from "./lib.js";
|
|
5
5
|
import { Platform } from 'react-native';
|
|
6
6
|
const axiosInstance = axios.create({
|
|
7
|
-
baseURL: 'https://monetai-api-414410537412.us-central1.run.app/sdk'
|
|
7
|
+
baseURL: 'https://monetai-api-414410537412.us-central1.run.app/sdk',
|
|
8
|
+
// 필요에 따라 베이스 URL 설정
|
|
9
|
+
headers: {
|
|
10
|
+
'X-SDK-Platform': 'react_native',
|
|
11
|
+
'X-SDK-Version': getSDKVersion(),
|
|
12
|
+
'X-Device-OS': Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : Platform.OS
|
|
13
|
+
}
|
|
8
14
|
});
|
|
9
15
|
export const initialize = async ({
|
|
10
16
|
sdkKey,
|
|
@@ -19,7 +25,7 @@ export const initialize = async ({
|
|
|
19
25
|
const abTestGroupResponse = await axiosInstance.post('/ab-test', {
|
|
20
26
|
sdkKey,
|
|
21
27
|
userId,
|
|
22
|
-
platform: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' :
|
|
28
|
+
platform: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : Platform.OS
|
|
23
29
|
});
|
|
24
30
|
return {
|
|
25
31
|
organizationId: response.data.organization_id,
|
|
@@ -54,6 +60,28 @@ export const createEvent = async ({
|
|
|
54
60
|
throw new Error(error.response?.data?.message || 'Failed to log event');
|
|
55
61
|
}
|
|
56
62
|
};
|
|
63
|
+
export const createViewProductItemEvent = async ({
|
|
64
|
+
sdkKey,
|
|
65
|
+
userId,
|
|
66
|
+
params,
|
|
67
|
+
createdAt
|
|
68
|
+
}) => {
|
|
69
|
+
try {
|
|
70
|
+
await axiosInstance.post('/events/view-product-item', {
|
|
71
|
+
sdkKey,
|
|
72
|
+
userId,
|
|
73
|
+
productId: params.productId,
|
|
74
|
+
price: params.price,
|
|
75
|
+
regularPrice: params.regularPrice,
|
|
76
|
+
currencyCode: params.currencyCode,
|
|
77
|
+
month: params.month,
|
|
78
|
+
createdAt: createdAt ?? new Date(),
|
|
79
|
+
platform: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : Platform.OS
|
|
80
|
+
});
|
|
81
|
+
} catch (error) {
|
|
82
|
+
console.error('Failed to log view product item event:', error.message);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
57
85
|
export const predict = async ({
|
|
58
86
|
userId,
|
|
59
87
|
sdkKey
|
|
@@ -105,4 +133,25 @@ export const getAppUserDiscount = async ({
|
|
|
105
133
|
throw new Error(error.response?.data?.message || 'Failed to get discount info');
|
|
106
134
|
}
|
|
107
135
|
};
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
139
|
+
* API POST /dynamic-pricing/decision 엔드포인트를 호출합니다.
|
|
140
|
+
*/
|
|
141
|
+
export const getPriceDecision = async ({
|
|
142
|
+
sdkKey,
|
|
143
|
+
userId
|
|
144
|
+
}) => {
|
|
145
|
+
try {
|
|
146
|
+
const response = await axiosInstance.post('/dynamic-pricing/decision', {
|
|
147
|
+
sdkKey,
|
|
148
|
+
userId,
|
|
149
|
+
platform: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : Platform.OS
|
|
150
|
+
});
|
|
151
|
+
return response.data;
|
|
152
|
+
} catch (error) {
|
|
153
|
+
console.error('Failed to get price decision:', error.message);
|
|
154
|
+
throw new Error(error.response?.data?.message || 'Failed to get price decision');
|
|
155
|
+
}
|
|
156
|
+
};
|
|
108
157
|
//# sourceMappingURL=ApiRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["axios","getSDKVersion","Platform","axiosInstance","create","baseURL","initialize","sdkKey","userId","response","post","platform","version","abTestGroupResponse","
|
|
1
|
+
{"version":3,"names":["axios","getSDKVersion","Platform","axiosInstance","create","baseURL","headers","OS","initialize","sdkKey","userId","response","post","platform","version","abTestGroupResponse","organizationId","data","organization_id","group","campaign","error","console","message","Error","createEvent","eventName","params","createdAt","Date","createViewProductItemEvent","productId","price","regularPrice","currencyCode","month","predict","createAppUserDiscount","discountInfo","appUserId","startedAt","endedAt","discount","getAppUserDiscount","get","getPriceDecision"],"sourceRoot":"../../src","sources":["ApiRequest.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/MonetaiSDK.js
CHANGED
|
@@ -128,6 +128,37 @@ class MonetaiSDK {
|
|
|
128
128
|
console.log('[MonetaiSDK] Logged event', eventName, params);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
+
/**
|
|
132
|
+
* 사용자가 구매 아이템을 조회했을 때 호출하는 이벤트입니다.
|
|
133
|
+
* @param params ViewProductItemParams
|
|
134
|
+
*/
|
|
135
|
+
async logViewProductItem(params) {
|
|
136
|
+
const sdkKey = await this.getSdkKey();
|
|
137
|
+
const userId = await this.getUserId();
|
|
138
|
+
if (!sdkKey || !userId) {
|
|
139
|
+
// SDK가 초기화되지 않았거나 키가 없는 경우, 일반 이벤트 큐에 저장해두었다가
|
|
140
|
+
// 나중에 initialize 시점에 일반 logEvent로 처리하거나,
|
|
141
|
+
// 별도의 큐 처리가 필요할 수 있습니다.
|
|
142
|
+
// 현재 구조상 pendingEvents는 logEvent 형태(이벤트명+파라미터)를 저장하므로,
|
|
143
|
+
// 여기서도 'ma_view_product_item' 이름으로 저장해두면
|
|
144
|
+
// 추후 initialize()에서 processPendingEvents 할 때
|
|
145
|
+
// createEvent를 호출하게 되는데, 이때 'ma_' prefix 때문에 서버에서 거절될 수 있습니다.
|
|
146
|
+
//
|
|
147
|
+
// 해결책: pendingEvents 처리 로직도 'ma_' 여부를 체크해서 분기하거나,
|
|
148
|
+
// 단순하게는 여기서도 'ma_' 이벤트를 큐에 넣되,
|
|
149
|
+
// initialize()의 pending 처리 로직을 수정해야 합니다.
|
|
150
|
+
// 일단은 콘솔 경고를 남기고 리턴하거나, 큐에 넣습니다.
|
|
151
|
+
console.warn('[MonetaiSDK] SDK not initialized. ViewProductItem event will be ignored or queued.');
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
await ApiRequest.createViewProductItemEvent({
|
|
155
|
+
sdkKey,
|
|
156
|
+
userId,
|
|
157
|
+
params,
|
|
158
|
+
createdAt: new Date()
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
|
|
131
162
|
// Non-Purchaser 예측
|
|
132
163
|
async predict() {
|
|
133
164
|
const sdkKey = await this.getSdkKey();
|
|
@@ -159,6 +190,22 @@ class MonetaiSDK {
|
|
|
159
190
|
}
|
|
160
191
|
return result;
|
|
161
192
|
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
196
|
+
* @returns productId와 할인율
|
|
197
|
+
*/
|
|
198
|
+
async getPriceDecision() {
|
|
199
|
+
const sdkKey = await this.getSdkKey();
|
|
200
|
+
const userId = await this.getUserId();
|
|
201
|
+
if (!sdkKey || !userId) {
|
|
202
|
+
throw new Error('MonetaiSDK is not initialized. Call initialize() first.');
|
|
203
|
+
}
|
|
204
|
+
return await ApiRequest.getPriceDecision({
|
|
205
|
+
sdkKey,
|
|
206
|
+
userId
|
|
207
|
+
});
|
|
208
|
+
}
|
|
162
209
|
getInitialized() {
|
|
163
210
|
return this.initialized;
|
|
164
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","Platform","mitt","dayjs","ApiRequest","createAppUserDiscount","LINKING_ERROR","select","ios","default","MonetaiReactNative","Proxy","get","Error","MonetaiSDK","exposureTimeSec","initialized","pendingEvents","emitter","getEmitter","getExposureTimeSec","initialize","sdkKey","userId","useStoreKit2","setSdkKey","setUserId","startObserving","sendReceipt","catch","err","console","error","result","campaign","exposure_time_sec","pendingPromises","map","eventName","params","createdAt","createEvent","log","Promise","all","then","emit","organizationId","platform","version","group","logEvent","getSdkKey","getUserId","push","Date","predict","prediction","discountInfo","getAppUserDiscount","hasActiveDiscount","app_user_id","ended_at","isAfter","startedAt","endedAt","clone","add","toDate","getInitialized","reset","monetaiSDK"],"sourceRoot":"../../src","sources":["MonetaiSDK.ts"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AACtD,OAAOC,IAAI,MAAM,MAAM;AACvB,OAAOC,KAAK,MAAM,OAAO;AACzB,OAAO,KAAKC,UAAU,MAAM,iBAAc;
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","mitt","dayjs","ApiRequest","createAppUserDiscount","LINKING_ERROR","select","ios","default","MonetaiReactNative","Proxy","get","Error","MonetaiSDK","exposureTimeSec","initialized","pendingEvents","emitter","getEmitter","getExposureTimeSec","initialize","sdkKey","userId","useStoreKit2","setSdkKey","setUserId","startObserving","sendReceipt","catch","err","console","error","result","campaign","exposure_time_sec","pendingPromises","map","eventName","params","createdAt","createEvent","log","Promise","all","then","emit","organizationId","platform","version","group","logEvent","getSdkKey","getUserId","push","Date","logViewProductItem","warn","createViewProductItemEvent","predict","prediction","discountInfo","getAppUserDiscount","hasActiveDiscount","app_user_id","ended_at","isAfter","startedAt","endedAt","clone","add","toDate","getPriceDecision","getInitialized","reset","monetaiSDK"],"sourceRoot":"../../src","sources":["MonetaiSDK.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/lib.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
export function getSDKVersion() {
|
|
4
4
|
// __SDK_VERSION__이 정의되어 있으면 해당 값을 사용
|
|
5
|
-
if (typeof "0.
|
|
6
|
-
return "0.
|
|
5
|
+
if (typeof "1.0.0-beta.0" === 'string') {
|
|
6
|
+
return "1.0.0-beta.0";
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
// 그렇지 않으면, package.json을 lazy하게 불러와 version을 반환
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ABTestGroup, AppUserDiscountResponse, PredictResult } from './types';
|
|
1
|
+
import type { ABTestGroup, AppUserDiscountResponse, PredictResult, ViewProductItemParams } from './types';
|
|
2
2
|
export declare const initialize: ({ sdkKey, userId, }: {
|
|
3
3
|
sdkKey: string;
|
|
4
4
|
userId: string;
|
|
@@ -28,6 +28,12 @@ export declare const createEvent: ({ sdkKey, userId, eventName, params, createdA
|
|
|
28
28
|
params?: Record<string, any>;
|
|
29
29
|
createdAt?: Date;
|
|
30
30
|
}) => Promise<void>;
|
|
31
|
+
export declare const createViewProductItemEvent: ({ sdkKey, userId, params, createdAt, }: {
|
|
32
|
+
sdkKey: string;
|
|
33
|
+
userId: string;
|
|
34
|
+
params: ViewProductItemParams;
|
|
35
|
+
createdAt?: Date;
|
|
36
|
+
}) => Promise<void>;
|
|
31
37
|
export declare const predict: ({ userId, sdkKey, }: {
|
|
32
38
|
userId: string;
|
|
33
39
|
sdkKey: string;
|
|
@@ -49,4 +55,15 @@ export declare const getAppUserDiscount: ({ sdkKey, userId, }: {
|
|
|
49
55
|
sdkKey: string;
|
|
50
56
|
userId: string;
|
|
51
57
|
}) => Promise<AppUserDiscountResponse | null>;
|
|
58
|
+
/**
|
|
59
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
60
|
+
* API POST /dynamic-pricing/decision 엔드포인트를 호출합니다.
|
|
61
|
+
*/
|
|
62
|
+
export declare const getPriceDecision: ({ sdkKey, userId, }: {
|
|
63
|
+
sdkKey: string;
|
|
64
|
+
userId: string;
|
|
65
|
+
}) => Promise<{
|
|
66
|
+
productId: string;
|
|
67
|
+
discount: number;
|
|
68
|
+
}>;
|
|
52
69
|
//# sourceMappingURL=ApiRequest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiRequest.d.ts","sourceRoot":"","sources":["../../../../src/ApiRequest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,aAAa,
|
|
1
|
+
{"version":3,"file":"ApiRequest.d.ts","sourceRoot":"","sources":["../../../../src/ApiRequest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAkBjB,eAAO,MAAM,UAAU,GAAU,qBAG9B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;;;;;;YAeW,MAAM;oBACE,IAAI,GAAG,IAAI;yBACN,MAAM;uBACR,MAAM;oBACT,IAAI,GAAG,IAAI;kBACb,IAAI,GAAG,IAAI;uBACN,MAAM;0BACH,MAAM;wBACR,MAAM;2BACH,MAAM;wBACT,MAAM,GAAG,IAAI;;EA0BpC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,mDAM/B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,kBAmBA,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,wCAK9C;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,qBAAqB,CAAC;IAC9B,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,kBAqBA,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,qBAG3B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;gBAGiB,aAAa;eACd,WAAW,GAAG,IAAI;EAalC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,cAAc;IACxD,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,qCAiBA,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAU,qBAGtC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,4CAcA,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAU,qBAGpC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;eAGgB,MAAM;cACP,MAAM;EAkBrB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ABTestGroup, type PredictResult, type LogEventOptions } from './types';
|
|
1
|
+
import { type ABTestGroup, type PredictResult, type LogEventOptions, type ViewProductItemParams } from './types';
|
|
2
2
|
type MonetaiEvents = {
|
|
3
3
|
LOAD_DISCOUNT_INFO: void;
|
|
4
4
|
};
|
|
@@ -29,10 +29,23 @@ declare class MonetaiSDK {
|
|
|
29
29
|
group: ABTestGroup | null;
|
|
30
30
|
}>;
|
|
31
31
|
logEvent({ eventName, params }: LogEventOptions): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* 사용자가 구매 아이템을 조회했을 때 호출하는 이벤트입니다.
|
|
34
|
+
* @param params ViewProductItemParams
|
|
35
|
+
*/
|
|
36
|
+
logViewProductItem(params: ViewProductItemParams): Promise<void>;
|
|
32
37
|
predict(): Promise<{
|
|
33
38
|
prediction: PredictResult;
|
|
34
39
|
testGroup: ABTestGroup | null;
|
|
35
40
|
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
43
|
+
* @returns productId와 할인율
|
|
44
|
+
*/
|
|
45
|
+
getPriceDecision(): Promise<{
|
|
46
|
+
productId: string;
|
|
47
|
+
discount: number;
|
|
48
|
+
}>;
|
|
36
49
|
getInitialized(): boolean;
|
|
37
50
|
getUserId(): Promise<string | null>;
|
|
38
51
|
getSdkKey(): Promise<string | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC3B,MAAM,SAAS,CAAC;AAqBjB,KAAK,aAAa,GAAG;IACnB,kBAAkB,EAAE,IAAI,CAAC;CAC1B,CAAC;AAEF,cAAM,UAAU;IACd,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,aAAa,CAIb;IAGR,OAAO,CAAC,OAAO,CAAyB;IAGjC,UAAU;IAIV,kBAAkB;IAIzB;;;;;;;OAOG;IACU,UAAU,CAAC,EACtB,MAAM,EACN,MAAM,EACN,YAAoB,GACrB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;IAuDW,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,eAAe;IAmB5D;;;OAGG;IACU,kBAAkB,CAAC,MAAM,EAAE,qBAAqB;IAgChD,OAAO,IAAI,OAAO,CAAC;QAC9B,UAAU,EAAE,aAAa,CAAC;QAC1B,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;KAC/B,CAAC;IAqCF;;;OAGG;IACU,gBAAgB,IAAI,OAAO,CAAC;QACvC,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAaK,cAAc;IAIR,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUnC,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUnC,KAAK;CAInB;AAGD,QAAA,MAAM,UAAU,YAAmB,CAAC;AACpC,eAAe,UAAU,CAAC"}
|
|
@@ -7,5 +7,5 @@ import { useBanner } from './hooks/useBanner';
|
|
|
7
7
|
import { usePaywall } from './hooks/usePaywall';
|
|
8
8
|
export default MonetaiSDK;
|
|
9
9
|
export { MonetaiProvider, Banner, Paywall, useBanner, usePaywall, CompactPaywallWrapper, HighlightBenefitsPaywallWrapper, KeyFeatureSummaryPaywallWrapper, TextFocusedPaywallWrapper, };
|
|
10
|
-
export type { ABTestGroup, PredictResult, EventParams, LogEventOptions, DiscountInfo, AppUserDiscountResponse, PaywallConfig, Feature, BannerParams, PaywallParams, PaywallStyle, } from './types';
|
|
10
|
+
export type { ABTestGroup, PredictResult, EventParams, LogEventOptions, DiscountInfo, AppUserDiscountResponse, PaywallConfig, Feature, BannerParams, PaywallParams, PaywallStyle, PriceDecision, } from './types';
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAe,UAAU,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,GAC1B,CAAC;AAGF,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,aAAa,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAe,UAAU,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,GAC1B,CAAC;AAGF,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,aAAa,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export type ABTestGroup = 'baseline' | 'monetai' | 'unknown';
|
|
2
2
|
export type PredictResult = 'non-purchaser' | 'purchaser' | null;
|
|
3
|
+
export interface PriceDecision {
|
|
4
|
+
productId: string;
|
|
5
|
+
discount: number;
|
|
6
|
+
}
|
|
3
7
|
export type PaywallStyle = 'compact' | 'highlight-benefits' | 'key-feature-summary' | 'text-focused';
|
|
4
8
|
export interface Feature {
|
|
5
9
|
title: string;
|
|
@@ -13,6 +17,13 @@ export interface LogEventOptions {
|
|
|
13
17
|
eventName: string;
|
|
14
18
|
params?: EventParams;
|
|
15
19
|
}
|
|
20
|
+
export interface ViewProductItemParams {
|
|
21
|
+
productId: string;
|
|
22
|
+
price: number;
|
|
23
|
+
regularPrice: number;
|
|
24
|
+
currencyCode: string;
|
|
25
|
+
month?: number | null;
|
|
26
|
+
}
|
|
16
27
|
export interface DiscountInfo {
|
|
17
28
|
startedAt: Date;
|
|
18
29
|
endedAt: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,WAAW,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ABTestGroup, AppUserDiscountResponse, PredictResult } from './types';
|
|
1
|
+
import type { ABTestGroup, AppUserDiscountResponse, PredictResult, ViewProductItemParams } from './types';
|
|
2
2
|
export declare const initialize: ({ sdkKey, userId, }: {
|
|
3
3
|
sdkKey: string;
|
|
4
4
|
userId: string;
|
|
@@ -28,6 +28,12 @@ export declare const createEvent: ({ sdkKey, userId, eventName, params, createdA
|
|
|
28
28
|
params?: Record<string, any>;
|
|
29
29
|
createdAt?: Date;
|
|
30
30
|
}) => Promise<void>;
|
|
31
|
+
export declare const createViewProductItemEvent: ({ sdkKey, userId, params, createdAt, }: {
|
|
32
|
+
sdkKey: string;
|
|
33
|
+
userId: string;
|
|
34
|
+
params: ViewProductItemParams;
|
|
35
|
+
createdAt?: Date;
|
|
36
|
+
}) => Promise<void>;
|
|
31
37
|
export declare const predict: ({ userId, sdkKey, }: {
|
|
32
38
|
userId: string;
|
|
33
39
|
sdkKey: string;
|
|
@@ -49,4 +55,15 @@ export declare const getAppUserDiscount: ({ sdkKey, userId, }: {
|
|
|
49
55
|
sdkKey: string;
|
|
50
56
|
userId: string;
|
|
51
57
|
}) => Promise<AppUserDiscountResponse | null>;
|
|
58
|
+
/**
|
|
59
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
60
|
+
* API POST /dynamic-pricing/decision 엔드포인트를 호출합니다.
|
|
61
|
+
*/
|
|
62
|
+
export declare const getPriceDecision: ({ sdkKey, userId, }: {
|
|
63
|
+
sdkKey: string;
|
|
64
|
+
userId: string;
|
|
65
|
+
}) => Promise<{
|
|
66
|
+
productId: string;
|
|
67
|
+
discount: number;
|
|
68
|
+
}>;
|
|
52
69
|
//# sourceMappingURL=ApiRequest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiRequest.d.ts","sourceRoot":"","sources":["../../../../src/ApiRequest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,aAAa,
|
|
1
|
+
{"version":3,"file":"ApiRequest.d.ts","sourceRoot":"","sources":["../../../../src/ApiRequest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAkBjB,eAAO,MAAM,UAAU,GAAU,qBAG9B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;;;;;;YAeW,MAAM;oBACE,IAAI,GAAG,IAAI;yBACN,MAAM;uBACR,MAAM;oBACT,IAAI,GAAG,IAAI;kBACb,IAAI,GAAG,IAAI;uBACN,MAAM;0BACH,MAAM;wBACR,MAAM;2BACH,MAAM;wBACT,MAAM,GAAG,IAAI;;EA0BpC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,mDAM/B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,kBAmBA,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,wCAK9C;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,qBAAqB,CAAC;IAC9B,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,kBAqBA,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,qBAG3B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;gBAGiB,aAAa;eACd,WAAW,GAAG,IAAI;EAalC,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,cAAc;IACxD,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,qCAiBA,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAU,qBAGtC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,4CAcA,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAU,qBAGpC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;eAGgB,MAAM;cACP,MAAM;EAkBrB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ABTestGroup, type PredictResult, type LogEventOptions } from './types';
|
|
1
|
+
import { type ABTestGroup, type PredictResult, type LogEventOptions, type ViewProductItemParams } from './types';
|
|
2
2
|
type MonetaiEvents = {
|
|
3
3
|
LOAD_DISCOUNT_INFO: void;
|
|
4
4
|
};
|
|
@@ -29,10 +29,23 @@ declare class MonetaiSDK {
|
|
|
29
29
|
group: ABTestGroup | null;
|
|
30
30
|
}>;
|
|
31
31
|
logEvent({ eventName, params }: LogEventOptions): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* 사용자가 구매 아이템을 조회했을 때 호출하는 이벤트입니다.
|
|
34
|
+
* @param params ViewProductItemParams
|
|
35
|
+
*/
|
|
36
|
+
logViewProductItem(params: ViewProductItemParams): Promise<void>;
|
|
32
37
|
predict(): Promise<{
|
|
33
38
|
prediction: PredictResult;
|
|
34
39
|
testGroup: ABTestGroup | null;
|
|
35
40
|
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
43
|
+
* @returns productId와 할인율
|
|
44
|
+
*/
|
|
45
|
+
getPriceDecision(): Promise<{
|
|
46
|
+
productId: string;
|
|
47
|
+
discount: number;
|
|
48
|
+
}>;
|
|
36
49
|
getInitialized(): boolean;
|
|
37
50
|
getUserId(): Promise<string | null>;
|
|
38
51
|
getSdkKey(): Promise<string | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC3B,MAAM,SAAS,CAAC;AAqBjB,KAAK,aAAa,GAAG;IACnB,kBAAkB,EAAE,IAAI,CAAC;CAC1B,CAAC;AAEF,cAAM,UAAU;IACd,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,aAAa,CAIb;IAGR,OAAO,CAAC,OAAO,CAAyB;IAGjC,UAAU;IAIV,kBAAkB;IAIzB;;;;;;;OAOG;IACU,UAAU,CAAC,EACtB,MAAM,EACN,MAAM,EACN,YAAoB,GACrB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;IAuDW,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,eAAe;IAmB5D;;;OAGG;IACU,kBAAkB,CAAC,MAAM,EAAE,qBAAqB;IAgChD,OAAO,IAAI,OAAO,CAAC;QAC9B,UAAU,EAAE,aAAa,CAAC;QAC1B,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;KAC/B,CAAC;IAqCF;;;OAGG;IACU,gBAAgB,IAAI,OAAO,CAAC;QACvC,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IAaK,cAAc;IAIR,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUnC,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUnC,KAAK;CAInB;AAGD,QAAA,MAAM,UAAU,YAAmB,CAAC;AACpC,eAAe,UAAU,CAAC"}
|
|
@@ -7,5 +7,5 @@ import { useBanner } from './hooks/useBanner';
|
|
|
7
7
|
import { usePaywall } from './hooks/usePaywall';
|
|
8
8
|
export default MonetaiSDK;
|
|
9
9
|
export { MonetaiProvider, Banner, Paywall, useBanner, usePaywall, CompactPaywallWrapper, HighlightBenefitsPaywallWrapper, KeyFeatureSummaryPaywallWrapper, TextFocusedPaywallWrapper, };
|
|
10
|
-
export type { ABTestGroup, PredictResult, EventParams, LogEventOptions, DiscountInfo, AppUserDiscountResponse, PaywallConfig, Feature, BannerParams, PaywallParams, PaywallStyle, } from './types';
|
|
10
|
+
export type { ABTestGroup, PredictResult, EventParams, LogEventOptions, DiscountInfo, AppUserDiscountResponse, PaywallConfig, Feature, BannerParams, PaywallParams, PaywallStyle, PriceDecision, } from './types';
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAe,UAAU,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,GAC1B,CAAC;AAGF,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,aAAa,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAe,UAAU,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,GAC1B,CAAC;AAGF,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,aAAa,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export type ABTestGroup = 'baseline' | 'monetai' | 'unknown';
|
|
2
2
|
export type PredictResult = 'non-purchaser' | 'purchaser' | null;
|
|
3
|
+
export interface PriceDecision {
|
|
4
|
+
productId: string;
|
|
5
|
+
discount: number;
|
|
6
|
+
}
|
|
3
7
|
export type PaywallStyle = 'compact' | 'highlight-benefits' | 'key-feature-summary' | 'text-focused';
|
|
4
8
|
export interface Feature {
|
|
5
9
|
title: string;
|
|
@@ -13,6 +17,13 @@ export interface LogEventOptions {
|
|
|
13
17
|
eventName: string;
|
|
14
18
|
params?: EventParams;
|
|
15
19
|
}
|
|
20
|
+
export interface ViewProductItemParams {
|
|
21
|
+
productId: string;
|
|
22
|
+
price: number;
|
|
23
|
+
regularPrice: number;
|
|
24
|
+
currencyCode: string;
|
|
25
|
+
month?: number | null;
|
|
26
|
+
}
|
|
16
27
|
export interface DiscountInfo {
|
|
17
28
|
startedAt: Date;
|
|
18
29
|
endedAt: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,WAAW,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/ApiRequest.ts
CHANGED
|
@@ -3,12 +3,23 @@ import type {
|
|
|
3
3
|
ABTestGroup,
|
|
4
4
|
AppUserDiscountResponse,
|
|
5
5
|
PredictResult,
|
|
6
|
+
ViewProductItemParams,
|
|
6
7
|
} from './types';
|
|
7
8
|
import { getSDKVersion } from './lib';
|
|
8
9
|
import { Platform } from 'react-native';
|
|
9
10
|
|
|
10
11
|
const axiosInstance = axios.create({
|
|
11
12
|
baseURL: 'https://monetai-api-414410537412.us-central1.run.app/sdk', // 필요에 따라 베이스 URL 설정
|
|
13
|
+
headers: {
|
|
14
|
+
'X-SDK-Platform': 'react_native',
|
|
15
|
+
'X-SDK-Version': getSDKVersion(),
|
|
16
|
+
'X-Device-OS':
|
|
17
|
+
Platform.OS === 'ios'
|
|
18
|
+
? 'ios'
|
|
19
|
+
: Platform.OS === 'android'
|
|
20
|
+
? 'android'
|
|
21
|
+
: Platform.OS,
|
|
22
|
+
},
|
|
12
23
|
});
|
|
13
24
|
|
|
14
25
|
export const initialize = async ({
|
|
@@ -52,7 +63,7 @@ export const initialize = async ({
|
|
|
52
63
|
? 'ios'
|
|
53
64
|
: Platform.OS === 'android'
|
|
54
65
|
? 'android'
|
|
55
|
-
:
|
|
66
|
+
: Platform.OS,
|
|
56
67
|
});
|
|
57
68
|
|
|
58
69
|
return {
|
|
@@ -103,6 +114,39 @@ export const createEvent = async ({
|
|
|
103
114
|
}
|
|
104
115
|
};
|
|
105
116
|
|
|
117
|
+
export const createViewProductItemEvent = async ({
|
|
118
|
+
sdkKey,
|
|
119
|
+
userId,
|
|
120
|
+
params,
|
|
121
|
+
createdAt,
|
|
122
|
+
}: {
|
|
123
|
+
sdkKey: string;
|
|
124
|
+
userId: string;
|
|
125
|
+
params: ViewProductItemParams;
|
|
126
|
+
createdAt?: Date;
|
|
127
|
+
}) => {
|
|
128
|
+
try {
|
|
129
|
+
await axiosInstance.post('/events/view-product-item', {
|
|
130
|
+
sdkKey,
|
|
131
|
+
userId,
|
|
132
|
+
productId: params.productId,
|
|
133
|
+
price: params.price,
|
|
134
|
+
regularPrice: params.regularPrice,
|
|
135
|
+
currencyCode: params.currencyCode,
|
|
136
|
+
month: params.month,
|
|
137
|
+
createdAt: createdAt ?? new Date(),
|
|
138
|
+
platform:
|
|
139
|
+
Platform.OS === 'ios'
|
|
140
|
+
? 'ios'
|
|
141
|
+
: Platform.OS === 'android'
|
|
142
|
+
? 'android'
|
|
143
|
+
: Platform.OS,
|
|
144
|
+
});
|
|
145
|
+
} catch (error: any) {
|
|
146
|
+
console.error('Failed to log view product item event:', error.message);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
106
150
|
export const predict = async ({
|
|
107
151
|
userId,
|
|
108
152
|
sdkKey,
|
|
@@ -177,3 +221,37 @@ export const getAppUserDiscount = async ({
|
|
|
177
221
|
);
|
|
178
222
|
}
|
|
179
223
|
};
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
227
|
+
* API POST /dynamic-pricing/decision 엔드포인트를 호출합니다.
|
|
228
|
+
*/
|
|
229
|
+
export const getPriceDecision = async ({
|
|
230
|
+
sdkKey,
|
|
231
|
+
userId,
|
|
232
|
+
}: {
|
|
233
|
+
sdkKey: string;
|
|
234
|
+
userId: string;
|
|
235
|
+
}) => {
|
|
236
|
+
try {
|
|
237
|
+
const response = await axiosInstance.post<{
|
|
238
|
+
productId: string;
|
|
239
|
+
discount: number;
|
|
240
|
+
}>('/dynamic-pricing/decision', {
|
|
241
|
+
sdkKey,
|
|
242
|
+
userId,
|
|
243
|
+
platform:
|
|
244
|
+
Platform.OS === 'ios'
|
|
245
|
+
? 'ios'
|
|
246
|
+
: Platform.OS === 'android'
|
|
247
|
+
? 'android'
|
|
248
|
+
: Platform.OS,
|
|
249
|
+
});
|
|
250
|
+
return response.data;
|
|
251
|
+
} catch (error: any) {
|
|
252
|
+
console.error('Failed to get price decision:', error.message);
|
|
253
|
+
throw new Error(
|
|
254
|
+
error.response?.data?.message || 'Failed to get price decision'
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
};
|
package/src/MonetaiSDK.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
type ABTestGroup,
|
|
7
7
|
type PredictResult,
|
|
8
8
|
type LogEventOptions,
|
|
9
|
+
type ViewProductItemParams,
|
|
9
10
|
} from './types';
|
|
10
11
|
import { createAppUserDiscount } from './ApiRequest';
|
|
11
12
|
|
|
@@ -150,6 +151,41 @@ class MonetaiSDK {
|
|
|
150
151
|
console.log('[MonetaiSDK] Logged event', eventName, params);
|
|
151
152
|
}
|
|
152
153
|
|
|
154
|
+
/**
|
|
155
|
+
* 사용자가 구매 아이템을 조회했을 때 호출하는 이벤트입니다.
|
|
156
|
+
* @param params ViewProductItemParams
|
|
157
|
+
*/
|
|
158
|
+
public async logViewProductItem(params: ViewProductItemParams) {
|
|
159
|
+
const sdkKey = await this.getSdkKey();
|
|
160
|
+
const userId = await this.getUserId();
|
|
161
|
+
|
|
162
|
+
if (!sdkKey || !userId) {
|
|
163
|
+
// SDK가 초기화되지 않았거나 키가 없는 경우, 일반 이벤트 큐에 저장해두었다가
|
|
164
|
+
// 나중에 initialize 시점에 일반 logEvent로 처리하거나,
|
|
165
|
+
// 별도의 큐 처리가 필요할 수 있습니다.
|
|
166
|
+
// 현재 구조상 pendingEvents는 logEvent 형태(이벤트명+파라미터)를 저장하므로,
|
|
167
|
+
// 여기서도 'ma_view_product_item' 이름으로 저장해두면
|
|
168
|
+
// 추후 initialize()에서 processPendingEvents 할 때
|
|
169
|
+
// createEvent를 호출하게 되는데, 이때 'ma_' prefix 때문에 서버에서 거절될 수 있습니다.
|
|
170
|
+
//
|
|
171
|
+
// 해결책: pendingEvents 처리 로직도 'ma_' 여부를 체크해서 분기하거나,
|
|
172
|
+
// 단순하게는 여기서도 'ma_' 이벤트를 큐에 넣되,
|
|
173
|
+
// initialize()의 pending 처리 로직을 수정해야 합니다.
|
|
174
|
+
// 일단은 콘솔 경고를 남기고 리턴하거나, 큐에 넣습니다.
|
|
175
|
+
console.warn(
|
|
176
|
+
'[MonetaiSDK] SDK not initialized. ViewProductItem event will be ignored or queued.'
|
|
177
|
+
);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
await ApiRequest.createViewProductItemEvent({
|
|
182
|
+
sdkKey,
|
|
183
|
+
userId,
|
|
184
|
+
params,
|
|
185
|
+
createdAt: new Date(),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
|
|
153
189
|
// Non-Purchaser 예측
|
|
154
190
|
public async predict(): Promise<{
|
|
155
191
|
prediction: PredictResult;
|
|
@@ -191,6 +227,26 @@ class MonetaiSDK {
|
|
|
191
227
|
return result;
|
|
192
228
|
}
|
|
193
229
|
|
|
230
|
+
/**
|
|
231
|
+
* Thompson Sampling을 사용한 최적 가격 결정
|
|
232
|
+
* @returns productId와 할인율
|
|
233
|
+
*/
|
|
234
|
+
public async getPriceDecision(): Promise<{
|
|
235
|
+
productId: string;
|
|
236
|
+
discount: number;
|
|
237
|
+
}> {
|
|
238
|
+
const sdkKey = await this.getSdkKey();
|
|
239
|
+
const userId = await this.getUserId();
|
|
240
|
+
|
|
241
|
+
if (!sdkKey || !userId) {
|
|
242
|
+
throw new Error(
|
|
243
|
+
'MonetaiSDK is not initialized. Call initialize() first.'
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return await ApiRequest.getPriceDecision({ sdkKey, userId });
|
|
248
|
+
}
|
|
249
|
+
|
|
194
250
|
public getInitialized() {
|
|
195
251
|
return this.initialized;
|
|
196
252
|
}
|
package/src/index.tsx
CHANGED
package/src/types.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export type ABTestGroup = 'baseline' | 'monetai' | 'unknown';
|
|
2
2
|
export type PredictResult = 'non-purchaser' | 'purchaser' | null;
|
|
3
3
|
|
|
4
|
+
export interface PriceDecision {
|
|
5
|
+
productId: string; // Product ID
|
|
6
|
+
discount: number; // 할인율 (0.5 = 50%)
|
|
7
|
+
}
|
|
8
|
+
|
|
4
9
|
// Banner and Paywall style types
|
|
5
10
|
export type PaywallStyle =
|
|
6
11
|
| 'compact'
|
|
@@ -24,6 +29,14 @@ export interface LogEventOptions {
|
|
|
24
29
|
params?: EventParams;
|
|
25
30
|
}
|
|
26
31
|
|
|
32
|
+
export interface ViewProductItemParams {
|
|
33
|
+
productId: string;
|
|
34
|
+
price: number;
|
|
35
|
+
regularPrice: number;
|
|
36
|
+
currencyCode: string;
|
|
37
|
+
month?: number | null;
|
|
38
|
+
}
|
|
39
|
+
|
|
27
40
|
export interface DiscountInfo {
|
|
28
41
|
startedAt: Date;
|
|
29
42
|
endedAt: Date;
|