@react-native-kakao/user 3.0.0 → 3.1.0-next.1
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/CHANGELOG.md +50 -0
- package/android/src/main/java/net/mjstudio/rnkakao/user/RNCKakaoUserModule.kt +415 -183
- package/ios/RNCKakaoUser.mm +83 -11
- package/ios/RNCKakaoUserManager.swift +286 -55
- package/lib/commonjs/index.js +96 -9
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +251 -51
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/spec/NativeKakaoUser.ts +33 -3
- package/lib/commonjs/validateShippingAddressOptions.js +20 -0
- package/lib/commonjs/validateShippingAddressOptions.js.map +1 -0
- package/lib/module/index.js +88 -9
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +243 -49
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/spec/NativeKakaoUser.ts +33 -3
- package/lib/module/validateShippingAddressOptions.js +16 -0
- package/lib/module/validateShippingAddressOptions.js.map +1 -0
- package/lib/typescript/src/index.d.ts +77 -4
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/spec/NativeKakaoUser.d.ts +14 -5
- package/lib/typescript/src/spec/NativeKakaoUser.d.ts.map +1 -1
- package/lib/typescript/src/validateShippingAddressOptions.d.ts +6 -0
- package/lib/typescript/src/validateShippingAddressOptions.d.ts.map +1 -0
- package/package.json +5 -5
- package/src/index.ts +195 -8
- package/src/index.web.ts +292 -70
- package/src/spec/NativeKakaoUser.ts +33 -3
- package/src/validateShippingAddressOptions.ts +30 -0
package/ios/RNCKakaoUser.mm
CHANGED
|
@@ -17,19 +17,65 @@ RCT_EXPORT_METHOD(isKakaoTalkLoginAvailable : (RCTPromiseResolveBlock)
|
|
|
17
17
|
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
18
18
|
[[self manager] isKakaoTalkLoginAvailable:resolve reject:reject];
|
|
19
19
|
}
|
|
20
|
-
RCT_EXPORT_METHOD(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
RCT_EXPORT_METHOD(
|
|
21
|
+
login : (NSArray*)serviceTerms prompts : (NSArray*)prompts useKakaoAccountLogin : (BOOL)
|
|
22
|
+
useKakaoAccountLogin scopes : (NSArray*)scopes nonce : (NSString*)
|
|
23
|
+
nonce loginHint : (NSString*)loginHint channelPublicIds : (NSArray*)
|
|
24
|
+
channelPublicIds androidRequestCode : (NSNumber*)androidRequestCode resolve : (
|
|
25
|
+
RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
24
26
|
[[self manager] login:serviceTerms
|
|
25
27
|
prompts:prompts
|
|
26
28
|
useKakaoAccountLogin:useKakaoAccountLogin
|
|
27
29
|
scopes:scopes
|
|
28
30
|
nonce:nonce
|
|
31
|
+
loginHint:loginHint
|
|
32
|
+
channelPublicIds:channelPublicIds
|
|
29
33
|
resolve:resolve
|
|
30
34
|
reject:reject];
|
|
31
35
|
}
|
|
32
36
|
|
|
37
|
+
RCT_EXPORT_METHOD(signup : (NSDictionary*)properties resolve : (RCTPromiseResolveBlock)
|
|
38
|
+
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
39
|
+
[[self manager] signup:properties resolve:resolve reject:reject];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
RCT_EXPORT_METHOD(loginWithKakao : (NSString*)uiMode orientation : (NSString*)
|
|
43
|
+
orientation launchMethod : (NSString*)launchMethod prompts : (NSArray*)
|
|
44
|
+
prompts loginHint : (NSString*)loginHint nonce : (NSString*)
|
|
45
|
+
nonce channelPublicIds : (NSArray*)channelPublicIds serviceTerms : (
|
|
46
|
+
NSArray*)serviceTerms resolve : (RCTPromiseResolveBlock)
|
|
47
|
+
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
48
|
+
[[self manager] loginWithKakao:uiMode
|
|
49
|
+
orientation:orientation
|
|
50
|
+
launchMethod:launchMethod
|
|
51
|
+
prompts:prompts
|
|
52
|
+
loginHint:loginHint
|
|
53
|
+
nonce:nonce
|
|
54
|
+
channelPublicIds:channelPublicIds
|
|
55
|
+
serviceTerms:serviceTerms
|
|
56
|
+
resolve:resolve
|
|
57
|
+
reject:reject];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
RCT_EXPORT_METHOD(issueAccessTokenWithCode : (NSString*)code codeVerifier : (
|
|
61
|
+
NSString*)codeVerifier redirectUri : (NSString*)redirectUri resolve : (RCTPromiseResolveBlock)
|
|
62
|
+
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
63
|
+
[[self manager] issueAccessTokenWithCode:code
|
|
64
|
+
codeVerifier:codeVerifier
|
|
65
|
+
redirectUri:redirectUri
|
|
66
|
+
resolve:resolve
|
|
67
|
+
reject:reject];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
RCT_EXPORT_METHOD(refreshToken : (NSDictionary*)token iosLoggingEnabled : (NSNumber*)
|
|
71
|
+
iosLoggingEnabled resolve : (RCTPromiseResolveBlock)
|
|
72
|
+
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
73
|
+
[[self manager] refreshToken:token
|
|
74
|
+
loggingEnabled:iosLoggingEnabled
|
|
75
|
+
resolve:resolve
|
|
76
|
+
reject:reject];
|
|
77
|
+
}
|
|
78
|
+
|
|
33
79
|
RCT_EXPORT_METHOD(logout : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
34
80
|
[[self manager] logout:resolve reject:reject];
|
|
35
81
|
}
|
|
@@ -43,6 +89,11 @@ RCT_EXPORT_METHOD(isLogined : (RCTPromiseResolveBlock)resolve reject : (RCTPromi
|
|
|
43
89
|
[[self manager] isLogined:resolve reject:reject];
|
|
44
90
|
}
|
|
45
91
|
|
|
92
|
+
RCT_EXPORT_METHOD(hasToken : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)
|
|
93
|
+
reject) {
|
|
94
|
+
[[self manager] hasToken:resolve reject:reject];
|
|
95
|
+
}
|
|
96
|
+
|
|
46
97
|
RCT_EXPORT_METHOD(scopes : (NSArray*)scopes resolve : (RCTPromiseResolveBlock)
|
|
47
98
|
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
48
99
|
[[self manager] scopes:scopes resolve:resolve reject:reject];
|
|
@@ -53,18 +104,39 @@ RCT_EXPORT_METHOD(revokeScopes : (NSArray*)scopes resolve : (RCTPromiseResolveBl
|
|
|
53
104
|
[[self manager] revokeScopes:scopes resolve:resolve reject:reject];
|
|
54
105
|
}
|
|
55
106
|
|
|
56
|
-
RCT_EXPORT_METHOD(serviceTerms : (
|
|
57
|
-
|
|
58
|
-
[[self manager] serviceTerms:resolve reject:reject];
|
|
107
|
+
RCT_EXPORT_METHOD(serviceTerms : (NSString*)result tags : (NSArray*)tags resolve : (
|
|
108
|
+
RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
109
|
+
[[self manager] serviceTerms:result tags:tags resolve:resolve reject:reject];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
RCT_EXPORT_METHOD(shippingAddresses : (NSNumber*)addressId fromUpdatedAt : (
|
|
113
|
+
NSNumber*)fromUpdatedAt pageSize : (NSNumber*)pageSize resolve : (RCTPromiseResolveBlock)
|
|
114
|
+
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
115
|
+
[[self manager] shippingAddresses:addressId
|
|
116
|
+
fromUpdatedAt:fromUpdatedAt
|
|
117
|
+
pageSize:pageSize
|
|
118
|
+
resolve:resolve
|
|
119
|
+
reject:reject];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
RCT_EXPORT_METHOD(revokeServiceTerms : (NSArray*)tags resolve : (RCTPromiseResolveBlock)
|
|
123
|
+
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
124
|
+
[[self manager] revokeServiceTerms:tags resolve:resolve reject:reject];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
RCT_EXPORT_METHOD(updateProfile : (NSDictionary*)properties resolve : (RCTPromiseResolveBlock)
|
|
128
|
+
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
129
|
+
[[self manager] updateProfile:properties resolve:resolve reject:reject];
|
|
59
130
|
}
|
|
60
131
|
|
|
61
|
-
RCT_EXPORT_METHOD(
|
|
132
|
+
RCT_EXPORT_METHOD(me : (NSNumber*)secureResource resolve : (RCTPromiseResolveBlock)
|
|
62
133
|
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
63
|
-
[[self manager]
|
|
134
|
+
[[self manager] me:secureResource resolve:resolve reject:reject];
|
|
64
135
|
}
|
|
65
136
|
|
|
66
|
-
RCT_EXPORT_METHOD(
|
|
67
|
-
|
|
137
|
+
RCT_EXPORT_METHOD(selectShippingAddress : (RCTPromiseResolveBlock)
|
|
138
|
+
resolve reject : (RCTPromiseRejectBlock)reject) {
|
|
139
|
+
[[self manager] selectShippingAddress:resolve reject:reject];
|
|
68
140
|
}
|
|
69
141
|
|
|
70
142
|
RCT_EXPORT_METHOD(getAccessToken : (RCTPromiseResolveBlock)resolve reject : (RCTPromiseRejectBlock)
|
|
@@ -33,6 +33,8 @@ import RNCKakaoCore
|
|
|
33
33
|
useKakaoAccountLogin: Bool,
|
|
34
34
|
scopes: [String],
|
|
35
35
|
nonce: String?,
|
|
36
|
+
loginHint: String?,
|
|
37
|
+
channelPublicIds: [String],
|
|
36
38
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
37
39
|
reject: @escaping RCTPromiseRejectBlock
|
|
38
40
|
) {
|
|
@@ -41,47 +43,25 @@ import RNCKakaoCore
|
|
|
41
43
|
RNCKakaoUtil.reject(reject, RNCKakaoError.sdkNotInitialized)
|
|
42
44
|
return
|
|
43
45
|
}
|
|
44
|
-
let callback =
|
|
45
|
-
if let error {
|
|
46
|
-
RNCKakaoUtil.reject(reject, error)
|
|
47
|
-
} else if let token {
|
|
48
|
-
resolve([
|
|
49
|
-
"accessToken": token.accessToken,
|
|
50
|
-
"refreshToken": token.refreshToken,
|
|
51
|
-
"tokenType": token.tokenType,
|
|
52
|
-
"idToken": token.idToken as Any,
|
|
53
|
-
"accessTokenExpiresAt": token.expiredAt.timeIntervalSince1970,
|
|
54
|
-
"refreshTokenExpiresAt": token.refreshTokenExpiredAt.timeIntervalSince1970,
|
|
55
|
-
"accessTokenExpiresIn": token.expiresIn,
|
|
56
|
-
"refreshTokenExpiresIn": token.refreshTokenExpiresIn,
|
|
57
|
-
"scopes": token.scopes ?? []
|
|
58
|
-
])
|
|
59
|
-
} else {
|
|
60
|
-
RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "token"))
|
|
61
|
-
}
|
|
62
|
-
}
|
|
46
|
+
let callback = tokenCallback(resolve, reject: reject)
|
|
63
47
|
let accountLogin = {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
48
|
+
let _prompts = self.loginPrompts(prompts)
|
|
49
|
+
if let loginHint {
|
|
50
|
+
UserApi.shared.loginWithKakaoAccount(
|
|
51
|
+
prompts: self.emptyArrayToNil(_prompts),
|
|
52
|
+
loginHint: loginHint,
|
|
53
|
+
nonce: nonce,
|
|
54
|
+
completion: callback
|
|
55
|
+
)
|
|
56
|
+
} else {
|
|
57
|
+
UserApi.shared.loginWithKakaoAccount(
|
|
58
|
+
prompts: self.emptyArrayToNil(_prompts),
|
|
59
|
+
channelPublicIds: self.emptyArrayToNil(channelPublicIds),
|
|
60
|
+
serviceTerms: self.emptyArrayToNil(serviceTerms),
|
|
61
|
+
nonce: nonce,
|
|
62
|
+
completion: callback
|
|
63
|
+
)
|
|
78
64
|
}
|
|
79
|
-
UserApi.shared.loginWithKakaoAccount(
|
|
80
|
-
prompts: self.emptyArrayToNil(_prompts),
|
|
81
|
-
serviceTerms: self.emptyArrayToNil(serviceTerms),
|
|
82
|
-
nonce: nonce,
|
|
83
|
-
completion: callback
|
|
84
|
-
)
|
|
85
65
|
}
|
|
86
66
|
|
|
87
67
|
if !scopes.isEmpty {
|
|
@@ -103,6 +83,7 @@ import RNCKakaoCore
|
|
|
103
83
|
}
|
|
104
84
|
}
|
|
105
85
|
UserApi.shared.loginWithKakaoTalk(
|
|
86
|
+
channelPublicIds: emptyArrayToNil(channelPublicIds),
|
|
106
87
|
serviceTerms: emptyArrayToNil(serviceTerms),
|
|
107
88
|
nonce: nonce,
|
|
108
89
|
completion: talkCallback
|
|
@@ -113,6 +94,135 @@ import RNCKakaoCore
|
|
|
113
94
|
}
|
|
114
95
|
}
|
|
115
96
|
|
|
97
|
+
@objc public func loginWithKakao(
|
|
98
|
+
_ uiMode: String,
|
|
99
|
+
orientation: String,
|
|
100
|
+
launchMethod: String,
|
|
101
|
+
prompts: [String],
|
|
102
|
+
loginHint: String?,
|
|
103
|
+
nonce: String?,
|
|
104
|
+
channelPublicIds: [String],
|
|
105
|
+
serviceTerms: [String],
|
|
106
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
107
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
108
|
+
) {
|
|
109
|
+
onMain { [self] in
|
|
110
|
+
guard let _ = try? KakaoSDK.shared.appKey() else {
|
|
111
|
+
RNCKakaoUtil.reject(reject, RNCKakaoError.sdkNotInitialized)
|
|
112
|
+
return
|
|
113
|
+
}
|
|
114
|
+
guard nonce == nil else {
|
|
115
|
+
RNCKakaoUtil.reject(
|
|
116
|
+
reject,
|
|
117
|
+
RNCKakaoError
|
|
118
|
+
.unknown(
|
|
119
|
+
"The Kakao iOS login chooser does not forward nonce for account login. Use login instead."
|
|
120
|
+
)
|
|
121
|
+
)
|
|
122
|
+
return
|
|
123
|
+
}
|
|
124
|
+
UserApi.shared.loginWithKakao(
|
|
125
|
+
BridgeConfiguration(
|
|
126
|
+
orientation: LoginOrientation(rawValue: orientation),
|
|
127
|
+
uiMode: LoginUiMode(rawValue: uiMode)
|
|
128
|
+
),
|
|
129
|
+
loginProperties: LoginConfiguration(
|
|
130
|
+
talk: LoginConfiguration
|
|
131
|
+
.Talk(launchMethod: launchMethod == "CustomScheme" ? .CustomScheme : .UniversalLink),
|
|
132
|
+
account: LoginConfiguration.Account(
|
|
133
|
+
prompts: emptyArrayToNil(loginPrompts(prompts)),
|
|
134
|
+
loginHint: loginHint
|
|
135
|
+
),
|
|
136
|
+
channelPublicIds: emptyArrayToNil(channelPublicIds),
|
|
137
|
+
serviceTerms: emptyArrayToNil(serviceTerms),
|
|
138
|
+
nonce: nonce
|
|
139
|
+
),
|
|
140
|
+
completion: tokenCallback(resolve, reject: reject)
|
|
141
|
+
)
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@objc public func issueAccessTokenWithCode(
|
|
146
|
+
_ code: String,
|
|
147
|
+
codeVerifier: String?,
|
|
148
|
+
redirectUri: String?,
|
|
149
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
150
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
151
|
+
) {
|
|
152
|
+
onMain { [self] in
|
|
153
|
+
guard let _ = try? KakaoSDK.shared.appKey() else {
|
|
154
|
+
RNCKakaoUtil.reject(reject, RNCKakaoError.sdkNotInitialized)
|
|
155
|
+
return
|
|
156
|
+
}
|
|
157
|
+
AuthApi.shared.token(
|
|
158
|
+
code: code,
|
|
159
|
+
codeVerifier: codeVerifier,
|
|
160
|
+
redirectUri: redirectUri ?? KakaoSDK.shared.redirectUri(),
|
|
161
|
+
completion: tokenCallback(resolve, reject: reject)
|
|
162
|
+
)
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
@objc public func refreshToken(
|
|
167
|
+
_ token: [String: Any]?,
|
|
168
|
+
loggingEnabled: NSNumber?,
|
|
169
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
170
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
171
|
+
) {
|
|
172
|
+
onMain { [self] in
|
|
173
|
+
guard let _ = try? KakaoSDK.shared.appKey() else {
|
|
174
|
+
RNCKakaoUtil.reject(reject, RNCKakaoError.sdkNotInitialized)
|
|
175
|
+
return
|
|
176
|
+
}
|
|
177
|
+
var oldToken: OAuthToken?
|
|
178
|
+
if let token {
|
|
179
|
+
guard let accessToken = token["accessToken"] as? String,
|
|
180
|
+
let refreshToken = token["refreshToken"] as? String,
|
|
181
|
+
let accessTokenExpiresAt = token["accessTokenExpiresAt"] as? Double,
|
|
182
|
+
let refreshTokenExpiresAt = token["refreshTokenExpiresAt"] as? Double,
|
|
183
|
+
let scopes = token["scopes"] as? [String]
|
|
184
|
+
else {
|
|
185
|
+
RNCKakaoUtil.reject(reject, SdkError(reason: .BadParameter))
|
|
186
|
+
return
|
|
187
|
+
}
|
|
188
|
+
let now = Date().timeIntervalSince1970
|
|
189
|
+
oldToken = OAuthToken(
|
|
190
|
+
accessToken: accessToken,
|
|
191
|
+
expiresIn: accessTokenExpiresAt - now,
|
|
192
|
+
expiredAt: Date(timeIntervalSince1970: accessTokenExpiresAt),
|
|
193
|
+
tokenType: token["tokenType"] as? String ?? "bearer",
|
|
194
|
+
refreshToken: refreshToken,
|
|
195
|
+
refreshTokenExpiresIn: refreshTokenExpiresAt - now,
|
|
196
|
+
refreshTokenExpiredAt: Date(timeIntervalSince1970: refreshTokenExpiresAt),
|
|
197
|
+
scope: scopes.isEmpty ? nil : scopes.joined(separator: " "),
|
|
198
|
+
scopes: scopes,
|
|
199
|
+
idToken: token["idToken"] as? String
|
|
200
|
+
)
|
|
201
|
+
}
|
|
202
|
+
AuthApi.shared.refreshToken(
|
|
203
|
+
token: oldToken,
|
|
204
|
+
loggingEnabled: loggingEnabled?.boolValue ?? true,
|
|
205
|
+
completion: tokenCallback(resolve, reject: reject)
|
|
206
|
+
)
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
@objc public func signup(
|
|
211
|
+
_ properties: [String: String]?,
|
|
212
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
213
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
214
|
+
) {
|
|
215
|
+
onMain {
|
|
216
|
+
UserApi.shared.signup(properties: properties) { _, error in
|
|
217
|
+
if let error {
|
|
218
|
+
RNCKakaoUtil.reject(reject, error)
|
|
219
|
+
} else {
|
|
220
|
+
resolve(nil)
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
116
226
|
@objc public func logout(
|
|
117
227
|
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
118
228
|
reject: @escaping RCTPromiseRejectBlock
|
|
@@ -166,6 +276,15 @@ import RNCKakaoCore
|
|
|
166
276
|
}
|
|
167
277
|
}
|
|
168
278
|
|
|
279
|
+
@objc public func hasToken(
|
|
280
|
+
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
281
|
+
reject _: @escaping RCTPromiseRejectBlock
|
|
282
|
+
) {
|
|
283
|
+
onMain {
|
|
284
|
+
resolve(AuthApi.hasToken())
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
169
288
|
@objc public func scopes(
|
|
170
289
|
_ scopes: [String]? = nil,
|
|
171
290
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
@@ -213,22 +332,27 @@ import RNCKakaoCore
|
|
|
213
332
|
}
|
|
214
333
|
|
|
215
334
|
@objc public func serviceTerms(
|
|
216
|
-
_
|
|
335
|
+
_ result: String?,
|
|
336
|
+
tags: [String]?,
|
|
337
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
217
338
|
reject: @escaping RCTPromiseRejectBlock
|
|
218
339
|
) {
|
|
219
340
|
onMain {
|
|
220
|
-
UserApi.shared.serviceTerms { serviceTerms, error in
|
|
341
|
+
UserApi.shared.serviceTerms(result: result, tags: tags) { serviceTerms, error in
|
|
221
342
|
if let error {
|
|
222
343
|
RNCKakaoUtil.reject(reject, error)
|
|
223
|
-
} else if let serviceTerms
|
|
224
|
-
resolve(serviceTerms.map {
|
|
225
|
-
[
|
|
226
|
-
"tag":
|
|
227
|
-
"
|
|
228
|
-
"
|
|
229
|
-
"
|
|
230
|
-
"revocable": $0.revocable
|
|
344
|
+
} else if let serviceTerms {
|
|
345
|
+
resolve((serviceTerms.serviceTerms ?? []).map { term in
|
|
346
|
+
var response: [String: Any] = [
|
|
347
|
+
"tag": term.tag,
|
|
348
|
+
"agreed": term.agreed,
|
|
349
|
+
"required": term.required,
|
|
350
|
+
"revocable": term.revocable
|
|
231
351
|
]
|
|
352
|
+
if let agreedAt = term.agreedAt {
|
|
353
|
+
response["agreedAt"] = agreedAt.timeIntervalSince1970
|
|
354
|
+
}
|
|
355
|
+
return response
|
|
232
356
|
})
|
|
233
357
|
} else {
|
|
234
358
|
RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "serviceTerms"))
|
|
@@ -238,11 +362,14 @@ import RNCKakaoCore
|
|
|
238
362
|
}
|
|
239
363
|
|
|
240
364
|
@objc public func shippingAddresses(
|
|
241
|
-
_
|
|
365
|
+
_ addressId: NSNumber?,
|
|
366
|
+
fromUpdatedAt: NSNumber?,
|
|
367
|
+
pageSize: NSNumber?,
|
|
368
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
242
369
|
reject: @escaping RCTPromiseRejectBlock
|
|
243
370
|
) {
|
|
244
371
|
onMain {
|
|
245
|
-
|
|
372
|
+
let completion: (UserShippingAddresses?, Error?) -> Void = { s, error in
|
|
246
373
|
if let error {
|
|
247
374
|
RNCKakaoUtil.reject(reject, error)
|
|
248
375
|
} else if let s {
|
|
@@ -270,20 +397,86 @@ import RNCKakaoCore
|
|
|
270
397
|
RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "shippingAddresses"))
|
|
271
398
|
}
|
|
272
399
|
}
|
|
400
|
+
if let addressId {
|
|
401
|
+
UserApi.shared.shippingAddresses(addressId: addressId.int64Value, completion: completion)
|
|
402
|
+
} else {
|
|
403
|
+
UserApi.shared.shippingAddresses(
|
|
404
|
+
fromUpdatedAt: fromUpdatedAt.map { Date(timeIntervalSince1970: $0.doubleValue) },
|
|
405
|
+
pageSize: pageSize?.intValue,
|
|
406
|
+
completion: completion
|
|
407
|
+
)
|
|
408
|
+
}
|
|
273
409
|
}
|
|
274
410
|
}
|
|
275
411
|
|
|
276
|
-
@objc public func
|
|
412
|
+
@objc public func revokeServiceTerms(
|
|
413
|
+
_ tags: [String],
|
|
414
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
415
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
416
|
+
) {
|
|
417
|
+
onMain {
|
|
418
|
+
UserApi.shared.revokeServiceTerms(tags: tags) { response, error in
|
|
419
|
+
if let error {
|
|
420
|
+
RNCKakaoUtil.reject(reject, error)
|
|
421
|
+
} else if let response {
|
|
422
|
+
resolve((response.revokedServiceTerms ?? []).map {
|
|
423
|
+
["tag": $0.tag, "agreed": $0.agreed]
|
|
424
|
+
})
|
|
425
|
+
} else {
|
|
426
|
+
RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "revokeServiceTerms"))
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
@objc public func selectShippingAddress(
|
|
277
433
|
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
278
434
|
reject: @escaping RCTPromiseRejectBlock
|
|
279
435
|
) {
|
|
280
436
|
onMain {
|
|
281
|
-
UserApi.shared.
|
|
437
|
+
UserApi.shared.selectShippingAddress { addressId, error in
|
|
438
|
+
if let error {
|
|
439
|
+
RNCKakaoUtil.reject(reject, error)
|
|
440
|
+
} else if let addressId {
|
|
441
|
+
resolve(addressId)
|
|
442
|
+
} else {
|
|
443
|
+
RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "addressId"))
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
@objc public func updateProfile(
|
|
450
|
+
_ properties: [String: String],
|
|
451
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
452
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
453
|
+
) {
|
|
454
|
+
onMain {
|
|
455
|
+
UserApi.shared.updateProfile(properties: properties) { error in
|
|
456
|
+
if let error {
|
|
457
|
+
RNCKakaoUtil.reject(reject, error)
|
|
458
|
+
} else {
|
|
459
|
+
resolve(nil)
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
@objc public func me(
|
|
466
|
+
_ secureResource: NSNumber?,
|
|
467
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
468
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
469
|
+
) {
|
|
470
|
+
onMain {
|
|
471
|
+
UserApi.shared.me(secureResource: secureResource?.boolValue ?? true) { user, error in
|
|
282
472
|
if let error {
|
|
283
473
|
RNCKakaoUtil.reject(reject, error)
|
|
284
474
|
} else if let user {
|
|
285
475
|
resolve([
|
|
286
476
|
"id": user.id as Any,
|
|
477
|
+
"uuid": user.uuid as Any,
|
|
478
|
+
"groupUserToken": user.groupUserToken as Any,
|
|
479
|
+
"hasSignedUp": user.hasSignedUp as Any,
|
|
287
480
|
"connectedAt": user.connectedAt?.timeIntervalSince1970 as Any,
|
|
288
481
|
"synchedAt": user.synchedAt?.timeIntervalSince1970 as Any,
|
|
289
482
|
"name": user.kakaoAccount?.name as Any,
|
|
@@ -292,10 +485,12 @@ import RNCKakaoCore
|
|
|
292
485
|
"profileImageUrl": user.kakaoAccount?.profile?.profileImageUrl?.absoluteString as Any,
|
|
293
486
|
"thumbnailImageUrl": user.kakaoAccount?.profile?.thumbnailImageUrl?
|
|
294
487
|
.absoluteString as Any,
|
|
488
|
+
"isDefaultImage": user.kakaoAccount?.profile?.isDefaultImage as Any,
|
|
295
489
|
"phoneNumber": user.kakaoAccount?.phoneNumber as Any,
|
|
296
490
|
"ageRange": user.kakaoAccount?.ageRange?.rawValue as Any,
|
|
297
491
|
"birthday": user.kakaoAccount?.birthday as Any,
|
|
298
|
-
"birthdayType": user.kakaoAccount?.birthdayType as Any,
|
|
492
|
+
"birthdayType": user.kakaoAccount?.birthdayType?.rawValue as Any,
|
|
493
|
+
"isLeapMonth": user.kakaoAccount?.isLeapMonth as Any,
|
|
299
494
|
"birthyear": user.kakaoAccount?.birthyear as Any,
|
|
300
495
|
"gender": user.kakaoAccount?.gender?.rawValue as Any,
|
|
301
496
|
"isEmailValid": user.kakaoAccount?.isEmailValid as Any,
|
|
@@ -313,7 +508,12 @@ import RNCKakaoCore
|
|
|
313
508
|
"profileImageNeedsAgreement": user.kakaoAccount?.profileImageNeedsAgreement as Any,
|
|
314
509
|
"profileNicknameNeedsAgreement": user.kakaoAccount?
|
|
315
510
|
.profileNicknameNeedsAgreement as Any,
|
|
316
|
-
"
|
|
511
|
+
"legalName": user.kakaoAccount?.legalName as Any,
|
|
512
|
+
"legalNameNeedsAgreement": user.kakaoAccount?.legalNameNeedsAgreement as Any,
|
|
513
|
+
"legalBirthDate": user.kakaoAccount?.legalBirthDate as Any,
|
|
514
|
+
"legalBirthDateNeedsAgreement": user.kakaoAccount?.legalBirthDateNeedsAgreement as Any,
|
|
515
|
+
"legalGender": user.kakaoAccount?.legalGender?.rawValue as Any,
|
|
516
|
+
"legalGenderNeedsAgreement": user.kakaoAccount?.legalGenderNeedsAgreement as Any
|
|
317
517
|
])
|
|
318
518
|
} else {
|
|
319
519
|
RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "user"))
|
|
@@ -343,6 +543,37 @@ import RNCKakaoCore
|
|
|
343
543
|
}
|
|
344
544
|
}
|
|
345
545
|
|
|
546
|
+
private func loginPrompts(_ prompts: [String]) -> [Prompt] {
|
|
547
|
+
prompts
|
|
548
|
+
.compactMap { Prompt(rawValue: $0 == "SelectAccount" ? "select_account" : $0.lowercased()) }
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
private func tokenCallback(
|
|
552
|
+
_ resolve: @escaping RCTPromiseResolveBlock,
|
|
553
|
+
reject: @escaping RCTPromiseRejectBlock
|
|
554
|
+
) -> (OAuthToken?, Error?) -> Void {
|
|
555
|
+
{ (token: OAuthToken?, error: Error?) in
|
|
556
|
+
if let error {
|
|
557
|
+
RNCKakaoUtil.reject(reject, error)
|
|
558
|
+
} else if let token {
|
|
559
|
+
let now = Date()
|
|
560
|
+
resolve([
|
|
561
|
+
"accessToken": token.accessToken,
|
|
562
|
+
"refreshToken": token.refreshToken,
|
|
563
|
+
"tokenType": token.tokenType,
|
|
564
|
+
"idToken": token.idToken as Any,
|
|
565
|
+
"accessTokenExpiresAt": token.expiredAt.timeIntervalSince1970,
|
|
566
|
+
"refreshTokenExpiresAt": token.refreshTokenExpiredAt.timeIntervalSince1970,
|
|
567
|
+
"accessTokenExpiresIn": Int(token.expiredAt.timeIntervalSince(now)),
|
|
568
|
+
"refreshTokenExpiresIn": Int(token.refreshTokenExpiredAt.timeIntervalSince(now)),
|
|
569
|
+
"scopes": token.scopes ?? []
|
|
570
|
+
])
|
|
571
|
+
} else {
|
|
572
|
+
RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "token"))
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
|
|
346
577
|
private func emptyArrayToNil<T>(_ arr: [T]?) -> [T]? {
|
|
347
578
|
if arr == nil || arr?.isEmpty == true {
|
|
348
579
|
return nil
|