@react-native-kakao/cert 0.0.0-stage → 3.2.0

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.
@@ -0,0 +1,327 @@
1
+ import Foundation
2
+ import KakaoSDKAuth
3
+ import KakaoSDKCert
4
+ import KakaoSDKCommon
5
+ import React
6
+ import RNCKakaoCore
7
+
8
+ private let transactionIdKey = "txId"
9
+
10
+ @objc public class RNCKakaoCertManager: NSObject {
11
+ @objc public static let shared = RNCKakaoCertManager()
12
+ private var activeTalkSignature: UUID?
13
+
14
+ @objc public static func isKakaoTalkSignReturnUrl(_ url: URL) -> Bool {
15
+ CertApi.isKakaoTalkSignReturnUrl(url)
16
+ }
17
+
18
+ @objc public static func handleOpenUrl(_ url: URL) -> Bool {
19
+ CertApi.handleOpenUrl(url: url)
20
+ }
21
+
22
+ @objc public func certLoginWithKakaoTalk(
23
+ _ options: [String: Any],
24
+ resolve: @escaping RCTPromiseResolveBlock,
25
+ reject: @escaping RCTPromiseRejectBlock
26
+ ) {
27
+ login(options, isTalk: true, resolve: resolve, reject: reject)
28
+ }
29
+
30
+ @objc public func certLoginWithKakaoAccount(
31
+ _ options: [String: Any],
32
+ resolve: @escaping RCTPromiseResolveBlock,
33
+ reject: @escaping RCTPromiseRejectBlock
34
+ ) {
35
+ login(options, isTalk: false, resolve: resolve, reject: reject)
36
+ }
37
+
38
+ @objc public func issueCertTokenWithCode(
39
+ _ code: String,
40
+ codeVerifier: String?,
41
+ redirectUri: String?,
42
+ resolve: @escaping RCTPromiseResolveBlock,
43
+ reject: @escaping RCTPromiseRejectBlock
44
+ ) {
45
+ onMain { [self] in
46
+ guard let _ = try? KakaoSDK.shared.appKey() else {
47
+ RNCKakaoUtil.reject(reject, RNCKakaoError.sdkNotInitialized)
48
+ return
49
+ }
50
+ AuthApi.shared.certToken(
51
+ code: code,
52
+ codeVerifier: codeVerifier,
53
+ redirectUri: redirectUri ?? KakaoSDK.shared.redirectUri(),
54
+ completion: tokenCallback(resolve, reject: reject)
55
+ )
56
+ }
57
+ }
58
+
59
+ private func login(
60
+ _ options: [String: Any],
61
+ isTalk: Bool,
62
+ resolve: @escaping RCTPromiseResolveBlock,
63
+ reject: @escaping RCTPromiseRejectBlock
64
+ ) {
65
+ withCertType(options["certType"] as? String ?? "", reject: reject) { certType in
66
+ guard isTalk || certType == .K2100 else {
67
+ RNCKakaoUtil.reject(reject, SdkError(reason: .BadParameter))
68
+ return
69
+ }
70
+ let prompts = (options["prompts"] as? [String])?.compactMap { value -> Prompt? in
71
+ switch value {
72
+ case "Login": .Login
73
+ case "Create": .Create
74
+ case "SelectAccount": .SelectAccount
75
+ default: nil
76
+ }
77
+ }
78
+ let identifyItems = (options["identifyItems"] as? [String])?
79
+ .compactMap(IdentifyItem.init(rawValue:))
80
+ let signData = options["signData"] as? String
81
+ let settleId = options["settleId"] as? String
82
+ let nonce = options["nonce"] as? String
83
+ let callback = self.tokenCallback(resolve, reject: reject)
84
+ if isTalk {
85
+ let ios = options["ios"] as? [String: Any]
86
+ CertApi.shared.certLoginWithKakaoTalk(
87
+ certType: certType,
88
+ txId: options[transactionIdKey] as? String,
89
+ launchMethod: ios?["launchMethod"] as? String == "CustomScheme" ? .CustomScheme :
90
+ .UniversalLink,
91
+ prompts: prompts,
92
+ channelPublicIds: options["channelPublicIds"] as? [String],
93
+ serviceTerms: options["serviceTerms"] as? [String],
94
+ signData: signData,
95
+ nonce: nonce,
96
+ settleId: settleId,
97
+ identifyItems: identifyItems,
98
+ completion: callback
99
+ )
100
+ } else {
101
+ CertApi.shared.certLoginWithKakaoAccount(
102
+ certType: certType,
103
+ prompts: prompts,
104
+ loginHint: options["loginHint"] as? String,
105
+ signData: signData,
106
+ nonce: nonce,
107
+ settleId: settleId,
108
+ identifyItems: identifyItems,
109
+ completion: callback
110
+ )
111
+ }
112
+ }
113
+ }
114
+
115
+ @objc public func publicKey(
116
+ _ certType: String,
117
+ resolve: @escaping RCTPromiseResolveBlock,
118
+ reject: @escaping RCTPromiseRejectBlock
119
+ ) {
120
+ withCertType(certType, reject: reject) { resolve(CertApi.shared.publicKey(certType: $0)) }
121
+ }
122
+
123
+ @objc public func sessionInfo(
124
+ _ certType: String,
125
+ resolve: @escaping RCTPromiseResolveBlock,
126
+ reject: @escaping RCTPromiseRejectBlock
127
+ ) {
128
+ withCertType(certType, reject: reject) { type in
129
+ if let info = CertApi.shared.sessionInfo(certType: type) {
130
+ resolve(self.mapSession(info))
131
+ } else {
132
+ resolve(nil)
133
+ }
134
+ }
135
+ }
136
+
137
+ @objc public func fetchSessionInfo(
138
+ _ certType: String,
139
+ txId: String,
140
+ resolve: @escaping RCTPromiseResolveBlock,
141
+ reject: @escaping RCTPromiseRejectBlock
142
+ ) {
143
+ withCertType(certType, reject: reject) { type in
144
+ CertApi.shared.sessionInfo(
145
+ certType: type,
146
+ txId: txId,
147
+ completion: self.sessionCallback(resolve, reject: reject)
148
+ )
149
+ }
150
+ }
151
+
152
+ @objc public func fetchSessionInfoByAppKey(
153
+ _ certType: String,
154
+ txId: String,
155
+ targetAppKey: String?,
156
+ resolve: @escaping RCTPromiseResolveBlock,
157
+ reject: @escaping RCTPromiseRejectBlock
158
+ ) {
159
+ withCertType(certType, reject: reject) { type in
160
+ CertApi.shared.sessionInfoByAppKey(
161
+ certType: type,
162
+ txId: txId,
163
+ targetAppKey: targetAppKey,
164
+ completion: self.sessionCallback(resolve, reject: reject)
165
+ )
166
+ }
167
+ }
168
+
169
+ @objc public func isValidSession(
170
+ _ certType: String,
171
+ resolve: @escaping RCTPromiseResolveBlock,
172
+ reject: @escaping RCTPromiseRejectBlock
173
+ ) {
174
+ withCertType(certType, reject: reject) { resolve(CertApi.shared.isValidSession(certType: $0)) }
175
+ }
176
+
177
+ @objc public func deleteKeyPair(
178
+ _ certType: String,
179
+ resolve: @escaping RCTPromiseResolveBlock,
180
+ reject: @escaping RCTPromiseRejectBlock
181
+ ) {
182
+ withCertType(certType, reject: reject) { type in
183
+ CertApi.shared.deleteKeyPair(certType: type)
184
+ resolve(nil)
185
+ }
186
+ }
187
+
188
+ @objc public func reducedSign(
189
+ _ certType: String,
190
+ data: String,
191
+ resolve: @escaping RCTPromiseResolveBlock,
192
+ reject: @escaping RCTPromiseRejectBlock
193
+ ) {
194
+ withCertType(certType, reject: reject) { type in
195
+ CertApi.shared.reducedSign(certType: type, data: data) { signature, error in
196
+ if let error {
197
+ RNCKakaoUtil.reject(reject, error)
198
+ } else if let signature {
199
+ resolve(signature)
200
+ } else {
201
+ RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "signature"))
202
+ }
203
+ }
204
+ }
205
+ }
206
+
207
+ @objc public func isKakaoTalkSignAvailable(
208
+ _ resolve: @escaping RCTPromiseResolveBlock,
209
+ reject: @escaping RCTPromiseRejectBlock
210
+ ) {
211
+ onMain { resolve(CertApi.isKakaoTalkSignAvailable()) }
212
+ }
213
+
214
+ @objc public func signWithKakaoTalk(
215
+ _ txId: String,
216
+ targetAppKey: String?,
217
+ resolve: @escaping RCTPromiseResolveBlock,
218
+ reject: @escaping RCTPromiseRejectBlock
219
+ ) {
220
+ onMain {
221
+ guard self.activeTalkSignature == nil else {
222
+ RNCKakaoUtil.reject(
223
+ reject,
224
+ SdkError(
225
+ reason: .BadParameter,
226
+ message: "A KakaoTalk signature request is already in progress."
227
+ )
228
+ )
229
+ return
230
+ }
231
+ let requestId = UUID()
232
+ self.activeTalkSignature = requestId
233
+ CertApi.shared
234
+ .signWithKakaoTalk(
235
+ certType: .K3220,
236
+ txId: txId,
237
+ targetAppKey: targetAppKey
238
+ ) { status, error in
239
+ onMain {
240
+ guard self.activeTalkSignature == requestId else { return }
241
+ self.activeTalkSignature = nil
242
+ CertApi.shared.certWithTalkCompletionHandler = nil
243
+ if let error {
244
+ RNCKakaoUtil.reject(reject, error)
245
+ } else if let status {
246
+ resolve([
247
+ transactionIdKey: status.txId,
248
+ "requestedAt": status.requestedAt?.timeIntervalSince1970 as Any,
249
+ "requestExpiredAt": status.requestExpiredAt?.timeIntervalSince1970 as Any,
250
+ "signedAt": status.signedAt?.timeIntervalSince1970 as Any
251
+ ])
252
+ } else {
253
+ RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "signStatusInfo"))
254
+ }
255
+ }
256
+ }
257
+ }
258
+ }
259
+
260
+ private func withCertType(
261
+ _ value: String,
262
+ reject: @escaping RCTPromiseRejectBlock,
263
+ operation: @escaping (CertType) -> Void
264
+ ) {
265
+ guard let type = CertType(rawValue: value.lowercased()) else {
266
+ RNCKakaoUtil.reject(reject, SdkError(reason: .BadParameter))
267
+ return
268
+ }
269
+ onMain { operation(type) }
270
+ }
271
+
272
+ private func sessionCallback(
273
+ _ resolve: @escaping RCTPromiseResolveBlock,
274
+ reject: @escaping RCTPromiseRejectBlock
275
+ ) -> (SessionInfo?, Error?) -> Void {
276
+ { info, error in
277
+ if let error {
278
+ RNCKakaoUtil.reject(reject, error)
279
+ } else if let info {
280
+ resolve(self.mapSession(info))
281
+ } else {
282
+ RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "sessionInfo"))
283
+ }
284
+ }
285
+ }
286
+
287
+ private func mapSession(_ info: SessionInfo) -> [String: Any] {
288
+ [
289
+ "userId": info.userId as Any,
290
+ "sessionStartAt": info.sessionStartAt.timeIntervalSince1970,
291
+ "sessionEndAt": info.sessionEndAt.timeIntervalSince1970
292
+ ]
293
+ }
294
+
295
+ private func tokenCallback(
296
+ _ resolve: @escaping RCTPromiseResolveBlock,
297
+ reject: @escaping RCTPromiseRejectBlock
298
+ ) -> (CertTokenInfo?, Error?) -> Void {
299
+ { info, error in
300
+ if let error {
301
+ RNCKakaoUtil.reject(reject, error)
302
+ } else if let info {
303
+ resolve([transactionIdKey: info.txId, "token": self.mapToken(info.token)])
304
+ } else {
305
+ RNCKakaoUtil.reject(reject, RNCKakaoError.responseNotFound(name: "certTokenInfo"))
306
+ }
307
+ }
308
+ }
309
+
310
+ private func mapToken(_ token: OAuthToken) -> [String: Any] {
311
+ let now = Date()
312
+ var result: [String: Any] = [
313
+ "accessToken": token.accessToken,
314
+ "refreshToken": token.refreshToken,
315
+ "tokenType": token.tokenType,
316
+ "accessTokenExpiresAt": token.expiredAt.timeIntervalSince1970,
317
+ "refreshTokenExpiresAt": token.refreshTokenExpiredAt.timeIntervalSince1970,
318
+ "accessTokenExpiresIn": token.expiredAt.timeIntervalSince(now),
319
+ "refreshTokenExpiresIn": token.refreshTokenExpiredAt.timeIntervalSince(now),
320
+ "scopes": token.scopes ?? []
321
+ ]
322
+ if let idToken = token.idToken {
323
+ result["idToken"] = idToken
324
+ }
325
+ return result
326
+ }
327
+ }
@@ -0,0 +1,8 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ NS_ASSUME_NONNULL_BEGIN
4
+ @interface RNCKakaoCertUtil : NSObject
5
+ + (BOOL)isKakaoTalkSignReturnUrl:(NSURL*)url NS_SWIFT_NAME(isKakaoTalkSignReturnUrl(_:));
6
+ + (BOOL)handleOpenUrl:(NSURL*)url;
7
+ @end
8
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,17 @@
1
+ #import "RNCKakaoCertUtil.h"
2
+ #import <React/RCTBridgeModule.h>
3
+
4
+ #if __has_include("RNCKakaoCert-Swift.h")
5
+ #import "RNCKakaoCert-Swift.h"
6
+ #else
7
+ #import <RNCKakaoCert/RNCKakaoCert-Swift.h>
8
+ #endif
9
+
10
+ @implementation RNCKakaoCertUtil
11
+ + (BOOL)isKakaoTalkSignReturnUrl:(NSURL*)url {
12
+ return [RNCKakaoCertManager isKakaoTalkSignReturnUrl:url];
13
+ }
14
+ + (BOOL)handleOpenUrl:(NSURL*)url {
15
+ return [RNCKakaoCertManager handleOpenUrl:url];
16
+ }
17
+ @end
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.authorizeForCertWeb = authorizeForCertWeb;
7
+ exports.certLoginWithKakaoAccount = certLoginWithKakaoAccount;
8
+ exports.certLoginWithKakaoTalk = certLoginWithKakaoTalk;
9
+ exports.default = void 0;
10
+ exports.deleteKeyPair = deleteKeyPair;
11
+ exports.fetchSessionInfo = fetchSessionInfo;
12
+ exports.fetchSessionInfoByAppKey = fetchSessionInfoByAppKey;
13
+ exports.getPublicKey = getPublicKey;
14
+ exports.getSessionInfo = getSessionInfo;
15
+ exports.isKakaoTalkSignAvailable = isKakaoTalkSignAvailable;
16
+ exports.isValidSession = isValidSession;
17
+ exports.issueCertTokenWithCode = issueCertTokenWithCode;
18
+ exports.reducedSign = reducedSign;
19
+ exports.signWithKakaoTalk = signWithKakaoTalk;
20
+ var _core = require("@react-native-kakao/core");
21
+ var _NativeKakaoCert = _interopRequireDefault(require("./spec/NativeKakaoCert"));
22
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
23
+ const signerInformationItems = ['ci', 'name', 'birthday', 'phone_number'];
24
+ const certificationPrompts = ['Login', 'Create', 'SelectAccount'];
25
+ const accountCertType = 'K2100';
26
+ const minActivityRequestCode = -2147483648;
27
+ const maxActivityRequestCode = 2147483647;
28
+ async function certLoginWithKakaoTalk(options) {
29
+ validateLoginRequest(options);
30
+ const requestCode = options.android?.requestCode;
31
+ (0, _core.kAssert)(requestCode == null || Number.isInteger(requestCode) && requestCode >= minActivityRequestCode && requestCode <= maxActivityRequestCode, `[certLoginWithKakaoTalk] requestCode must be an integer from ${minActivityRequestCode} to ${maxActivityRequestCode}`);
32
+ return _NativeKakaoCert.default.certLoginWithKakaoTalk(options);
33
+ }
34
+ async function certLoginWithKakaoAccount(options) {
35
+ (0, _core.kAssert)(options.certType === accountCertType, '[certLoginWithKakaoAccount] certType must be K2100');
36
+ validateLoginRequest(options);
37
+ return _NativeKakaoCert.default.certLoginWithKakaoAccount(options);
38
+ }
39
+ async function issueCertTokenWithCode({
40
+ code,
41
+ codeVerifier,
42
+ redirectUri
43
+ }) {
44
+ (0, _core.kAssert)(typeof code === 'string' && code.length > 0, '[issueCertTokenWithCode] code is required');
45
+ return _NativeKakaoCert.default.issueCertTokenWithCode(code, codeVerifier, redirectUri);
46
+ }
47
+ async function getPublicKey({
48
+ certType
49
+ }) {
50
+ return (await _NativeKakaoCert.default.publicKey(certType)) ?? undefined;
51
+ }
52
+ async function getSessionInfo({
53
+ certType
54
+ }) {
55
+ return (await _NativeKakaoCert.default.sessionInfo(certType)) ?? undefined;
56
+ }
57
+ function fetchSessionInfo({
58
+ certType,
59
+ txId
60
+ }) {
61
+ return _NativeKakaoCert.default.fetchSessionInfo(certType, txId);
62
+ }
63
+ function fetchSessionInfoByAppKey({
64
+ certType,
65
+ txId,
66
+ targetAppKey
67
+ }) {
68
+ return _NativeKakaoCert.default.fetchSessionInfoByAppKey(certType, txId, targetAppKey);
69
+ }
70
+ function isValidSession({
71
+ certType
72
+ }) {
73
+ return _NativeKakaoCert.default.isValidSession(certType);
74
+ }
75
+ async function deleteKeyPair({
76
+ certType
77
+ }) {
78
+ await _NativeKakaoCert.default.deleteKeyPair(certType);
79
+ }
80
+ function reducedSign({
81
+ certType,
82
+ data
83
+ }) {
84
+ return _NativeKakaoCert.default.reducedSign(certType, data);
85
+ }
86
+ function isKakaoTalkSignAvailable() {
87
+ return _NativeKakaoCert.default.isKakaoTalkSignAvailable();
88
+ }
89
+ function signWithKakaoTalk({
90
+ txId,
91
+ targetAppKey
92
+ }) {
93
+ return _NativeKakaoCert.default.signWithKakaoTalk(txId, targetAppKey);
94
+ }
95
+ async function authorizeForCertWeb(_options) {
96
+ (0, _core.kCreateWebError)({
97
+ code: 'Package-UnsupportedPlatform',
98
+ message: 'authorizeForCertWeb is available on web only.'
99
+ });
100
+ }
101
+ function validateLoginRequest(options) {
102
+ (0, _core.kAssert)(options.prompts?.every(prompt => certificationPrompts.includes(prompt)) ?? true, '[cert login] unsupported prompt');
103
+ (0, _core.kAssert)(options.identifyItems?.every(item => signerInformationItems.includes(item)) ?? true, '[cert login] unsupported signer information');
104
+ if (options.certType === accountCertType) {
105
+ (0, _core.kAssert)(!!options.settleId && !!options.signData, '[cert login] settleId and signData are required');
106
+ } else {
107
+ (0, _core.kAssert)(options.certType === 'K2220' && !!options.txId, '[cert login] K2220 requires txId');
108
+ }
109
+ }
110
+ const KakaoCert = {
111
+ certLoginWithKakaoTalk,
112
+ certLoginWithKakaoAccount,
113
+ issueCertTokenWithCode,
114
+ getPublicKey,
115
+ getSessionInfo,
116
+ fetchSessionInfo,
117
+ fetchSessionInfoByAppKey,
118
+ isValidSession,
119
+ deleteKeyPair,
120
+ reducedSign,
121
+ isKakaoTalkSignAvailable,
122
+ signWithKakaoTalk,
123
+ authorizeForCertWeb
124
+ };
125
+ var _default = exports.default = KakaoCert;
126
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_core","require","_NativeKakaoCert","_interopRequireDefault","e","__esModule","default","signerInformationItems","certificationPrompts","accountCertType","minActivityRequestCode","maxActivityRequestCode","certLoginWithKakaoTalk","options","validateLoginRequest","requestCode","android","kAssert","Number","isInteger","Native","certLoginWithKakaoAccount","certType","issueCertTokenWithCode","code","codeVerifier","redirectUri","length","getPublicKey","publicKey","undefined","getSessionInfo","sessionInfo","fetchSessionInfo","txId","fetchSessionInfoByAppKey","targetAppKey","isValidSession","deleteKeyPair","reducedSign","data","isKakaoTalkSignAvailable","signWithKakaoTalk","authorizeForCertWeb","_options","kCreateWebError","message","prompts","every","prompt","includes","identifyItems","item","settleId","signData","KakaoCert","_default","exports"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.signWithKakaoTalk = exports.reducedSign = exports.issueCertTokenWithCode = exports.isValidSession = exports.isKakaoTalkSignAvailable = exports.getSessionInfo = exports.getPublicKey = exports.fetchSessionInfoByAppKey = exports.fetchSessionInfo = exports.deleteKeyPair = exports.default = exports.certLoginWithKakaoTalk = exports.certLoginWithKakaoAccount = exports.authorizeForCertWeb = void 0;
7
+ var _jsUtil = require("@mj-studio/js-util");
8
+ var _core = require("@react-native-kakao/core");
9
+ const unsupportedPlatformErrorCode = 'Package-UnsupportedPlatform';
10
+ async function unsupported() {
11
+ (0, _core.kCreateWebError)({
12
+ code: unsupportedPlatformErrorCode,
13
+ message: 'This certification operation requires the Android or iOS Cert SDK.'
14
+ });
15
+ }
16
+ const KakaoCert = {
17
+ certLoginWithKakaoTalk: unsupported,
18
+ certLoginWithKakaoAccount: unsupported,
19
+ issueCertTokenWithCode: async () => {
20
+ (0, _core.kCreateWebError)({
21
+ code: unsupportedPlatformErrorCode,
22
+ message: 'issueCertTokenWithCode is only available on iOS.'
23
+ });
24
+ },
25
+ getPublicKey: unsupported,
26
+ getSessionInfo: unsupported,
27
+ fetchSessionInfo: unsupported,
28
+ fetchSessionInfoByAppKey: unsupported,
29
+ isValidSession: unsupported,
30
+ deleteKeyPair: unsupported,
31
+ reducedSign: unsupported,
32
+ isKakaoTalkSignAvailable: async () => false,
33
+ signWithKakaoTalk: unsupported,
34
+ authorizeForCertWeb: options => (0, _core.kRunWebAPI)(() => {
35
+ Kakao.Auth.authorizeForCert((0, _jsUtil.filterNonNullishKeys)({
36
+ ...options,
37
+ prompt: options.prompt?.join(','),
38
+ scope: options.scope?.join(','),
39
+ serviceTerms: options.serviceTerms?.join(','),
40
+ identifyItems: options.identifyItems?.join(',')
41
+ }));
42
+ })
43
+ };
44
+ const {
45
+ certLoginWithKakaoTalk,
46
+ certLoginWithKakaoAccount,
47
+ issueCertTokenWithCode,
48
+ getPublicKey,
49
+ getSessionInfo,
50
+ fetchSessionInfo,
51
+ fetchSessionInfoByAppKey,
52
+ isValidSession,
53
+ deleteKeyPair,
54
+ reducedSign,
55
+ isKakaoTalkSignAvailable,
56
+ signWithKakaoTalk,
57
+ authorizeForCertWeb
58
+ } = KakaoCert;
59
+ exports.authorizeForCertWeb = authorizeForCertWeb;
60
+ exports.signWithKakaoTalk = signWithKakaoTalk;
61
+ exports.isKakaoTalkSignAvailable = isKakaoTalkSignAvailable;
62
+ exports.reducedSign = reducedSign;
63
+ exports.deleteKeyPair = deleteKeyPair;
64
+ exports.isValidSession = isValidSession;
65
+ exports.fetchSessionInfoByAppKey = fetchSessionInfoByAppKey;
66
+ exports.fetchSessionInfo = fetchSessionInfo;
67
+ exports.getSessionInfo = getSessionInfo;
68
+ exports.getPublicKey = getPublicKey;
69
+ exports.issueCertTokenWithCode = issueCertTokenWithCode;
70
+ exports.certLoginWithKakaoAccount = certLoginWithKakaoAccount;
71
+ exports.certLoginWithKakaoTalk = certLoginWithKakaoTalk;
72
+ var _default = exports.default = KakaoCert;
73
+ //# sourceMappingURL=index.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_jsUtil","require","_core","unsupportedPlatformErrorCode","unsupported","kCreateWebError","code","message","KakaoCert","certLoginWithKakaoTalk","certLoginWithKakaoAccount","issueCertTokenWithCode","getPublicKey","getSessionInfo","fetchSessionInfo","fetchSessionInfoByAppKey","isValidSession","deleteKeyPair","reducedSign","isKakaoTalkSignAvailable","signWithKakaoTalk","authorizeForCertWeb","options","kRunWebAPI","Kakao","Auth","authorizeForCert","filterNonNullishKeys","prompt","join","scope","serviceTerms","identifyItems","exports","_default","default"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAMA,MAAME,4BAA4B,GAAG,6BAA6B;AAElE,eAAeC,WAAWA,CAAA,EAAmB;EAC3C,IAAAC,qBAAe,EAAC;IACdC,IAAI,EAAEH,4BAA4B;IAClCI,OAAO,EAAE;EACX,CAAC,CAAC;AACJ;AAEA,MAAMC,SAAuB,GAAG;EAC9BC,sBAAsB,EAAEL,WAAW;EACnCM,yBAAyB,EAAEN,WAAW;EACtCO,sBAAsB,EAAE,MAAAA,CAAA,KAAY;IAClC,IAAAN,qBAAe,EAAC;MACdC,IAAI,EAAEH,4BAA4B;MAClCI,OAAO,EAAE;IACX,CAAC,CAAC;EACJ,CAAC;EACDK,YAAY,EAAER,WAAW;EACzBS,cAAc,EAAET,WAAW;EAC3BU,gBAAgB,EAAEV,WAAW;EAC7BW,wBAAwB,EAAEX,WAAW;EACrCY,cAAc,EAAEZ,WAAW;EAC3Ba,aAAa,EAAEb,WAAW;EAC1Bc,WAAW,EAAEd,WAAW;EACxBe,wBAAwB,EAAE,MAAAA,CAAA,KAAY,KAAK;EAC3CC,iBAAiB,EAAEhB,WAAW;EAC9BiB,mBAAmB,EAAGC,OAAO,IAC3B,IAAAC,gBAAU,EAAC,MAAM;IACfC,KAAK,CAACC,IAAI,CAACC,gBAAgB,CACzB,IAAAC,4BAAoB,EAAC;MACnB,GAAGL,OAAO;MACVM,MAAM,EAAEN,OAAO,CAACM,MAAM,EAAEC,IAAI,CAAC,GAAG,CAAC;MACjCC,KAAK,EAAER,OAAO,CAACQ,KAAK,EAAED,IAAI,CAAC,GAAG,CAAC;MAC/BE,YAAY,EAAET,OAAO,CAACS,YAAY,EAAEF,IAAI,CAAC,GAAG,CAAC;MAC7CG,aAAa,EAAEV,OAAO,CAACU,aAAa,EAAEH,IAAI,CAAC,GAAG;IAChD,CAAC,CACH,CAAC;EACH,CAAC;AACL,CAAC;AAEM,MAAM;EACXpB,sBAAsB;EACtBC,yBAAyB;EACzBC,sBAAsB;EACtBC,YAAY;EACZC,cAAc;EACdC,gBAAgB;EAChBC,wBAAwB;EACxBC,cAAc;EACdC,aAAa;EACbC,WAAW;EACXC,wBAAwB;EACxBC,iBAAiB;EACjBC;AACF,CAAC,GAAGb,SAAS;AAACyB,OAAA,CAAAZ,mBAAA,GAAAA,mBAAA;AAAAY,OAAA,CAAAb,iBAAA,GAAAA,iBAAA;AAAAa,OAAA,CAAAd,wBAAA,GAAAA,wBAAA;AAAAc,OAAA,CAAAf,WAAA,GAAAA,WAAA;AAAAe,OAAA,CAAAhB,aAAA,GAAAA,aAAA;AAAAgB,OAAA,CAAAjB,cAAA,GAAAA,cAAA;AAAAiB,OAAA,CAAAlB,wBAAA,GAAAA,wBAAA;AAAAkB,OAAA,CAAAnB,gBAAA,GAAAA,gBAAA;AAAAmB,OAAA,CAAApB,cAAA,GAAAA,cAAA;AAAAoB,OAAA,CAAArB,YAAA,GAAAA,YAAA;AAAAqB,OAAA,CAAAtB,sBAAA,GAAAA,sBAAA;AAAAsB,OAAA,CAAAvB,yBAAA,GAAAA,yBAAA;AAAAuB,OAAA,CAAAxB,sBAAA,GAAAA,sBAAA;AAAA,IAAAyB,QAAA,GAAAD,OAAA,CAAAE,OAAA,GACC3B,SAAS","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,30 @@
1
+ import type { TurboModule } from 'react-native';
2
+ import { TurboModuleRegistry } from 'react-native';
3
+ import type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes';
4
+
5
+ import type { KakaoCertSessionInfo, KakaoCertSignStatusInfo, KakaoCertTokenInfo } from '..';
6
+
7
+ export interface Spec extends TurboModule {
8
+ certLoginWithKakaoTalk(options: UnsafeObject): Promise<KakaoCertTokenInfo>;
9
+ certLoginWithKakaoAccount(options: UnsafeObject): Promise<KakaoCertTokenInfo>;
10
+ issueCertTokenWithCode(
11
+ code: string,
12
+ codeVerifier?: string,
13
+ redirectUri?: string,
14
+ ): Promise<KakaoCertTokenInfo>;
15
+ publicKey(certType: string): Promise<string | null>;
16
+ sessionInfo(certType: string): Promise<KakaoCertSessionInfo | null>;
17
+ fetchSessionInfo(certType: string, txId: string): Promise<KakaoCertSessionInfo>;
18
+ fetchSessionInfoByAppKey(
19
+ certType: string,
20
+ txId: string,
21
+ targetAppKey?: string,
22
+ ): Promise<KakaoCertSessionInfo>;
23
+ isValidSession(certType: string): Promise<boolean>;
24
+ deleteKeyPair(certType: string): Promise<void>;
25
+ reducedSign(certType: string, data: string): Promise<string>;
26
+ isKakaoTalkSignAvailable(): Promise<boolean>;
27
+ signWithKakaoTalk(txId: string, targetAppKey?: string): Promise<KakaoCertSignStatusInfo>;
28
+ }
29
+
30
+ export default TurboModuleRegistry.getEnforcing<Spec>('RNCKakaoCert');