@hayanmind/monetai-react-native 0.2.4
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/LICENSE +20 -0
- package/MonetaiReactNative.podspec +25 -0
- package/README.md +31 -0
- package/android/build.gradle +81 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/hayanmind/monetaireactnative/MonetaiReactNativeModule.kt +110 -0
- package/android/src/main/java/com/hayanmind/monetaireactnative/MonetaiReactNativePackage.kt +17 -0
- package/ios/MonetaiReactNative-Bridging-Header.h +2 -0
- package/ios/MonetaiReactNative.mm +38 -0
- package/ios/MonetaiReactNative.swift +336 -0
- package/lib/commonjs/ApiRequest.js +120 -0
- package/lib/commonjs/ApiRequest.js.map +1 -0
- package/lib/commonjs/MonetaiProvider.js +67 -0
- package/lib/commonjs/MonetaiProvider.js.map +1 -0
- package/lib/commonjs/MonetaiSDK.js +198 -0
- package/lib/commonjs/MonetaiSDK.js.map +1 -0
- package/lib/commonjs/index.js +17 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/lib.js +24 -0
- package/lib/commonjs/lib.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/types/global.d.js +2 -0
- package/lib/commonjs/types/global.d.js.map +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/module/ApiRequest.js +110 -0
- package/lib/module/ApiRequest.js.map +1 -0
- package/lib/module/MonetaiProvider.js +61 -0
- package/lib/module/MonetaiProvider.js.map +1 -0
- package/lib/module/MonetaiSDK.js +192 -0
- package/lib/module/MonetaiSDK.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/lib.js +20 -0
- package/lib/module/lib.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types/global.d.js +2 -0
- package/lib/module/types/global.d.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/ApiRequest.d.ts +52 -0
- package/lib/typescript/commonjs/src/ApiRequest.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/MonetaiProvider.d.ts +18 -0
- package/lib/typescript/commonjs/src/MonetaiProvider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/MonetaiSDK.d.ts +45 -0
- package/lib/typescript/commonjs/src/MonetaiSDK.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +5 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/lib.d.ts +2 -0
- package/lib/typescript/commonjs/src/lib.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types.d.ts +17 -0
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/ApiRequest.d.ts +52 -0
- package/lib/typescript/module/src/ApiRequest.d.ts.map +1 -0
- package/lib/typescript/module/src/MonetaiProvider.d.ts +18 -0
- package/lib/typescript/module/src/MonetaiProvider.d.ts.map +1 -0
- package/lib/typescript/module/src/MonetaiSDK.d.ts +45 -0
- package/lib/typescript/module/src/MonetaiSDK.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +5 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/lib.d.ts +2 -0
- package/lib/typescript/module/src/lib.d.ts.map +1 -0
- package/lib/typescript/module/src/types.d.ts +17 -0
- package/lib/typescript/module/src/types.d.ts.map +1 -0
- package/package.json +176 -0
- package/src/ApiRequest.ts +182 -0
- package/src/MonetaiProvider.tsx +79 -0
- package/src/MonetaiSDK.ts +225 -0
- package/src/index.tsx +5 -0
- package/src/lib.ts +17 -0
- package/src/types/global.d.ts +2 -0
- package/src/types.ts +17 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useState","StyleSheet","View","monetaiSDK","getAppUserDiscount","jsx","_jsx","styles","create","container","flex","MonetaiProvider","children","onDiscountInfoChange","discountInfo","setDiscountInfo","emitter","getEmitter","onLoadDiscountInfo","userId","getUserId","sdkKey","getSdkKey","console","warn","discount","app_user_id","startedAt","started_at","endedAt","ended_at","sdk_key","on","off","style"],"sourceRoot":"../../src","sources":["MonetaiProvider.tsx"],"mappings":";;AAAA;AACA,SAASA,SAAS,EAAEC,QAAQ,QAAwB,OAAO;AAC3D,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,OAAOC,UAAU,MAAM,iBAAc;AAErC,SAASC,kBAAkB,QAAQ,iBAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAElD,MAAMC,MAAM,GAAGN,UAAU,CAACO,MAAM,CAAC;EAC/BC,SAAS,EAAE;IAAEC,IAAI,EAAE;EAAE;AACvB,CAAC,CAAC;AAYF;AACA;AACA;AACA;AACA,eAAe,SAASC,eAAeA,CAAC;EACtCC,QAAQ;EACRC;AACoB,CAAC,EAAE;EACvB,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGf,QAAQ,CAAsB,IAAI,CAAC;EAE3ED,SAAS,CAAC,MAAM;IACd,MAAMiB,OAAO,GAAGb,UAAU,CAACc,UAAU,CAAC,CAAC;IACvC,MAAMC,kBAAkB,GAAG,MAAAA,CAAA,KAAY;MACrC,MAAMC,MAAM,GAAG,MAAMhB,UAAU,CAACiB,SAAS,CAAC,CAAC;MAC3C,MAAMC,MAAM,GAAG,MAAMlB,UAAU,CAACmB,SAAS,CAAC,CAAC;MAE3C,IAAIH,MAAM,IAAI,IAAI,IAAIE,MAAM,IAAI,IAAI,EAAE;QACpCE,OAAO,CAACC,IAAI,CAAC,oDAAoD,CAAC;QAClE;MACF;MAEA,MAAMC,QAAQ,GAAG,MAAMrB,kBAAkB,CAAC;QAAEe,MAAM;QAAEE;MAAO,CAAC,CAAC;MAC7D,IAAII,QAAQ,IAAI,IAAI,IAAIA,QAAQ,CAACC,WAAW,KAAKP,MAAM,EAAE;QACvD;MACF;MAEAJ,eAAe,CACbU,QAAQ,IAAI,IAAI,GACZ,IAAI,GACJ;QACEE,SAAS,EAAEF,QAAQ,CAACG,UAAU;QAC9BC,OAAO,EAAEJ,QAAQ,CAACK,QAAQ;QAC1BX,MAAM,EAAEM,QAAQ,CAACC,WAAW;QAC5BL,MAAM,EAAEI,QAAQ,CAACM;MACnB,CACN,CAAC;IACH,CAAC;IAEDf,OAAO,CAACgB,EAAE,CAAC,oBAAoB,EAAEd,kBAAkB,CAAC;IAEpD,OAAO,MAAM;MACXF,OAAO,CAACiB,GAAG,CAAC,oBAAoB,EAAEf,kBAAkB,CAAC;IACvD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAENnB,SAAS,CAAC,MAAM;IACd,IAAIc,oBAAoB,EAAE;MACxBA,oBAAoB,CAACC,YAAY,CAAC;IACpC;EACF,CAAC,EAAE,CAACD,oBAAoB,EAAEC,YAAY,CAAC,CAAC;EAExC,oBACER,IAAA,CAACJ,IAAI;IAACgC,KAAK,EAAE3B,MAAM,CAACE,SAAU;IAAAG,QAAA,EAE3BA;EAAQ,CACL,CAAC;AAEX","ignoreList":[]}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NativeModules, Platform } from 'react-native';
|
|
4
|
+
import mitt from 'mitt';
|
|
5
|
+
import dayjs from 'dayjs';
|
|
6
|
+
import * as ApiRequest from "./ApiRequest.js";
|
|
7
|
+
import { createAppUserDiscount } from "./ApiRequest.js";
|
|
8
|
+
const LINKING_ERROR = `The package '@hayanmind/monetai-react-native' doesn't seem to be linked. Make sure: \n\n` + Platform.select({
|
|
9
|
+
ios: "- You have run 'pod install'\n",
|
|
10
|
+
default: ''
|
|
11
|
+
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
|
|
12
|
+
const MonetaiReactNative = NativeModules.MonetaiReactNative ? NativeModules.MonetaiReactNative : new Proxy({}, {
|
|
13
|
+
get() {
|
|
14
|
+
throw new Error(LINKING_ERROR);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Emitter로 사용할 이벤트 타입 정의
|
|
19
|
+
|
|
20
|
+
class MonetaiSDK {
|
|
21
|
+
exposureTimeSec = null;
|
|
22
|
+
initialized = false;
|
|
23
|
+
|
|
24
|
+
// SDK 초기화 전에 로깅된 이벤트들을 저장할 큐
|
|
25
|
+
pendingEvents = [];
|
|
26
|
+
|
|
27
|
+
// Event Emitter
|
|
28
|
+
emitter = mitt();
|
|
29
|
+
|
|
30
|
+
// emitter를 노출해서 Provider가 구독할 수 있게 함
|
|
31
|
+
getEmitter() {
|
|
32
|
+
return this.emitter;
|
|
33
|
+
}
|
|
34
|
+
getExposureTimeSec() {
|
|
35
|
+
return this.exposureTimeSec;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 모넷AI SDK를 초기화합니다
|
|
40
|
+
* @param userId 사용자 고유 ID (필수)
|
|
41
|
+
* @param useStoreKit2 StoreKit2를 사용할지 여부 (기본값: false)
|
|
42
|
+
* - true: iOS 15+ 기기에서 StoreKit2 사용 (권장)
|
|
43
|
+
* - false: 모든 기기에서 StoreKit1 사용
|
|
44
|
+
* @returns 성공 시 Promise<void>
|
|
45
|
+
*/
|
|
46
|
+
async initialize({
|
|
47
|
+
sdkKey,
|
|
48
|
+
userId,
|
|
49
|
+
useStoreKit2 = false
|
|
50
|
+
}) {
|
|
51
|
+
if (!userId) {
|
|
52
|
+
throw new Error('userId is required');
|
|
53
|
+
}
|
|
54
|
+
if (!sdkKey) {
|
|
55
|
+
throw new Error('sdkKey is required');
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// SDK 키를 네이티브에 저장
|
|
59
|
+
await MonetaiReactNative.setSdkKey(sdkKey);
|
|
60
|
+
|
|
61
|
+
// userId 설정
|
|
62
|
+
await MonetaiReactNative.setUserId(userId);
|
|
63
|
+
|
|
64
|
+
// 트랜잭션 관찰 시작
|
|
65
|
+
await MonetaiReactNative.startObserving(useStoreKit2);
|
|
66
|
+
|
|
67
|
+
// iOS 영수증 전송 (ios 플랫폼에서만 호출)
|
|
68
|
+
if (Platform.OS === 'ios') {
|
|
69
|
+
MonetaiReactNative.sendReceipt().catch(err => {
|
|
70
|
+
console.error('Failed to send receipt', err);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const result = await ApiRequest.initialize({
|
|
74
|
+
sdkKey,
|
|
75
|
+
userId
|
|
76
|
+
});
|
|
77
|
+
this.exposureTimeSec = result.campaign?.exposure_time_sec ?? null;
|
|
78
|
+
this.initialized = true;
|
|
79
|
+
|
|
80
|
+
// SDK 초기화 후, 초기화 전에 저장된 pendingEvents를 전송
|
|
81
|
+
const pendingPromises = this.pendingEvents.map(async ({
|
|
82
|
+
eventName,
|
|
83
|
+
value,
|
|
84
|
+
createdAt
|
|
85
|
+
}) => {
|
|
86
|
+
await ApiRequest.createEvent({
|
|
87
|
+
sdkKey,
|
|
88
|
+
userId,
|
|
89
|
+
eventName,
|
|
90
|
+
value,
|
|
91
|
+
createdAt
|
|
92
|
+
});
|
|
93
|
+
console.log('[MonetaiSDK] Logged pending event', eventName, value);
|
|
94
|
+
});
|
|
95
|
+
Promise.all(pendingPromises).then(() => {
|
|
96
|
+
this.pendingEvents = [];
|
|
97
|
+
});
|
|
98
|
+
this.emitter.emit('LOAD_DISCOUNT_INFO');
|
|
99
|
+
return {
|
|
100
|
+
organizationId: result.organizationId,
|
|
101
|
+
platform: 'react_native',
|
|
102
|
+
version: result.version,
|
|
103
|
+
userId: userId,
|
|
104
|
+
group: result.group
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
async logEvent({
|
|
108
|
+
eventName
|
|
109
|
+
}) {
|
|
110
|
+
const sdkKey = await this.getSdkKey();
|
|
111
|
+
const userId = await this.getUserId();
|
|
112
|
+
|
|
113
|
+
// SDK가 아직 초기화되지 않은 경우, 이벤트를 pendingEvents에 저장
|
|
114
|
+
if (!sdkKey || !userId) {
|
|
115
|
+
console.log('[MonetaiSDK] Pending event', eventName);
|
|
116
|
+
this.pendingEvents.push({
|
|
117
|
+
eventName,
|
|
118
|
+
createdAt: new Date()
|
|
119
|
+
});
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
await ApiRequest.createEvent({
|
|
123
|
+
sdkKey,
|
|
124
|
+
userId,
|
|
125
|
+
eventName
|
|
126
|
+
});
|
|
127
|
+
console.log('[MonetaiSDK] Logged event', eventName);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Non-Purchaser 예측
|
|
131
|
+
async predict() {
|
|
132
|
+
const sdkKey = await this.getSdkKey();
|
|
133
|
+
const userId = await this.getUserId();
|
|
134
|
+
if (!sdkKey || !userId || !this.exposureTimeSec) {
|
|
135
|
+
throw new Error('MonetaiSDK is not initialized. Call initialize() first.');
|
|
136
|
+
}
|
|
137
|
+
const result = await ApiRequest.predict({
|
|
138
|
+
userId,
|
|
139
|
+
sdkKey
|
|
140
|
+
});
|
|
141
|
+
if (result.prediction === 'non-purchaser') {
|
|
142
|
+
const discountInfo = await ApiRequest.getAppUserDiscount({
|
|
143
|
+
sdkKey,
|
|
144
|
+
userId
|
|
145
|
+
});
|
|
146
|
+
const hasActiveDiscount = discountInfo != null && discountInfo.app_user_id === userId && dayjs(discountInfo.ended_at).isAfter(dayjs());
|
|
147
|
+
console.log('hasActiveDiscount', hasActiveDiscount);
|
|
148
|
+
if (!hasActiveDiscount) {
|
|
149
|
+
const startedAt = dayjs();
|
|
150
|
+
const endedAt = startedAt.clone().add(this.exposureTimeSec, 'second');
|
|
151
|
+
await createAppUserDiscount({
|
|
152
|
+
startedAt: startedAt.toDate(),
|
|
153
|
+
endedAt: endedAt.toDate(),
|
|
154
|
+
userId,
|
|
155
|
+
sdkKey
|
|
156
|
+
});
|
|
157
|
+
this.emitter.emit('LOAD_DISCOUNT_INFO');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
getInitialized() {
|
|
163
|
+
return this.initialized;
|
|
164
|
+
}
|
|
165
|
+
async getUserId() {
|
|
166
|
+
try {
|
|
167
|
+
const userId = await MonetaiReactNative.getUserId();
|
|
168
|
+
return userId;
|
|
169
|
+
} catch (error) {
|
|
170
|
+
console.error('[MonetaiSDK] getUserId error', error);
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async getSdkKey() {
|
|
175
|
+
try {
|
|
176
|
+
const sdkKey = await MonetaiReactNative.getSdkKey();
|
|
177
|
+
return sdkKey;
|
|
178
|
+
} catch (error) {
|
|
179
|
+
console.error('[MonetaiSDK] getSdkKey error', error);
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
async reset() {
|
|
184
|
+
await MonetaiReactNative.reset();
|
|
185
|
+
this.initialized = false;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// 싱글턴으로 export
|
|
190
|
+
const monetaiSDK = new MonetaiSDK();
|
|
191
|
+
export default monetaiSDK;
|
|
192
|
+
//# sourceMappingURL=MonetaiSDK.js.map
|
|
@@ -0,0 +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","OS","sendReceipt","catch","err","console","error","result","campaign","exposure_time_sec","pendingPromises","map","eventName","value","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":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MonetaiSDK","MonetaiProvider"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,UAAU,MAAM,iBAAc;AACrC,OAAOC,eAAe,MAAM,sBAAmB;AAE/C,eAAeD,UAAU;AACzB,SAASC,eAAe","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export function getSDKVersion() {
|
|
4
|
+
// __SDK_VERSION__이 정의되어 있으면 해당 값을 사용
|
|
5
|
+
if (typeof "0.2.4" === 'string') {
|
|
6
|
+
return "0.2.4";
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// 그렇지 않으면, package.json을 lazy하게 불러와 version을 반환
|
|
10
|
+
try {
|
|
11
|
+
// 주의: require 사용 시 번들링 및 환경에 따라 결과가 달라질 수 있음
|
|
12
|
+
// 라이브러리라면 외부에 의존하지 않도록 조심해야 합니다.
|
|
13
|
+
const pkg = require('../package.json');
|
|
14
|
+
return pkg.version;
|
|
15
|
+
} catch (error) {
|
|
16
|
+
console.warn('package.json에서 version을 불러올 수 없습니다.', error);
|
|
17
|
+
return 'unknown';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getSDKVersion","pkg","require","version","error","console","warn"],"sourceRoot":"../../src","sources":["lib.ts"],"mappings":";;AAAA,OAAO,SAASA,aAAaA,CAAA,EAAW;EACtC;EACA,IAAI,cAAsB,KAAK,QAAQ,EAAE;IACvC;EACF;;EAEA;EACA,IAAI;IACF;IACA;IACA,MAAMC,GAAG,GAAGC,OAAO,CAAC,iBAAiB,CAAC;IACtC,OAAOD,GAAG,CAACE,OAAO;EACpB,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdC,OAAO,CAACC,IAAI,CAAC,qCAAqC,EAAEF,KAAK,CAAC;IAC1D,OAAO,SAAS;EAClB;AACF","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/global.d.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ABTestGroup, AppUserDiscountResponse, PredictResult } from './types';
|
|
2
|
+
export declare const initialize: ({ sdkKey, userId, }: {
|
|
3
|
+
sdkKey: string;
|
|
4
|
+
userId: string;
|
|
5
|
+
}) => Promise<{
|
|
6
|
+
organizationId: number;
|
|
7
|
+
platform: "react_native";
|
|
8
|
+
version: string;
|
|
9
|
+
group: ABTestGroup | null;
|
|
10
|
+
campaign: {
|
|
11
|
+
id: number;
|
|
12
|
+
created_at: Date | null;
|
|
13
|
+
organization_id: number;
|
|
14
|
+
campaign_name: string;
|
|
15
|
+
started_at: Date | null;
|
|
16
|
+
ended_at: Date | null;
|
|
17
|
+
traffic_ratio: number;
|
|
18
|
+
allocation_ratio: number;
|
|
19
|
+
discount_ratio: number;
|
|
20
|
+
exposure_time_sec: number;
|
|
21
|
+
model_accuracy: number | null;
|
|
22
|
+
} | null;
|
|
23
|
+
}>;
|
|
24
|
+
export declare const createEvent: ({ sdkKey, userId, eventName, createdAt, value, }: {
|
|
25
|
+
sdkKey: string;
|
|
26
|
+
userId: string;
|
|
27
|
+
eventName: string;
|
|
28
|
+
createdAt?: Date;
|
|
29
|
+
value?: number;
|
|
30
|
+
}) => Promise<void>;
|
|
31
|
+
export declare const predict: ({ userId, sdkKey, }: {
|
|
32
|
+
userId: string;
|
|
33
|
+
sdkKey: string;
|
|
34
|
+
}) => Promise<{
|
|
35
|
+
prediction: PredictResult;
|
|
36
|
+
testGroup: ABTestGroup;
|
|
37
|
+
}>;
|
|
38
|
+
export declare const createAppUserDiscount: (discountInfo: {
|
|
39
|
+
startedAt: Date;
|
|
40
|
+
endedAt: Date;
|
|
41
|
+
userId: string;
|
|
42
|
+
sdkKey: string;
|
|
43
|
+
}) => Promise<AppUserDiscountResponse>;
|
|
44
|
+
/**
|
|
45
|
+
* sdkKey와 app_user_id에 해당하는 가장 최근 할인 정보를 조회합니다.
|
|
46
|
+
* API GET /app-user-discounts/latest 엔드포인트를 호출합니다.
|
|
47
|
+
*/
|
|
48
|
+
export declare const getAppUserDiscount: ({ sdkKey, userId, }: {
|
|
49
|
+
sdkKey: string;
|
|
50
|
+
userId: string;
|
|
51
|
+
}) => Promise<AppUserDiscountResponse | null>;
|
|
52
|
+
//# sourceMappingURL=ApiRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiRequest.d.ts","sourceRoot":"","sources":["../../../../src/ApiRequest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,aAAa,EACd,MAAM,SAAS,CAAC;AAQjB,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,kDAM/B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,kBAmBA,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,qBAG3B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;gBAKiB,aAAa;eACd,WAAW;EAa3B,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,qCAkBA,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAU,qBAGtC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,4CAcA,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { DiscountInfo } from './types';
|
|
3
|
+
type MonetaiProviderProps = {
|
|
4
|
+
banner?: {
|
|
5
|
+
title: string;
|
|
6
|
+
discountTitle: string;
|
|
7
|
+
onPress: () => void;
|
|
8
|
+
};
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
onDiscountInfoChange?: (discountInfo: DiscountInfo | null) => void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 클라이언트 측에서 이 컴포넌트로 전체 앱을 감싸주면,
|
|
14
|
+
* SDK 초기화 + Event Emitter 구독 + 배너 렌더링을 한곳에서 처리할 수 있음
|
|
15
|
+
*/
|
|
16
|
+
export default function MonetaiProvider({ children, onDiscountInfoChange, }: MonetaiProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=MonetaiProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonetaiProvider.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO5C,KAAK,oBAAoB,GAAG;IAC1B,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,SAAS,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;CACpE,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,QAAQ,EACR,oBAAoB,GACrB,EAAE,oBAAoB,2CAkDtB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ABTestGroup, type PredictResult } from './types';
|
|
2
|
+
type MonetaiEvents = {
|
|
3
|
+
LOAD_DISCOUNT_INFO: void;
|
|
4
|
+
};
|
|
5
|
+
declare class MonetaiSDK {
|
|
6
|
+
private exposureTimeSec;
|
|
7
|
+
private initialized;
|
|
8
|
+
private pendingEvents;
|
|
9
|
+
private emitter;
|
|
10
|
+
getEmitter(): import("mitt").Emitter<MonetaiEvents>;
|
|
11
|
+
getExposureTimeSec(): number | null;
|
|
12
|
+
/**
|
|
13
|
+
* 모넷AI SDK를 초기화합니다
|
|
14
|
+
* @param userId 사용자 고유 ID (필수)
|
|
15
|
+
* @param useStoreKit2 StoreKit2를 사용할지 여부 (기본값: false)
|
|
16
|
+
* - true: iOS 15+ 기기에서 StoreKit2 사용 (권장)
|
|
17
|
+
* - false: 모든 기기에서 StoreKit1 사용
|
|
18
|
+
* @returns 성공 시 Promise<void>
|
|
19
|
+
*/
|
|
20
|
+
initialize({ sdkKey, userId, useStoreKit2, }: {
|
|
21
|
+
sdkKey: string;
|
|
22
|
+
userId: string;
|
|
23
|
+
useStoreKit2?: boolean;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
organizationId: number;
|
|
26
|
+
platform: 'react_native';
|
|
27
|
+
version: string;
|
|
28
|
+
userId: string;
|
|
29
|
+
group: ABTestGroup | null;
|
|
30
|
+
}>;
|
|
31
|
+
logEvent({ eventName }: {
|
|
32
|
+
eventName: string;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
predict(): Promise<{
|
|
35
|
+
prediction: PredictResult;
|
|
36
|
+
testGroup: ABTestGroup;
|
|
37
|
+
}>;
|
|
38
|
+
getInitialized(): boolean;
|
|
39
|
+
getUserId(): Promise<string | null>;
|
|
40
|
+
getSdkKey(): Promise<string | null>;
|
|
41
|
+
reset(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
declare const monetaiSDK: MonetaiSDK;
|
|
44
|
+
export default monetaiSDK;
|
|
45
|
+
//# sourceMappingURL=MonetaiSDK.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAqB/D,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;IAyDW,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAmB7C,OAAO,IAAI,OAAO,CAAC;QAC9B,UAAU,EAAE,aAAa,CAAC;QAC1B,SAAS,EAAE,WAAW,CAAC;KACxB,CAAC;IAuCK,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"}
|
|
@@ -0,0 +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;AAEhD,eAAe,UAAU,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../../src/lib.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,IAAI,MAAM,CAgBtC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ABTestGroup = 'baseline' | 'monetai' | 'unknown';
|
|
2
|
+
export type PredictResult = 'non-purchaser' | 'purchaser' | null;
|
|
3
|
+
export interface DiscountInfo {
|
|
4
|
+
startedAt: Date;
|
|
5
|
+
endedAt: Date;
|
|
6
|
+
userId: string;
|
|
7
|
+
sdkKey: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AppUserDiscountResponse {
|
|
10
|
+
id: number;
|
|
11
|
+
started_at: Date;
|
|
12
|
+
ended_at: Date;
|
|
13
|
+
app_user_id: string;
|
|
14
|
+
sdk_key: string;
|
|
15
|
+
created_at: Date;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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;AACjE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ABTestGroup, AppUserDiscountResponse, PredictResult } from './types';
|
|
2
|
+
export declare const initialize: ({ sdkKey, userId, }: {
|
|
3
|
+
sdkKey: string;
|
|
4
|
+
userId: string;
|
|
5
|
+
}) => Promise<{
|
|
6
|
+
organizationId: number;
|
|
7
|
+
platform: "react_native";
|
|
8
|
+
version: string;
|
|
9
|
+
group: ABTestGroup | null;
|
|
10
|
+
campaign: {
|
|
11
|
+
id: number;
|
|
12
|
+
created_at: Date | null;
|
|
13
|
+
organization_id: number;
|
|
14
|
+
campaign_name: string;
|
|
15
|
+
started_at: Date | null;
|
|
16
|
+
ended_at: Date | null;
|
|
17
|
+
traffic_ratio: number;
|
|
18
|
+
allocation_ratio: number;
|
|
19
|
+
discount_ratio: number;
|
|
20
|
+
exposure_time_sec: number;
|
|
21
|
+
model_accuracy: number | null;
|
|
22
|
+
} | null;
|
|
23
|
+
}>;
|
|
24
|
+
export declare const createEvent: ({ sdkKey, userId, eventName, createdAt, value, }: {
|
|
25
|
+
sdkKey: string;
|
|
26
|
+
userId: string;
|
|
27
|
+
eventName: string;
|
|
28
|
+
createdAt?: Date;
|
|
29
|
+
value?: number;
|
|
30
|
+
}) => Promise<void>;
|
|
31
|
+
export declare const predict: ({ userId, sdkKey, }: {
|
|
32
|
+
userId: string;
|
|
33
|
+
sdkKey: string;
|
|
34
|
+
}) => Promise<{
|
|
35
|
+
prediction: PredictResult;
|
|
36
|
+
testGroup: ABTestGroup;
|
|
37
|
+
}>;
|
|
38
|
+
export declare const createAppUserDiscount: (discountInfo: {
|
|
39
|
+
startedAt: Date;
|
|
40
|
+
endedAt: Date;
|
|
41
|
+
userId: string;
|
|
42
|
+
sdkKey: string;
|
|
43
|
+
}) => Promise<AppUserDiscountResponse>;
|
|
44
|
+
/**
|
|
45
|
+
* sdkKey와 app_user_id에 해당하는 가장 최근 할인 정보를 조회합니다.
|
|
46
|
+
* API GET /app-user-discounts/latest 엔드포인트를 호출합니다.
|
|
47
|
+
*/
|
|
48
|
+
export declare const getAppUserDiscount: ({ sdkKey, userId, }: {
|
|
49
|
+
sdkKey: string;
|
|
50
|
+
userId: string;
|
|
51
|
+
}) => Promise<AppUserDiscountResponse | null>;
|
|
52
|
+
//# sourceMappingURL=ApiRequest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiRequest.d.ts","sourceRoot":"","sources":["../../../../src/ApiRequest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,aAAa,EACd,MAAM,SAAS,CAAC;AAQjB,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,kDAM/B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,kBAmBA,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,qBAG3B;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;gBAKiB,aAAa;eACd,WAAW;EAa3B,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,qCAkBA,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAU,qBAGtC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,4CAcA,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { DiscountInfo } from './types';
|
|
3
|
+
type MonetaiProviderProps = {
|
|
4
|
+
banner?: {
|
|
5
|
+
title: string;
|
|
6
|
+
discountTitle: string;
|
|
7
|
+
onPress: () => void;
|
|
8
|
+
};
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
onDiscountInfoChange?: (discountInfo: DiscountInfo | null) => void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* 클라이언트 측에서 이 컴포넌트로 전체 앱을 감싸주면,
|
|
14
|
+
* SDK 초기화 + Event Emitter 구독 + 배너 렌더링을 한곳에서 처리할 수 있음
|
|
15
|
+
*/
|
|
16
|
+
export default function MonetaiProvider({ children, onDiscountInfoChange, }: MonetaiProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=MonetaiProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonetaiProvider.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO5C,KAAK,oBAAoB,GAAG;IAC1B,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,SAAS,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;CACpE,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,QAAQ,EACR,oBAAoB,GACrB,EAAE,oBAAoB,2CAkDtB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type ABTestGroup, type PredictResult } from './types';
|
|
2
|
+
type MonetaiEvents = {
|
|
3
|
+
LOAD_DISCOUNT_INFO: void;
|
|
4
|
+
};
|
|
5
|
+
declare class MonetaiSDK {
|
|
6
|
+
private exposureTimeSec;
|
|
7
|
+
private initialized;
|
|
8
|
+
private pendingEvents;
|
|
9
|
+
private emitter;
|
|
10
|
+
getEmitter(): import("mitt").Emitter<MonetaiEvents>;
|
|
11
|
+
getExposureTimeSec(): number | null;
|
|
12
|
+
/**
|
|
13
|
+
* 모넷AI SDK를 초기화합니다
|
|
14
|
+
* @param userId 사용자 고유 ID (필수)
|
|
15
|
+
* @param useStoreKit2 StoreKit2를 사용할지 여부 (기본값: false)
|
|
16
|
+
* - true: iOS 15+ 기기에서 StoreKit2 사용 (권장)
|
|
17
|
+
* - false: 모든 기기에서 StoreKit1 사용
|
|
18
|
+
* @returns 성공 시 Promise<void>
|
|
19
|
+
*/
|
|
20
|
+
initialize({ sdkKey, userId, useStoreKit2, }: {
|
|
21
|
+
sdkKey: string;
|
|
22
|
+
userId: string;
|
|
23
|
+
useStoreKit2?: boolean;
|
|
24
|
+
}): Promise<{
|
|
25
|
+
organizationId: number;
|
|
26
|
+
platform: 'react_native';
|
|
27
|
+
version: string;
|
|
28
|
+
userId: string;
|
|
29
|
+
group: ABTestGroup | null;
|
|
30
|
+
}>;
|
|
31
|
+
logEvent({ eventName }: {
|
|
32
|
+
eventName: string;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
predict(): Promise<{
|
|
35
|
+
prediction: PredictResult;
|
|
36
|
+
testGroup: ABTestGroup;
|
|
37
|
+
}>;
|
|
38
|
+
getInitialized(): boolean;
|
|
39
|
+
getUserId(): Promise<string | null>;
|
|
40
|
+
getSdkKey(): Promise<string | null>;
|
|
41
|
+
reset(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
declare const monetaiSDK: MonetaiSDK;
|
|
44
|
+
export default monetaiSDK;
|
|
45
|
+
//# sourceMappingURL=MonetaiSDK.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAqB/D,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;IAyDW,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAmB7C,OAAO,IAAI,OAAO,CAAC;QAC9B,UAAU,EAAE,aAAa,CAAC;QAC1B,SAAS,EAAE,WAAW,CAAC;KACxB,CAAC;IAuCK,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"}
|
|
@@ -0,0 +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;AAEhD,eAAe,UAAU,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../../src/lib.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,IAAI,MAAM,CAgBtC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ABTestGroup = 'baseline' | 'monetai' | 'unknown';
|
|
2
|
+
export type PredictResult = 'non-purchaser' | 'purchaser' | null;
|
|
3
|
+
export interface DiscountInfo {
|
|
4
|
+
startedAt: Date;
|
|
5
|
+
endedAt: Date;
|
|
6
|
+
userId: string;
|
|
7
|
+
sdkKey: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AppUserDiscountResponse {
|
|
10
|
+
id: number;
|
|
11
|
+
started_at: Date;
|
|
12
|
+
ended_at: Date;
|
|
13
|
+
app_user_id: string;
|
|
14
|
+
sdk_key: string;
|
|
15
|
+
created_at: Date;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +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;AACjE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;CAClB"}
|