Skip to content

Commit ebcf5ab

Browse files
🔄 synced file(s) with circlefin/w3s-react-native-sdk-internal (#12)
2 parents ced2920 + 01cbea8 commit ebcf5ab

21 files changed

+925
-249
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
1515
Create a Personal Access Token in your [GitHub setting](https://github.com/settings/tokens). Use `Configure SSO` button next to your created token to authorize `circlefin` organization. More instruction can be found [here](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens). Then, log in to `npm` on your terminal.
1616

1717
```bash
18-
npm login --scope=@OWNER --registry=https://npm.pkg.github.com
18+
npm login --scope=@OWNER --registry=https://registry.npmjs.org
1919
```
2020
This will ask you to submit your GitHub personal access token as below.
2121
Check below links for creating GitHub PAT:
2222
- [Creating a fine-grained personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token)
2323
- [Creating a personal access token (classic)](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic)
2424

2525
```properties
26-
npm notice Log in on https://npm.pkg.github.com/
26+
npm notice Log in on https://registry.npmjs.org/
2727
Username: <insert your GitHub username here>
2828
Password: <insert your GitHub personal access token here>
2929
```
@@ -79,7 +79,7 @@ pwsdk.maven.password=<GITHUB_PAT>
7979
Add below links at tne top of `ios/Podfile`:
8080
```ruby
8181
source 'https://github.com/circlefin/w3s-ios-sdk.git'
82-
source 'https://cdn.cocoapods.org/'
82+
source 'https://github.com/CocoaPods/Specs.git'
8383

8484
platform :ios, '13.4'
8585
```

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ dependencies {
126126
//noinspection GradleDynamicVersion
127127
implementation "com.facebook.react:react-native:+"
128128
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
129-
implementation "circle.programmablewallet:sdk:1.0.+"
129+
implementation "circle.programmablewallet:sdk:1.0.1059"
130130
implementation 'com.github.bumptech.glide:glide:4.14.2'
131131
}
132132

android/src/main/java/com/circlefin/programmablewalletrnsdk/BridgeHelper.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import circle.programmablewallet.sdk.presentation.Resource
2727
import circle.programmablewallet.sdk.presentation.SecurityQuestion
2828
import circle.programmablewallet.sdk.presentation.SettingsManagement
2929
import circle.programmablewallet.sdk.presentation.TextConfig
30+
import com.circlefin.programmablewalletrnsdk.annotation.ExcludeFromGeneratedCCReport
3031
import com.circlefin.programmablewalletrnsdk.pwcustom.RnImageSetter
3132
import com.facebook.react.bridge.Arguments
3233
import com.facebook.react.bridge.ReadableArray
@@ -38,9 +39,12 @@ import java.lang.reflect.Modifier
3839
object BridgeHelper {
3940
private val TAG = BridgeHelper::class.java.simpleName
4041
val typefaceMap: MutableMap<String?, Typeface?> = HashMap()
42+
@ExcludeFromGeneratedCCReport
4143
var questionsForTest: Array<SecurityQuestion?>? = null
44+
@ExcludeFromGeneratedCCReport
4245
var dismissOnCallbackForTest: MutableMap<Int, Boolean>? = null
4346

47+
@ExcludeFromGeneratedCCReport
4448
fun objectToMap(obj: ExecuteWarning?): WritableMap {
4549
val map = Arguments.createMap()
4650
obj ?: return map
@@ -49,6 +53,7 @@ object BridgeHelper {
4953
return map
5054
}
5155

56+
@ExcludeFromGeneratedCCReport
5257
fun objectToMap(obj: ApiError?): WritableMap {
5358
val map = Arguments.createMap()
5459
obj ?: return map
@@ -57,6 +62,7 @@ object BridgeHelper {
5762
return map
5863
}
5964

65+
@ExcludeFromGeneratedCCReport
6066
@JvmStatic
6167
fun objectToMap(obj: Any?): WritableMap {
6268
val map = Arguments.createMap()
@@ -101,6 +107,7 @@ object BridgeHelper {
101107
return map
102108
}
103109

110+
@ExcludeFromGeneratedCCReport
104111
private fun objectToArray(array: Any?): WritableArray {
105112
val arr = Arguments.createArray()
106113
array ?: return arr
@@ -204,7 +211,7 @@ object BridgeHelper {
204211
fun getSettingsManagement(rnMap: ReadableMap?): SettingsManagement? {
205212
rnMap ?: return null
206213
val settingsMap = safeGetMap(rnMap, "settingsManagement") ?: return null
207-
return SettingsManagement(safeGetBoolean(settingsMap, "enableBiometricsPin"), safeGetBoolean(settingsMap, "disableConfirmationUI"))
214+
return SettingsManagement(safeGetBoolean(settingsMap, "enableBiometricsPin"))
208215
}
209216

210217
private fun safeGetBoolean(map: ReadableMap, key: String): Boolean{

android/src/main/java/com/circlefin/programmablewalletrnsdk/ProgrammablewalletRnSdkModule.kt

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ import android.app.ActivityManager
1919
import android.content.Context
2020
import circle.programmablewallet.sdk.WalletSdk
2121
import circle.programmablewallet.sdk.WalletSdk.execute
22-
import circle.programmablewallet.sdk.WalletSdk.executeWithUserSecret
2322
import circle.programmablewallet.sdk.WalletSdk.init
2423
import circle.programmablewallet.sdk.WalletSdk.setLayoutProvider
2524
import circle.programmablewallet.sdk.WalletSdk.setSecurityQuestions
2625
import circle.programmablewallet.sdk.WalletSdk.setViewSetterProvider
2726
import circle.programmablewallet.sdk.api.ExecuteEvent
27+
import circle.programmablewallet.sdk.api.SocialProvider
2828
import circle.programmablewallet.sdk.presentation.EventListener
29+
import com.circlefin.programmablewalletrnsdk.annotation.ExcludeFromGeneratedCCReport
2930
import com.circlefin.programmablewalletrnsdk.pwcustom.RnLayoutProvider
3031
import com.circlefin.programmablewalletrnsdk.pwcustom.RnViewSetterProvider
3132
import com.facebook.react.bridge.Arguments
@@ -51,6 +52,7 @@ class ProgrammablewalletRnSdkModule internal constructor(context: ReactApplicati
5152
setViewSetterProvider(viewSetterProvider)
5253
}
5354

55+
@ExcludeFromGeneratedCCReport
5456
override fun getName(): String {
5557
return NAME
5658
}
@@ -103,9 +105,10 @@ class ProgrammablewalletRnSdkModule internal constructor(context: ReactApplicati
103105
@ReactMethod
104106
override fun setDismissOnCallbackMap(readableMap: ReadableMap) {
105107
val map = BridgeHelper.getDismissOnCallbackMap(readableMap)
106-
PromiseCallback.setDismissOnCallbackMap(map)
108+
setDismissOnCallbackMap(map)
107109
}
108110

111+
@ExcludeFromGeneratedCCReport
109112
@ReactMethod
110113
override fun moveRnTaskToFront() {
111114
currentActivity?.let {
@@ -119,6 +122,7 @@ class ProgrammablewalletRnSdkModule internal constructor(context: ReactApplicati
119122
}
120123
}
121124

125+
@ExcludeFromGeneratedCCReport
122126
@ReactMethod
123127
override fun moveTaskToFront() {
124128
WalletSdk.moveTaskToFront(reactContext)
@@ -177,50 +181,78 @@ class ProgrammablewalletRnSdkModule internal constructor(context: ReactApplicati
177181
PromiseCallback(promise, reactContext)
178182
)
179183
}
180-
184+
@ExcludeFromGeneratedCCReport
181185
@ReactMethod
182-
override fun executeWithUserSecret(
186+
override fun setBiometricsPin(
183187
userToken: String?,
184188
secretKey: String?,
185-
userSecret: String?,
186-
challengeIdArr: ReadableArray,
187189
promise: Promise?
188190
) {
189-
val challengeIds = arrayOfNulls<String>(challengeIdArr.size())
190-
for (i in challengeIds.indices) {
191-
challengeIds[i] = challengeIdArr.getString(i)
192-
}
193-
executeWithUserSecret(
191+
WalletSdk.setBiometricsPin(
194192
currentActivity,
195193
userToken,
196194
secretKey,
197-
userSecret,
198-
challengeIds,
199195
PromiseCallback(promise, reactContext)
200196
)
201197
}
202198

203199
@ReactMethod
204-
override fun setBiometricsPin(
205-
userToken: String?,
206-
secretKey: String?,
207-
promise: Promise?
200+
override fun performLogin(
201+
provider: String,
202+
deviceToken: String,
203+
deviceEncryptionKey: String,
204+
promise: Promise
208205
) {
209-
WalletSdk.setBiometricsPin(
206+
WalletSdk.performLogin(
210207
currentActivity,
211-
userToken,
212-
secretKey,
213-
PromiseCallback(promise, reactContext)
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)
214228
)
215229
}
216230

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+
}
217243
companion object {
218244
const val NAME = "ProgrammablewalletRnSdk"
219245
const val EVENT_NAME_ON_EVENT = "CirclePwOnEvent"
220246
const val EVENT_NAME_ON_SUCCESS = "CirclePwOnSuccess"
221247
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)
252+
}
222253
}
223254

255+
@ExcludeFromGeneratedCCReport
224256
override fun onEvent(event: ExecuteEvent) {
225257
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
226258
.emit(EVENT_NAME_ON_EVENT, event.name)

android/src/main/java/com/circlefin/programmablewalletrnsdk/PromiseCallback.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import circle.programmablewallet.sdk.api.ApiError
2020
import circle.programmablewallet.sdk.api.Callback
2121
import circle.programmablewallet.sdk.api.ExecuteWarning
2222
import com.circlefin.programmablewalletrnsdk.BridgeHelper.objectToMap
23+
import com.circlefin.programmablewalletrnsdk.annotation.ExcludeFromGeneratedCCReport
2324
import com.facebook.react.bridge.Arguments
2425
import com.facebook.react.bridge.Promise
2526
import com.facebook.react.bridge.ReactApplicationContext
@@ -30,10 +31,12 @@ class PromiseCallback<R> internal constructor(
3031
private val context: ReactApplicationContext
3132
) : Callback<R> {
3233
private var result: R? = null
34+
35+
@ExcludeFromGeneratedCCReport
3336
override fun onError(error: Throwable): Boolean {
3437
Log.w(TAG, "onError: ", error)
3538
if (error is ApiError) {
36-
val isDismiss = java.lang.Boolean.TRUE == dismissOnCallbackMap[error.code.value]
39+
val isDismiss = java.lang.Boolean.TRUE == ProgrammablewalletRnSdkModule.dismissOnCallbackMap[error.code.value]
3740
if (isDismiss) {
3841
promise?.reject(error.code.value.toString(), error.message, error)
3942
} else {
@@ -57,8 +60,9 @@ class PromiseCallback<R> internal constructor(
5760
promise.resolve(map)
5861
}
5962

63+
@ExcludeFromGeneratedCCReport
6064
override fun onWarning(warning: ExecuteWarning, result: R?): Boolean {
61-
val isDismiss = java.lang.Boolean.TRUE == dismissOnCallbackMap[warning.warningType]
65+
val isDismiss = java.lang.Boolean.TRUE == ProgrammablewalletRnSdkModule.dismissOnCallbackMap[warning.warningType]
6266
val map = Arguments.createMap()
6367
if (result == null) {
6468
map.putMap("result", objectToMap(this.result))
@@ -80,10 +84,5 @@ class PromiseCallback<R> internal constructor(
8084

8185
companion object {
8286
private val TAG = PromiseCallback::class.java.simpleName
83-
val dismissOnCallbackMap: MutableMap<Int, Boolean> = HashMap()
84-
fun setDismissOnCallbackMap(map: Map<Int, Boolean>) {
85-
dismissOnCallbackMap.clear()
86-
dismissOnCallbackMap.putAll(map)
87-
}
8887
}
8988
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// Copyright (c) 2024, Circle Internet Financial, LTD. All rights reserved.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
//
5+
// Licensed under the Apache License, Version 2.0 (the "License");
6+
// you may not use this file except in compliance with the License.
7+
// You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing, software
12+
// distributed under the License is distributed on an "AS IS" BASIS,
13+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
// See the License for the specific language governing permissions and
15+
// limitations under the License.
16+
package com.circlefin.programmablewalletrnsdk
17+
18+
import android.util.Log
19+
import circle.programmablewallet.sdk.api.ApiError
20+
import circle.programmablewallet.sdk.api.Callback
21+
import circle.programmablewallet.sdk.api.Callback2
22+
import circle.programmablewallet.sdk.api.ExecuteWarning
23+
import com.circlefin.programmablewalletrnsdk.BridgeHelper.objectToMap
24+
import com.circlefin.programmablewalletrnsdk.annotation.ExcludeFromGeneratedCCReport
25+
import com.facebook.react.bridge.Arguments
26+
import com.facebook.react.bridge.Promise
27+
import com.facebook.react.bridge.ReactApplicationContext
28+
import com.facebook.react.modules.core.DeviceEventManagerModule
29+
30+
class PromiseCallback2<R> internal constructor(
31+
private val promise: Promise?,
32+
private val context: ReactApplicationContext
33+
) : Callback2<R> {
34+
35+
@ExcludeFromGeneratedCCReport
36+
override fun onError(error: Throwable): Boolean {
37+
Log.w(TAG, "onError: ", error)
38+
if (error is ApiError) {
39+
val isDismiss = java.lang.Boolean.TRUE == ProgrammablewalletRnSdkModule.dismissOnCallbackMap[error.code.value]
40+
if (isDismiss) {
41+
promise?.reject(error.code.value.toString(), error.message, error)
42+
} else {
43+
val map = objectToMap(error)
44+
context.getJSModule(
45+
DeviceEventManagerModule.RCTDeviceEventEmitter::class.java
46+
)
47+
.emit(ProgrammablewalletRnSdkModule.EVENT_NAME_ON_ERROR, map)
48+
}
49+
return !isDismiss
50+
} else {
51+
promise?.reject(RuntimeException(error.message))
52+
}
53+
return false
54+
}
55+
56+
@ExcludeFromGeneratedCCReport
57+
override fun onResult(result: R) {
58+
promise ?: return
59+
promise.resolve(objectToMap(result))
60+
}
61+
62+
companion object {
63+
private val TAG = PromiseCallback2::class.java.simpleName
64+
}
65+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Copyright (c) 2024, Circle Internet Financial, LTD. All rights reserved.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
//
5+
// Licensed under the Apache License, Version 2.0 (the "License");
6+
// you may not use this file except in compliance with the License.
7+
// You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing, software
12+
// distributed under the License is distributed on an "AS IS" BASIS,
13+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
// See the License for the specific language governing permissions and
15+
// limitations under the License.
16+
package com.circlefin.programmablewalletrnsdk
17+
18+
import android.util.Log
19+
import circle.programmablewallet.sdk.api.ApiError
20+
import circle.programmablewallet.sdk.api.LogoutCallback
21+
import com.circlefin.programmablewalletrnsdk.annotation.ExcludeFromGeneratedCCReport
22+
import com.facebook.react.bridge.Promise
23+
24+
class PromiseLogoutCallback internal constructor(
25+
private val promise: Promise?,
26+
) : LogoutCallback {
27+
28+
@ExcludeFromGeneratedCCReport
29+
override fun onError(error: Throwable) {
30+
Log.w(TAG, "onError: ", error)
31+
if (error is ApiError) {
32+
promise?.reject(error.code.value.toString(), error.message, error)
33+
} else {
34+
promise?.reject(RuntimeException(error.message))
35+
}
36+
}
37+
38+
override fun onComplete() {
39+
promise ?: return
40+
promise.resolve(null)
41+
}
42+
43+
44+
companion object {
45+
private val TAG = PromiseLogoutCallback::class.java.simpleName
46+
}
47+
}

0 commit comments

Comments
 (0)