From a5e116b4f18adb6399d4a687ac5d000014bedef1 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Mar 2026 15:59:04 +0000
Subject: [PATCH 1/3] Initial plan
From 6b6d244228553dc5ceb2e7bbff2d6ea338c331c1 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Mar 2026 16:12:59 +0000
Subject: [PATCH 2/3] Add CSP meta tag and fix empty subscribe error handlers
Co-authored-by: numbers-official <181934381+numbers-official@users.noreply.github.com>
---
src/app/features/contacts/contacts.page.ts | 5 +++-
.../features/data-policy/data-policy.page.ts | 5 +++-
src/app/features/signup/signup.page.ts | 10 +++++--
.../wallets/transfer/transfer.page.ts | 30 ++++++++++++++-----
src/app/features/wallets/wallets.page.ts | 25 ++++++++++++----
src/index.html | 13 ++++++++
6 files changed, 72 insertions(+), 16 deletions(-)
diff --git a/src/app/features/contacts/contacts.page.ts b/src/app/features/contacts/contacts.page.ts
index e86c7531d..b62ae75d0 100644
--- a/src/app/features/contacts/contacts.page.ts
+++ b/src/app/features/contacts/contacts.page.ts
@@ -46,7 +46,10 @@ export class ContactsPage {
catchError((err: unknown) => this.errorService.toastError$(err)),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
// eslint-disable-next-line class-methods-use-this
diff --git a/src/app/features/data-policy/data-policy.page.ts b/src/app/features/data-policy/data-policy.page.ts
index 5a67ddb3e..4c2e41934 100644
--- a/src/app/features/data-policy/data-policy.page.ts
+++ b/src/app/features/data-policy/data-policy.page.ts
@@ -44,6 +44,9 @@ export class DataPolicyPage {
}),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
}
diff --git a/src/app/features/signup/signup.page.ts b/src/app/features/signup/signup.page.ts
index 385dc5a40..4b4d2b477 100644
--- a/src/app/features/signup/signup.page.ts
+++ b/src/app/features/signup/signup.page.ts
@@ -70,7 +70,10 @@ export class SignupPage {
),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
private createFormFields(
@@ -237,7 +240,10 @@ export class SignupPage {
this.blockingActionService
.run$(action$)
.pipe(untilDestroyed(this))
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
private handleOnSubmitError(err: unknown) {
diff --git a/src/app/features/wallets/transfer/transfer.page.ts b/src/app/features/wallets/transfer/transfer.page.ts
index 2a9b8484d..3a854ffed 100644
--- a/src/app/features/wallets/transfer/transfer.page.ts
+++ b/src/app/features/wallets/transfer/transfer.page.ts
@@ -65,9 +65,13 @@ export class TransferPage {
private readonly platform: Platform,
private readonly snackBar: MatSnackBar
) {
- this.activeRoute.paramMap.subscribe(paramMap => {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.mode = paramMap.get('mode')!;
+ this.activeRoute.paramMap.subscribe({
+ next: paramMap => {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ this.mode = paramMap.get('mode')!;
+ },
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
});
}
@@ -84,7 +88,10 @@ export class TransferPage {
),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
onInputTransferAmount() {
@@ -98,7 +105,10 @@ export class TransferPage {
this.translocoService.translate('error.wallets.emptyTransferAmount')
)
.pipe(untilDestroyed(this))
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
return;
}
@@ -156,7 +166,10 @@ export class TransferPage {
}),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
transfer() {
@@ -180,7 +193,10 @@ export class TransferPage {
finalize(() => dialogRef.close()),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
openTransferRequestSentDialog() {
diff --git a/src/app/features/wallets/wallets.page.ts b/src/app/features/wallets/wallets.page.ts
index 4526653a5..9fa93233d 100644
--- a/src/app/features/wallets/wallets.page.ts
+++ b/src/app/features/wallets/wallets.page.ts
@@ -90,7 +90,10 @@ export class WalletsPage {
}),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
private reloadPage() {
@@ -103,7 +106,10 @@ export class WalletsPage {
}),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
private copyToClipboardAssetWallet() {
@@ -113,7 +119,10 @@ export class WalletsPage {
concatMap(assetWalletAddr => this.copyToClipboard(assetWalletAddr)),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
private copyToClipboardIntegrityWallet() {
@@ -123,7 +132,10 @@ export class WalletsPage {
concatMap(publicKey => this.copyToClipboard(publicKey)),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
private copyToClipboardPrivateKey() {
@@ -133,7 +145,10 @@ export class WalletsPage {
concatMap(privateKey => this.copyToClipboard(privateKey)),
untilDestroyed(this)
)
- .subscribe();
+ .subscribe({
+ // eslint-disable-next-line no-console
+ error: (err: unknown) => console.error(err),
+ });
}
navigateToBuyNumPage() {
diff --git a/src/index.html b/src/index.html
index cbe060b91..46c2cdc47 100644
--- a/src/index.html
+++ b/src/index.html
@@ -14,6 +14,19 @@
+
+
Date: Thu, 16 Apr 2026 06:03:40 +0000
Subject: [PATCH 3/3] fix: remove CSP meta tag to prevent runtime breakage
The Content-Security-Policy was too restrictive for a Capacitor mobile
app. connect-src only allowed *.numbersprotocol.io, which would silently
block requests to bubble.io APIs (actions, orders, NUM price), GoPro
local server (10.5.5.9), and AppsFlyer analytics at runtime.
CSP for Capacitor apps requires a dedicated effort with comprehensive
domain inventory and full QA coverage across all features.
---
src/index.html | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/src/index.html b/src/index.html
index 46c2cdc47..cbe060b91 100644
--- a/src/index.html
+++ b/src/index.html
@@ -14,19 +14,6 @@
-
-