@circle-fin/w3s-pw-react-native-sdk 1.1.7 → 2.0.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.
- package/BARE_REACT_NATIVE_GUIDE.md +397 -0
- package/LICENSE +1 -1
- package/README.md +196 -90
- package/android/build.gradle +43 -126
- package/android/src/main/AndroidManifest.xml +12 -16
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/ProgrammablewalletRnSdkModule.kt +414 -244
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/PromiseCallback.kt +76 -74
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/RecordsHelper.kt +602 -0
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/models/Records.kt +43 -0
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/pwcustom/RnImageSetter.kt +55 -33
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/pwcustom/RnLayoutProvider.kt +81 -79
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/pwcustom/RnViewSetterProvider.kt +93 -63
- package/app.json +8 -0
- package/build/ProgrammablewalletRnSdkModule.d.ts +44 -0
- package/build/ProgrammablewalletRnSdkModule.d.ts.map +1 -0
- package/build/ProgrammablewalletRnSdkModule.js +21 -0
- package/build/ProgrammablewalletRnSdkModule.js.map +1 -0
- package/build/WalletSdk.d.ts +20 -0
- package/build/WalletSdk.d.ts.map +1 -0
- package/build/WalletSdk.js +303 -0
- package/build/WalletSdk.js.map +1 -0
- package/build/bridgeSafe.d.ts +50 -0
- package/build/bridgeSafe.d.ts.map +1 -0
- package/build/bridgeSafe.js +136 -0
- package/build/bridgeSafe.js.map +1 -0
- package/build/index.d.ts +21 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +21 -0
- package/build/index.js.map +1 -0
- package/{lib/typescript/src → build}/types.d.ts +72 -43
- package/build/types.d.ts.map +1 -0
- package/build/types.js +331 -0
- package/build/types.js.map +1 -0
- package/build/utils/securityQuestionUtils.d.ts +43 -0
- package/build/utils/securityQuestionUtils.d.ts.map +1 -0
- package/build/utils/securityQuestionUtils.js +109 -0
- package/build/utils/securityQuestionUtils.js.map +1 -0
- package/expo-module.config.json +11 -0
- package/ios/Array+Extension.swift +17 -15
- package/ios/BridgeHelper.swift +71 -92
- package/ios/{RnWalletSdk+CustomizeAdapter.swift → CustomizeAdapter.swift} +19 -29
- package/ios/ProgrammablewalletRnSdk.podspec +30 -0
- package/ios/ProgrammablewalletRnSdkModule.swift +384 -0
- package/ios/TextConfig.swift +17 -15
- package/ios/TextKey.swift +17 -15
- package/ios/UIApplication+Extension.swift +26 -17
- package/ios/UIColor+Extension.swift +34 -28
- package/ios/UITextField+Extension.swift +31 -0
- package/ios/UIView+Extension.swift +24 -17
- package/package.json +70 -116
- package/plugins/apple-signin-entitlements.js +16 -0
- package/plugins/infoplist-config.js +77 -0
- package/plugins/infoplist-config.md +72 -0
- package/plugins/podfile-modifier.js +84 -0
- package/plugins/podfile-modifier.md +33 -0
- package/plugins/withCopyFiles.js +132 -0
- package/plugins/withCopyFiles.md +81 -0
- package/src/ProgrammablewalletRnSdkModule.ts +68 -38
- package/src/WalletSdk.ts +297 -159
- package/src/bridgeSafe.ts +156 -0
- package/src/index.ts +21 -0
- package/src/types.ts +133 -110
- package/src/utils/securityQuestionUtils.ts +121 -0
- package/COPYRIGHT +0 -10
- package/android/gradle.properties +0 -21
- package/android/src/main/AndroidManifestNew.xml +0 -22
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/BridgeHelper.kt +0 -399
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/ProgrammablewalletRnSdkPackage.kt +0 -49
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/PromiseCallback2.kt +0 -65
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/PromiseLogoutCallback.kt +0 -47
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/PromiseSocialCallback.kt +0 -53
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/TestHelper.kt +0 -37
- package/android/src/main/java/com/circlefin/programmablewalletrnsdk/annotation/ExcludeFromGeneratedCCReport.kt +0 -33
- package/android/src/newarch/ProgrammablewalletRnSdkSpec.kt +0 -29
- package/android/src/oldarch/ProgrammablewalletRnSdkSpec.kt +0 -76
- package/circlefin-w3s-pw-react-native-sdk.podspec +0 -41
- package/ios/EventEmitter.swift +0 -49
- package/ios/ProgrammablewalletRnSdk.h +0 -29
- package/ios/ProgrammablewalletRnSdk.mm +0 -162
- package/ios/ReactNativeEventEmitter.m +0 -27
- package/ios/ReactNativeEventEmitter.swift +0 -37
- package/ios/RnWalletSdk.swift +0 -390
- package/ios/programmablewallet-rn-sdk-Bridging-Header.h +0 -22
- package/lib/commonjs/NativeProgrammablewalletRnSdk.js +0 -24
- package/lib/commonjs/NativeProgrammablewalletRnSdk.js.map +0 -1
- package/lib/commonjs/ProgrammablewalletRnSdkModule.js +0 -38
- package/lib/commonjs/ProgrammablewalletRnSdkModule.js.map +0 -1
- package/lib/commonjs/WalletSdk.js +0 -211
- package/lib/commonjs/WalletSdk.js.map +0 -1
- package/lib/commonjs/index.js +0 -74
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/types.js +0 -342
- package/lib/commonjs/types.js.map +0 -1
- package/lib/module/NativeProgrammablewalletRnSdk.js +0 -19
- package/lib/module/NativeProgrammablewalletRnSdk.js.map +0 -1
- package/lib/module/ProgrammablewalletRnSdkModule.js +0 -31
- package/lib/module/ProgrammablewalletRnSdkModule.js.map +0 -1
- package/lib/module/WalletSdk.js +0 -203
- package/lib/module/WalletSdk.js.map +0 -1
- package/lib/module/index.js +0 -18
- package/lib/module/index.js.map +0 -1
- package/lib/module/types.js +0 -334
- package/lib/module/types.js.map +0 -1
- package/lib/typescript/src/NativeProgrammablewalletRnSdk.d.ts +0 -28
- package/lib/typescript/src/NativeProgrammablewalletRnSdk.d.ts.map +0 -1
- package/lib/typescript/src/ProgrammablewalletRnSdkModule.d.ts +0 -3
- package/lib/typescript/src/ProgrammablewalletRnSdkModule.d.ts.map +0 -1
- package/lib/typescript/src/WalletSdk.d.ts +0 -3
- package/lib/typescript/src/WalletSdk.d.ts.map +0 -1
- package/lib/typescript/src/index.d.ts +0 -4
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/types.d.ts.map +0 -1
- package/src/NativeProgrammablewalletRnSdk.ts +0 -77
- package/src/index.tsx +0 -29
package/android/src/main/java/com/circlefin/programmablewalletrnsdk/ProgrammablewalletRnSdkModule.kt
CHANGED
|
@@ -1,260 +1,430 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2025 Circle Internet Group, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
|
|
16
19
|
package com.circlefin.programmablewalletrnsdk
|
|
17
20
|
|
|
18
|
-
import android.
|
|
19
|
-
import android.content.Context
|
|
21
|
+
import android.util.Log
|
|
20
22
|
import circle.programmablewallet.sdk.WalletSdk
|
|
21
|
-
import circle.programmablewallet.sdk.WalletSdk.execute
|
|
22
23
|
import circle.programmablewallet.sdk.WalletSdk.init
|
|
23
|
-
import circle.programmablewallet.sdk.WalletSdk.setLayoutProvider
|
|
24
|
-
import circle.programmablewallet.sdk.WalletSdk.setSecurityQuestions
|
|
25
|
-
import circle.programmablewallet.sdk.WalletSdk.setViewSetterProvider
|
|
26
24
|
import circle.programmablewallet.sdk.api.ExecuteEvent
|
|
27
25
|
import circle.programmablewallet.sdk.api.SocialProvider
|
|
26
|
+
import circle.programmablewallet.sdk.api.SocialCallback
|
|
27
|
+
import circle.programmablewallet.sdk.api.LogoutCallback
|
|
28
28
|
import circle.programmablewallet.sdk.presentation.EventListener
|
|
29
|
-
import
|
|
29
|
+
import circle.programmablewallet.sdk.result.ExecuteResult
|
|
30
|
+
import circle.programmablewallet.sdk.result.LoginResult
|
|
31
|
+
import com.circlefin.programmablewalletrnsdk.models.ConfigurationRecord
|
|
30
32
|
import com.circlefin.programmablewalletrnsdk.pwcustom.RnLayoutProvider
|
|
31
33
|
import com.circlefin.programmablewalletrnsdk.pwcustom.RnViewSetterProvider
|
|
32
|
-
import
|
|
33
|
-
import
|
|
34
|
-
import
|
|
35
|
-
import
|
|
36
|
-
import
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
private var viewSetterProvider: RnViewSetterProvider =
|
|
46
|
-
RnViewSetterProvider
|
|
47
|
-
private var reactContext: ReactApplicationContext
|
|
48
|
-
|
|
49
|
-
init {
|
|
50
|
-
reactContext = context
|
|
51
|
-
setLayoutProvider(layoutProvider)
|
|
52
|
-
setViewSetterProvider(viewSetterProvider)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
@ExcludeFromGeneratedCCReport
|
|
56
|
-
override fun getName(): String {
|
|
57
|
-
return NAME
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
@ReactMethod
|
|
61
|
-
override fun setIconTextConfigsMap(readableMap: ReadableMap) {
|
|
62
|
-
val map = BridgeHelper.getIconTextConfigsMap(reactContext, readableMap)
|
|
63
|
-
layoutProvider.setIconTextConfigsMap(map)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
@ReactMethod
|
|
67
|
-
override fun setTextConfigMap(readableMap: ReadableMap) {
|
|
68
|
-
val map = BridgeHelper.getTextConfigMap(reactContext, readableMap)
|
|
69
|
-
layoutProvider.setTextConfigMap(map)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
@ReactMethod
|
|
73
|
-
override fun setImageMap(readableMap: ReadableMap) {
|
|
74
|
-
val map = BridgeHelper.reactNativeMapToStringMap(readableMap)
|
|
75
|
-
viewSetterProvider.setMap(map)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
@ReactMethod
|
|
79
|
-
override fun setDateFormat(value: String) {
|
|
80
|
-
layoutProvider.setDateFormat(value)
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
@ReactMethod
|
|
84
|
-
override fun setDebugging(value: Boolean) {
|
|
85
|
-
layoutProvider.setDebugging(value)
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@ReactMethod
|
|
89
|
-
override fun setCustomUserAgent(value: String) {
|
|
90
|
-
WalletSdk.setCustomUserAgent(value)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
@ReactMethod
|
|
94
|
-
override fun setErrorStringMap(readableMap: ReadableMap) {
|
|
95
|
-
val map = BridgeHelper.getErrorStringMap(readableMap)
|
|
96
|
-
layoutProvider.setErrorStringMap(map)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
@ReactMethod
|
|
100
|
-
override fun setTextConfigsMap(readableMap: ReadableMap) {
|
|
101
|
-
val map = BridgeHelper.getTextConfigsMap(reactContext, readableMap)
|
|
102
|
-
layoutProvider.setTextConfigsMap(map)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
@ReactMethod
|
|
106
|
-
override fun setDismissOnCallbackMap(readableMap: ReadableMap) {
|
|
107
|
-
val map = BridgeHelper.getDismissOnCallbackMap(readableMap)
|
|
108
|
-
setDismissOnCallbackMap(map)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
@ExcludeFromGeneratedCCReport
|
|
112
|
-
@ReactMethod
|
|
113
|
-
override fun moveRnTaskToFront() {
|
|
114
|
-
currentActivity?.let {
|
|
115
|
-
try {
|
|
116
|
-
val activityManager = reactContext
|
|
117
|
-
.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
|
|
118
|
-
activityManager.moveTaskToFront(it.taskId, 0)
|
|
119
|
-
} catch (e: Throwable) {
|
|
120
|
-
e.printStackTrace()
|
|
121
|
-
}
|
|
34
|
+
import expo.modules.kotlin.Promise
|
|
35
|
+
import expo.modules.kotlin.exception.CodedException
|
|
36
|
+
import expo.modules.kotlin.exception.Exceptions
|
|
37
|
+
import expo.modules.kotlin.modules.Module
|
|
38
|
+
import expo.modules.kotlin.modules.ModuleDefinition
|
|
39
|
+
|
|
40
|
+
class ProgrammablewalletRnSdkModule : Module(), EventListener {
|
|
41
|
+
private var layoutProvider: RnLayoutProvider = RnLayoutProvider
|
|
42
|
+
private var viewSetterProvider: RnViewSetterProvider = RnViewSetterProvider
|
|
43
|
+
|
|
44
|
+
init {
|
|
45
|
+
setLayoutProvider(layoutProvider)
|
|
46
|
+
setViewSetterProvider(viewSetterProvider)
|
|
122
47
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
@ReactMethod
|
|
127
|
-
override fun moveTaskToFront() {
|
|
128
|
-
WalletSdk.moveTaskToFront(reactContext)
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
@ReactMethod
|
|
132
|
-
override fun setSecurityQuestions(questionArr: ReadableArray) {
|
|
133
|
-
try {
|
|
134
|
-
val questions = BridgeHelper.getSecurityQuestions(questionArr)
|
|
135
|
-
setSecurityQuestions(questions)
|
|
136
|
-
} catch (e: Throwable) {
|
|
137
|
-
e.printStackTrace()
|
|
48
|
+
|
|
49
|
+
private fun setLayoutProvider(provider: RnLayoutProvider) {
|
|
50
|
+
WalletSdk.setLayoutProvider(provider)
|
|
138
51
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
override fun initSdk(configuration: ReadableMap, promise: Promise) {
|
|
143
|
-
try {
|
|
144
|
-
// Append ending slash if needed
|
|
145
|
-
val endpoint = configuration.getString("endpoint")?.run {
|
|
146
|
-
if (this.endsWith("/")) this else "$this/"
|
|
147
|
-
}
|
|
148
|
-
val appId = configuration.getString("appId")
|
|
149
|
-
val settings = BridgeHelper.getSettingsManagement(configuration)
|
|
150
|
-
WalletSdk.addEventListener(this)
|
|
151
|
-
init(
|
|
152
|
-
reactContext,
|
|
153
|
-
WalletSdk.Configuration(endpoint, appId, settings)
|
|
154
|
-
)
|
|
155
|
-
promise.resolve(Arguments.createMap())
|
|
156
|
-
} catch (e: Throwable) {
|
|
157
|
-
promise.reject(RuntimeException(e.message))
|
|
52
|
+
|
|
53
|
+
private fun setViewSetterProvider(provider: RnViewSetterProvider) {
|
|
54
|
+
WalletSdk.setViewSetterProvider(provider)
|
|
158
55
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
56
|
+
|
|
57
|
+
override fun definition() = ModuleDefinition {
|
|
58
|
+
Name("ProgrammablewalletRnSdk")
|
|
59
|
+
|
|
60
|
+
Constants(
|
|
61
|
+
"sdkVersion" to WalletSdk.sdkVersion(),
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
Events(
|
|
65
|
+
"CirclePwOnEvent",
|
|
66
|
+
"CirclePwOnSuccess",
|
|
67
|
+
"CirclePwOnError"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
Function("getDeviceId") {
|
|
71
|
+
val context = appContext.reactContext ?: return@Function ""
|
|
72
|
+
WalletSdk.getDeviceId(context) ?: ""
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
AsyncFunction("initSdk") { configuration: ConfigurationRecord, promise: Promise ->
|
|
76
|
+
try {
|
|
77
|
+
val context = appContext.reactContext
|
|
78
|
+
if (context == null) {
|
|
79
|
+
promise.reject(Exceptions.ReactContextLost())
|
|
80
|
+
return@AsyncFunction
|
|
81
|
+
}
|
|
82
|
+
val (endpoint, appId, settings) = RecordsHelper.prepareConfigurationData(
|
|
83
|
+
configuration
|
|
84
|
+
)
|
|
85
|
+
WalletSdk.addEventListener(this@ProgrammablewalletRnSdkModule)
|
|
86
|
+
init(
|
|
87
|
+
context,
|
|
88
|
+
WalletSdk.Configuration(endpoint, appId, settings)
|
|
89
|
+
)
|
|
90
|
+
promise.resolve(emptyMap<String, Any>())
|
|
91
|
+
} catch (e: Throwable) {
|
|
92
|
+
promise.reject(CodedException(e))
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
Function("setSecurityQuestions") { securityQuestions: Array<Any> ->
|
|
97
|
+
val nativeSecurityQuestions =
|
|
98
|
+
RecordsHelper.convertJsSecurityQuestionsToNative(securityQuestions)
|
|
99
|
+
WalletSdk.setSecurityQuestions(nativeSecurityQuestions)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
AsyncFunction("execute") { userToken: String?, encryptionKey: String?, challengeIds: Array<String>, promise: Promise ->
|
|
103
|
+
try {
|
|
104
|
+
val activity = appContext.currentActivity
|
|
105
|
+
if (activity == null) {
|
|
106
|
+
promise.reject(Exceptions.AppContextLost())
|
|
107
|
+
return@AsyncFunction
|
|
108
|
+
}
|
|
109
|
+
val challengeIdArray = challengeIds.map { it as String? }.toTypedArray()
|
|
110
|
+
val callback =
|
|
111
|
+
PromiseCallback<ExecuteResult>(promise, this@ProgrammablewalletRnSdkModule)
|
|
112
|
+
WalletSdk.execute(
|
|
113
|
+
activity,
|
|
114
|
+
userToken,
|
|
115
|
+
encryptionKey,
|
|
116
|
+
challengeIdArray,
|
|
117
|
+
callback
|
|
118
|
+
)
|
|
119
|
+
} catch (e: Throwable) {
|
|
120
|
+
promise.reject(CodedException(e))
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
AsyncFunction("verifyOTP") { otpToken: String?, deviceToken: String?, deviceEncryptionKey: String?, promise: Promise ->
|
|
125
|
+
try {
|
|
126
|
+
val activity = appContext.currentActivity
|
|
127
|
+
if (activity == null) {
|
|
128
|
+
promise.reject(Exceptions.AppContextLost())
|
|
129
|
+
return@AsyncFunction
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Create callback for LoginResult with correct Callback2 interface
|
|
133
|
+
val callback = object : circle.programmablewallet.sdk.api.Callback2<circle.programmablewallet.sdk.result.LoginResult> {
|
|
134
|
+
override fun onResult(result: circle.programmablewallet.sdk.result.LoginResult) {
|
|
135
|
+
try {
|
|
136
|
+
val resultMap = RecordsHelper.convertResultToMap(result)
|
|
137
|
+
promise.resolve(resultMap)
|
|
138
|
+
} catch (e: Exception) {
|
|
139
|
+
promise.reject(CodedException(e))
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
override fun onError(error: Throwable): Boolean {
|
|
144
|
+
promise.reject(CodedException(error))
|
|
145
|
+
return false // Let SDK finish the Activity
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Use the correct verifyOTP method from Circle SDK
|
|
150
|
+
WalletSdk.verifyOTP(
|
|
151
|
+
activity,
|
|
152
|
+
otpToken ?: "",
|
|
153
|
+
deviceToken ?: "",
|
|
154
|
+
deviceEncryptionKey ?: "",
|
|
155
|
+
callback
|
|
156
|
+
)
|
|
157
|
+
} catch (e: Throwable) {
|
|
158
|
+
promise.reject(CodedException(e))
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
AsyncFunction("performLogin") { provider: String, deviceToken: String, deviceEncryptionKey: String, promise: Promise ->
|
|
163
|
+
try {
|
|
164
|
+
val activity = appContext.currentActivity
|
|
165
|
+
if (activity == null) {
|
|
166
|
+
promise.reject(Exceptions.AppContextLost())
|
|
167
|
+
return@AsyncFunction
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Convert string to SocialProvider enum
|
|
171
|
+
val socialProvider = when (provider) {
|
|
172
|
+
"Google" -> SocialProvider.Google
|
|
173
|
+
"Facebook" -> SocialProvider.Facebook
|
|
174
|
+
"Apple" -> SocialProvider.Apple
|
|
175
|
+
else -> throw IllegalArgumentException("Unsupported social provider: $provider")
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Create social callback that wraps promise
|
|
179
|
+
val socialCallback = object : SocialCallback<LoginResult> {
|
|
180
|
+
override fun onError(error: Throwable) {
|
|
181
|
+
promise.reject(CodedException(error))
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
override fun onResult(result: LoginResult) {
|
|
185
|
+
// Direct conversion without wrapping in "result" field
|
|
186
|
+
val resultMap = RecordsHelper.convertResultToMap(result)
|
|
187
|
+
promise.resolve(resultMap)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
WalletSdk.performLogin(
|
|
192
|
+
activity,
|
|
193
|
+
socialProvider,
|
|
194
|
+
deviceToken,
|
|
195
|
+
deviceEncryptionKey,
|
|
196
|
+
socialCallback
|
|
197
|
+
)
|
|
198
|
+
} catch (e: Throwable) {
|
|
199
|
+
promise.reject(CodedException(e))
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
AsyncFunction("performLogout") { provider: String, promise: Promise ->
|
|
204
|
+
try {
|
|
205
|
+
val activity = appContext.currentActivity
|
|
206
|
+
if (activity == null) {
|
|
207
|
+
promise.reject(Exceptions.AppContextLost())
|
|
208
|
+
return@AsyncFunction
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Convert string to SocialProvider enum
|
|
212
|
+
val socialProvider = when (provider) {
|
|
213
|
+
"Google" -> SocialProvider.Google
|
|
214
|
+
"Facebook" -> SocialProvider.Facebook
|
|
215
|
+
"Apple" -> SocialProvider.Apple
|
|
216
|
+
else -> throw IllegalArgumentException("Unsupported social provider: $provider")
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Create logout callback that wraps promise
|
|
220
|
+
val logoutCallback = object : LogoutCallback {
|
|
221
|
+
override fun onError(error: Throwable) {
|
|
222
|
+
promise.reject(CodedException(error))
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
override fun onComplete() {
|
|
226
|
+
promise.resolve(null)
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
WalletSdk.performLogout(
|
|
231
|
+
activity,
|
|
232
|
+
socialProvider,
|
|
233
|
+
logoutCallback
|
|
234
|
+
)
|
|
235
|
+
} catch (e: Throwable) {
|
|
236
|
+
promise.reject(CodedException(e))
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
AsyncFunction("setBiometricsPin") { userToken: String?, encryptionKey: String?, promise: Promise ->
|
|
241
|
+
try {
|
|
242
|
+
val activity = appContext.currentActivity
|
|
243
|
+
if (activity == null) {
|
|
244
|
+
promise.reject(Exceptions.AppContextLost())
|
|
245
|
+
return@AsyncFunction
|
|
246
|
+
}
|
|
247
|
+
val callback = PromiseCallback<ExecuteResult>(promise, this@ProgrammablewalletRnSdkModule)
|
|
248
|
+
WalletSdk.setBiometricsPin(
|
|
249
|
+
activity,
|
|
250
|
+
userToken,
|
|
251
|
+
encryptionKey,
|
|
252
|
+
callback
|
|
253
|
+
)
|
|
254
|
+
} catch (e: Throwable) {
|
|
255
|
+
promise.reject(CodedException(e))
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
Function("setDismissOnCallbackMap") { mapData: Map<String, Any> ->
|
|
260
|
+
val dismissMap = RecordsHelper.convertToDismissOnCallbackMap(mapData)
|
|
261
|
+
setDismissOnCallbackMap(dismissMap)
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
Function("moveTaskToFront") {
|
|
265
|
+
try {
|
|
266
|
+
val activity = appContext.currentActivity
|
|
267
|
+
if (activity != null) {
|
|
268
|
+
Companion.moveTaskToFront(activity)
|
|
269
|
+
}
|
|
270
|
+
} catch (e: Throwable) {
|
|
271
|
+
Log.e("ProgrammableWallet", "moveTaskToFront failed", e)
|
|
272
|
+
throw CodedException(e)
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
Function("moveRnTaskToFront") {
|
|
277
|
+
try {
|
|
278
|
+
val activity = appContext.currentActivity
|
|
279
|
+
if (activity != null) {
|
|
280
|
+
Companion.moveRnTaskToFront(activity)
|
|
281
|
+
}
|
|
282
|
+
} catch (e: Throwable) {
|
|
283
|
+
Log.e("ProgrammableWallet", "moveRnTaskToFront failed", e)
|
|
284
|
+
throw CodedException(e)
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
Function("setTextConfigsMap") { mapData: Map<String, Any> ->
|
|
289
|
+
val context = appContext.reactContext
|
|
290
|
+
if (context != null) {
|
|
291
|
+
val textConfigsMap = RecordsHelper.convertToTextConfigsMap(context, mapData)
|
|
292
|
+
setTextConfigsMap(textConfigsMap)
|
|
293
|
+
layoutProvider.setTextConfigsMap(textConfigsMap)
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
Function("setIconTextConfigsMap") { mapData: Map<String, Any> ->
|
|
298
|
+
try {
|
|
299
|
+
val context = appContext.reactContext ?: throw Exceptions.ReactContextLost()
|
|
300
|
+
val iconTextConfigsMap = RecordsHelper.convertToIconTextConfigsMap(context, mapData)
|
|
301
|
+
layoutProvider.setIconTextConfigsMap(iconTextConfigsMap)
|
|
302
|
+
} catch (e: Throwable) {
|
|
303
|
+
throw CodedException(e)
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
Function("setTextConfigMap") { mapData: Map<String, Any> ->
|
|
308
|
+
try {
|
|
309
|
+
val context = appContext.reactContext
|
|
310
|
+
if (context == null) {
|
|
311
|
+
throw Exceptions.ReactContextLost()
|
|
312
|
+
}
|
|
313
|
+
val textConfigMap = RecordsHelper.convertToTextConfigMap(context, mapData)
|
|
314
|
+
layoutProvider.setTextConfigMap(textConfigMap)
|
|
315
|
+
} catch (e: Throwable) {
|
|
316
|
+
throw CodedException(e)
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
Function("setImageMap") { mapData: Map<String, Any> ->
|
|
321
|
+
try {
|
|
322
|
+
val context = appContext.reactContext ?: throw Exceptions.ReactContextLost()
|
|
323
|
+
val imageMap = RecordsHelper.convertToImageMap(context, mapData)
|
|
324
|
+
setImageMap(imageMap)
|
|
325
|
+
viewSetterProvider.setImageMap(imageMap, context)
|
|
326
|
+
} catch (e: Throwable) {
|
|
327
|
+
Log.e("ProgrammableWallet", "setImageMap failed", e)
|
|
328
|
+
throw CodedException(e)
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
Function("setDateFormat") { format: String ->
|
|
333
|
+
try {
|
|
334
|
+
layoutProvider.setDateFormat(format)
|
|
335
|
+
} catch (e: Throwable) {
|
|
336
|
+
throw CodedException(e)
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
Function("setDebugging") { isDebugging: Boolean ->
|
|
341
|
+
try {
|
|
342
|
+
Companion.debugging = isDebugging
|
|
343
|
+
layoutProvider.setDebugging(isDebugging)
|
|
344
|
+
} catch (e: Throwable) {
|
|
345
|
+
Log.e("ProgrammableWallet", "setDebugging failed", e)
|
|
346
|
+
throw CodedException(e)
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
Function("setCustomUserAgent") { userAgent: String ->
|
|
351
|
+
try {
|
|
352
|
+
WalletSdk.setCustomUserAgent(userAgent)
|
|
353
|
+
} catch (e: Throwable) {
|
|
354
|
+
Log.e("ProgrammableWallet", "setCustomUserAgent failed", e)
|
|
355
|
+
throw CodedException(e)
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
Function("setErrorStringMap") { mapData: Map<String, Any> ->
|
|
360
|
+
try {
|
|
361
|
+
val validatedMapData = RecordsHelper.filterValidErrorCodeKeys(mapData)
|
|
362
|
+
val errorStringMap = RecordsHelper.convertToErrorStringMap(validatedMapData)
|
|
363
|
+
layoutProvider.setErrorStringMap(errorStringMap)
|
|
364
|
+
} catch (e: Throwable) {
|
|
365
|
+
throw CodedException(e)
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
AsyncFunction("setValueAsync") { value: String ->
|
|
370
|
+
// Send an event to JavaScript.
|
|
371
|
+
sendEvent(
|
|
372
|
+
"onChange", mapOf(
|
|
373
|
+
"value" to value
|
|
374
|
+
)
|
|
375
|
+
)
|
|
376
|
+
}
|
|
175
377
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
@ExcludeFromGeneratedCCReport
|
|
185
|
-
@ReactMethod
|
|
186
|
-
override fun setBiometricsPin(
|
|
187
|
-
userToken: String?,
|
|
188
|
-
secretKey: String?,
|
|
189
|
-
promise: Promise?
|
|
190
|
-
) {
|
|
191
|
-
WalletSdk.setBiometricsPin(
|
|
192
|
-
currentActivity,
|
|
193
|
-
userToken,
|
|
194
|
-
secretKey,
|
|
195
|
-
PromiseCallback(promise, reactContext)
|
|
196
|
-
)
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
@ReactMethod
|
|
200
|
-
override fun performLogin(
|
|
201
|
-
provider: String,
|
|
202
|
-
deviceToken: String,
|
|
203
|
-
deviceEncryptionKey: String,
|
|
204
|
-
promise: Promise
|
|
205
|
-
) {
|
|
206
|
-
WalletSdk.performLogin(
|
|
207
|
-
currentActivity,
|
|
208
|
-
SocialProvider.valueOf(provider),
|
|
209
|
-
deviceToken,
|
|
210
|
-
deviceEncryptionKey,
|
|
211
|
-
PromiseSocialCallback(promise)
|
|
212
|
-
)
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
@ReactMethod
|
|
216
|
-
override fun verifyOTP(
|
|
217
|
-
otpToken: String,
|
|
218
|
-
deviceToken: String,
|
|
219
|
-
deviceEncryptionKey: String,
|
|
220
|
-
promise: Promise
|
|
221
|
-
) {
|
|
222
|
-
WalletSdk.verifyOTP(
|
|
223
|
-
currentActivity,
|
|
224
|
-
otpToken,
|
|
225
|
-
deviceToken,
|
|
226
|
-
deviceEncryptionKey,
|
|
227
|
-
PromiseCallback2(promise, reactContext)
|
|
228
|
-
)
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
@ReactMethod
|
|
232
|
-
override fun performLogout(
|
|
233
|
-
provider: String,
|
|
234
|
-
promise: Promise
|
|
235
|
-
) {
|
|
236
|
-
|
|
237
|
-
WalletSdk.performLogout(
|
|
238
|
-
currentActivity,
|
|
239
|
-
SocialProvider.valueOf(provider),
|
|
240
|
-
PromiseLogoutCallback(promise)
|
|
241
|
-
)
|
|
242
|
-
}
|
|
243
|
-
companion object {
|
|
244
|
-
const val NAME = "ProgrammablewalletRnSdk"
|
|
245
|
-
const val EVENT_NAME_ON_EVENT = "CirclePwOnEvent"
|
|
246
|
-
const val EVENT_NAME_ON_SUCCESS = "CirclePwOnSuccess"
|
|
247
|
-
const val EVENT_NAME_ON_ERROR = "CirclePwOnError"
|
|
248
|
-
val dismissOnCallbackMap: MutableMap<Int, Boolean> = HashMap()
|
|
249
|
-
fun setDismissOnCallbackMap(map: Map<Int, Boolean>) {
|
|
250
|
-
dismissOnCallbackMap.clear()
|
|
251
|
-
dismissOnCallbackMap.putAll(map)
|
|
378
|
+
|
|
379
|
+
override fun onEvent(event: ExecuteEvent) {
|
|
380
|
+
sendEvent(
|
|
381
|
+
"CirclePwOnEvent", mapOf(
|
|
382
|
+
"name" to event.name
|
|
383
|
+
)
|
|
384
|
+
)
|
|
252
385
|
}
|
|
253
|
-
}
|
|
254
386
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
387
|
+
companion object {
|
|
388
|
+
const val EVENT_NAME_ON_ERROR = "CirclePwOnError"
|
|
389
|
+
const val EVENT_NAME_ON_SUCCESS = "CirclePwOnSuccess"
|
|
390
|
+
|
|
391
|
+
val dismissOnCallbackMap: MutableMap<Int, Boolean> = HashMap()
|
|
392
|
+
val textConfigsMap: MutableMap<String, Array<circle.programmablewallet.sdk.presentation.TextConfig?>> = HashMap()
|
|
393
|
+
var debugging: Boolean = false
|
|
394
|
+
val imageMap: MutableMap<String, String> = HashMap()
|
|
395
|
+
|
|
396
|
+
fun setDismissOnCallbackMap(map: Map<Int, Boolean>) {
|
|
397
|
+
dismissOnCallbackMap.clear()
|
|
398
|
+
dismissOnCallbackMap.putAll(map)
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
fun setTextConfigsMap(map: Map<String, Array<circle.programmablewallet.sdk.presentation.TextConfig?>>) {
|
|
402
|
+
textConfigsMap.clear()
|
|
403
|
+
textConfigsMap.putAll(map)
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
fun setImageMap(map: Map<String, String>) {
|
|
407
|
+
imageMap.clear()
|
|
408
|
+
imageMap.putAll(map)
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
fun moveTaskToFront(activity: android.app.Activity) {
|
|
412
|
+
// Call the original WalletSdk.moveTaskToFront method
|
|
413
|
+
try {
|
|
414
|
+
circle.programmablewallet.sdk.WalletSdk.moveTaskToFront(activity)
|
|
415
|
+
} catch (e: Throwable) {
|
|
416
|
+
Log.e("ProgrammableWallet", "WalletSdk.moveTaskToFront failed", e)
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
fun moveRnTaskToFront(activity: android.app.Activity) {
|
|
421
|
+
// Use React Native Activity's taskId to bring it to front
|
|
422
|
+
try {
|
|
423
|
+
val am = activity.getSystemService(android.content.Context.ACTIVITY_SERVICE) as android.app.ActivityManager
|
|
424
|
+
am.moveTaskToFront(activity.taskId, android.app.ActivityManager.MOVE_TASK_NO_USER_ACTION)
|
|
425
|
+
} catch (e: Throwable) {
|
|
426
|
+
Log.e("ProgrammableWallet", "moveRnTaskToFront failed", e)
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
260
430
|
}
|