Skip to content

Commit 0580ef4

Browse files
committed
Merge branch 'staging'
2 parents c4e9b26 + 0bcd92c commit 0580ef4

78 files changed

Lines changed: 2624 additions & 1380 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.editorconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@ indent_size = 2
77
indent_style = space
88
insert_final_newline = true
99
trim_trailing_whitespace = true
10+
11+
[*.{kt,kts}]
12+
max_line_length = 100

CHANGELOG.md

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,36 @@
22

33
## Unreleased (develop)
44

5-
## 4.43.2 (2025-02-15)
6-
7-
- fixed: (Zano) Reject wrapped ETH addresses in address validation.
5+
## 4.44.0 (staging)
6+
7+
- added: MAYAChain (CACAO) wallet support
8+
- added: Monad (MON) wallet support
9+
- added: Nym (NYM) wallet support
10+
- added: opBNB (BNB) support
11+
- added: Price impact warning on swap confirmation with color-coded severity
12+
- added: Register SwapKit V3 as a separate exchange plugin
13+
- added: Warning card on send scene when Nym mixnet is active and transaction is loading
14+
- added: Verify buy tracking values via Moonpay transactions API with mismatch diagnostics
15+
- added: Show performance warning when enabling Nym Mixnet on multiple assets
16+
- added: Gift card account information scene with Get Help access from kebab menu and failed cards
17+
- added: Quote ID display in gift card transaction details with card-level copy
18+
- changed: Distinguish network vs service errors in gift card scenes
19+
- changed: Lock network fee to high priority for gift card purchases
20+
- changed: Pad gift card purchase quantity by 0.00000002 to mitigate underpayments
21+
- changed: Manage tokens scene saves changes on explicit save instead of live toggling
22+
- changed: Unify split wallet scene titles and add chain-specific descriptions for EVM and UTXO splits
23+
- changed: ramps: Infinite buy support enabled
24+
- changed: Update Coreum display names to TX branding
25+
- fixed: Missing 2-factor approve / deny scene on login
26+
- fixed: Security check notification not reappearing after dismissal
27+
- fixed: Fix incorrect Moonpay buy tracking values caused by deeplink handler overwrite
828

9-
## 4.43.1 (2025-02-13)
29+
## 4.43.1 (2026-02-13)
1030

1131
- fixed: Missing 2-factor approve / deny scene on login
1232
- fixed: Security check notification not reappearing after dismissal
1333

14-
## 4.43.0 (2025-02-09)
34+
## 4.43.0 (2026-02-09)
1535

1636
- added: `chooseCaip19Asset` EdgeProvider API for precise wallet selection using CAIP-19 identifiers
1737
- added: EdgeSpend feature for gift card purchase via Phaze
@@ -23,6 +43,7 @@
2343
- changed: Append chain names to token codes in RampCreateScene
2444
- changed: Light mode persistence, theme colors, and images
2545
- changed: ramps: Infinite buy support enabled
46+
- fixed: Handle parallel wallet splits more reliably
2647
- fixed: iOS simulator builds for XCode 26
2748

2849
## 4.42.1 (2026-01-28)

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ apply plugin: "com.facebook.react"
55
// Edge build plugins:
66
apply plugin: "com.google.gms.google-services"
77
apply plugin: "io.sentry.android.gradle"
8-
apply plugin: "tech.formatter-kt.formatter"
8+
apply plugin: "org.jlleitschuh.gradle.ktlint"
99

1010
import com.android.build.OutputFile
1111

@@ -313,7 +313,7 @@ if (!sentrySlug.contains('SENTRY_ORGANIZATION')) {
313313
// as Gradle will resolve it to the latest version.
314314
//
315315
// Defaults to the latest published Sentry version.
316-
sentryVersion = '7.9.0'
316+
sentryVersion = '8.0.0'
317317
}
318318

319319
// Disables or enables dependencies metadata reporting for Sentry.

android/app/src/main/java/co/edgesecure/app/MainActivity.kt

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,38 +10,38 @@ import com.facebook.react.defaults.DefaultReactActivityDelegate
1010
import com.zoontek.rnbootsplash.RNBootSplash
1111

1212
class MainActivity : ReactActivity() {
13-
/**
14-
* Returns the name of the main component registered from JavaScript. This is used to schedule
15-
* rendering of the component.
16-
*/
17-
override fun getMainComponentName(): String = "edge"
13+
/**
14+
* Returns the name of the main component registered from JavaScript. This is used to schedule
15+
* rendering of the component.
16+
*/
17+
override fun getMainComponentName(): String = "edge"
1818

19-
/**
20-
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
21-
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
22-
*/
23-
override fun createReactActivityDelegate(): ReactActivityDelegate =
24-
DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
19+
/**
20+
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
21+
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
22+
*/
23+
override fun createReactActivityDelegate(): ReactActivityDelegate =
24+
DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
2525

26-
// Edge addition
27-
override fun onCreate(savedInstanceState: Bundle?) {
28-
// Keep the splash screen around until we are ready to hide it:
29-
RNBootSplash.init(this, R.style.BootTheme);
30-
super.onCreate(null)
26+
// Edge addition
27+
override fun onCreate(savedInstanceState: Bundle?) {
28+
// Keep the splash screen around until we are ready to hide it:
29+
RNBootSplash.init(this, R.style.BootTheme)
30+
super.onCreate(null)
3131

32-
// Hide app contents in the background:
33-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
34-
setRecentsScreenshotEnabled(false);
35-
}
36-
37-
// Lock the app to portrait mode:
38-
if (resources.getBoolean(R.bool.portrait_only)) {
39-
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
40-
}
32+
// Hide app contents in the background:
33+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
34+
setRecentsScreenshotEnabled(false)
4135
}
4236

43-
// Edge addition
44-
override fun invokeDefaultOnBackPressed() {
45-
moveTaskToBack(true)
37+
// Lock the app to portrait mode:
38+
if (resources.getBoolean(R.bool.portrait_only)) {
39+
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
4640
}
41+
}
42+
43+
// Edge addition
44+
override fun invokeDefaultOnBackPressed() {
45+
moveTaskToBack(true)
46+
}
4747
}

android/app/src/main/java/co/edgesecure/app/MainApplication.kt

Lines changed: 78 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -23,95 +23,96 @@ import io.sentry.SentryOptions.BeforeBreadcrumbCallback
2323
import io.sentry.SentryOptions.BeforeSendCallback
2424
import io.sentry.android.core.SentryAndroid
2525

26-
class MainApplication : Application(), ReactApplication {
27-
28-
override val reactNativeHost: ReactNativeHost =
29-
ReactNativeHostWrapper(
30-
this,
31-
object : DefaultReactNativeHost(this) {
26+
class MainApplication :
27+
Application(),
28+
ReactApplication {
29+
override val reactNativeHost: ReactNativeHost =
30+
ReactNativeHostWrapper(
31+
this,
32+
object : DefaultReactNativeHost(this) {
33+
override fun getPackages(): List<ReactPackage> {
34+
// Packages that cannot be autolinked yet can be added manually here, for
35+
// example:
36+
// packages.add(new MyReactNativePackage());
37+
return PackageList(this).packages
38+
}
3239

33-
override fun getPackages(): List<ReactPackage> {
34-
// Packages that cannot be autolinked yet can be added manually here, for
35-
// example:
36-
// packages.add(new MyReactNativePackage());
37-
return PackageList(this).packages
38-
}
40+
override fun getJSMainModuleName(): String = "index"
3941

40-
override fun getJSMainModuleName(): String = "index"
42+
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
4143

42-
override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
44+
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
45+
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
46+
},
47+
)
4348

44-
override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
45-
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
46-
}
47-
)
49+
override val reactHost: ReactHost
50+
get() = getDefaultReactHost(applicationContext, reactNativeHost)
4851

49-
override val reactHost: ReactHost
50-
get() = getDefaultReactHost(applicationContext, reactNativeHost)
52+
override fun onCreate() {
53+
super.onCreate()
54+
val context = applicationContext
5155

52-
override fun onCreate() {
53-
super.onCreate()
54-
val context = applicationContext
56+
// Retrieve the version string from the app's BuildConfig
57+
val versionString = BuildConfig.VERSION_NAME
5558

56-
// Retrieve the version string from the app's BuildConfig
57-
val versionString = BuildConfig.VERSION_NAME
59+
if ("SENTRY_DSN_URL".contains("SENTRY_DSN")) {
60+
// Sentry disabled. Need to add sentry keys to env.json
61+
} else {
62+
SentryAndroid.init(this) { options ->
63+
options.dsn = "SENTRY_DSN_URL"
5864

59-
if ("SENTRY_DSN_URL".contains("SENTRY_DSN")) {
60-
// Sentry disabled. Need to add sentry keys to env.json
65+
if (versionString == "99.99.99") {
66+
options.environment = "development"
67+
} else if (versionString.contains("-")) {
68+
options.environment = "testing"
6169
} else {
62-
SentryAndroid.init(this) { options ->
63-
options.dsn = "SENTRY_DSN_URL"
64-
65-
if (versionString == "99.99.99") {
66-
options.environment = "development"
67-
} else if (versionString.contains("-")) {
68-
options.environment = "testing"
69-
} else {
70-
options.environment = "production"
71-
}
72-
73-
options.beforeBreadcrumb =
74-
BeforeBreadcrumbCallback { breadcrumb, hint ->
75-
if ("network.event" == breadcrumb.category ||
76-
"http" == breadcrumb.category || "console" == breadcrumb.category
77-
) {
78-
null
79-
} else {
80-
breadcrumb
81-
}
82-
}
83-
// Add a callback that will be used before the event is sent to Sentry.
84-
// With this callback, you can modify the event or, when returning null, also
85-
// discard the event.
86-
options.beforeSend =
87-
BeforeSendCallback { event: SentryEvent, hint: Hint ->
88-
if (SentryLevel.DEBUG == event.level) {
89-
null
90-
} else {
91-
event
92-
}
93-
}
94-
}
70+
options.environment = "production"
9571
}
9672

97-
// Disable RTL
98-
val sharedI18nUtilInstance = I18nUtil.getInstance()
99-
sharedI18nUtilInstance.allowRTL(context, false)
100-
101-
// Background task:
102-
MessagesWorker.ensureScheduled(context)
103-
// MessagesWorker.testRun(context);
104-
SoLoader.init(this, OpenSourceMergedSoMapping)
105-
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
106-
// If you opted-in for the New Architecture, we load the native entry point for this
107-
// app.
108-
load()
109-
}
110-
onApplicationCreate(this)
73+
options.beforeBreadcrumb =
74+
BeforeBreadcrumbCallback { breadcrumb, hint ->
75+
if ("network.event" == breadcrumb.category ||
76+
"http" == breadcrumb.category ||
77+
"console" == breadcrumb.category
78+
) {
79+
null
80+
} else {
81+
breadcrumb
82+
}
83+
}
84+
// Add a callback that will be used before the event is sent to Sentry.
85+
// With this callback, you can modify the event or, when returning null, also
86+
// discard the event.
87+
options.beforeSend =
88+
BeforeSendCallback { event: SentryEvent, hint: Hint ->
89+
if (SentryLevel.DEBUG == event.level) {
90+
null
91+
} else {
92+
event
93+
}
94+
}
95+
}
11196
}
11297

113-
override fun onConfigurationChanged(newConfig: Configuration) {
114-
super.onConfigurationChanged(newConfig)
115-
onConfigurationChanged(this, newConfig)
98+
// Disable RTL
99+
val sharedI18nUtilInstance = I18nUtil.getInstance()
100+
sharedI18nUtilInstance.allowRTL(context, false)
101+
102+
// Background task:
103+
MessagesWorker.ensureScheduled(context)
104+
// MessagesWorker.testRun(context);
105+
SoLoader.init(this, OpenSourceMergedSoMapping)
106+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
107+
// If you opted-in for the New Architecture, we load the native entry point for this
108+
// app.
109+
load()
116110
}
111+
onApplicationCreate(this)
112+
}
113+
114+
override fun onConfigurationChanged(newConfig: Configuration) {
115+
super.onConfigurationChanged(newConfig)
116+
onConfigurationChanged(this, newConfig)
117+
}
117118
}

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ buildscript {
2323

2424
// Edge additions:
2525
classpath 'com.google.gms:google-services:4.3.14'
26-
classpath "gradle.plugin.tech.formatter-kt:plugin:0.7.9"
2726
classpath "io.sentry:sentry-android-gradle-plugin:5.7.0"
27+
classpath "org.jlleitschuh.gradle:ktlint-gradle:14.0.1"
2828
}
2929
}
3030

eslint.config.mjs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,6 @@ export default [
230230
'src/components/progress-indicators/StepProgressBar.tsx',
231231

232232
'src/components/rows/CryptoFiatAmountRow.tsx',
233-
'src/components/rows/CurrencyRow.tsx',
234233

235234
'src/components/rows/EdgeRow.tsx',
236235

@@ -244,7 +243,7 @@ export default [
244243
'src/components/scenes/CreateWalletAccountSelectScene.tsx',
245244
'src/components/scenes/CreateWalletAccountSetupScene.tsx',
246245
'src/components/scenes/CreateWalletCompletionScene.tsx',
247-
'src/components/scenes/CreateWalletEditNameScene.tsx',
246+
248247
'src/components/scenes/CreateWalletImportOptionsScene.tsx',
249248
'src/components/scenes/CreateWalletImportScene.tsx',
250249

@@ -296,7 +295,6 @@ export default [
296295
'src/components/scenes/SpendingLimitsScene.tsx',
297296
'src/components/scenes/Staking/EarnScene.tsx',
298297

299-
'src/components/scenes/SwapProcessingScene.tsx',
300298
'src/components/scenes/SwapSettingsScene.tsx',
301299
'src/components/scenes/SwapSuccessScene.tsx',
302300
'src/components/scenes/SweepPrivateKeyCalculateFeeScene.tsx',
@@ -323,7 +321,7 @@ export default [
323321
'src/components/services/FioService.ts',
324322
'src/components/services/LoanManagerService.ts',
325323
'src/components/services/NetworkActivity.ts',
326-
324+
'src/components/services/PasswordReminderService.ts',
327325
'src/components/services/PermissionsManager.tsx',
328326
'src/components/services/Providers.tsx',
329327

@@ -376,7 +374,7 @@ export default [
376374
'src/components/themed/Title.tsx',
377375
'src/components/themed/TransactionListComponents.tsx',
378376
'src/components/themed/TransactionListRow.tsx',
379-
'src/components/themed/TransactionListTop.tsx',
377+
380378
'src/components/themed/VectorIcon.tsx',
381379
'src/components/themed/WalletList.tsx',
382380

@@ -428,7 +426,7 @@ export default [
428426
'src/hooks/useLayout.ts',
429427
'src/hooks/useLayoutOnce.ts',
430428
'src/hooks/useMount.ts',
431-
'src/hooks/usePendingPress.ts',
429+
432430
'src/hooks/useRefresher.ts',
433431
'src/hooks/useScrollToEnd.ts',
434432
'src/hooks/useSharedEvent.ts',

0 commit comments

Comments
 (0)