@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,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.predict = exports.initialize = exports.getAppUserDiscount = exports.createEvent = exports.createAppUserDiscount = void 0;
|
|
7
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
8
|
+
var _lib = require("./lib.js");
|
|
9
|
+
var _reactNative = require("react-native");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
const axiosInstance = _axios.default.create({
|
|
12
|
+
baseURL: 'https://monetai-api-414410537412.us-central1.run.app/sdk' // 필요에 따라 베이스 URL 설정
|
|
13
|
+
});
|
|
14
|
+
const initialize = async ({
|
|
15
|
+
sdkKey,
|
|
16
|
+
userId
|
|
17
|
+
}) => {
|
|
18
|
+
try {
|
|
19
|
+
const response = await axiosInstance.post('/sdk-integrations', {
|
|
20
|
+
sdkKey,
|
|
21
|
+
platform: 'react_native',
|
|
22
|
+
version: (0, _lib.getSDKVersion)()
|
|
23
|
+
});
|
|
24
|
+
const abTestGroupResponse = await axiosInstance.post('/ab-test', {
|
|
25
|
+
sdkKey,
|
|
26
|
+
userId,
|
|
27
|
+
platform: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : null
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
organizationId: response.data.organization_id,
|
|
31
|
+
platform: response.data.platform,
|
|
32
|
+
version: response.data.version,
|
|
33
|
+
group: abTestGroupResponse.data.group,
|
|
34
|
+
campaign: abTestGroupResponse.data.campaign
|
|
35
|
+
};
|
|
36
|
+
} catch (error) {
|
|
37
|
+
console.error('Failed to initialize integration:', error.message);
|
|
38
|
+
throw new Error(error.response?.data?.message || 'Integration initialization failed');
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.initialize = initialize;
|
|
42
|
+
const createEvent = async ({
|
|
43
|
+
sdkKey,
|
|
44
|
+
userId,
|
|
45
|
+
eventName,
|
|
46
|
+
createdAt,
|
|
47
|
+
value
|
|
48
|
+
}) => {
|
|
49
|
+
try {
|
|
50
|
+
await axiosInstance.post('/events', {
|
|
51
|
+
sdkKey,
|
|
52
|
+
userId,
|
|
53
|
+
eventName,
|
|
54
|
+
createdAt: createdAt ?? new Date(),
|
|
55
|
+
value,
|
|
56
|
+
platform: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : null
|
|
57
|
+
});
|
|
58
|
+
} catch (error) {
|
|
59
|
+
console.error('Failed to log event:', error.message);
|
|
60
|
+
throw new Error(error.response?.data?.message || 'Failed to log event');
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
exports.createEvent = createEvent;
|
|
64
|
+
const predict = async ({
|
|
65
|
+
userId,
|
|
66
|
+
sdkKey
|
|
67
|
+
}) => {
|
|
68
|
+
console.log('Predicting user:', userId);
|
|
69
|
+
try {
|
|
70
|
+
const response = await axiosInstance.post('/predict', {
|
|
71
|
+
sdkKey,
|
|
72
|
+
userId
|
|
73
|
+
});
|
|
74
|
+
return response.data;
|
|
75
|
+
} catch (error) {
|
|
76
|
+
console.error('Failed to get A/B test group:', error.message);
|
|
77
|
+
throw new Error(error.response?.data?.message || 'Failed to get A/B test group');
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
exports.predict = predict;
|
|
81
|
+
const createAppUserDiscount = async discountInfo => {
|
|
82
|
+
try {
|
|
83
|
+
const response = await axiosInstance.post('/app-user-discounts', {
|
|
84
|
+
sdkKey: discountInfo.sdkKey,
|
|
85
|
+
appUserId: discountInfo.userId,
|
|
86
|
+
startedAt: discountInfo.startedAt,
|
|
87
|
+
endedAt: discountInfo.endedAt
|
|
88
|
+
});
|
|
89
|
+
console.log('response', response);
|
|
90
|
+
return response.data.discount;
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.error('Failed to set discount info:', error.message);
|
|
93
|
+
throw new Error(error.response?.data?.message || 'Failed to set discount info');
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* sdkKey와 app_user_id에 해당하는 가장 최근 할인 정보를 조회합니다.
|
|
99
|
+
* API GET /app-user-discounts/latest 엔드포인트를 호출합니다.
|
|
100
|
+
*/
|
|
101
|
+
exports.createAppUserDiscount = createAppUserDiscount;
|
|
102
|
+
const getAppUserDiscount = async ({
|
|
103
|
+
sdkKey,
|
|
104
|
+
userId
|
|
105
|
+
}) => {
|
|
106
|
+
try {
|
|
107
|
+
const response = await axiosInstance.get('/app-user-discounts/latest', {
|
|
108
|
+
params: {
|
|
109
|
+
sdkKey,
|
|
110
|
+
appUserId: userId
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
return response.data.discount;
|
|
114
|
+
} catch (error) {
|
|
115
|
+
console.error('Failed to get discount info:', error.message);
|
|
116
|
+
throw new Error(error.response?.data?.message || 'Failed to get discount info');
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
exports.getAppUserDiscount = getAppUserDiscount;
|
|
120
|
+
//# sourceMappingURL=ApiRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_axios","_interopRequireDefault","require","_lib","_reactNative","e","__esModule","default","axiosInstance","axios","create","baseURL","initialize","sdkKey","userId","response","post","platform","version","getSDKVersion","abTestGroupResponse","Platform","OS","organizationId","data","organization_id","group","campaign","error","console","message","Error","exports","createEvent","eventName","createdAt","value","Date","predict","log","createAppUserDiscount","discountInfo","appUserId","startedAt","endedAt","discount","getAppUserDiscount","get","params"],"sourceRoot":"../../src","sources":["ApiRequest.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = MonetaiProvider;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _MonetaiSDK = _interopRequireDefault(require("./MonetaiSDK.js"));
|
|
10
|
+
var _ApiRequest = require("./ApiRequest.js");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
// MonetaiProvider.tsx
|
|
14
|
+
|
|
15
|
+
const styles = _reactNative.StyleSheet.create({
|
|
16
|
+
container: {
|
|
17
|
+
flex: 1
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* 클라이언트 측에서 이 컴포넌트로 전체 앱을 감싸주면,
|
|
22
|
+
* SDK 초기화 + Event Emitter 구독 + 배너 렌더링을 한곳에서 처리할 수 있음
|
|
23
|
+
*/
|
|
24
|
+
function MonetaiProvider({
|
|
25
|
+
children,
|
|
26
|
+
onDiscountInfoChange
|
|
27
|
+
}) {
|
|
28
|
+
const [discountInfo, setDiscountInfo] = (0, _react.useState)(null);
|
|
29
|
+
(0, _react.useEffect)(() => {
|
|
30
|
+
const emitter = _MonetaiSDK.default.getEmitter();
|
|
31
|
+
const onLoadDiscountInfo = async () => {
|
|
32
|
+
const userId = await _MonetaiSDK.default.getUserId();
|
|
33
|
+
const sdkKey = await _MonetaiSDK.default.getSdkKey();
|
|
34
|
+
if (userId == null || sdkKey == null) {
|
|
35
|
+
console.warn('onLoadDiscountInfo: User ID or SDK Key is not set.');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const discount = await (0, _ApiRequest.getAppUserDiscount)({
|
|
39
|
+
userId,
|
|
40
|
+
sdkKey
|
|
41
|
+
});
|
|
42
|
+
if (discount != null && discount.app_user_id !== userId) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
setDiscountInfo(discount == null ? null : {
|
|
46
|
+
startedAt: discount.started_at,
|
|
47
|
+
endedAt: discount.ended_at,
|
|
48
|
+
userId: discount.app_user_id,
|
|
49
|
+
sdkKey: discount.sdk_key
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
emitter.on('LOAD_DISCOUNT_INFO', onLoadDiscountInfo);
|
|
53
|
+
return () => {
|
|
54
|
+
emitter.off('LOAD_DISCOUNT_INFO', onLoadDiscountInfo);
|
|
55
|
+
};
|
|
56
|
+
}, []);
|
|
57
|
+
(0, _react.useEffect)(() => {
|
|
58
|
+
if (onDiscountInfoChange) {
|
|
59
|
+
onDiscountInfoChange(discountInfo);
|
|
60
|
+
}
|
|
61
|
+
}, [onDiscountInfoChange, discountInfo]);
|
|
62
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
63
|
+
style: styles.container,
|
|
64
|
+
children: children
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=MonetaiProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_MonetaiSDK","_interopRequireDefault","_ApiRequest","_jsxRuntime","e","__esModule","default","styles","StyleSheet","create","container","flex","MonetaiProvider","children","onDiscountInfoChange","discountInfo","setDiscountInfo","useState","useEffect","emitter","monetaiSDK","getEmitter","onLoadDiscountInfo","userId","getUserId","sdkKey","getSdkKey","console","warn","discount","getAppUserDiscount","app_user_id","startedAt","started_at","endedAt","ended_at","sdk_key","on","off","jsx","View","style"],"sourceRoot":"../../src","sources":["MonetaiProvider.tsx"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,WAAA,GAAAJ,OAAA;AAAkD,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AALlD;;AAOA,MAAMG,MAAM,GAAGC,uBAAU,CAACC,MAAM,CAAC;EAC/BC,SAAS,EAAE;IAAEC,IAAI,EAAE;EAAE;AACvB,CAAC,CAAC;AAYF;AACA;AACA;AACA;AACe,SAASC,eAAeA,CAAC;EACtCC,QAAQ;EACRC;AACoB,CAAC,EAAE;EACvB,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG,IAAAC,eAAQ,EAAsB,IAAI,CAAC;EAE3E,IAAAC,gBAAS,EAAC,MAAM;IACd,MAAMC,OAAO,GAAGC,mBAAU,CAACC,UAAU,CAAC,CAAC;IACvC,MAAMC,kBAAkB,GAAG,MAAAA,CAAA,KAAY;MACrC,MAAMC,MAAM,GAAG,MAAMH,mBAAU,CAACI,SAAS,CAAC,CAAC;MAC3C,MAAMC,MAAM,GAAG,MAAML,mBAAU,CAACM,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,MAAM,IAAAC,8BAAkB,EAAC;QAAEP,MAAM;QAAEE;MAAO,CAAC,CAAC;MAC7D,IAAII,QAAQ,IAAI,IAAI,IAAIA,QAAQ,CAACE,WAAW,KAAKR,MAAM,EAAE;QACvD;MACF;MAEAP,eAAe,CACba,QAAQ,IAAI,IAAI,GACZ,IAAI,GACJ;QACEG,SAAS,EAAEH,QAAQ,CAACI,UAAU;QAC9BC,OAAO,EAAEL,QAAQ,CAACM,QAAQ;QAC1BZ,MAAM,EAAEM,QAAQ,CAACE,WAAW;QAC5BN,MAAM,EAAEI,QAAQ,CAACO;MACnB,CACN,CAAC;IACH,CAAC;IAEDjB,OAAO,CAACkB,EAAE,CAAC,oBAAoB,EAAEf,kBAAkB,CAAC;IAEpD,OAAO,MAAM;MACXH,OAAO,CAACmB,GAAG,CAAC,oBAAoB,EAAEhB,kBAAkB,CAAC;IACvD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,IAAAJ,gBAAS,EAAC,MAAM;IACd,IAAIJ,oBAAoB,EAAE;MACxBA,oBAAoB,CAACC,YAAY,CAAC;IACpC;EACF,CAAC,EAAE,CAACD,oBAAoB,EAAEC,YAAY,CAAC,CAAC;EAExC,oBACE,IAAAZ,WAAA,CAAAoC,GAAA,EAACxC,YAAA,CAAAyC,IAAI;IAACC,KAAK,EAAElC,MAAM,CAACG,SAAU;IAAAG,QAAA,EAE3BA;EAAQ,CACL,CAAC;AAEX","ignoreList":[]}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _mitt = _interopRequireDefault(require("mitt"));
|
|
9
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
10
|
+
var _ApiRequest = _interopRequireWildcard(require("./ApiRequest.js"));
|
|
11
|
+
var ApiRequest = _ApiRequest;
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
const LINKING_ERROR = `The package '@hayanmind/monetai-react-native' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
|
|
15
|
+
ios: "- You have run 'pod install'\n",
|
|
16
|
+
default: ''
|
|
17
|
+
}) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n';
|
|
18
|
+
const MonetaiReactNative = _reactNative.NativeModules.MonetaiReactNative ? _reactNative.NativeModules.MonetaiReactNative : new Proxy({}, {
|
|
19
|
+
get() {
|
|
20
|
+
throw new Error(LINKING_ERROR);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Emitter로 사용할 이벤트 타입 정의
|
|
25
|
+
|
|
26
|
+
class MonetaiSDK {
|
|
27
|
+
exposureTimeSec = null;
|
|
28
|
+
initialized = false;
|
|
29
|
+
|
|
30
|
+
// SDK 초기화 전에 로깅된 이벤트들을 저장할 큐
|
|
31
|
+
pendingEvents = [];
|
|
32
|
+
|
|
33
|
+
// Event Emitter
|
|
34
|
+
emitter = (0, _mitt.default)();
|
|
35
|
+
|
|
36
|
+
// emitter를 노출해서 Provider가 구독할 수 있게 함
|
|
37
|
+
getEmitter() {
|
|
38
|
+
return this.emitter;
|
|
39
|
+
}
|
|
40
|
+
getExposureTimeSec() {
|
|
41
|
+
return this.exposureTimeSec;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 모넷AI SDK를 초기화합니다
|
|
46
|
+
* @param userId 사용자 고유 ID (필수)
|
|
47
|
+
* @param useStoreKit2 StoreKit2를 사용할지 여부 (기본값: false)
|
|
48
|
+
* - true: iOS 15+ 기기에서 StoreKit2 사용 (권장)
|
|
49
|
+
* - false: 모든 기기에서 StoreKit1 사용
|
|
50
|
+
* @returns 성공 시 Promise<void>
|
|
51
|
+
*/
|
|
52
|
+
async initialize({
|
|
53
|
+
sdkKey,
|
|
54
|
+
userId,
|
|
55
|
+
useStoreKit2 = false
|
|
56
|
+
}) {
|
|
57
|
+
if (!userId) {
|
|
58
|
+
throw new Error('userId is required');
|
|
59
|
+
}
|
|
60
|
+
if (!sdkKey) {
|
|
61
|
+
throw new Error('sdkKey is required');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// SDK 키를 네이티브에 저장
|
|
65
|
+
await MonetaiReactNative.setSdkKey(sdkKey);
|
|
66
|
+
|
|
67
|
+
// userId 설정
|
|
68
|
+
await MonetaiReactNative.setUserId(userId);
|
|
69
|
+
|
|
70
|
+
// 트랜잭션 관찰 시작
|
|
71
|
+
await MonetaiReactNative.startObserving(useStoreKit2);
|
|
72
|
+
|
|
73
|
+
// iOS 영수증 전송 (ios 플랫폼에서만 호출)
|
|
74
|
+
if (_reactNative.Platform.OS === 'ios') {
|
|
75
|
+
MonetaiReactNative.sendReceipt().catch(err => {
|
|
76
|
+
console.error('Failed to send receipt', err);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const result = await ApiRequest.initialize({
|
|
80
|
+
sdkKey,
|
|
81
|
+
userId
|
|
82
|
+
});
|
|
83
|
+
this.exposureTimeSec = result.campaign?.exposure_time_sec ?? null;
|
|
84
|
+
this.initialized = true;
|
|
85
|
+
|
|
86
|
+
// SDK 초기화 후, 초기화 전에 저장된 pendingEvents를 전송
|
|
87
|
+
const pendingPromises = this.pendingEvents.map(async ({
|
|
88
|
+
eventName,
|
|
89
|
+
value,
|
|
90
|
+
createdAt
|
|
91
|
+
}) => {
|
|
92
|
+
await ApiRequest.createEvent({
|
|
93
|
+
sdkKey,
|
|
94
|
+
userId,
|
|
95
|
+
eventName,
|
|
96
|
+
value,
|
|
97
|
+
createdAt
|
|
98
|
+
});
|
|
99
|
+
console.log('[MonetaiSDK] Logged pending event', eventName, value);
|
|
100
|
+
});
|
|
101
|
+
Promise.all(pendingPromises).then(() => {
|
|
102
|
+
this.pendingEvents = [];
|
|
103
|
+
});
|
|
104
|
+
this.emitter.emit('LOAD_DISCOUNT_INFO');
|
|
105
|
+
return {
|
|
106
|
+
organizationId: result.organizationId,
|
|
107
|
+
platform: 'react_native',
|
|
108
|
+
version: result.version,
|
|
109
|
+
userId: userId,
|
|
110
|
+
group: result.group
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
async logEvent({
|
|
114
|
+
eventName
|
|
115
|
+
}) {
|
|
116
|
+
const sdkKey = await this.getSdkKey();
|
|
117
|
+
const userId = await this.getUserId();
|
|
118
|
+
|
|
119
|
+
// SDK가 아직 초기화되지 않은 경우, 이벤트를 pendingEvents에 저장
|
|
120
|
+
if (!sdkKey || !userId) {
|
|
121
|
+
console.log('[MonetaiSDK] Pending event', eventName);
|
|
122
|
+
this.pendingEvents.push({
|
|
123
|
+
eventName,
|
|
124
|
+
createdAt: new Date()
|
|
125
|
+
});
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
await ApiRequest.createEvent({
|
|
129
|
+
sdkKey,
|
|
130
|
+
userId,
|
|
131
|
+
eventName
|
|
132
|
+
});
|
|
133
|
+
console.log('[MonetaiSDK] Logged event', eventName);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Non-Purchaser 예측
|
|
137
|
+
async predict() {
|
|
138
|
+
const sdkKey = await this.getSdkKey();
|
|
139
|
+
const userId = await this.getUserId();
|
|
140
|
+
if (!sdkKey || !userId || !this.exposureTimeSec) {
|
|
141
|
+
throw new Error('MonetaiSDK is not initialized. Call initialize() first.');
|
|
142
|
+
}
|
|
143
|
+
const result = await ApiRequest.predict({
|
|
144
|
+
userId,
|
|
145
|
+
sdkKey
|
|
146
|
+
});
|
|
147
|
+
if (result.prediction === 'non-purchaser') {
|
|
148
|
+
const discountInfo = await ApiRequest.getAppUserDiscount({
|
|
149
|
+
sdkKey,
|
|
150
|
+
userId
|
|
151
|
+
});
|
|
152
|
+
const hasActiveDiscount = discountInfo != null && discountInfo.app_user_id === userId && (0, _dayjs.default)(discountInfo.ended_at).isAfter((0, _dayjs.default)());
|
|
153
|
+
console.log('hasActiveDiscount', hasActiveDiscount);
|
|
154
|
+
if (!hasActiveDiscount) {
|
|
155
|
+
const startedAt = (0, _dayjs.default)();
|
|
156
|
+
const endedAt = startedAt.clone().add(this.exposureTimeSec, 'second');
|
|
157
|
+
await (0, _ApiRequest.createAppUserDiscount)({
|
|
158
|
+
startedAt: startedAt.toDate(),
|
|
159
|
+
endedAt: endedAt.toDate(),
|
|
160
|
+
userId,
|
|
161
|
+
sdkKey
|
|
162
|
+
});
|
|
163
|
+
this.emitter.emit('LOAD_DISCOUNT_INFO');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
getInitialized() {
|
|
169
|
+
return this.initialized;
|
|
170
|
+
}
|
|
171
|
+
async getUserId() {
|
|
172
|
+
try {
|
|
173
|
+
const userId = await MonetaiReactNative.getUserId();
|
|
174
|
+
return userId;
|
|
175
|
+
} catch (error) {
|
|
176
|
+
console.error('[MonetaiSDK] getUserId error', error);
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
async getSdkKey() {
|
|
181
|
+
try {
|
|
182
|
+
const sdkKey = await MonetaiReactNative.getSdkKey();
|
|
183
|
+
return sdkKey;
|
|
184
|
+
} catch (error) {
|
|
185
|
+
console.error('[MonetaiSDK] getSdkKey error', error);
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async reset() {
|
|
190
|
+
await MonetaiReactNative.reset();
|
|
191
|
+
this.initialized = false;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// 싱글턴으로 export
|
|
196
|
+
const monetaiSDK = new MonetaiSDK();
|
|
197
|
+
var _default = exports.default = monetaiSDK;
|
|
198
|
+
//# sourceMappingURL=MonetaiSDK.js.map
|
|
@@ -0,0 +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","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","dayjs","ended_at","isAfter","startedAt","endedAt","clone","add","createAppUserDiscount","toDate","getInitialized","reset","monetaiSDK","_default","exports"],"sourceRoot":"../../src","sources":["MonetaiSDK.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "MonetaiProvider", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _MonetaiProvider.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
exports.default = void 0;
|
|
13
|
+
var _MonetaiSDK = _interopRequireDefault(require("./MonetaiSDK.js"));
|
|
14
|
+
var _MonetaiProvider = _interopRequireDefault(require("./MonetaiProvider.js"));
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
var _default = exports.default = _MonetaiSDK.default;
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_MonetaiSDK","_interopRequireDefault","require","_MonetaiProvider","e","__esModule","default","_default","exports","MonetaiSDK"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAgD,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAEjCG,mBAAU","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getSDKVersion = getSDKVersion;
|
|
7
|
+
function getSDKVersion() {
|
|
8
|
+
// __SDK_VERSION__이 정의되어 있으면 해당 값을 사용
|
|
9
|
+
if (typeof "0.2.4" === 'string') {
|
|
10
|
+
return "0.2.4";
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// 그렇지 않으면, package.json을 lazy하게 불러와 version을 반환
|
|
14
|
+
try {
|
|
15
|
+
// 주의: require 사용 시 번들링 및 환경에 따라 결과가 달라질 수 있음
|
|
16
|
+
// 라이브러리라면 외부에 의존하지 않도록 조심해야 합니다.
|
|
17
|
+
const pkg = require('../package.json');
|
|
18
|
+
return pkg.version;
|
|
19
|
+
} catch (error) {
|
|
20
|
+
console.warn('package.json에서 version을 불러올 수 없습니다.', error);
|
|
21
|
+
return 'unknown';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getSDKVersion","pkg","require","version","error","console","warn"],"sourceRoot":"../../src","sources":["lib.ts"],"mappings":";;;;;;AAAO,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":"commonjs"}
|
|
@@ -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,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
import { getSDKVersion } from "./lib.js";
|
|
5
|
+
import { Platform } from 'react-native';
|
|
6
|
+
const axiosInstance = axios.create({
|
|
7
|
+
baseURL: 'https://monetai-api-414410537412.us-central1.run.app/sdk' // 필요에 따라 베이스 URL 설정
|
|
8
|
+
});
|
|
9
|
+
export const initialize = async ({
|
|
10
|
+
sdkKey,
|
|
11
|
+
userId
|
|
12
|
+
}) => {
|
|
13
|
+
try {
|
|
14
|
+
const response = await axiosInstance.post('/sdk-integrations', {
|
|
15
|
+
sdkKey,
|
|
16
|
+
platform: 'react_native',
|
|
17
|
+
version: getSDKVersion()
|
|
18
|
+
});
|
|
19
|
+
const abTestGroupResponse = await axiosInstance.post('/ab-test', {
|
|
20
|
+
sdkKey,
|
|
21
|
+
userId,
|
|
22
|
+
platform: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : null
|
|
23
|
+
});
|
|
24
|
+
return {
|
|
25
|
+
organizationId: response.data.organization_id,
|
|
26
|
+
platform: response.data.platform,
|
|
27
|
+
version: response.data.version,
|
|
28
|
+
group: abTestGroupResponse.data.group,
|
|
29
|
+
campaign: abTestGroupResponse.data.campaign
|
|
30
|
+
};
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error('Failed to initialize integration:', error.message);
|
|
33
|
+
throw new Error(error.response?.data?.message || 'Integration initialization failed');
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export const createEvent = async ({
|
|
37
|
+
sdkKey,
|
|
38
|
+
userId,
|
|
39
|
+
eventName,
|
|
40
|
+
createdAt,
|
|
41
|
+
value
|
|
42
|
+
}) => {
|
|
43
|
+
try {
|
|
44
|
+
await axiosInstance.post('/events', {
|
|
45
|
+
sdkKey,
|
|
46
|
+
userId,
|
|
47
|
+
eventName,
|
|
48
|
+
createdAt: createdAt ?? new Date(),
|
|
49
|
+
value,
|
|
50
|
+
platform: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : null
|
|
51
|
+
});
|
|
52
|
+
} catch (error) {
|
|
53
|
+
console.error('Failed to log event:', error.message);
|
|
54
|
+
throw new Error(error.response?.data?.message || 'Failed to log event');
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
export const predict = async ({
|
|
58
|
+
userId,
|
|
59
|
+
sdkKey
|
|
60
|
+
}) => {
|
|
61
|
+
console.log('Predicting user:', userId);
|
|
62
|
+
try {
|
|
63
|
+
const response = await axiosInstance.post('/predict', {
|
|
64
|
+
sdkKey,
|
|
65
|
+
userId
|
|
66
|
+
});
|
|
67
|
+
return response.data;
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.error('Failed to get A/B test group:', error.message);
|
|
70
|
+
throw new Error(error.response?.data?.message || 'Failed to get A/B test group');
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
export const createAppUserDiscount = async discountInfo => {
|
|
74
|
+
try {
|
|
75
|
+
const response = await axiosInstance.post('/app-user-discounts', {
|
|
76
|
+
sdkKey: discountInfo.sdkKey,
|
|
77
|
+
appUserId: discountInfo.userId,
|
|
78
|
+
startedAt: discountInfo.startedAt,
|
|
79
|
+
endedAt: discountInfo.endedAt
|
|
80
|
+
});
|
|
81
|
+
console.log('response', response);
|
|
82
|
+
return response.data.discount;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
console.error('Failed to set discount info:', error.message);
|
|
85
|
+
throw new Error(error.response?.data?.message || 'Failed to set discount info');
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* sdkKey와 app_user_id에 해당하는 가장 최근 할인 정보를 조회합니다.
|
|
91
|
+
* API GET /app-user-discounts/latest 엔드포인트를 호출합니다.
|
|
92
|
+
*/
|
|
93
|
+
export const getAppUserDiscount = async ({
|
|
94
|
+
sdkKey,
|
|
95
|
+
userId
|
|
96
|
+
}) => {
|
|
97
|
+
try {
|
|
98
|
+
const response = await axiosInstance.get('/app-user-discounts/latest', {
|
|
99
|
+
params: {
|
|
100
|
+
sdkKey,
|
|
101
|
+
appUserId: userId
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
return response.data.discount;
|
|
105
|
+
} catch (error) {
|
|
106
|
+
console.error('Failed to get discount info:', error.message);
|
|
107
|
+
throw new Error(error.response?.data?.message || 'Failed to get discount info');
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=ApiRequest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["axios","getSDKVersion","Platform","axiosInstance","create","baseURL","initialize","sdkKey","userId","response","post","platform","version","abTestGroupResponse","OS","organizationId","data","organization_id","group","campaign","error","console","message","Error","createEvent","eventName","createdAt","value","Date","predict","log","createAppUserDiscount","discountInfo","appUserId","startedAt","endedAt","discount","getAppUserDiscount","get","params"],"sourceRoot":"../../src","sources":["ApiRequest.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// MonetaiProvider.tsx
|
|
4
|
+
import { useEffect, useState } from 'react';
|
|
5
|
+
import { StyleSheet, View } from 'react-native';
|
|
6
|
+
import monetaiSDK from "./MonetaiSDK.js";
|
|
7
|
+
import { getAppUserDiscount } from "./ApiRequest.js";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
const styles = StyleSheet.create({
|
|
10
|
+
container: {
|
|
11
|
+
flex: 1
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* 클라이언트 측에서 이 컴포넌트로 전체 앱을 감싸주면,
|
|
16
|
+
* SDK 초기화 + Event Emitter 구독 + 배너 렌더링을 한곳에서 처리할 수 있음
|
|
17
|
+
*/
|
|
18
|
+
export default function MonetaiProvider({
|
|
19
|
+
children,
|
|
20
|
+
onDiscountInfoChange
|
|
21
|
+
}) {
|
|
22
|
+
const [discountInfo, setDiscountInfo] = useState(null);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const emitter = monetaiSDK.getEmitter();
|
|
25
|
+
const onLoadDiscountInfo = async () => {
|
|
26
|
+
const userId = await monetaiSDK.getUserId();
|
|
27
|
+
const sdkKey = await monetaiSDK.getSdkKey();
|
|
28
|
+
if (userId == null || sdkKey == null) {
|
|
29
|
+
console.warn('onLoadDiscountInfo: User ID or SDK Key is not set.');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const discount = await getAppUserDiscount({
|
|
33
|
+
userId,
|
|
34
|
+
sdkKey
|
|
35
|
+
});
|
|
36
|
+
if (discount != null && discount.app_user_id !== userId) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
setDiscountInfo(discount == null ? null : {
|
|
40
|
+
startedAt: discount.started_at,
|
|
41
|
+
endedAt: discount.ended_at,
|
|
42
|
+
userId: discount.app_user_id,
|
|
43
|
+
sdkKey: discount.sdk_key
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
emitter.on('LOAD_DISCOUNT_INFO', onLoadDiscountInfo);
|
|
47
|
+
return () => {
|
|
48
|
+
emitter.off('LOAD_DISCOUNT_INFO', onLoadDiscountInfo);
|
|
49
|
+
};
|
|
50
|
+
}, []);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (onDiscountInfoChange) {
|
|
53
|
+
onDiscountInfoChange(discountInfo);
|
|
54
|
+
}
|
|
55
|
+
}, [onDiscountInfoChange, discountInfo]);
|
|
56
|
+
return /*#__PURE__*/_jsx(View, {
|
|
57
|
+
style: styles.container,
|
|
58
|
+
children: children
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=MonetaiProvider.js.map
|