From a8782178a4b3c33ab4460959724acca8ff2dc345 Mon Sep 17 00:00:00 2001 From: Alfred Rosenthal Date: Tue, 2 Sep 2025 10:13:54 -0700 Subject: [PATCH 1/6] fix: updated metro config to shrink js bundle Signed-off-by: Alfred Rosenthal --- app/metro.config.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/metro.config.js b/app/metro.config.js index 81bd24d18..3d59d70ea 100644 --- a/app/metro.config.js +++ b/app/metro.config.js @@ -49,6 +49,21 @@ module.exports = (async () => { inlineRequires: process.env.LOAD_STORYBOOK !== 'true', }, }), + minifierPath: 'metro-minify-terser', + minifierConfig: { + keep_classnames: true, + keep_fnames: true, + mangle: { + keep_classnames: true, + keep_fnames: true, + }, + // Remove console logs from production + compress: { + drop_console: process.env.NODE_ENV === 'production', + drop_debugger: true, + pure_funcs: ['console.log'], + }, + }, }, resolver: { blacklistRE: exclusionList(extraExclusionlist.map((m) => new RegExp(`^${escape(m)}\\/.*$`))), From 0eb7fcf056e137fdec218accf31eb93c8e48510d Mon Sep 17 00:00:00 2001 From: Alfred Rosenthal Date: Tue, 2 Sep 2025 10:14:23 -0700 Subject: [PATCH 2/6] fix: added progaurd and default values for local production builds Signed-off-by: Alfred Rosenthal --- app/android/app/build.gradle | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index 21529c9db..b457c57cc 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -75,7 +75,7 @@ afterEvaluate { /** * Run Proguard to shrink the Java bytecode in release builds. */ -def enableProguardInReleaseBuilds = false +def enableProguardInReleaseBuilds = true /** * The preferred build flavor of JavaScriptCore. @@ -135,10 +135,19 @@ android { keyPassword 'android' } release { - storeFile = file("release.keystore") - storePassword System.getenv("PLAY_STORE_JKS_PASSWD") - keyAlias System.getenv("PLAY_STORE_JKS_ALIAS") - keyPassword System.getenv("PLAY_STORE_JKS_PASSWD") + if (System.getenv("PLAY_STORE_JKS_PASSWD")) { + // Production signing (CI/CD) + storeFile = file("release.keystore") + storePassword System.getenv("PLAY_STORE_JKS_PASSWD") + keyAlias System.getenv("PLAY_STORE_JKS_ALIAS") + keyPassword System.getenv("PLAY_STORE_JKS_PASSWD") + } else { + // Local development signing + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } } } buildTypes { From 74d1a53fbab081833c023490d84b87f70aaee5ff Mon Sep 17 00:00:00 2001 From: Alfred Rosenthal Date: Thu, 4 Sep 2025 12:18:07 -0700 Subject: [PATCH 3/6] chore: updated bifold packages, removed proguard setting Signed-off-by: Alfred Rosenthal --- app/android/app/build.gradle | 2 +- app/package.json | 10 ++-- .../components/CodeScanningCamera.tsx | 13 +++-- yarn.lock | 52 +++++++++---------- 4 files changed, 38 insertions(+), 39 deletions(-) diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle index b457c57cc..f552ceb70 100644 --- a/app/android/app/build.gradle +++ b/app/android/app/build.gradle @@ -75,7 +75,7 @@ afterEvaluate { /** * Run Proguard to shrink the Java bytecode in release builds. */ -def enableProguardInReleaseBuilds = true +def enableProguardInReleaseBuilds = false /** * The preferred build flavor of JavaScriptCore. diff --git a/app/package.json b/app/package.json index f33e9ebaf..26a4129f9 100644 --- a/app/package.json +++ b/app/package.json @@ -40,11 +40,11 @@ "gradle:write-locks": "cd android && ./gradlew app:dependencies --write-locks" }, "dependencies": { - "@bifold/core": "2.4.6", - "@bifold/oca": "2.4.6", - "@bifold/react-native-attestation": "2.4.6", - "@bifold/remote-logs": "2.4.6", - "@bifold/verifier": "2.4.6", + "@bifold/core": "2.6.0", + "@bifold/oca": "2.6.0", + "@bifold/react-native-attestation": "2.6.0", + "@bifold/remote-logs": "2.6.0", + "@bifold/verifier": "2.6.0", "@credo-ts/anoncreds": "0.5.13", "@credo-ts/askar": "0.5.13", "@credo-ts/core": "0.5.13", diff --git a/app/src/bcsc-theme/components/CodeScanningCamera.tsx b/app/src/bcsc-theme/components/CodeScanningCamera.tsx index f2882c08d..541f69f42 100644 --- a/app/src/bcsc-theme/components/CodeScanningCamera.tsx +++ b/app/src/bcsc-theme/components/CodeScanningCamera.tsx @@ -1,16 +1,15 @@ -import { useTheme } from '@bifold/core' +import { QRScannerTorch, useTheme } from '@bifold/core' import React, { useEffect, useRef, useState } from 'react' -import { StyleSheet, View, ViewStyle, useWindowDimensions, ColorValue } from 'react-native' +import { ColorValue, StyleSheet, View, ViewStyle, useWindowDimensions } from 'react-native' import { Camera, - useCameraPermission, - useCameraDevice, - useCodeScanner, - CodeType, Code, CodeScannerFrame, + CodeType, + useCameraDevice, + useCameraPermission, + useCodeScanner, } from 'react-native-vision-camera' -import QRScannerTorch from '@bifold/core/src/components/misc/QRScannerTorch' const overlayTint: ColorValue = 'rgba(0, 0, 0, 0.4)' diff --git a/yarn.lock b/yarn.lock index 884489183..da67b0e51 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3068,9 +3068,9 @@ __metadata: languageName: node linkType: hard -"@bifold/core@npm:2.4.6": - version: 2.4.6 - resolution: "@bifold/core@npm:2.4.6" +"@bifold/core@npm:2.6.0": + version: 2.6.0 + resolution: "@bifold/core@npm:2.6.0" peerDependencies: "@credo-ts/anoncreds": 0.5.13 "@credo-ts/askar": 0.5.13 @@ -3145,38 +3145,38 @@ __metadata: uuid: ~9.0.1 bin: bifold: bin/bifold - checksum: 10c0/6b872a19fb7538058bb8303a0d82262f74a65c3da15a03715b0846ab59e75236d267a391da91d01f559bda83b729035c7502c99d6cb0134ad220ef165288f121 + checksum: 10c0/867e1452545b94284f48c811353f7da00878e9ee16b4110db63c85c4c9dc8471bb0dcc9ba9666e0bc9697b15a775ac332a06f7be5cc2cdfb26dfcce37bd63b18 languageName: node linkType: hard -"@bifold/oca@npm:2.4.6": - version: 2.4.6 - resolution: "@bifold/oca@npm:2.4.6" +"@bifold/oca@npm:2.6.0": + version: 2.6.0 + resolution: "@bifold/oca@npm:2.6.0" dependencies: "@credo-ts/anoncreds": "npm:0.5.13" "@credo-ts/core": "npm:0.5.13" axios: "npm:~1.4.0" lodash.startcase: "npm:~4.4.0" react-native-fs: "npm:~2.20.0" - checksum: 10c0/b3bb20ca7550dced244806a6756ef49c9f3a9dcc0c103cd587c2d92cfd244f6aba47d93f5f56f04deb5698697abad686397f5bc1e26aa75069815363b6828dab + checksum: 10c0/755ed3a1334e8fbde7cf30e7cccbf38f51fda2eb6b4e7b76c1503d826acc29e964fb86be1e85f474af5d86b5b0aff64b4389ea05281493a39c2711c0560caf8a languageName: node linkType: hard -"@bifold/react-native-attestation@npm:2.4.6": - version: 2.4.6 - resolution: "@bifold/react-native-attestation@npm:2.4.6" +"@bifold/react-native-attestation@npm:2.6.0": + version: 2.6.0 + resolution: "@bifold/react-native-attestation@npm:2.6.0" peerDependencies: react: "*" react-native: "*" - checksum: 10c0/6bfe745db2df0b3f9eaf25d177eee8b99ffbec8bcff670a307ec06bedb21465a52fd3e16bfa396eb0f1492cc3e7d7394a53091e05518e5908d42314704503988 + checksum: 10c0/651ab49184cf81fe534c3ebf9d4feceb9fea278d58665a118400aceeaf10e55f90f336985dbc1c6ad0dd923fc8c02aeda80a71a7ba24b036852eed0aa37ddcc7 languageName: node linkType: hard -"@bifold/remote-logs@npm:2.4.6": - version: 2.4.6 - resolution: "@bifold/remote-logs@npm:2.4.6" +"@bifold/remote-logs@npm:2.6.0": + version: 2.6.0 + resolution: "@bifold/remote-logs@npm:2.6.0" dependencies: - "@bifold/core": "npm:2.4.6" + "@bifold/core": "npm:2.6.0" "@credo-ts/core": "npm:0.5.13" axios: "npm:~1.4.0" buffer: "npm:~6.0.3" @@ -3190,20 +3190,20 @@ __metadata: react: ~18.3.1 react-native: 0.73.11 react-native-logs: ~5.1.0 - checksum: 10c0/9f8e9cb32781057f8e76fc550313e8271699e40b574954a18ea354526a0bdd225edc8ea52e83789dcb4f8c822899498f0a7ca394f28b39fab4dce598416d28f1 + checksum: 10c0/0fe242cd63fa837710630e49f534bbd25e3c4cb7a8203bf50a92d1396aa0d24c7eeb3a4a3f79caf4bcafca53ed55ee7a98bbe16de9662bec5f253b86ec763086 languageName: node linkType: hard -"@bifold/verifier@npm:2.4.6": - version: 2.4.6 - resolution: "@bifold/verifier@npm:2.4.6" +"@bifold/verifier@npm:2.6.0": + version: 2.6.0 + resolution: "@bifold/verifier@npm:2.6.0" peerDependencies: "@credo-ts/anoncreds": 0.5.13 "@credo-ts/core": 0.5.13 "@credo-ts/react-hooks": 0.6.0 "@hyperledger/anoncreds-shared": 0.2.4 react: ~18.3.1 - checksum: 10c0/ac489dc0bc0264e8e91bdfabf605b89cb1705689064e34f6b6533e875b06e2548acb0a14682ed56f6d0cd974442ff7000584ce50bdf8b61fa3dbd0526622660e + checksum: 10c0/f1fd476b87999f751efc073f264dccdc89e2005603bb35af8871764e780d00c9d23b2b7fd4283d874ae1c70c3c5e673a3251ebaaff9d939a5e70ae2549f70939 languageName: node linkType: hard @@ -11162,11 +11162,11 @@ __metadata: "@babel/core": "npm:~7.22.20" "@babel/preset-env": "npm:~7.22.20" "@babel/runtime": "npm:~7.23.9" - "@bifold/core": "npm:2.4.6" - "@bifold/oca": "npm:2.4.6" - "@bifold/react-native-attestation": "npm:2.4.6" - "@bifold/remote-logs": "npm:2.4.6" - "@bifold/verifier": "npm:2.4.6" + "@bifold/core": "npm:2.6.0" + "@bifold/oca": "npm:2.6.0" + "@bifold/react-native-attestation": "npm:2.6.0" + "@bifold/remote-logs": "npm:2.6.0" + "@bifold/verifier": "npm:2.6.0" "@commitlint/cli": "npm:~11.0.0" "@credo-ts/anoncreds": "npm:0.5.13" "@credo-ts/askar": "npm:0.5.13" From 96bffbc5347de7729e549b71fe0bfdd1a558f945 Mon Sep 17 00:00:00 2001 From: Alfred Rosenthal Date: Thu, 4 Sep 2025 13:47:54 -0700 Subject: [PATCH 4/6] chore: fixed lint and type issues Signed-off-by: Alfred Rosenthal --- .../account/RemoveAccountConfirmationScreen.tsx | 12 ++++++------ .../non-photo/EvidenceIDCollectionScreen.tsx | 16 ++++++++-------- .../features/webview/WebViewScreen.tsx | 10 +++++----- app/src/services/version.ts | 4 ++-- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/app/src/bcsc-theme/features/account/RemoveAccountConfirmationScreen.tsx b/app/src/bcsc-theme/features/account/RemoveAccountConfirmationScreen.tsx index f3f3e14c3..1b1fcb280 100644 --- a/app/src/bcsc-theme/features/account/RemoveAccountConfirmationScreen.tsx +++ b/app/src/bcsc-theme/features/account/RemoveAccountConfirmationScreen.tsx @@ -1,14 +1,14 @@ +import * as BcscCore from '@/../../packages/bcsc-core/src/index' +import useApi from '@/bcsc-theme/api/hooks/useApi' +import useRegistrationApi from '@/bcsc-theme/api/hooks/useRegistrationApi' import { BCSCRootStackParams } from '@/bcsc-theme/types/navigators' import { BCDispatchAction, BCState } from '@/store' -import { ThemedText, useStore, useTheme, Button, ButtonType, useServices, TOKENS, DispatchAction } from '@bifold/core' +import { Button, ButtonType, DispatchAction, ThemedText, TOKENS, useServices, useStore, useTheme } from '@bifold/core' import { useNavigation } from '@react-navigation/native' import { StackNavigationProp } from '@react-navigation/stack' import React from 'react' -import { StyleSheet, View, Platform } from 'react-native' -import * as BcscCore from '@/../../packages/bcsc-core/src/index' -import useApi from '@/bcsc-theme/api/hooks/useApi' import { useTranslation } from 'react-i18next' -import useRegistrationApi from '@/bcsc-theme/api/hooks/useRegistrationApi' +import { Platform, StyleSheet, View } from 'react-native' import { getAccount } from 'react-native-bcsc-core' type AccountNavigationProp = StackNavigationProp @@ -79,7 +79,7 @@ const RemoveAccountConfirmationScreen: React.FC = () => { dispatch({ type: DispatchAction.DID_AUTHENTICATE, payload: [false] }) logger.info('Account removal process completed successfully') - } catch (error: unknown) { + } catch (error: any) { if (serverDeleteSucceeded) { // Server deletion succeeded but local cleanup failed logger.error('Server deletion succeeded but local cleanup failed:', error) diff --git a/app/src/bcsc-theme/features/verify/non-photo/EvidenceIDCollectionScreen.tsx b/app/src/bcsc-theme/features/verify/non-photo/EvidenceIDCollectionScreen.tsx index 7c9706e3c..85ac68957 100644 --- a/app/src/bcsc-theme/features/verify/non-photo/EvidenceIDCollectionScreen.tsx +++ b/app/src/bcsc-theme/features/verify/non-photo/EvidenceIDCollectionScreen.tsx @@ -1,8 +1,6 @@ -import { BCSCScreens, BCSCVerifyIdentityStackParams } from '@/bcsc-theme/types/navigators' -import { StackNavigationProp } from '@react-navigation/stack' -import { SafeAreaView } from 'react-native-safe-area-context' -import { useState } from 'react' import { EvidenceType } from '@/bcsc-theme/api/hooks/useEvidenceApi' +import { BCSCScreens, BCSCVerifyIdentityStackParams } from '@/bcsc-theme/types/navigators' +import { BCDispatchAction, BCState } from '@/store' import { Button, ButtonType, @@ -14,9 +12,11 @@ import { useStore, useTheme, } from '@bifold/core' -import { TextInput, View } from 'react-native' -import { BCDispatchAction, BCState } from '@/store' import { CommonActions } from '@react-navigation/native' +import { StackNavigationProp } from '@react-navigation/stack' +import { useState } from 'react' +import { TextInput, View } from 'react-native' +import { SafeAreaView } from 'react-native-safe-area-context' type EvidenceIDCollectionScreenProps = { navigation: StackNavigationProp @@ -40,8 +40,8 @@ const EvidenceIDCollectionScreen = ({ navigation, route }: EvidenceIDCollectionS try { const regex = new RegExp(cardType.document_reference_input_mask) return regex.test(value) - } catch (error) { - logger.error('Invalid regex pattern:', cardType.document_reference_input_mask, JSON.stringify(error)) + } catch (error: any) { + logger.error(`Invalid regex pattern: ${cardType.document_reference_input_mask}`, error) return true } } diff --git a/app/src/bcsc-theme/features/webview/WebViewScreen.tsx b/app/src/bcsc-theme/features/webview/WebViewScreen.tsx index 71b4ada9b..a23a0af1d 100644 --- a/app/src/bcsc-theme/features/webview/WebViewScreen.tsx +++ b/app/src/bcsc-theme/features/webview/WebViewScreen.tsx @@ -1,12 +1,12 @@ +import client from '@/bcsc-theme/api/client' +import { TOKENS, useServices, useTheme } from '@bifold/core' +import { RouteProp } from '@react-navigation/native' import React, { useCallback } from 'react' import { StyleSheet } from 'react-native' +import { SafeAreaView } from 'react-native-safe-area-context' import { WebView } from 'react-native-webview' import type { WebViewErrorEvent, WebViewHttpErrorEvent } from 'react-native-webview/lib/WebViewTypes' -import { SafeAreaView } from 'react-native-safe-area-context' -import { TOKENS, useServices, useTheme } from '@bifold/core' -import { RouteProp } from '@react-navigation/native' import { BCSCRootStackParams, BCSCScreens } from '../../types/navigators' -import client from '@/bcsc-theme/api/client' export interface WebViewScreenProps { route: RouteProp @@ -20,7 +20,7 @@ const WebViewScreen: React.FC = ({ route }) => { const handleError = useCallback( (syntheticEvent: WebViewErrorEvent) => { const { nativeEvent } = syntheticEvent - logger.error('WebView Error:', nativeEvent) + logger.error('WebView Error:', { ...nativeEvent }) }, [logger] ) diff --git a/app/src/services/version.ts b/app/src/services/version.ts index b59001729..56577f532 100644 --- a/app/src/services/version.ts +++ b/app/src/services/version.ts @@ -1,5 +1,5 @@ +import { BifoldLogger, IVersionCheckService, VersionInfo } from '@bifold/core' import { checkVersion } from 'react-native-check-version' -import { VersionInfo, IVersionCheckService, BifoldLogger } from '@bifold/core' export class VersionCheckService implements IVersionCheckService { private _cachedVersionInfo: VersionInfo | undefined @@ -26,7 +26,7 @@ export class VersionCheckService implements IVersionCheckService { this._cachedVersionInfo = versionInfo - this.log.info('Checked for updates:', version) + this.log.info('Checked for updates:', {...version}) return versionInfo } catch (error) { this.log.error('Failed to check for updates:', error as Error) From 2260b3cf70cdad613f77da045defa44e88cd8b34 Mon Sep 17 00:00:00 2001 From: Alfred Rosenthal Date: Thu, 4 Sep 2025 13:59:25 -0700 Subject: [PATCH 5/6] chore: ran prettier Signed-off-by: Alfred Rosenthal --- app/src/services/version.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/services/version.ts b/app/src/services/version.ts index 56577f532..17ad552db 100644 --- a/app/src/services/version.ts +++ b/app/src/services/version.ts @@ -26,7 +26,7 @@ export class VersionCheckService implements IVersionCheckService { this._cachedVersionInfo = versionInfo - this.log.info('Checked for updates:', {...version}) + this.log.info('Checked for updates:', { ...version }) return versionInfo } catch (error) { this.log.error('Failed to check for updates:', error as Error) From 8ebd5141dd3bc5d77c81bc286724a49af11c1710 Mon Sep 17 00:00:00 2001 From: Alfred Rosenthal Date: Thu, 4 Sep 2025 15:02:04 -0700 Subject: [PATCH 6/6] chore: ran ios:setup Signed-off-by: Alfred Rosenthal --- app/ios/Podfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/ios/Podfile.lock b/app/ios/Podfile.lock index 9c5062c5e..abbdf1f02 100644 --- a/app/ios/Podfile.lock +++ b/app/ios/Podfile.lock @@ -1031,7 +1031,7 @@ PODS: - React-Mapbuffer (0.73.11): - glog - React-debug - - react-native-attestation (2.4.6): + - react-native-attestation (2.6.0): - glog - RCT-Folly (= 2022.05.16.00) - React-Core @@ -1625,7 +1625,7 @@ SPEC CHECKSUMS: React-jsinspector: a98428936fb888cc15d857226a26d9ac0a668a0e React-logger: 6e4873d1f9c54cca30f6c91a6617f8c91b75ba4c React-Mapbuffer: 57bf49a458398d329dad2bf8bc660e3e35b96989 - react-native-attestation: c2eaf0789330d5ae353d011458794bd6844d53bf + react-native-attestation: 8b3f86d2fcdf2818167ecd188ca68cecefe0280b react-native-config: 644074ab88db883fcfaa584f03520ec29589d7df react-native-date-picker: 2eca217a8fb09c517f5bb6b23978718c6cec59ec react-native-encrypted-storage: 569d114e329b1c2c2d9f8c84bcdbe4478dda2258