From 4e3e170b253da2ba21a858f5565f98b2994bfd97 Mon Sep 17 00:00:00 2001 From: Joshua Rogers Date: Tue, 3 Feb 2026 20:16:35 +0800 Subject: [PATCH 1/2] Avoid import-time crash from new NativeEventEmitter(Wallet) (cherry picked from commit 12361e0b98e92611e94a6b46d2bb95692acbfb77) --- src/index.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index c58ee3f..14a3b3b 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -21,10 +21,20 @@ function getModuleLinkingRejection() { return Promise.reject(new Error(`Failed to load Wallet module, make sure to link ${PACKAGE_NAME} correctly`)); } -const eventEmitter = new NativeEventEmitter(Wallet); +let eventEmitter: NativeEventEmitter | null = null; + +function getEventEmitter(): NativeEventEmitter { + if (!Wallet) { + throw new Error(`Failed to load Wallet module, make sure to link ${PACKAGE_NAME} correctly`); + } + if (!eventEmitter) { + eventEmitter = new NativeEventEmitter(Wallet); + } + return eventEmitter; +} function addListener(event: string, callback: (data: onCardActivatedPayload) => void): EmitterSubscription { - return eventEmitter.addListener(event, callback); + return getEventEmitter().addListener(event, callback); } function removeListener(subscription: EmitterSubscription): void { From 3ca1c0b6de0bb12f3c079e2618b9bb8101292502 Mon Sep 17 00:00:00 2001 From: Joshua Rogers Date: Tue, 29 Sep 2026 15:10:39 +0200 Subject: [PATCH 2/2] Make addListener a no-op when module is not linked --- src/index.tsx | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 14a3b3b..bc37531 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -21,20 +21,16 @@ function getModuleLinkingRejection() { return Promise.reject(new Error(`Failed to load Wallet module, make sure to link ${PACKAGE_NAME} correctly`)); } -let eventEmitter: NativeEventEmitter | null = null; +let eventEmitter: NativeEventEmitter | undefined; -function getEventEmitter(): NativeEventEmitter { +function addListener(event: string, callback: (data: onCardActivatedPayload) => void): EmitterSubscription { if (!Wallet) { - throw new Error(`Failed to load Wallet module, make sure to link ${PACKAGE_NAME} correctly`); - } - if (!eventEmitter) { - eventEmitter = new NativeEventEmitter(Wallet); + // eslint-disable-next-line no-console + console.warn(`[${PACKAGE_NAME}] Wallet module is not linked, addListener has no effect`); + return {remove: () => undefined} as EmitterSubscription; } - return eventEmitter; -} - -function addListener(event: string, callback: (data: onCardActivatedPayload) => void): EmitterSubscription { - return getEventEmitter().addListener(event, callback); + eventEmitter ??= new NativeEventEmitter(Wallet); + return eventEmitter.addListener(event, callback); } function removeListener(subscription: EmitterSubscription): void {