From d1891f3098c1cd33b951314564c85848513acb72 Mon Sep 17 00:00:00 2001
From: Pauloneo
Date: Wed, 8 Jul 2026 07:55:43 -0400
Subject: [PATCH 1/7] Fix Windows path handling for builtin protocol modules
---
copy-builtin-modules.js | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/copy-builtin-modules.js b/copy-builtin-modules.js
index 97c987e5..b397267b 100644
--- a/copy-builtin-modules.js
+++ b/copy-builtin-modules.js
@@ -57,7 +57,7 @@ const communityModules = [{ path: path.join(rootdir, 'node_modules/@airgap-commu
function createAirGapModule(module) {
const packageJson = require(`./${path.join(module.path, 'package.json')}`)
- const namespace = module.path.split('/').slice(-1)[0]
+ const namespace = path.basename(module.path)
const outputDir = path.join(assetsdir, `protocol_modules/${namespace}`)
const outputFile = 'index.browserify.js'
@@ -84,7 +84,8 @@ function createAirGapModule(module) {
}
function copyCommunityModule(module) {
- const namespace = module.path.split('/').slice(-1)[0]
+ console.log('MODULE PATH:', module.path)
+ const namespace = path.basename(module.path)
const outputDir = path.join(assetsdir, `protocol_modules/${namespace}`)
fs.mkdirSync(outputDir, { recursive: true })
From 43256746cbad0ffd1395ca378fdee34ff5e20898 Mon Sep 17 00:00:00 2001
From: Pauloneo
Date: Wed, 8 Jul 2026 08:28:48 -0400
Subject: [PATCH 2/7] Display master fingerprint for passphrase wallets
---
.../account-address/account-address.page.html | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/app/pages/account-address/account-address.page.html b/src/app/pages/account-address/account-address.page.html
index 2e363bfc..ece78461 100644
--- a/src/app/pages/account-address/account-address.page.html
+++ b/src/app/pages/account-address/account-address.page.html
@@ -34,9 +34,19 @@ {{ protocolName }} {{ protocolSymbol }}
{{ wallet.derivationPath }}
- HD Wallet
- BIP39 passphrase
-
+
+ HD Wallet
+
+
+
+ Master Fingerprint:
+ {{ wallet.masterFingerprint }}
+
+
+
+ BIP39 Passphrase
+
+
From d1e9bff20c8ac75cee776f587ca7342ba05b9800 Mon Sep 17 00:00:00 2001
From: Pauloneo
Date: Thu, 9 Jul 2026 12:21:14 -0400
Subject: [PATCH 3/7] Add wallet label display and fix account item layout
---
src/app/pages/account-add/account-add.page.html | 11 +++++++++++
src/app/pages/account-add/account-add.page.ts | 14 ++++++++------
src/app/services/secrets/secrets.service.ts | 2 ++
3 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/src/app/pages/account-add/account-add.page.html b/src/app/pages/account-add/account-add.page.html
index f91cd71c..fe62baa7 100644
--- a/src/app/pages/account-add/account-add.page.html
+++ b/src/app/pages/account-add/account-add.page.html
@@ -57,6 +57,17 @@
+
+
+ Nome da conta
+
+
+
+
+
BIP-39 Passphrase
diff --git a/src/app/pages/account-add/account-add.page.ts b/src/app/pages/account-add/account-add.page.ts
index 5cc4c58c..42ab63ae 100644
--- a/src/app/pages/account-add/account-add.page.ts
+++ b/src/app/pages/account-add/account-add.page.ts
@@ -46,6 +46,7 @@ export class AccountAddPage {
public isBip39PassphraseEnabled: boolean = BIP39_PASSPHRASE_ENABLED
public revealBip39Passphrase: boolean = false
public bip39Passphrase: string = ''
+ public accountLabel: string = ''
public isAppAdvancedMode$: Observable = this.storageService
.subscribe(VaultStorageKey.ADVANCED_MODE_TYPE)
@@ -182,12 +183,13 @@ export class AccountAddPage {
selectedProtocols.map(async (protocolWrapper: ProtocolWrapper) => {
const protocol = protocolWrapper.protocol
return {
- protocolIdentifier: await protocol.getIdentifier(),
- isHDWallet: protocolWrapper.isHDWallet,
- customDerivationPath: protocolWrapper.customDerivationPath ?? (await protocol.getStandardDerivationPath()),
- bip39Passphrase: this.bip39Passphrase,
- isActive: true
- }
+ protocolIdentifier: await protocol.getIdentifier(),
+ isHDWallet: protocolWrapper.isHDWallet,
+ customDerivationPath: protocolWrapper.customDerivationPath ?? (await protocol.getStandardDerivationPath()),
+ bip39Passphrase: this.bip39Passphrase,
+ isActive: true,
+ label: this.accountLabel
+ }
})
)
)
diff --git a/src/app/services/secrets/secrets.service.ts b/src/app/services/secrets/secrets.service.ts
index 8053cf18..0a709304 100644
--- a/src/app/services/secrets/secrets.service.ts
+++ b/src/app/services/secrets/secrets.service.ts
@@ -53,6 +53,7 @@ interface AddWalletConifg {
customDerivationPath: string
bip39Passphrase: string
isActive: boolean
+ label?: string
}
@Injectable({
providedIn: 'root'
@@ -624,6 +625,7 @@ export class SecretsService {
const addresses: string[] = await wallet.deriveAddresses(1)
wallet.addresses = addresses
+ wallet.label = config.label
return wallet
}
From 56c6f580f0ea9639d6a39ba012c92eddb9901878 Mon Sep 17 00:00:00 2001
From: Pauloneo
Date: Thu, 9 Jul 2026 12:22:23 -0400
Subject: [PATCH 4/7] Add wallet label display and fix account item layout
---
src/app/app.scss | 9 +++++++++
src/app/pages/accounts-list/accounts-list.page.html | 4 ++--
src/app/services/secrets/secrets.service.ts | 1 +
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/app/app.scss b/src/app/app.scss
index 2d2a3f7d..a23e716d 100644
--- a/src/app/app.scss
+++ b/src/app/app.scss
@@ -129,3 +129,12 @@ pre {
.transparent {
--background: none transparent !important;
}
+
+airgap-account-item ion-label div {
+ display: block !important;
+}
+
+airgap-account-item ion-label div p {
+ text-align: left;
+ margin-left: 0;
+}
\ No newline at end of file
diff --git a/src/app/pages/accounts-list/accounts-list.page.html b/src/app/pages/accounts-list/accounts-list.page.html
index faef75db..5f7e9cf5 100644
--- a/src/app/pages/accounts-list/accounts-list.page.html
+++ b/src/app/pages/accounts-list/accounts-list.page.html
@@ -31,12 +31,12 @@
-
+
-
+
diff --git a/src/app/services/secrets/secrets.service.ts b/src/app/services/secrets/secrets.service.ts
index 0a709304..10ad0fcd 100644
--- a/src/app/services/secrets/secrets.service.ts
+++ b/src/app/services/secrets/secrets.service.ts
@@ -126,6 +126,7 @@ export class SecretsService {
serializedWallet.status ?? AirGapWalletStatus.ACTIVE
)
airGapWallet.addresses = serializedWallet.addresses
+ airGapWallet.label = serializedWallet.label
return airGapWallet
})
)
From b01cade4996bda52946defa8444e7392ea72620f Mon Sep 17 00:00:00 2001
From: Pauloneo
Date: Thu, 9 Jul 2026 17:06:24 -0400
Subject: [PATCH 5/7] Corrige salvamento do label das contas
---
src/app/services/iac/iac.service.ts | 1 +
src/app/services/secrets/secrets.service.ts | 24 +++++++++++++++++----
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/src/app/services/iac/iac.service.ts b/src/app/services/iac/iac.service.ts
index 2ab1c1e2..3371e1fb 100644
--- a/src/app/services/iac/iac.service.ts
+++ b/src/app/services/iac/iac.service.ts
@@ -330,6 +330,7 @@ export class IACService extends BaseIACService {
baseWallet.status
)
correctWallet.addresses = baseWallet.addresses
+ correctWallet.label = baseWallet.label
} catch (e) {
if (e.message === 'PROTOCOL_NOT_SUPPORTED') {
correctWallet = baseWallet
diff --git a/src/app/services/secrets/secrets.service.ts b/src/app/services/secrets/secrets.service.ts
index 10ad0fcd..2b5122f6 100644
--- a/src/app/services/secrets/secrets.service.ts
+++ b/src/app/services/secrets/secrets.service.ts
@@ -127,6 +127,7 @@ export class SecretsService {
)
airGapWallet.addresses = serializedWallet.addresses
airGapWallet.label = serializedWallet.label
+
return airGapWallet
})
)
@@ -496,8 +497,12 @@ export class SecretsService {
if (storedSecret === undefined) {
return secret
}
- const wallets: SerializedAirGapWallet[] = await Promise.all(secret.wallets.slice(0).map((wallet: AirGapWallet) => wallet.toJSON()))
- for (let i = 0; i < storedSecret.wallets.length; ++i) {
+
+ const wallets: SerializedAirGapWallet[] = await Promise.all(
+ secret.wallets.slice(0).map((wallet: AirGapWallet) => wallet.toJSON())
+ )
+
+ for (let i = 0; i < storedSecret.wallets.length; ++i) {
const serializedWallet = storedSecret.wallets[i] as unknown as SerializedAirGapWallet
const filtered: (AirGapWallet | SerializedAirGapWallet | undefined)[] = await Promise.all(
@@ -515,9 +520,20 @@ export class SecretsService {
wallets.push(serializedWallet)
}
}
+
const result = MnemonicSecret.init(secret)
- result.wallets = wallets as unknown as AirGapWallet[]
- return result
+ result.wallets = wallets.map((wallet: SerializedAirGapWallet) => {
+ const original = secret.wallets.find(
+ (w) => w.publicKey === wallet.publicKey
+ )
+
+ return {
+ ...wallet,
+ label: original?.label ?? wallet.label ?? ''
+ } as unknown as AirGapWallet
+})
+
+return result
})
)
From dc6c188b851709038a95fc65b1a4a22da3dec9b4 Mon Sep 17 00:00:00 2001
From: Pauloneo
Date: Wed, 15 Jul 2026 14:44:57 -0400
Subject: [PATCH 6/7] Fix Sonar derivation path parsing warnings
---
src/app/services/secrets/secrets.service.ts | 48 ++++++++++++++++++---
1 file changed, 41 insertions(+), 7 deletions(-)
diff --git a/src/app/services/secrets/secrets.service.ts b/src/app/services/secrets/secrets.service.ts
index 2b5122f6..97f3441a 100644
--- a/src/app/services/secrets/secrets.service.ts
+++ b/src/app/services/secrets/secrets.service.ts
@@ -301,13 +301,30 @@ export class SecretsService {
if (isBtc) {
// BTC protocols: Always HD, increment account index
- const lastIndices = existingWallets.map((wallet) => {
- const match = wallet.derivationPath.match(/(\d+)[h']?\/?$/)
- return match ? parseInt(match[1], 10) : 0
+
+ const lastIndices = existingWallets.map((wallet) => {
+ const lastPart = wallet.derivationPath.split('/').pop() ?? ''
+ const index = lastPart.replace(/[h']/g, '')
+
+ return Number(index) || 0
})
const maxIndex = Math.max(...lastIndices)
const nextIndex = maxIndex + 1
- const newPath = standardPath.replace(/(\d+)([h']?)(\/?)?$/, `${nextIndex}$2$3`)
+ const parts = standardPath.split('/')
+ const last = parts.pop() ?? ''
+
+ let suffix = ''
+
+ if (last.endsWith("'")) {
+ suffix = "'"
+ } else if (last.endsWith('h')) {
+ suffix = 'h'
+ }
+
+ parts.push(`${nextIndex}${suffix}`)
+
+ const newPath = parts.join('/')
+
return { derivationPath: newPath, isHDWallet: true }
} else if (supportsHD) {
// HD-capable protocols (ETH, OP, etc.): First is HD, subsequent are non-HD
@@ -318,8 +335,10 @@ export class SecretsService {
return 0
}
// Non-HD wallet - extract last number from path
- const match = wallet.derivationPath.match(/\/(\d+)$/)
- return match ? parseInt(match[1], 10) : 0
+ const lastPart = wallet.derivationPath.split('/').pop() ?? ''
+ const index = lastPart.replace(/[h']/g, '')
+
+ return Number(index) || 0
})
const maxIndex = Math.max(...addressIndices)
const nextIndex = maxIndex + 1
@@ -333,7 +352,22 @@ export class SecretsService {
})
const maxIndex = Math.max(...lastIndices)
const nextIndex = maxIndex + 1
- const newPath = standardPath.replace(/(\d+)([h']?)(\/?)?$/, `${nextIndex}$2$3`)
+
+ const parts = standardPath.split('/')
+ const last = parts.pop() ?? ''
+
+ let suffix = ''
+
+ if (last.endsWith("'")) {
+ suffix = "'"
+ } else if (last.endsWith('h')) {
+ suffix = 'h'
+ }
+
+ parts.push(`${nextIndex}${suffix}`)
+
+ const newPath = parts.join('/')
+
return { derivationPath: newPath, isHDWallet: false }
}
}
From 906e3bd83ec952406556c4a8c640427aaa29542e Mon Sep 17 00:00:00 2001
From: Pauloneo
Date: Wed, 15 Jul 2026 15:31:53 -0400
Subject: [PATCH 7/7] Fix keyboard accessibility for account item
---
master | 0
.../pages/accounts-list/accounts-list.page.html | 16 ++++++++++++++--
2 files changed, 14 insertions(+), 2 deletions(-)
create mode 100644 master
diff --git a/master b/master
new file mode 100644
index 00000000..e69de29b
diff --git a/src/app/pages/accounts-list/accounts-list.page.html b/src/app/pages/accounts-list/accounts-list.page.html
index 5f7e9cf5..5ed8ed28 100644
--- a/src/app/pages/accounts-list/accounts-list.page.html
+++ b/src/app/pages/accounts-list/accounts-list.page.html
@@ -31,12 +31,24 @@
-
+
+
-
+
+