crossmint_flutter 0.1.0
crossmint_flutter: ^0.1.0 copied to clipboard
Flutter SDK for Crossmint wallets, authentication, signers, embedded checkout, and verifiable credentials. Headless-first — you own the UI.
0.1.0 #
- Fixed
CrossmintNonCustodialSignerdeduplicating concurrentensureAuthenticated()callers so a single in-flight auth attempt no longer surfaces twoonAuthRequiredprompts for the same auth event. - Fixed
CrossmintSignerBridgeClientcross-talk between concurrent calls that share a response event (e.g. tworequest:signin flight). Requests are now serialized per response event so unrelated event pairs (e.g. aget-statuswhile asignis pending) still run in parallel. Source-compatible source break:CrossmintSignerBridgeClientis no longerconst-constructible (no in-tree callers usedconst, but downstream code that did will need to drop theconstkeyword). - Fixed
CrossmintWalletProviderLifecycle.disposeDependencies()to keep disposing the auth router and client when the wallet controller's disposer throws. Failures are reported viaFlutterErrorinstead of skipping the remaining cleanup. - Added
CrossmintDeserializationExceptionand typed parser helpers (requireString,optionalString,requireInt,requireBool,requireMap,requireMapList) incrossmint_core.CrossmintUser.fromJsonis migrated as the first caller; remaining model fromJson sites will follow in a separate PR. - Added
CrossmintErrorCodeenum tocrossmint_core— typed, machine-readable error codes for programmaticswitch/caseexception handling. All exception subclasses now carry an optionalcodefield (defaults tounknown). Codes cover auth, wallet, signer, credential, order, and token domains. - Added
CrossmintPollingConfigandcrossmintPoll()utility tocrossmint_core— exponential backoff with jitter replaces the previous flat 1-second polling loops in signature and transaction confirmation flows. Default: 1 s initial, 2x growth, 8 s cap, 60 attempts, random jitter in [50 %, 100 %) range. - Added ADR-001 documenting the decision to keep hand-written
fromJson()/toJson()methods rather than adoptingfreezedorjson_serializablecodegen, with clear re-evaluation triggers. - Added
CrossmintChainenum tocrossmint_core— typed, environment-aware chain validation covering all 24 mainnet chains, 20 testnet chains, Solana, and Stellar. IncludesfromApiValue()/tryFromApiValue()for safe parsing andvalidateForEnvironment()for automatic mainnet→testnet conversion in non-production environments. - Added
CrossmintApiKeySigner— a backend-only signer matching the official TypeScript SDK's API key signer. All signing is handled server-side; callingsignMessage()orsignTransaction()locally throws a descriptive error. - Added
CrossmintPasskeySignerConfigmodel andcrossmintGuardAgainstPasskeySigners()guard. Passkey/WebAuthn signers are blocked in Flutter (matching the official React Native SDK), with a clear error message guiding users to alternative signer types. - Added
CrossmintApiKeySignerConfigandCrossmintPasskeySignerConfigto theCrossmintSignerConfigsealed hierarchy incrossmint_wallets. - Added
fromJson()/toJson()factory methods to all core model classes:CrossmintWallet,CrossmintSignerConfig(polymorphic dispatch by type),CrossmintWalletSigner,CrossmintTransactionRecord,CrossmintSignatureRecord,CrossmintWalletBalanceSnapshot,CrossmintNftRecord,CrossmintWalletNftPage,CrossmintUser,CrossmintOrderRecord,CrossmintTokenAvailabilityRecord, and others. - Replaced hand-rolled base58 encoder/decoder (~65 lines) with the published
bs58package. The_decodeBase58()and_encodeBase58()helpers incrossmint_non_custodial_signer.dartnow delegate tobase58.decode()andbase58.encode(). - Upgraded chain-type detection helpers (
crossmintIsSolanaChain(),crossmintIsStellarChain(),_isSolanaChain()) to prefer enum-based matching viaCrossmintChain.tryFromApiValue()with string fallback for backward compatibility. - Validated iOS real-device integration tests on physical iPhone via Wi-Fi debugging, closing the last pending validation item. Hidden signer bridge and device signer plugin (Secure Enclave) both passed.
- Documented the Xcode 26.4 / Flutter #184254 workaround (Wi-Fi debugging) for future iOS physical-device test runs.
- Fixed headless order parsing to handle the live
order.orderIdresponse shape returned byPOST /api/2022-06-09/orders. - Fixed
scripts/dart_defines_from_env.shso JSON-valued Dart defines work with direct command substitution in the documentedflutter run/test $(...)flow. - Added a direct staging probe for orders / Worldstore so client-key vs server-key boundaries are documented with live evidence.
- Added release-readiness docs for gate disposition, Android/iOS evidence, and the release-candidate checklist.
- Clarified that externally gated scopes remain non-blocking amber when the Flutter SDK contract is already proven correct.
- Added example-workspace package overrides so
flutter driveand other example-side validation paths resolve the local package family consistently. - Switched the package family to publish-ready hosted dependency manifests while
keeping local monorepo development on
pubspec_overrides.yaml. - Added consumer-facing installation guidance for
crossmint_flutterand cleaned up template metadata in the native device-signer plugin package.
0.0.1 #
- Initial internal Flutter port workspace release.
- Added the core Crossmint Flutter client surface for auth, wallets, credentials, orders, tokens, and users.
- Added the device signer plugin, hidden signer bridge, example app, and test harnesses.
- Known gaps at this release stage: iOS real-device automation and staging scopes gated by project/backend configuration.