@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.
Files changed (76) hide show
  1. package/LICENSE +20 -0
  2. package/MonetaiReactNative.podspec +25 -0
  3. package/README.md +31 -0
  4. package/android/build.gradle +81 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/src/main/AndroidManifest.xml +3 -0
  7. package/android/src/main/AndroidManifestNew.xml +2 -0
  8. package/android/src/main/java/com/hayanmind/monetaireactnative/MonetaiReactNativeModule.kt +110 -0
  9. package/android/src/main/java/com/hayanmind/monetaireactnative/MonetaiReactNativePackage.kt +17 -0
  10. package/ios/MonetaiReactNative-Bridging-Header.h +2 -0
  11. package/ios/MonetaiReactNative.mm +38 -0
  12. package/ios/MonetaiReactNative.swift +336 -0
  13. package/lib/commonjs/ApiRequest.js +120 -0
  14. package/lib/commonjs/ApiRequest.js.map +1 -0
  15. package/lib/commonjs/MonetaiProvider.js +67 -0
  16. package/lib/commonjs/MonetaiProvider.js.map +1 -0
  17. package/lib/commonjs/MonetaiSDK.js +198 -0
  18. package/lib/commonjs/MonetaiSDK.js.map +1 -0
  19. package/lib/commonjs/index.js +17 -0
  20. package/lib/commonjs/index.js.map +1 -0
  21. package/lib/commonjs/lib.js +24 -0
  22. package/lib/commonjs/lib.js.map +1 -0
  23. package/lib/commonjs/package.json +1 -0
  24. package/lib/commonjs/types/global.d.js +2 -0
  25. package/lib/commonjs/types/global.d.js.map +1 -0
  26. package/lib/commonjs/types.js +2 -0
  27. package/lib/commonjs/types.js.map +1 -0
  28. package/lib/module/ApiRequest.js +110 -0
  29. package/lib/module/ApiRequest.js.map +1 -0
  30. package/lib/module/MonetaiProvider.js +61 -0
  31. package/lib/module/MonetaiProvider.js.map +1 -0
  32. package/lib/module/MonetaiSDK.js +192 -0
  33. package/lib/module/MonetaiSDK.js.map +1 -0
  34. package/lib/module/index.js +7 -0
  35. package/lib/module/index.js.map +1 -0
  36. package/lib/module/lib.js +20 -0
  37. package/lib/module/lib.js.map +1 -0
  38. package/lib/module/package.json +1 -0
  39. package/lib/module/types/global.d.js +2 -0
  40. package/lib/module/types/global.d.js.map +1 -0
  41. package/lib/module/types.js +2 -0
  42. package/lib/module/types.js.map +1 -0
  43. package/lib/typescript/commonjs/package.json +1 -0
  44. package/lib/typescript/commonjs/src/ApiRequest.d.ts +52 -0
  45. package/lib/typescript/commonjs/src/ApiRequest.d.ts.map +1 -0
  46. package/lib/typescript/commonjs/src/MonetaiProvider.d.ts +18 -0
  47. package/lib/typescript/commonjs/src/MonetaiProvider.d.ts.map +1 -0
  48. package/lib/typescript/commonjs/src/MonetaiSDK.d.ts +45 -0
  49. package/lib/typescript/commonjs/src/MonetaiSDK.d.ts.map +1 -0
  50. package/lib/typescript/commonjs/src/index.d.ts +5 -0
  51. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  52. package/lib/typescript/commonjs/src/lib.d.ts +2 -0
  53. package/lib/typescript/commonjs/src/lib.d.ts.map +1 -0
  54. package/lib/typescript/commonjs/src/types.d.ts +17 -0
  55. package/lib/typescript/commonjs/src/types.d.ts.map +1 -0
  56. package/lib/typescript/module/package.json +1 -0
  57. package/lib/typescript/module/src/ApiRequest.d.ts +52 -0
  58. package/lib/typescript/module/src/ApiRequest.d.ts.map +1 -0
  59. package/lib/typescript/module/src/MonetaiProvider.d.ts +18 -0
  60. package/lib/typescript/module/src/MonetaiProvider.d.ts.map +1 -0
  61. package/lib/typescript/module/src/MonetaiSDK.d.ts +45 -0
  62. package/lib/typescript/module/src/MonetaiSDK.d.ts.map +1 -0
  63. package/lib/typescript/module/src/index.d.ts +5 -0
  64. package/lib/typescript/module/src/index.d.ts.map +1 -0
  65. package/lib/typescript/module/src/lib.d.ts +2 -0
  66. package/lib/typescript/module/src/lib.d.ts.map +1 -0
  67. package/lib/typescript/module/src/types.d.ts +17 -0
  68. package/lib/typescript/module/src/types.d.ts.map +1 -0
  69. package/package.json +176 -0
  70. package/src/ApiRequest.ts +182 -0
  71. package/src/MonetaiProvider.tsx +79 -0
  72. package/src/MonetaiSDK.ts +225 -0
  73. package/src/index.tsx +5 -0
  74. package/src/lib.ts +17 -0
  75. package/src/types/global.d.ts +2 -0
  76. 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,7 @@
1
+ "use strict";
2
+
3
+ import MonetaiSDK from "./MonetaiSDK.js";
4
+ import MonetaiProvider from "./MonetaiProvider.js";
5
+ export default MonetaiSDK;
6
+ export { MonetaiProvider };
7
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=global.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/global.d.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -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,5 @@
1
+ import MonetaiSDK from './MonetaiSDK';
2
+ import MonetaiProvider from './MonetaiProvider';
3
+ export default MonetaiSDK;
4
+ export { MonetaiProvider };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export declare function getSDKVersion(): string;
2
+ //# sourceMappingURL=lib.d.ts.map
@@ -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,5 @@
1
+ import MonetaiSDK from './MonetaiSDK';
2
+ import MonetaiProvider from './MonetaiProvider';
3
+ export default MonetaiSDK;
4
+ export { MonetaiProvider };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export declare function getSDKVersion(): string;
2
+ //# sourceMappingURL=lib.d.ts.map
@@ -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"}