Skip to content

fix(deps): upgrade react-native-quick-base64 to v3#1046

Merged
boorad merged 3 commits into
mainfrom
fix/quick-base64-v3
May 16, 2026
Merged

fix(deps): upgrade react-native-quick-base64 to v3#1046
boorad merged 3 commits into
mainfrom
fix/quick-base64-v3

Conversation

@boorad
Copy link
Copy Markdown
Collaborator

@boorad boorad commented May 16, 2026

Summary

Upgrades react-native-quick-base64 from v2.2.2 to v3.0.0 for New Architecture support, and updates the polyfill in install() to work with v3's breaking API change.

v3 no longer auto-installs global.base64ToArrayBuffer / global.base64FromArrayBuffer on import, and only exports named functions (toByteArray, fromByteArray, byteLength, trimBase64Padding). The polyfill now wires the globals through those named exports so the public surface used by subtle.importKey / subtle.exportKey is preserved.

Changes

  • Bump react-native-quick-base64 to 3.0.0 (example app + peerDep)
  • Bump @craftzdog/react-native-buffer to 6.1.2 (transitively requires base64 ^3.0.0)
  • Reinstall global.base64ToArrayBuffer / global.base64FromArrayBuffer inside install() using v3's named exports
  • Update Podfile.lock (v3 brings in the full New Architecture pod set)
  • Update BUILD_ERROR.yml issue template example
  • Add a scoped TS rule: example app pins exactly; library package.json may use ranges (^, >=)

Testing

  • bun tsc clean
  • Validated locally on iOS / Android — subtle import/export tests pass against the new globals

Notes

This PR obsoletes #1045 — the rule it referenced ("pin everything") has been scoped to the example app only, since library package.json should keep ranges for consumer flexibility.

Closes #1045

boorad added 2 commits May 15, 2026 22:19
v2.x throws `Base64Module.install is not a function` on React Native
New Architecture (default in Expo SDK 54+) because the legacy bridge
install method is not exposed via NativeModules under bridgeless mode.
v3.0.0 ships a Codegen TurboModule and dropped the install side effect.

Replace the `require('react-native-quick-base64')` side effect in
QuickCrypto's `install()` with explicit calls to v3's `toByteArray` /
`fromByteArray`, assigning `global.base64ToArrayBuffer` and
`global.base64FromArrayBuffer` directly. Declare those globals in the
package so consumers get the types. Bump `@craftzdog/react-native-
buffer` to 6.1.2 (v3-compatible) and pin all touched versions per the
new code-typescript rule (no caret/tilde ranges).

Fixes the `Base64Module.install is not a function` runtime error
reported on vanilla Expo SDK 54/55 setups.
Library package.json may use ranges so consumers aren't blocked on
exact-version updates. Only the example app needs deterministic pins.

- Loosen @craftzdog/react-native-buffer to ^6.1.2
- Loosen react-native-quick-base64 peerDep to >=3.0.0
- Scope exact-pin rule to example app's package.json
@boorad boorad self-assigned this May 16, 2026
@vercel
Copy link
Copy Markdown

vercel Bot commented May 16, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
react-native-quick-crypto Ready Ready Preview, Comment May 16, 2026 2:34am

Request Review

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 16, 2026

🤖 End-to-End Test Results - iOS

Status: ✅ Passed
Platform: iOS
Run: 25950567328

📸 Final Test Screenshot

Maestro Test Results - ios

Screenshot automatically captured from End-to-End tests and will expire in 30 days


This comment is automatically updated on each test run.

@github-actions
Copy link
Copy Markdown
Contributor

🤖 End-to-End Test Results - Android

Status: ✅ Passed
Platform: Android
Run: 25950567330

📸 Final Test Screenshot

Maestro Test Results - android

Screenshot automatically captured from End-to-End tests and will expire in 30 days


This comment is automatically updated on each test run.

@boorad boorad merged commit daef06f into main May 16, 2026
10 checks passed
@boorad boorad deleted the fix/quick-base64-v3 branch May 16, 2026 02:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore: pin remaining caret dependency versions

1 participant