@hayanmind/monetai-react-native 1.0.0-beta.0 → 1.0.0-beta.2
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/android/src/main/java/com/hayanmind/monetaireactnative/MonetaiReactNativeModule.kt +19 -0
- package/ios/MonetaiReactNative.mm +6 -4
- package/ios/MonetaiReactNative.swift +15 -3
- package/lib/commonjs/ApiRequest.js +42 -52
- package/lib/commonjs/ApiRequest.js.map +1 -1
- package/lib/commonjs/MonetaiSDK.js +28 -45
- package/lib/commonjs/MonetaiSDK.js.map +1 -1
- package/lib/commonjs/constants.js +14 -0
- package/lib/commonjs/constants.js.map +1 -0
- package/lib/commonjs/lib.js +2 -2
- package/lib/module/ApiRequest.js +36 -47
- package/lib/module/ApiRequest.js.map +1 -1
- package/lib/module/MonetaiSDK.js +29 -46
- package/lib/module/MonetaiSDK.js.map +1 -1
- package/lib/module/constants.js +10 -0
- package/lib/module/constants.js.map +1 -0
- package/lib/module/lib.js +2 -2
- package/lib/typescript/commonjs/src/ApiRequest.d.ts +17 -35
- package/lib/typescript/commonjs/src/ApiRequest.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/MonetaiSDK.d.ts +5 -14
- package/lib/typescript/commonjs/src/MonetaiSDK.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/constants.d.ts +8 -0
- package/lib/typescript/commonjs/src/constants.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +1 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types.d.ts +10 -3
- package/lib/typescript/commonjs/src/types.d.ts.map +1 -1
- package/lib/typescript/module/src/ApiRequest.d.ts +17 -35
- package/lib/typescript/module/src/ApiRequest.d.ts.map +1 -1
- package/lib/typescript/module/src/MonetaiSDK.d.ts +5 -14
- package/lib/typescript/module/src/MonetaiSDK.d.ts.map +1 -1
- package/lib/typescript/module/src/constants.d.ts +8 -0
- package/lib/typescript/module/src/constants.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +1 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/types.d.ts +10 -3
- package/lib/typescript/module/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ApiRequest.ts +43 -93
- package/src/MonetaiSDK.ts +50 -70
- package/src/constants.ts +7 -0
- package/src/index.tsx +2 -3
- package/src/types.ts +11 -3
|
@@ -412,6 +412,25 @@ class MonetaiReactNativeModule(reactContext: ReactApplicationContext) :
|
|
|
412
412
|
}
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
+
@ReactMethod
|
|
416
|
+
fun getAppVersion(promise: Promise) {
|
|
417
|
+
try {
|
|
418
|
+
val packageInfo = reactApplicationContext.packageManager
|
|
419
|
+
.getPackageInfo(reactApplicationContext.packageName, 0)
|
|
420
|
+
val versionName = packageInfo.versionName
|
|
421
|
+
Log.d(TAG, "getAppVersion: ${versionName ?: "null"}")
|
|
422
|
+
promise.resolve(versionName)
|
|
423
|
+
} catch (e: Exception) {
|
|
424
|
+
Log.e(TAG, "getAppVersion 실패: ${e.message}")
|
|
425
|
+
promise.resolve(null)
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
@ReactMethod
|
|
430
|
+
fun getBundleId(promise: Promise) {
|
|
431
|
+
promise.resolve(reactApplicationContext.packageName)
|
|
432
|
+
}
|
|
433
|
+
|
|
415
434
|
companion object {
|
|
416
435
|
const val NAME = "MonetaiReactNative"
|
|
417
436
|
}
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
@interface RCT_EXTERN_MODULE(MonetaiReactNative, NSObject)
|
|
4
4
|
|
|
5
|
-
RCT_EXTERN_METHOD(multiply:(float)a withB:(float)b
|
|
6
|
-
withResolver:(RCTPromiseResolveBlock)resolve
|
|
7
|
-
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
8
|
-
|
|
9
5
|
RCT_EXTERN_METHOD(startObserving:(BOOL)useStoreKit2
|
|
10
6
|
withResolver:(RCTPromiseResolveBlock)resolve
|
|
11
7
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
@@ -30,6 +26,12 @@ RCT_EXTERN_METHOD(sendReceipt:(RCTPromiseResolveBlock)resolve
|
|
|
30
26
|
RCT_EXTERN_METHOD(reset:(RCTPromiseResolveBlock)resolve
|
|
31
27
|
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
32
28
|
|
|
29
|
+
RCT_EXTERN_METHOD(getAppVersion:(RCTPromiseResolveBlock)resolve
|
|
30
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
31
|
+
|
|
32
|
+
RCT_EXTERN_METHOD(getBundleId:(RCTPromiseResolveBlock)resolve
|
|
33
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
34
|
+
|
|
33
35
|
+ (BOOL)requiresMainQueueSetup
|
|
34
36
|
{
|
|
35
37
|
return NO;
|
|
@@ -316,19 +316,31 @@ class MonetaiReactNative: NSObject {
|
|
|
316
316
|
kSecClass as String: kSecClassGenericPassword,
|
|
317
317
|
kSecAttrAccount as String: "MonetaiAppAccountToken"
|
|
318
318
|
]
|
|
319
|
-
|
|
319
|
+
|
|
320
320
|
let sdkKeyQuery: [String: Any] = [
|
|
321
321
|
kSecClass as String: kSecClassGenericPassword,
|
|
322
322
|
kSecAttrAccount as String: "MonetaiSdkKey"
|
|
323
323
|
]
|
|
324
|
-
|
|
324
|
+
|
|
325
325
|
SecItemDelete(tokenQuery as CFDictionary)
|
|
326
326
|
SecItemDelete(sdkKeyQuery as CFDictionary)
|
|
327
|
-
|
|
327
|
+
|
|
328
328
|
print("[Monetai][Debug] userId와 sdkKey가 초기화되었습니다")
|
|
329
329
|
resolve(nil)
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
+
@objc(getAppVersion:withRejecter:)
|
|
333
|
+
func getAppVersion(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
|
|
334
|
+
let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String
|
|
335
|
+
print("[Monetai][Debug] getAppVersion: \(appVersion ?? "nil")")
|
|
336
|
+
resolve(appVersion)
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
@objc(getBundleId:withRejecter:)
|
|
340
|
+
func getBundleId(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
|
|
341
|
+
resolve(Bundle.main.bundleIdentifier)
|
|
342
|
+
}
|
|
343
|
+
|
|
332
344
|
@objc
|
|
333
345
|
static func requiresMainQueueSetup() -> Bool {
|
|
334
346
|
return false
|
|
@@ -3,41 +3,59 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.setUserIdHeader = exports.setBundleIdHeader = exports.setAppVersionHeader = exports.initialize = exports.getOffer = exports.getAppUserDiscount = exports.createViewProductItemEvent = exports.createEvent = void 0;
|
|
7
7
|
var _axios = _interopRequireDefault(require("axios"));
|
|
8
8
|
var _lib = require("./lib.js");
|
|
9
9
|
var _reactNative = require("react-native");
|
|
10
|
+
var _constants = require("./constants.js");
|
|
10
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
12
|
const axiosInstance = _axios.default.create({
|
|
12
13
|
baseURL: 'https://monetai-api-414410537412.us-central1.run.app/sdk',
|
|
13
14
|
// 필요에 따라 베이스 URL 설정
|
|
14
15
|
headers: {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
[_constants.SDK_HEADERS.SDK_PLATFORM]: 'react_native',
|
|
17
|
+
[_constants.SDK_HEADERS.SDK_VERSION]: (0, _lib.getSDKVersion)(),
|
|
18
|
+
[_constants.SDK_HEADERS.DEVICE_OS]: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : _reactNative.Platform.OS
|
|
18
19
|
}
|
|
19
20
|
});
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* X-App-Version 헤더를 설정합니다.
|
|
24
|
+
* SDK 초기화 시점에 호출되어야 합니다.
|
|
25
|
+
*/
|
|
26
|
+
const setAppVersionHeader = version => {
|
|
27
|
+
axiosInstance.defaults.headers.common[_constants.SDK_HEADERS.APP_VERSION] = version;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* X-App-Bundle-Id 헤더를 설정합니다.
|
|
32
|
+
* SDK 초기화 시점에 호출되어야 합니다.
|
|
33
|
+
*/
|
|
34
|
+
exports.setAppVersionHeader = setAppVersionHeader;
|
|
35
|
+
const setBundleIdHeader = bundleId => {
|
|
36
|
+
axiosInstance.defaults.headers.common[_constants.SDK_HEADERS.BUNDLE_ID] = bundleId;
|
|
37
|
+
};
|
|
38
|
+
exports.setBundleIdHeader = setBundleIdHeader;
|
|
39
|
+
const setUserIdHeader = userId => {
|
|
40
|
+
axiosInstance.defaults.headers.common['X-User-Id'] = userId;
|
|
41
|
+
};
|
|
42
|
+
exports.setUserIdHeader = setUserIdHeader;
|
|
20
43
|
const initialize = async ({
|
|
21
44
|
sdkKey,
|
|
22
45
|
userId
|
|
23
46
|
}) => {
|
|
24
47
|
try {
|
|
48
|
+
// X-User-Id 헤더 설정 (user property 수집용)
|
|
49
|
+
setUserIdHeader(userId);
|
|
25
50
|
const response = await axiosInstance.post('/sdk-integrations', {
|
|
26
51
|
sdkKey,
|
|
27
52
|
platform: 'react_native',
|
|
28
53
|
version: (0, _lib.getSDKVersion)()
|
|
29
54
|
});
|
|
30
|
-
const abTestGroupResponse = await axiosInstance.post('/ab-test', {
|
|
31
|
-
sdkKey,
|
|
32
|
-
userId,
|
|
33
|
-
platform: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : _reactNative.Platform.OS
|
|
34
|
-
});
|
|
35
55
|
return {
|
|
36
56
|
organizationId: response.data.organization_id,
|
|
37
57
|
platform: response.data.platform,
|
|
38
|
-
version: response.data.version
|
|
39
|
-
group: abTestGroupResponse.data.group,
|
|
40
|
-
campaign: abTestGroupResponse.data.campaign
|
|
58
|
+
version: response.data.version
|
|
41
59
|
};
|
|
42
60
|
} catch (error) {
|
|
43
61
|
console.error('Failed to initialize integration:', error.message);
|
|
@@ -81,6 +99,7 @@ const createViewProductItemEvent = async ({
|
|
|
81
99
|
price: params.price,
|
|
82
100
|
regularPrice: params.regularPrice,
|
|
83
101
|
currencyCode: params.currencyCode,
|
|
102
|
+
promotionId: params.promotionId,
|
|
84
103
|
month: params.month,
|
|
85
104
|
createdAt: createdAt ?? new Date(),
|
|
86
105
|
platform: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : _reactNative.Platform.OS
|
|
@@ -89,43 +108,12 @@ const createViewProductItemEvent = async ({
|
|
|
89
108
|
console.error('Failed to log view product item event:', error.message);
|
|
90
109
|
}
|
|
91
110
|
};
|
|
92
|
-
exports.createViewProductItemEvent = createViewProductItemEvent;
|
|
93
|
-
const predict = async ({
|
|
94
|
-
userId,
|
|
95
|
-
sdkKey
|
|
96
|
-
}) => {
|
|
97
|
-
try {
|
|
98
|
-
const response = await axiosInstance.post('/predict', {
|
|
99
|
-
sdkKey,
|
|
100
|
-
userId
|
|
101
|
-
});
|
|
102
|
-
return response.data;
|
|
103
|
-
} catch (error) {
|
|
104
|
-
console.error('Failed to get A/B test group:', error.message);
|
|
105
|
-
throw new Error(error.response?.data?.message || 'Failed to get A/B test group');
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
exports.predict = predict;
|
|
109
|
-
const createAppUserDiscount = async discountInfo => {
|
|
110
|
-
try {
|
|
111
|
-
const response = await axiosInstance.post('/app-user-discounts', {
|
|
112
|
-
sdkKey: discountInfo.sdkKey,
|
|
113
|
-
appUserId: discountInfo.userId,
|
|
114
|
-
startedAt: discountInfo.startedAt,
|
|
115
|
-
endedAt: discountInfo.endedAt
|
|
116
|
-
});
|
|
117
|
-
return response.data.discount;
|
|
118
|
-
} catch (error) {
|
|
119
|
-
console.error('Failed to set discount info:', error.message);
|
|
120
|
-
throw new Error(error.response?.data?.message || 'Failed to set discount info');
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
111
|
|
|
124
112
|
/**
|
|
125
113
|
* sdkKey와 app_user_id에 해당하는 가장 최근 할인 정보를 조회합니다.
|
|
126
114
|
* API GET /app-user-discounts/latest 엔드포인트를 호출합니다.
|
|
127
115
|
*/
|
|
128
|
-
exports.
|
|
116
|
+
exports.createViewProductItemEvent = createViewProductItemEvent;
|
|
129
117
|
const getAppUserDiscount = async ({
|
|
130
118
|
sdkKey,
|
|
131
119
|
userId
|
|
@@ -145,25 +133,27 @@ const getAppUserDiscount = async ({
|
|
|
145
133
|
};
|
|
146
134
|
|
|
147
135
|
/**
|
|
148
|
-
*
|
|
149
|
-
* API POST /
|
|
136
|
+
* 오퍼 조회
|
|
137
|
+
* API POST /offers/get-offer 엔드포인트를 호출합니다.
|
|
150
138
|
*/
|
|
151
139
|
exports.getAppUserDiscount = getAppUserDiscount;
|
|
152
|
-
const
|
|
140
|
+
const getOffer = async ({
|
|
153
141
|
sdkKey,
|
|
154
|
-
userId
|
|
142
|
+
userId,
|
|
143
|
+
promotionId
|
|
155
144
|
}) => {
|
|
156
145
|
try {
|
|
157
|
-
const response = await axiosInstance.post('/
|
|
146
|
+
const response = await axiosInstance.post('/offers/get-offer', {
|
|
158
147
|
sdkKey,
|
|
159
148
|
userId,
|
|
149
|
+
promotionId,
|
|
160
150
|
platform: _reactNative.Platform.OS === 'ios' ? 'ios' : _reactNative.Platform.OS === 'android' ? 'android' : _reactNative.Platform.OS
|
|
161
151
|
});
|
|
162
152
|
return response.data;
|
|
163
153
|
} catch (error) {
|
|
164
|
-
console.error('Failed to get
|
|
165
|
-
throw new Error(error.response?.data?.message || 'Failed to get
|
|
154
|
+
console.error('Failed to get offer:', error.message);
|
|
155
|
+
throw new Error(error.response?.data?.message || 'Failed to get offer');
|
|
166
156
|
}
|
|
167
157
|
};
|
|
168
|
-
exports.
|
|
158
|
+
exports.getOffer = getOffer;
|
|
169
159
|
//# sourceMappingURL=ApiRequest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_axios","_interopRequireDefault","require","_lib","_reactNative","e","__esModule","default","axiosInstance","axios","create","baseURL","headers","getSDKVersion","Platform","OS","
|
|
1
|
+
{"version":3,"names":["_axios","_interopRequireDefault","require","_lib","_reactNative","_constants","e","__esModule","default","axiosInstance","axios","create","baseURL","headers","SDK_HEADERS","SDK_PLATFORM","SDK_VERSION","getSDKVersion","DEVICE_OS","Platform","OS","setAppVersionHeader","version","defaults","common","APP_VERSION","exports","setBundleIdHeader","bundleId","BUNDLE_ID","setUserIdHeader","userId","initialize","sdkKey","response","post","platform","organizationId","data","organization_id","error","console","message","Error","createEvent","eventName","params","createdAt","Date","createViewProductItemEvent","productId","price","regularPrice","currencyCode","promotionId","month","getAppUserDiscount","get","appUserId","discount","getOffer"],"sourceRoot":"../../src","sources":["ApiRequest.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
var _mitt = _interopRequireDefault(require("mitt"));
|
|
9
|
-
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
10
9
|
var _ApiRequest = _interopRequireWildcard(require("./ApiRequest.js"));
|
|
11
10
|
var ApiRequest = _ApiRequest;
|
|
12
11
|
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); }
|
|
@@ -24,7 +23,6 @@ const MonetaiReactNative = _reactNative.NativeModules.MonetaiReactNative ? _reac
|
|
|
24
23
|
// Emitter로 사용할 이벤트 타입 정의
|
|
25
24
|
|
|
26
25
|
class MonetaiSDK {
|
|
27
|
-
exposureTimeSec = null;
|
|
28
26
|
initialized = false;
|
|
29
27
|
|
|
30
28
|
// SDK 초기화 전에 로깅된 이벤트들을 저장할 큐
|
|
@@ -37,9 +35,6 @@ class MonetaiSDK {
|
|
|
37
35
|
getEmitter() {
|
|
38
36
|
return this.emitter;
|
|
39
37
|
}
|
|
40
|
-
getExposureTimeSec() {
|
|
41
|
-
return this.exposureTimeSec;
|
|
42
|
-
}
|
|
43
38
|
|
|
44
39
|
/**
|
|
45
40
|
* 모넷AI SDK를 초기화합니다
|
|
@@ -67,6 +62,26 @@ class MonetaiSDK {
|
|
|
67
62
|
// userId 설정
|
|
68
63
|
await MonetaiReactNative.setUserId(userId);
|
|
69
64
|
|
|
65
|
+
// 앱 버전을 가져와서 API 헤더에 설정
|
|
66
|
+
try {
|
|
67
|
+
const appVersion = await MonetaiReactNative.getAppVersion();
|
|
68
|
+
if (appVersion) {
|
|
69
|
+
(0, _ApiRequest.setAppVersionHeader)(appVersion);
|
|
70
|
+
}
|
|
71
|
+
} catch (error) {
|
|
72
|
+
console.warn('[MonetaiSDK] Failed to get app version:', error);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Bundle ID / Package Name을 가져와서 API 헤더에 설정
|
|
76
|
+
try {
|
|
77
|
+
const bundleId = await MonetaiReactNative.getBundleId();
|
|
78
|
+
if (bundleId) {
|
|
79
|
+
(0, _ApiRequest.setBundleIdHeader)(bundleId);
|
|
80
|
+
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
console.warn('[MonetaiSDK] Failed to get bundle id:', error);
|
|
83
|
+
}
|
|
84
|
+
|
|
70
85
|
// 트랜잭션 관찰 시작
|
|
71
86
|
await MonetaiReactNative.startObserving(useStoreKit2);
|
|
72
87
|
|
|
@@ -78,7 +93,6 @@ class MonetaiSDK {
|
|
|
78
93
|
sdkKey,
|
|
79
94
|
userId
|
|
80
95
|
});
|
|
81
|
-
this.exposureTimeSec = result.campaign?.exposure_time_sec ?? null;
|
|
82
96
|
this.initialized = true;
|
|
83
97
|
|
|
84
98
|
// SDK 초기화 후, 초기화 전에 저장된 pendingEvents를 전송
|
|
@@ -104,8 +118,7 @@ class MonetaiSDK {
|
|
|
104
118
|
organizationId: result.organizationId,
|
|
105
119
|
platform: 'react_native',
|
|
106
120
|
version: result.version,
|
|
107
|
-
userId: userId
|
|
108
|
-
group: result.group
|
|
121
|
+
userId: userId
|
|
109
122
|
};
|
|
110
123
|
}
|
|
111
124
|
async logEvent({
|
|
@@ -165,51 +178,21 @@ class MonetaiSDK {
|
|
|
165
178
|
});
|
|
166
179
|
}
|
|
167
180
|
|
|
168
|
-
// Non-Purchaser 예측
|
|
169
|
-
async predict() {
|
|
170
|
-
const sdkKey = await this.getSdkKey();
|
|
171
|
-
const userId = await this.getUserId();
|
|
172
|
-
if (!sdkKey || !userId || !this.exposureTimeSec) {
|
|
173
|
-
throw new Error('MonetaiSDK is not initialized. Call initialize() first.');
|
|
174
|
-
}
|
|
175
|
-
const result = await ApiRequest.predict({
|
|
176
|
-
userId,
|
|
177
|
-
sdkKey
|
|
178
|
-
});
|
|
179
|
-
if (result.prediction === 'non-purchaser') {
|
|
180
|
-
const discountInfo = await ApiRequest.getAppUserDiscount({
|
|
181
|
-
sdkKey,
|
|
182
|
-
userId
|
|
183
|
-
});
|
|
184
|
-
const hasActiveDiscount = discountInfo != null && discountInfo.app_user_id === userId && (0, _dayjs.default)(discountInfo.ended_at).isAfter((0, _dayjs.default)());
|
|
185
|
-
if (!hasActiveDiscount) {
|
|
186
|
-
const startedAt = (0, _dayjs.default)();
|
|
187
|
-
const endedAt = startedAt.clone().add(this.exposureTimeSec, 'second');
|
|
188
|
-
await (0, _ApiRequest.createAppUserDiscount)({
|
|
189
|
-
startedAt: startedAt.toDate(),
|
|
190
|
-
endedAt: endedAt.toDate(),
|
|
191
|
-
userId,
|
|
192
|
-
sdkKey
|
|
193
|
-
});
|
|
194
|
-
this.emitter.emit('LOAD_DISCOUNT_INFO');
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
return result;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
181
|
/**
|
|
201
|
-
*
|
|
202
|
-
* @
|
|
182
|
+
* 오퍼 조회
|
|
183
|
+
* @param promotionId 프로모션 ID
|
|
184
|
+
* @returns 에이전트 매칭 결과 및 상품 목록, 없으면 null
|
|
203
185
|
*/
|
|
204
|
-
async
|
|
186
|
+
async getOffer(promotionId) {
|
|
205
187
|
const sdkKey = await this.getSdkKey();
|
|
206
188
|
const userId = await this.getUserId();
|
|
207
189
|
if (!sdkKey || !userId) {
|
|
208
190
|
throw new Error('MonetaiSDK is not initialized. Call initialize() first.');
|
|
209
191
|
}
|
|
210
|
-
return await ApiRequest.
|
|
192
|
+
return await ApiRequest.getOffer({
|
|
211
193
|
sdkKey,
|
|
212
|
-
userId
|
|
194
|
+
userId,
|
|
195
|
+
promotionId
|
|
213
196
|
});
|
|
214
197
|
}
|
|
215
198
|
getInitialized() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_mitt","_interopRequireDefault","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_mitt","_interopRequireDefault","_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","initialized","pendingEvents","emitter","mitt","getEmitter","initialize","sdkKey","userId","useStoreKit2","setSdkKey","setUserId","appVersion","getAppVersion","setAppVersionHeader","error","console","warn","bundleId","getBundleId","setBundleIdHeader","startObserving","sendReceipt","catch","err","result","pendingPromises","map","eventName","params","createdAt","createEvent","log","Promise","all","then","emit","organizationId","platform","version","logEvent","getSdkKey","getUserId","push","Date","logViewProductItem","createViewProductItemEvent","getOffer","promotionId","getInitialized","reset","monetaiSDK","_default","exports"],"sourceRoot":"../../src","sources":["MonetaiSDK.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,WAAA,GAAAC,uBAAA,CAAAJ,OAAA;AAA2C,IAAAK,UAAA,GAAAF,WAAA;AAAA,SAAAC,wBAAAE,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAJ,uBAAA,YAAAA,CAAAE,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAL,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAK,UAAA,GAAAL,CAAA,KAAAU,OAAA,EAAAV,CAAA;AAQ3C,MAAMmB,aAAa,GACjB,0FAA0F,GAC1FC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEZ,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAcjC,MAAMa,kBAA4C,GAChDC,0BAAa,CAACD,kBAAkB,GAC5BC,0BAAa,CAACD,kBAAkB,GAChC,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEb,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIc,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;;AAEP;;AAKA,MAAMQ,UAAU,CAAC;EACPC,WAAW,GAAG,KAAK;;EAE3B;EACQC,aAAa,GAIhB,EAAE;;EAEP;EACQC,OAAO,GAAG,IAAAC,aAAI,EAAgB,CAAC;;EAEvC;EACOC,UAAUA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACF,OAAO;EACrB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAaG,UAAUA,CAAC;IACtBC,MAAM;IACNC,MAAM;IACNC,YAAY,GAAG;EAKjB,CAAC,EAKE;IACD,IAAI,CAACD,MAAM,EAAE;MACX,MAAM,IAAIT,KAAK,CAAC,oBAAoB,CAAC;IACvC;IACA,IAAI,CAACQ,MAAM,EAAE;MACX,MAAM,IAAIR,KAAK,CAAC,oBAAoB,CAAC;IACvC;;IAEA;IACA,MAAMH,kBAAkB,CAACc,SAAS,CAACH,MAAM,CAAC;;IAE1C;IACA,MAAMX,kBAAkB,CAACe,SAAS,CAACH,MAAM,CAAC;;IAE1C;IACA,IAAI;MACF,MAAMI,UAAU,GAAG,MAAMhB,kBAAkB,CAACiB,aAAa,CAAC,CAAC;MAC3D,IAAID,UAAU,EAAE;QACd,IAAAE,+BAAmB,EAACF,UAAU,CAAC;MACjC;IACF,CAAC,CAAC,OAAOG,KAAK,EAAE;MACdC,OAAO,CAACC,IAAI,CAAC,yCAAyC,EAAEF,KAAK,CAAC;IAChE;;IAEA;IACA,IAAI;MACF,MAAMG,QAAQ,GAAG,MAAMtB,kBAAkB,CAACuB,WAAW,CAAC,CAAC;MACvD,IAAID,QAAQ,EAAE;QACZ,IAAAE,6BAAiB,EAACF,QAAQ,CAAC;MAC7B;IACF,CAAC,CAAC,OAAOH,KAAK,EAAE;MACdC,OAAO,CAACC,IAAI,CAAC,uCAAuC,EAAEF,KAAK,CAAC;IAC9D;;IAEA;IACA,MAAMnB,kBAAkB,CAACyB,cAAc,CAACZ,YAAY,CAAC;;IAErD;IACAb,kBAAkB,CAAC0B,WAAW,CAAC,CAAC,CAACC,KAAK,CAAEC,GAAQ,IAAK;MACnDR,OAAO,CAACD,KAAK,CAAC,wBAAwB,EAAES,GAAG,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAMC,MAAM,GAAG,MAAMrD,UAAU,CAACkC,UAAU,CAAC;MAAEC,MAAM;MAAEC;IAAO,CAAC,CAAC;IAC9D,IAAI,CAACP,WAAW,GAAG,IAAI;;IAEvB;IACA,MAAMyB,eAAe,GAAG,IAAI,CAACxB,aAAa,CAACyB,GAAG,CAC5C,OAAO;MAAEC,SAAS;MAAEC,MAAM;MAAEC;IAAU,CAAC,KAAK;MAC1C,MAAM1D,UAAU,CAAC2D,WAAW,CAAC;QAC3BxB,MAAM;QACNC,MAAM;QACNoB,SAAS;QACTC,MAAM;QACNC;MACF,CAAC,CAAC;MACFd,OAAO,CAACgB,GAAG,CAAC,mCAAmC,EAAEJ,SAAS,EAAEC,MAAM,CAAC;IACrE,CACF,CAAC;IAEDI,OAAO,CAACC,GAAG,CAACR,eAAe,CAAC,CAACS,IAAI,CAAC,MAAM;MACtC,IAAI,CAACjC,aAAa,GAAG,EAAE;IACzB,CAAC,CAAC;IAEF,IAAI,CAACC,OAAO,CAACiC,IAAI,CAAC,oBAAoB,CAAC;IAEvC,OAAO;MACLC,cAAc,EAAEZ,MAAM,CAACY,cAAc;MACrCC,QAAQ,EAAE,cAAc;MACxBC,OAAO,EAAEd,MAAM,CAACc,OAAO;MACvB/B,MAAM,EAAEA;IACV,CAAC;EACH;EAEA,MAAagC,QAAQA,CAAC;IAAEZ,SAAS;IAAEC;EAAwB,CAAC,EAAE;IAC5D,MAAMtB,MAAM,GAAG,MAAM,IAAI,CAACkC,SAAS,CAAC,CAAC;IACrC,MAAMjC,MAAM,GAAG,MAAM,IAAI,CAACkC,SAAS,CAAC,CAAC;;IAErC;IACA,IAAI,CAACnC,MAAM,IAAI,CAACC,MAAM,EAAE;MACtBQ,OAAO,CAACgB,GAAG,CAAC,4BAA4B,EAAEJ,SAAS,EAAEC,MAAM,CAAC;MAC5D,IAAI,CAAC3B,aAAa,CAACyC,IAAI,CAAC;QAAEf,SAAS;QAAEC,MAAM;QAAEC,SAAS,EAAE,IAAIc,IAAI,CAAC;MAAE,CAAC,CAAC;MACrE;IACF;IACA,MAAMxE,UAAU,CAAC2D,WAAW,CAAC;MAC3BxB,MAAM;MACNC,MAAM;MACNoB,SAAS;MACTC;IACF,CAAC,CAAC;IACFb,OAAO,CAACgB,GAAG,CAAC,2BAA2B,EAAEJ,SAAS,EAAEC,MAAM,CAAC;EAC7D;;EAEA;AACF;AACA;AACA;EACE,MAAagB,kBAAkBA,CAAChB,MAA6B,EAAE;IAC7D,MAAMtB,MAAM,GAAG,MAAM,IAAI,CAACkC,SAAS,CAAC,CAAC;IACrC,MAAMjC,MAAM,GAAG,MAAM,IAAI,CAACkC,SAAS,CAAC,CAAC;IAErC,IAAI,CAACnC,MAAM,IAAI,CAACC,MAAM,EAAE;MACtB;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACAQ,OAAO,CAACC,IAAI,CACV,oFACF,CAAC;MACD;IACF;IAEA,MAAM7C,UAAU,CAAC0E,0BAA0B,CAAC;MAC1CvC,MAAM;MACNC,MAAM;MACNqB,MAAM;MACNC,SAAS,EAAE,IAAIc,IAAI,CAAC;IACtB,CAAC,CAAC;EACJ;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAaG,QAAQA,CAACC,WAAmB,EAAyB;IAChE,MAAMzC,MAAM,GAAG,MAAM,IAAI,CAACkC,SAAS,CAAC,CAAC;IACrC,MAAMjC,MAAM,GAAG,MAAM,IAAI,CAACkC,SAAS,CAAC,CAAC;IAErC,IAAI,CAACnC,MAAM,IAAI,CAACC,MAAM,EAAE;MACtB,MAAM,IAAIT,KAAK,CACb,yDACF,CAAC;IACH;IAEA,OAAO,MAAM3B,UAAU,CAAC2E,QAAQ,CAAC;MAAExC,MAAM;MAAEC,MAAM;MAAEwC;IAAY,CAAC,CAAC;EACnE;EAEOC,cAAcA,CAAA,EAAG;IACtB,OAAO,IAAI,CAAChD,WAAW;EACzB;EAEA,MAAayC,SAASA,CAAA,EAA2B;IAC/C,IAAI;MACF,MAAMlC,MAAM,GAAG,MAAMZ,kBAAkB,CAAC8C,SAAS,CAAC,CAAC;MACnD,OAAOlC,MAAM;IACf,CAAC,CAAC,OAAOO,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,8BAA8B,EAAEA,KAAK,CAAC;MACpD,OAAO,IAAI;IACb;EACF;EAEA,MAAa0B,SAASA,CAAA,EAA2B;IAC/C,IAAI;MACF,MAAMlC,MAAM,GAAG,MAAMX,kBAAkB,CAAC6C,SAAS,CAAC,CAAC;MACnD,OAAOlC,MAAM;IACf,CAAC,CAAC,OAAOQ,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,8BAA8B,EAAEA,KAAK,CAAC;MACpD,OAAO,IAAI;IACb;EACF;EAEA,MAAamC,KAAKA,CAAA,EAAG;IACnB,MAAMtD,kBAAkB,CAACsD,KAAK,CAAC,CAAC;IAChC,IAAI,CAACjD,WAAW,GAAG,KAAK;EAC1B;AACF;;AAEA;AACA,MAAMkD,UAAU,GAAG,IAAInD,UAAU,CAAC,CAAC;AAAC,IAAAoD,QAAA,GAAAC,OAAA,CAAAtE,OAAA,GACrBoE,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SDK_HEADERS = void 0;
|
|
7
|
+
const SDK_HEADERS = exports.SDK_HEADERS = {
|
|
8
|
+
BUNDLE_ID: 'X-App-Bundle-Id',
|
|
9
|
+
DEVICE_OS: 'X-Device-OS',
|
|
10
|
+
SDK_PLATFORM: 'X-SDK-Platform',
|
|
11
|
+
SDK_VERSION: 'X-SDK-Version',
|
|
12
|
+
APP_VERSION: 'X-App-Version'
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SDK_HEADERS","exports","BUNDLE_ID","DEVICE_OS","SDK_PLATFORM","SDK_VERSION","APP_VERSION"],"sourceRoot":"../../src","sources":["constants.ts"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG;EACzBE,SAAS,EAAE,iBAAiB;EAC5BC,SAAS,EAAE,aAAa;EACxBC,YAAY,EAAE,gBAAgB;EAC9BC,WAAW,EAAE,eAAe;EAC5BC,WAAW,EAAE;AACf,CAAU","ignoreList":[]}
|
package/lib/commonjs/lib.js
CHANGED
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getSDKVersion = getSDKVersion;
|
|
7
7
|
function getSDKVersion() {
|
|
8
8
|
// __SDK_VERSION__이 정의되어 있으면 해당 값을 사용
|
|
9
|
-
if (typeof "1.0.0-beta.
|
|
10
|
-
return "1.0.0-beta.
|
|
9
|
+
if (typeof "1.0.0-beta.2" === 'string') {
|
|
10
|
+
return "1.0.0-beta.2";
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
// 그렇지 않으면, package.json을 lazy하게 불러와 version을 반환
|
package/lib/module/ApiRequest.js
CHANGED
|
@@ -3,36 +3,51 @@
|
|
|
3
3
|
import axios from 'axios';
|
|
4
4
|
import { getSDKVersion } from "./lib.js";
|
|
5
5
|
import { Platform } from 'react-native';
|
|
6
|
+
import { SDK_HEADERS } from "./constants.js";
|
|
6
7
|
const axiosInstance = axios.create({
|
|
7
8
|
baseURL: 'https://monetai-api-414410537412.us-central1.run.app/sdk',
|
|
8
9
|
// 필요에 따라 베이스 URL 설정
|
|
9
10
|
headers: {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
[SDK_HEADERS.SDK_PLATFORM]: 'react_native',
|
|
12
|
+
[SDK_HEADERS.SDK_VERSION]: getSDKVersion(),
|
|
13
|
+
[SDK_HEADERS.DEVICE_OS]: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : Platform.OS
|
|
13
14
|
}
|
|
14
15
|
});
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* X-App-Version 헤더를 설정합니다.
|
|
19
|
+
* SDK 초기화 시점에 호출되어야 합니다.
|
|
20
|
+
*/
|
|
21
|
+
export const setAppVersionHeader = version => {
|
|
22
|
+
axiosInstance.defaults.headers.common[SDK_HEADERS.APP_VERSION] = version;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* X-App-Bundle-Id 헤더를 설정합니다.
|
|
27
|
+
* SDK 초기화 시점에 호출되어야 합니다.
|
|
28
|
+
*/
|
|
29
|
+
export const setBundleIdHeader = bundleId => {
|
|
30
|
+
axiosInstance.defaults.headers.common[SDK_HEADERS.BUNDLE_ID] = bundleId;
|
|
31
|
+
};
|
|
32
|
+
export const setUserIdHeader = userId => {
|
|
33
|
+
axiosInstance.defaults.headers.common['X-User-Id'] = userId;
|
|
34
|
+
};
|
|
15
35
|
export const initialize = async ({
|
|
16
36
|
sdkKey,
|
|
17
37
|
userId
|
|
18
38
|
}) => {
|
|
19
39
|
try {
|
|
40
|
+
// X-User-Id 헤더 설정 (user property 수집용)
|
|
41
|
+
setUserIdHeader(userId);
|
|
20
42
|
const response = await axiosInstance.post('/sdk-integrations', {
|
|
21
43
|
sdkKey,
|
|
22
44
|
platform: 'react_native',
|
|
23
45
|
version: getSDKVersion()
|
|
24
46
|
});
|
|
25
|
-
const abTestGroupResponse = await axiosInstance.post('/ab-test', {
|
|
26
|
-
sdkKey,
|
|
27
|
-
userId,
|
|
28
|
-
platform: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : Platform.OS
|
|
29
|
-
});
|
|
30
47
|
return {
|
|
31
48
|
organizationId: response.data.organization_id,
|
|
32
49
|
platform: response.data.platform,
|
|
33
|
-
version: response.data.version
|
|
34
|
-
group: abTestGroupResponse.data.group,
|
|
35
|
-
campaign: abTestGroupResponse.data.campaign
|
|
50
|
+
version: response.data.version
|
|
36
51
|
};
|
|
37
52
|
} catch (error) {
|
|
38
53
|
console.error('Failed to initialize integration:', error.message);
|
|
@@ -74,6 +89,7 @@ export const createViewProductItemEvent = async ({
|
|
|
74
89
|
price: params.price,
|
|
75
90
|
regularPrice: params.regularPrice,
|
|
76
91
|
currencyCode: params.currencyCode,
|
|
92
|
+
promotionId: params.promotionId,
|
|
77
93
|
month: params.month,
|
|
78
94
|
createdAt: createdAt ?? new Date(),
|
|
79
95
|
platform: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : Platform.OS
|
|
@@ -82,35 +98,6 @@ export const createViewProductItemEvent = async ({
|
|
|
82
98
|
console.error('Failed to log view product item event:', error.message);
|
|
83
99
|
}
|
|
84
100
|
};
|
|
85
|
-
export const predict = async ({
|
|
86
|
-
userId,
|
|
87
|
-
sdkKey
|
|
88
|
-
}) => {
|
|
89
|
-
try {
|
|
90
|
-
const response = await axiosInstance.post('/predict', {
|
|
91
|
-
sdkKey,
|
|
92
|
-
userId
|
|
93
|
-
});
|
|
94
|
-
return response.data;
|
|
95
|
-
} catch (error) {
|
|
96
|
-
console.error('Failed to get A/B test group:', error.message);
|
|
97
|
-
throw new Error(error.response?.data?.message || 'Failed to get A/B test group');
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
export const createAppUserDiscount = async discountInfo => {
|
|
101
|
-
try {
|
|
102
|
-
const response = await axiosInstance.post('/app-user-discounts', {
|
|
103
|
-
sdkKey: discountInfo.sdkKey,
|
|
104
|
-
appUserId: discountInfo.userId,
|
|
105
|
-
startedAt: discountInfo.startedAt,
|
|
106
|
-
endedAt: discountInfo.endedAt
|
|
107
|
-
});
|
|
108
|
-
return response.data.discount;
|
|
109
|
-
} catch (error) {
|
|
110
|
-
console.error('Failed to set discount info:', error.message);
|
|
111
|
-
throw new Error(error.response?.data?.message || 'Failed to set discount info');
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
101
|
|
|
115
102
|
/**
|
|
116
103
|
* sdkKey와 app_user_id에 해당하는 가장 최근 할인 정보를 조회합니다.
|
|
@@ -135,23 +122,25 @@ export const getAppUserDiscount = async ({
|
|
|
135
122
|
};
|
|
136
123
|
|
|
137
124
|
/**
|
|
138
|
-
*
|
|
139
|
-
* API POST /
|
|
125
|
+
* 오퍼 조회
|
|
126
|
+
* API POST /offers/get-offer 엔드포인트를 호출합니다.
|
|
140
127
|
*/
|
|
141
|
-
export const
|
|
128
|
+
export const getOffer = async ({
|
|
142
129
|
sdkKey,
|
|
143
|
-
userId
|
|
130
|
+
userId,
|
|
131
|
+
promotionId
|
|
144
132
|
}) => {
|
|
145
133
|
try {
|
|
146
|
-
const response = await axiosInstance.post('/
|
|
134
|
+
const response = await axiosInstance.post('/offers/get-offer', {
|
|
147
135
|
sdkKey,
|
|
148
136
|
userId,
|
|
137
|
+
promotionId,
|
|
149
138
|
platform: Platform.OS === 'ios' ? 'ios' : Platform.OS === 'android' ? 'android' : Platform.OS
|
|
150
139
|
});
|
|
151
140
|
return response.data;
|
|
152
141
|
} catch (error) {
|
|
153
|
-
console.error('Failed to get
|
|
154
|
-
throw new Error(error.response?.data?.message || 'Failed to get
|
|
142
|
+
console.error('Failed to get offer:', error.message);
|
|
143
|
+
throw new Error(error.response?.data?.message || 'Failed to get offer');
|
|
155
144
|
}
|
|
156
145
|
};
|
|
157
146
|
//# sourceMappingURL=ApiRequest.js.map
|