Skip to content

Conversation

@oz-release-app
Copy link
Contributor

@oz-release-app oz-release-app bot commented Nov 25, 2025

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@openzeppelin/[email protected]

Major Changes

  • #257 923e016 Thanks @pasevin! - Refactor storage package to be React-first, app-agnostic, and easier to consume across apps.

    Highlights:

    • New React utilities: useLiveQuery (re-export), createLiveQueryHook, createCrudHook, createJsonFileIO, createRepositoryHook.
    • Core: DexieStorage now uses @openzeppelin/ui-builder-utils (logger, generateId); createDexieDatabase helper for versioned Dexie setup.
    • Exports consolidated at the root (no ./react subpath).
    • Dependencies: add dexie-react-hooks; keep react as a peer dependency.

    BREAKING CHANGES:

    • Remove builder-specific exports from this package: ContractUIStorage, contractUIStorage, useContractUIStorage, db, and ContractUIRecord/ContractUIExportData types.
    • Consumers must define app-local repositories/types and use the new React helpers.

    Migration (typical):

    • Move app-specific repositories (e.g., ContractUIStorage) and types into the app.
    • Create the Dexie instance in the app with createDexieDatabase.
    • Use the new React helpers to replace ad-hoc storage hooks (e.g., createRepositoryHook).

Minor Changes

  • #258 4a496fe Thanks @pasevin! - Add KeyValueStorage base class and rename DexieStorage to EntityStorage.

    New features:

    • KeyValueStorage<V>: Base class for key-value stores using &key primary key schema. Includes set, get, getOrDefault, delete, has, keys, getAll, clear, count, setMany, getMany, deleteMany methods with configurable key length and value size limits.
    • EntityStorage<T>: Renamed from DexieStorage for clarity. Now includes configurable maxRecordSizeBytes option (default 10MB) and quota error handling.
    • Shared utilities: isQuotaError() and withQuotaHandling() exported for custom storage implementations.

    Improvements:

    • Both base classes now handle QuotaExceededError consistently across browsers (including Safari iOS code 22).
    • Record/value size validation prevents accidental quota exhaustion.
    • Builder app's ContractUIStorage now uses 50MB limit for large contract definitions.

    Migration:

    • Replace DexieStorage imports with EntityStorage (same API).
    • For key-value stores, extend KeyValueStorage instead of implementing custom logic.

Patch Changes

@openzeppelin/[email protected]

Minor Changes

  • #243 bfbbf9b Thanks @pasevin! - Add Access Control and Ownable support for Stellar (Soroban) contracts

    @openzeppelin/ui-builder-adapter-stellar

    • Add AccessControlService implementation with full support for OpenZeppelin Access Control and Ownable patterns
    • Add capability detection to identify contracts implementing AccessControl, Ownable, or both
    • Support role management: query current roles, grant/revoke roles, check permissions
    • Support ownership management: transfer ownership, query current owner
    • Add historical queries via SubQuery indexer integration for complete role change and ownership transfer history
    • Implement server-side filtering by contract, role, account, and limit
    • Add graceful degradation when indexer is unavailable (on-chain queries continue to work)
    • Add comprehensive address validation using shared utilities at all service entry points
    • Export access control service via getAccessControlService() method on StellarAdapter
    • Add snapshot export functionality for current access control state
    • Support both account addresses (G...) and contract addresses (C...) for ownership transfers

    @openzeppelin/ui-builder-types

    • Add AccessControlService interface and related types (AccessControlCapabilities, OwnershipInfo, RoleAssignment, AccessSnapshot, HistoryEntry, OperationResult)
    • Add getAccessControlService?() optional method to ContractAdapter interface
    • Extend BaseNetworkConfig with optional indexerUri and indexerWsUri fields for GraphQL endpoint configuration

    @openzeppelin/ui-builder-utils

    • Add access control snapshot utilities (validateSnapshot, serializeSnapshot, deserializeSnapshot, createEmptySnapshot, findRoleAssignment, compareSnapshots)
    • Add access control error utilities (isAccessControlError, error message extraction helpers)
    • Export address normalization utilities (normalizeAddress, addressesEqual) for chain-agnostic address comparison
  • #271 94bc4b4 Thanks @pasevin! - feat(adapter-stellar): add two-step Ownable support with ledger-based expiration

    Implements OpenZeppelin Stellar Ownable two-step ownership transfer pattern:

    New Features:

    • getOwnership() now returns ownership state (owned/pending/expired/renounced) with pending transfer details
    • transferOwnership() supports expiration ledger parameter for two-step transfers
    • acceptOwnership() allows pending owners to complete ownership transfer
    • getCurrentLedger() helper to get current ledger sequence for expiration calculation
    • validateExpirationLedger() validation helper for client-side expiration checks
    • hasTwoStepOwnable capability flag in feature detection

    Type Extensions:

    • Added OwnershipState type for ownership states
    • Added PendingOwnershipTransfer interface for pending transfer details
    • Extended OwnershipInfo with state and pendingTransfer fields
    • Extended AccessControlCapabilities with hasTwoStepOwnable flag

    Indexer Integration:

    • Added OWNERSHIP_TRANSFER_STARTED event type support
    • Added queryPendingOwnershipTransfer() method to indexer client
    • Graceful degradation when indexer is unavailable

    Non-Functional:

    • Performance: Ownership queries < 3s, indexer queries < 1s, ledger queries < 500ms
    • Logging: INFO for ownership operations, WARN for indexer unavailability

Patch Changes

@openzeppelin/[email protected]

Minor Changes

  • #270 56eb3fc Thanks @pasevin! - Add NetworkSwitchManager component and useWalletReconnectionHandler hook to react-core for reuse across applications.

    • NetworkSwitchManager: Headless component that handles automatic wallet network switching for EVM chains. Moved from builder package.
    • useWalletReconnectionHandler: Hook that detects wallet reconnection and triggers network switch re-queue via callback. Refactored from builder to use a callback-based API for portability.

    These additions enable other applications (like Role Manager) to share the same wallet network switching logic without duplicating code.

Patch Changes

@openzeppelin/[email protected]

Minor Changes

  • #243 bfbbf9b Thanks @pasevin! - Add Access Control and Ownable support for Stellar (Soroban) contracts

    @openzeppelin/ui-builder-adapter-stellar

    • Add AccessControlService implementation with full support for OpenZeppelin Access Control and Ownable patterns
    • Add capability detection to identify contracts implementing AccessControl, Ownable, or both
    • Support role management: query current roles, grant/revoke roles, check permissions
    • Support ownership management: transfer ownership, query current owner
    • Add historical queries via SubQuery indexer integration for complete role change and ownership transfer history
    • Implement server-side filtering by contract, role, account, and limit
    • Add graceful degradation when indexer is unavailable (on-chain queries continue to work)
    • Add comprehensive address validation using shared utilities at all service entry points
    • Export access control service via getAccessControlService() method on StellarAdapter
    • Add snapshot export functionality for current access control state
    • Support both account addresses (G...) and contract addresses (C...) for ownership transfers

    @openzeppelin/ui-builder-types

    • Add AccessControlService interface and related types (AccessControlCapabilities, OwnershipInfo, RoleAssignment, AccessSnapshot, HistoryEntry, OperationResult)
    • Add getAccessControlService?() optional method to ContractAdapter interface
    • Extend BaseNetworkConfig with optional indexerUri and indexerWsUri fields for GraphQL endpoint configuration

    @openzeppelin/ui-builder-utils

    • Add access control snapshot utilities (validateSnapshot, serializeSnapshot, deserializeSnapshot, createEmptySnapshot, findRoleAssignment, compareSnapshots)
    • Add access control error utilities (isAccessControlError, error message extraction helpers)
    • Export address normalization utilities (normalizeAddress, addressesEqual) for chain-agnostic address comparison
  • #255 f9cf1c7 Thanks @pasevin! - Move EcosystemFeatureConfig and EcosystemInfo interfaces from builder registry to shared types package (@openzeppelin/ui-builder-types). This ensures consistent type definitions across all consumers and enables reuse in other applications like Role Manager.

  • #271 94bc4b4 Thanks @pasevin! - feat(adapter-stellar): add two-step Ownable support with ledger-based expiration

    Implements OpenZeppelin Stellar Ownable two-step ownership transfer pattern:

    New Features:

    • getOwnership() now returns ownership state (owned/pending/expired/renounced) with pending transfer details
    • transferOwnership() supports expiration ledger parameter for two-step transfers
    • acceptOwnership() allows pending owners to complete ownership transfer
    • getCurrentLedger() helper to get current ledger sequence for expiration calculation
    • validateExpirationLedger() validation helper for client-side expiration checks
    • hasTwoStepOwnable capability flag in feature detection

    Type Extensions:

    • Added OwnershipState type for ownership states
    • Added PendingOwnershipTransfer interface for pending transfer details
    • Extended OwnershipInfo with state and pendingTransfer fields
    • Extended AccessControlCapabilities with hasTwoStepOwnable flag

    Indexer Integration:

    • Added OWNERSHIP_TRANSFER_STARTED event type support
    • Added queryPendingOwnershipTransfer() method to indexer client
    • Graceful degradation when indexer is unavailable

    Non-Functional:

    • Performance: Ownership queries < 3s, indexer queries < 1s, ledger queries < 500ms
    • Logging: INFO for ownership operations, WARN for indexer unavailability

@openzeppelin/[email protected]

Minor Changes

  • #249 7561580 Thanks @pasevin! - Add subHeader prop to SidebarLayout to allow rendering content between the header and the scrollable area.

  • #256 f911a9e Thanks @pasevin! - Add NetworkIcon and NetworkSelector components to the UI package for reuse across applications.

    • NetworkIcon: Reusable component for rendering network icons based on ecosystem and iconComponent
    • NetworkSelector: Generic dropdown selector component with search, ecosystem grouping, and network type badges
    • Refactor NetworkStatusBadge and NetworkRow to use NetworkIcon for consistency
  • #250 d74dafc Thanks @pasevin! - Move Header component to UI package

  • #246 fbc8ecd Thanks @pasevin! - Add reusable sidebar components (SidebarButton, SidebarLayout, SidebarSection) to enable sidebar reuse across projects

Patch Changes

  • #254 c0cb6d1 Thanks @pasevin! - Fix AddressDisplay hover behavior: no reserved space when the copy button is hidden. The copy control now expands on hover/focus, removing the gray gap and right-side imbalance. Also adds a 2-second copy confirmation that swaps the copy icon for a green check.

  • Updated dependencies [bfbbf9b, f9cf1c7, 94bc4b4]:

@openzeppelin/[email protected]

Minor Changes

  • #243 bfbbf9b Thanks @pasevin! - Add Access Control and Ownable support for Stellar (Soroban) contracts

    @openzeppelin/ui-builder-adapter-stellar

    • Add AccessControlService implementation with full support for OpenZeppelin Access Control and Ownable patterns
    • Add capability detection to identify contracts implementing AccessControl, Ownable, or both
    • Support role management: query current roles, grant/revoke roles, check permissions
    • Support ownership management: transfer ownership, query current owner
    • Add historical queries via SubQuery indexer integration for complete role change and ownership transfer history
    • Implement server-side filtering by contract, role, account, and limit
    • Add graceful degradation when indexer is unavailable (on-chain queries continue to work)
    • Add comprehensive address validation using shared utilities at all service entry points
    • Export access control service via getAccessControlService() method on StellarAdapter
    • Add snapshot export functionality for current access control state
    • Support both account addresses (G...) and contract addresses (C...) for ownership transfers

    @openzeppelin/ui-builder-types

    • Add AccessControlService interface and related types (AccessControlCapabilities, OwnershipInfo, RoleAssignment, AccessSnapshot, HistoryEntry, OperationResult)
    • Add getAccessControlService?() optional method to ContractAdapter interface
    • Extend BaseNetworkConfig with optional indexerUri and indexerWsUri fields for GraphQL endpoint configuration

    @openzeppelin/ui-builder-utils

    • Add access control snapshot utilities (validateSnapshot, serializeSnapshot, deserializeSnapshot, createEmptySnapshot, findRoleAssignment, compareSnapshots)
    • Add access control error utilities (isAccessControlError, error message extraction helpers)
    • Export address normalization utilities (normalizeAddress, addressesEqual) for chain-agnostic address comparison

Patch Changes

@openzeppelin/[email protected]

Patch Changes

@openzeppelin/[email protected]

Patch Changes

@openzeppelin/[email protected]

Patch Changes

@openzeppelin/[email protected]

Patch Changes

@openzeppelin/[email protected]

Patch Changes

@oz-release-app oz-release-app bot requested a review from a team as a code owner November 25, 2025 12:10
@oz-release-app oz-release-app bot closed this Nov 26, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 46b762f to 5efd65a Compare November 26, 2025 12:36
@oz-release-app oz-release-app bot reopened this Nov 26, 2025
@pasevin
Copy link
Collaborator

pasevin commented Nov 26, 2025

Merge this only once the Role Manager UI tool is ready.

@oz-release-app oz-release-app bot closed this Nov 27, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 251cc96 to fbc8ecd Compare November 27, 2025 09:42
@oz-release-app oz-release-app bot reopened this Nov 27, 2025
@oz-release-app oz-release-app bot closed this Nov 27, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 5c2c0ab to 38935f9 Compare November 27, 2025 10:40
@oz-release-app oz-release-app bot reopened this Nov 27, 2025
@oz-release-app oz-release-app bot closed this Nov 27, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from fe88544 to 97cd97b Compare November 27, 2025 11:00
@oz-release-app oz-release-app bot reopened this Nov 27, 2025
@oz-release-app oz-release-app bot closed this Nov 27, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 47e492a to 7561580 Compare November 27, 2025 12:16
@oz-release-app oz-release-app bot reopened this Nov 27, 2025
@oz-release-app oz-release-app bot closed this Nov 27, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 63ee17c to d74dafc Compare November 27, 2025 12:41
@oz-release-app oz-release-app bot reopened this Nov 27, 2025
@oz-release-app oz-release-app bot closed this Nov 27, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 16b5cf0 to d5e5638 Compare November 27, 2025 13:43
@oz-release-app oz-release-app bot reopened this Nov 27, 2025
@oz-release-app oz-release-app bot closed this Nov 27, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from ee9659a to 1acde45 Compare November 27, 2025 14:51
@pasevin pasevin reopened this Nov 27, 2025
@oz-release-app oz-release-app bot closed this Dec 5, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 1ad3b42 to 6cf6e46 Compare December 5, 2025 11:27
@oz-release-app oz-release-app bot reopened this Dec 5, 2025
@oz-release-app oz-release-app bot closed this Dec 5, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from f56f347 to 60c4d0a Compare December 5, 2025 11:48
@oz-release-app oz-release-app bot reopened this Dec 5, 2025
@oz-release-app oz-release-app bot closed this Dec 5, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 90dc02f to 7aba512 Compare December 5, 2025 12:43
@oz-release-app oz-release-app bot reopened this Dec 5, 2025
@oz-release-app oz-release-app bot closed this Dec 5, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from b6583e7 to 4bca6ae Compare December 5, 2025 13:33
@oz-release-app oz-release-app bot reopened this Dec 5, 2025
@oz-release-app oz-release-app bot closed this Dec 8, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from a34481c to 06741df Compare December 8, 2025 12:33
@oz-release-app oz-release-app bot reopened this Dec 8, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from abc3ae1 to 28959e0 Compare December 9, 2025 13:04
@oz-release-app oz-release-app bot closed this Dec 10, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 53e63c9 to e00f7ca Compare December 10, 2025 06:39
@oz-release-app oz-release-app bot reopened this Dec 10, 2025
@oz-release-app oz-release-app bot closed this Dec 10, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from 23cfc77 to 11d4b20 Compare December 10, 2025 15:36
@oz-release-app oz-release-app bot reopened this Dec 10, 2025
@oz-release-app oz-release-app bot closed this Dec 10, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from cc785e0 to 56eb3fc Compare December 10, 2025 16:06
@oz-release-app oz-release-app bot reopened this Dec 10, 2025
@oz-release-app oz-release-app bot closed this Dec 11, 2025
@oz-release-app oz-release-app bot force-pushed the changeset-release/main branch from fd9af74 to 94bc4b4 Compare December 11, 2025 13:27
@oz-release-app oz-release-app bot reopened this Dec 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants