All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- BREAKING: Track Snap lifecycle analytics events in
SnapController(#4048)- This logic was previously in the clients, but can now be removed there.
- The
SnapControllermessenger now requires the following actions and events:AnalyticsController:trackEventSnapController:snapInstallStartedSnapController:snapInstallFailedSnapController:snapInstalledSnapController:snapUpdatedSnapController:snapUninstalled
- BREAKING: Track analytics for OTA Snap updates (#4049)
- The
SnapControllerconstructor now requires aclientConfigparameter.
- The
- Add
requestPeriodicUpdatemethod toSnapRegistryController(#4043)
- Bump
@metamask/storage-servicefrom1.0.1to1.0.2(#4035) - Bump
@metamask/approval-controllerfrom9.0.1to9.0.2(#4026)
- Bump
@metamask/permission-controllerfrom13.1.0to13.1.1(#4002) - Bump
@metamask/snaps-rpc-methodsfrom16.0.0to17.0.0(#4020)
- Bump
@metamask/snaps-rpc-methodsfrom^15.1.1to16.0.0(#3999) - Bump
@metamask/json-rpc-enginefrom^10.3.0to^10.5.0(#3992, #3998)
- Bump
@metamask/permission-controllerfrom^12.3.0to^13.1.0(#3984, #3989) - Bump
@metamask/json-rpc-enginefrom10.2.4to^10.3.0(#3982) - Bump
@metamask/messengerfrom^1.1.1to^1.2.0(#3981) - Bump
@metamask/base-controllerfrom^9.0.1to^9.1.0(#3959)
- Omit installing Snaps from
getAllSnapsandgetRunnableSnaps(#3990)
- Stop relying on account metadata for
MultichainRoutingService(#3974)
- Increase iframe unload timeout (#3971)
- Skip refetching the registry in
handleRegistryUpdate(#3961)
- BREAKING: Always consume latest registry in
updateRegistry(#3948, #3949)SnapControllernow listens forSnapRegistryController:registryUpdated.
- Bump
@metamask/messengerfrom^1.1.0to^1.1.1(#3944) - Bump
@metamask/utilsfrom^11.10.0to^11.11.0(#3935)
- Bump
@metamask/approval-controllerfrom^9.0.0to^9.0.1(#3930) - Bump
@metamask/base-controllerfrom^9.0.0to^9.0.1(#3930) - Bump
@metamask/json-rpc-enginefrom^10.2.3to^10.2.4(#3925) - Bump
@metamask/messengerfrom^0.3.0to^1.1.0(#3930, #3934) - Bump
@metamask/permission-controllerfrom^12.2.1to^12.3.0(#3930) - Bump
@metamask/storage-servicefrom^1.0.0to^1.0.1(#3930)
- BREAKING: All action types were renamed from
DoSomethingtoControllerNameDoSomethingAction(#3907, #3911, #3912, #3916, #3918)SnapControlleractions:GetSnapis nowSnapControllerGetSnapAction.- Note: The method is now called
getSnapinstead ofget. - Note: It now returns
nullif a Snap is not found, instead ofundefined.
- Note: The method is now called
HandleSnapRequestis nowSnapControllerHandleRequestAction.GetSnapStateis nowSnapControllerGetSnapStateAction.HasSnapis nowSnapControllerHasSnapAction.- Note: The method is now called
hasSnapinstead ofhas.
- Note: The method is now called
UpdateSnapStateis nowSnapControllerUpdateSnapStateAction.ClearSnapStateis nowSnapControllerClearSnapStateAction.UpdateRegistryis nowSnapControllerUpdateRegistryAction.EnableSnapis nowSnapControllerEnableSnapAction.- Note: The method is now called
enableSnapinstead ofenable.
- Note: The method is now called
DisableSnapis nowSnapControllerDisableSnapAction.- Note: The method is now called
disableSnapinstead ofdisable.
- Note: The method is now called
RemoveSnapis nowSnapControllerRemoveSnapAction.- Note: The method is now called
removeSnapinstead ofremove.
- Note: The method is now called
GetPermittedSnapsis nowSnapControllerGetPermittedSnapsAction.- Note: The method is now called
getPermittedSnapsinstead ofgetPermitted.
- Note: The method is now called
GetAllSnapsis nowSnapControllerGetAllSnapsAction.- Note: The method is now called
getAllSnapsinstead ofgetAll.
- Note: The method is now called
GetRunnableSnapsis nowSnapControllerGetRunnableSnapsAction.StopAllSnapsis nowSnapControllerStopAllSnapsAction.InstallSnapsis nowSnapControllerInstallSnapsAction.- Note: The method is now called
installSnapsinstead ofinstall.
- Note: The method is now called
DisconnectOriginis nowSnapControllerDisconnectOriginAction.- Note: The method is now called
disconnectOrigininstead ofremoveSnapFromSubject.
- Note: The method is now called
RevokeDynamicPermissionsis nowSnapControllerRevokeDynamicSnapPermissionsAction.GetSnapFileis nowSnapControllerGetSnapFileAction.IsMinimumPlatformVersionis nowSnapControllerIsMinimumPlatformVersionAction.SetClientActiveis nowSnapControllerSetClientActiveAction.
CronjobControlleractions:Scheduleis nowCronjobControllerScheduleAction.Cancelis nowCronjobControllerCancelAction.Getis nowCronjobControllerGetAction.
SnapInterfaceControlleractions:CreateInterfaceis nowSnapInterfaceControllerCreateInterfaceAction.GetInterfaceis nowSnapInterfaceControllerGetInterfaceAction.UpdateInterfaceis nowSnapInterfaceControllerUpdateInterfaceAction.DeleteInterfaceis nowSnapInterfaceControllerDeleteInterfaceAction.UpdateInterfaceStateis nowSnapInterfaceControllerUpdateInterfaceStateAction.ResolveInterfaceis nowSnapInterfaceControllerResolveInterfaceAction.
ExecutionServiceactions:ExecuteSnapis nowExecutionServiceExecuteSnapAction.HandleRequestis nowExecutionServiceHandleRequestAction.TerminateSnapis nowExecutionServiceTerminateSnapAction.GetExecutionStatusis nowExecutionServiceGetExecutionStatusAction.
SnapRegistryControlleractions:GetResultis nowSnapRegistryControllerGetAction.GetMetadatais nowSnapRegistryControllerGetMetadataAction.ResolveVersionis nowSnapRegistryControllerResolveVersionAction.Updateis nowSnapRegistryControllerRequestUpdateAction.- Note: The method is now called
requestUpdateinstead ofupdate.
- Note: The method is now called
- BREAKING: All event types were renamed from
OnSomethingtoControllerOnSomethingEvent(#3907, #3916)SnapControllerevents:SnapStateChangewas removed in favour ofSnapControllerStateChangeEvent.SnapBlockedis nowSnapControllerSnapBlockedEvent.SnapInstallStartedis nowSnapControllerSnapInstallStartedEvent.SnapInstallFailedis nowSnapControllerSnapInstallFailedEvent.SnapInstalledis nowSnapControllerSnapInstalledEvent.SnapUninstalledis nowSnapControllerSnapUninstalledEvent.SnapUnblockedis nowSnapControllerSnapUnblockedEvent.SnapUpdatedis nowSnapControllerSnapUpdatedEvent.SnapRolledbackis nowSnapControllerSnapRolledbackEvent.SnapTerminatedis nowSnapControllerSnapTerminatedEvent.SnapEnabledis nowSnapControllerSnapEnabledEvent.SnapDisabledis nowSnapControllerSnapDisabledEvent.
ExecutionServiceevents:ErrorMessageEventis nowExecutionServiceUnhandledErrorEvent.OutboundRequestis nowExecutionServiceOutboundRequestEvent.OutboundResponseis nowExecutionServiceOutboundResponseEvent.
- BREAKING:: Rename
MultichainRoutertoMultichainRoutingServiceand update action types accordingly (#3913)- This is consistent with the naming of other services.
- BREAKING: Rename
JsonSnapsRegistrytoSnapRegistryControllerand update action types accordingly (#3918)- This is consistent with the naming of other controllers.
- The controller name is now
SnapRegistryControllerinstead ofSnapsRegistryas well.
- BREAKING:
MultichainRoutingServicenow requiresSnapController:getRunnableSnapsinstead ofSnapController:getAllSnaps(#3913) - BREAKING:
SnapInsightsControllernow requiresSnapController:getRunnableSnapsinstead ofSnapController:getAllSnaps(#3915) - RREAKING: Replace
ExecutionServiceinterface with abstract class (#3916)- The
ExecutionServiceis now an abstract class and replaces the previousAbstractExecutionServiceclass interface.
- The
- RREAKING: Remove
AbstractExecutionServiceclass in favour ofExecutionService(#3916) - BREAKING: Remove
incrementActiveReferencesanddecrementActiveReferencesactions and methods fromSnapController(#3907, #3920)- This was never used in production.
- BREAKING: Remove public
getTruncatedSnapandgetTruncatedSnapExpectmethods fromSnapController(#3923)
- Always attach error handler to RPC stream (#3898)
- Track whether interface has been displayed before allowing
snap_getInterfaceState(#3888)
- Bump
@metamask/json-rpc-enginefrom10.2.2to10.2.3(#3884)
- Recover if preinstalled Snaps source code is missing (#3886)
- Use
JsonRpcEngineV2for execution services (#3857) - Remove
@metamask/phishing-controllerdependency (#3852) - Bump
@metamask/utilsfrom11.9.0to11.10.0(#3854) - Bump
@metamask/json-rpc-enginefrom10.2.1to10.2.2(#3849)
- Reinitialize
SnapControllerafter clearing state (#3870) - Increase max listeners limit for
rpcStream(#3856)
- BREAKING: Use
StorageServiceto store source code (#3777)
- BREAKING: Remove
closeAllConnectionsconstructor argument (#3814) - Pass executor parameters by object (#3803)
- Bump
lodashfrom4.17.21to4.17.23(#3821) - Bump
tarfrom7.0.0to7.1.0(#3821) - Bump
@metamask/json-rpc-enginefrom10.2.0to10.2.1(#3804)
- Disallow using unconnected accounts in
MultichainRouter(#3837) - Update
SnapControllerstate whenSnapsRegistrychanges (#3828) - Update documentation for
MultichainRouter(#3827) - Manually construct
keyring_resolveAccountAddressrequest (#3822)
- Skip updating registry if signature has not changed (#3779)
- Detect and recover missing permissions for preinstalled Snaps (#3775)
- Add support for
DateTimePickercomponent (#3698)
- Bump
@metamask/permission-controllerfrom12.1.0to12.1.1(#3746)
- Use
no-cachefor fetching registry (#3760)
- BREAKING: Ensure user has onboarded before allowing usage of SnapController (#3731)
- This is breaking as it adds a new required constructor argument to
SnapControllercalledensureOnboardingComplete.
- This is breaking as it adds a new required constructor argument to
- BREAKING: Support specified
clientVersionsin the registry (#3737)- This is breaking as it adds a new required constructor argument to
JsonSnapsRegistrycalledclientConfig.
- This is breaking as it adds a new required constructor argument to
- Override
disableSnapInstallationfeature flag when using automatic updates (#3735)
- Add NPM proxy support (#3695)
- Bump
@metamask/permission-controllerfrom12.0.0to12.1.0(#3714) - Bump
@metamask/phishing-controllerfrom13.1.0to15.0.0(#3707)
- Remove logic for granting CAIP-25 permissions (#3723)
- Prevent initial connections from being revoked as unused on update (#3729)
- Keep dynamic permissions on update (#3726)
- BREAKING: Use new
Messengerfrom@metamask/messenger(#3611)- Previously,
SnapController,CronjobController,SnapInsightsController,SnapInterfaceController,MultichainRouter,ExecutionServiceandWebSocketServiceaccepted aRestrictedMessengerinstance from@metamask/base-controller.
- Previously,
- BREAKING: Metadata property
anonymousrenamed toincludeInDebugSnapshot(#3611) - Bump
@metamask/approval-controllerfrom^7.2.0to^8.0.0((#3611) - Bump
@metamask/base-controllerfrom^8.4.1to^9.0.0((#3611) - Bump
@metamask/permission-controllerfrom^11.0.6to^12.0.0((#3611)
- Throw if Snap not installed (#3666)
- Stop creating errors before needing to throw (#3664)
- BREAKING: Allow updating preinstalled Snaps via the registry (#3616)
SnapController:updateBlockedSnapshas been renamed toSnapController:updateRegistry.
- Add two new controller state metadata properties:
includeInStateLogsandusedInUi(#3632)
- BREAKING: Make
SnapInterfaceController:createInterfaceandSnapInterfaceController:updateInterfaceactions synchronous (#3361) - BREAKING: Remove
useCaip25Permissionfeature flag and enable behaviour by default (#3413) - BREAKING: Use hash private functions for updating internals (#3601)
updateSnap,processRequestedSnapandauthorizeare no longer publicly available functions.
- Move JSON-RPC request inspection outside of the executor (#3356)
- Simplify JSON-RPC failure validation (#3661)
- Bump MetaMask dependencies (#3651, #3638, #3648, #3630, #3628, #3629, #3607, #3623, #3612)
- Properly roll back
initialConnections(#3618) - Display a warning instead of an error when Snaps fail to terminate (#3621)
- Throw a different error when the NPM registry returns 404 while fetching tarballs (#3602)
- Prevent logging multiple errors as the cause when a Snap crashes due to an unhandled error (#3569)
- Prevent double scheduling events and ensure long-running events work correctly (#3561)
- Emit event when destroying execution environment streams (#3074)
- Ignore terminate calls to not executing Snaps (#3559)
- Properly stop Snaps when clearing state (#3552)
- Add support for
onActiveandonInactivelifecycle hooks (#3542)
- Bump
@metamask/phishing-controllerfrom12.6.0to13.1.0(#3538)
- Use custom state manager for cronjob controller (#3539)
- Add support for non-fungible assets to
endowment:assets(#3527) - Add feature flag to treat local Snaps as preinstalled (#3523)
- Clear cronjobs properly for local Snaps (#3514)
- Improve error message for cancelled requests when a Snap is stopped (#3518)
- Improve execution service error messages (#3521)
- Ensure Snap gets half of allocated initialization time (#3522)
- Handle scheduled events close to current time gracefully (#3510)
- Add support for
onAssetsMarketDatahandler (#3496)
- BREAKING: Move
CronjobControllerinit to separate function (#3507)
- Always delete socket when
closeis emitted (#3465) - Add missing boilerplate to
WebSocketService(#3464)
- Add
WebSocketServicefor WebSockets support (#3450)- This service must be instantiated to invoke
onWebSocketEventwhen WebSocket messages are received.
- This service must be instantiated to invoke
- Add
SnapController:initto supportonStarthandler (#3455)- This function should be called when the client has been fully started.
- BREAKING: Drop support for Node.js 18 and 21 (#3447)
- BREAKING: Refactor cronjob controller to reduce duplication (#3421)
- The
jobsstate property was removed in favour of theeventsproperty, which now contains all background events and cronjobs. CronjobController:schedulenow expects aschedulefield instead ofdate.- Some actions were renamed to remove the
BackgroundEventsuffix:CronjobController:scheduleBackgroundEvent->CronjobController:schedule.CronjobController:cancelBackgroundEvent->CronjobController:cancel.CronjobController:getBackgroundEvents->CronjobController:get.
- The
- Log errors that cause a crash (#3443)
- Recover from a crash more gracefully (#3440)
- This resolves possible race conditions when sending requests to a Snap that is in the process of being stopped.
- Support lifecycle hooks for preinstalled Snaps (#3426)
- Add support for
AccountSelectorcomponent (#3088)
- Fetch registry files in parallel (#3416)
- Prevent scheduling background events less than 1 second in the future (#3414)
- Add
isMinimumPlatformVersionaction (#3405)
- Pass origin to
SnapKeyringviaMultichainRouter(#3403)
- Add support for
wallet_switchEthereumChain(#2634) - Add support for SIP-31
onClientRequesthandler (#3394)
- Fix wrong event name for
Snap Export Used(#3389) - Remove undefined parameters in
MultichainRouter(#3388)
- Add Snap export usage metrics (#3281)
- Bump
@metamask/post-message-streamfrom9.0.0to10.0.0(#3322) - Bump
@metamask/base-controllerfrom8.0.0to8.0.1(#3365)
- BREAKING: Remove web worker execution service (#3371)
- Catch cronjob errors during initialization (#3373)
- Clear unencrypted Snap state when resetting the client (#3382)
- Use more performant function to determine if message is a notification (#3352)
- Stop unnecessarily encoding messages in web view executor (#3347)
- Increase size of request queue when Snap is starting up (#3340)
- Make comparison case sensitive in MultichainRouter (#3310)
- Add support for market data to
onAssetsConversionhandler (#3299) - Add support for
onAssetHistoricalPricehandler (#3282)
- Debounce persistence of state updates (#3258)
- Inject
contextintoonUserInputrequest (#3298) - Consider protocol Snaps when determining
isSupportedScope(#3284) - Validate origin in
handleRequest(#3292) - Update
nameandsymbolto be optional in a fungible asset type (#3300) - Stop refreshing phishing list when updating interfaces (#3272)
- Add support for the
AddressInputcomponent (#3129) - Add support for the
AssetSelectorcomponent (#3166) - Add mutex to
getSnapStateto prevent concurrent decryption (#3234)
- Increase Snap interface context size limit slightly (#3246)
- Bump
@metamask/key-treefrom10.1.0to10.1.1(#3254) - Bump
nanoidfrom3.1.31to3.3.10(#3228, #3255)
- Handle
withKeyringbreaking change inMultichainRouter(#3238)
- BREAKING: Use mnemonic seed for state encryption key derivation (#3217)
SnapControllernow expects agetMnemonicSeedhook that must return the BIP-39 seed for the user's primary mnemonic.
- Improve error messaging (#3142)
- BREAKING: Use a WebView per Snap on mobile (#3085)
WebViewExecutionServicenow requirescreateWebViewandremoveWebViewconstructor arguments,getWebViewis no longer supported.
- BREAKING: Encode messages in
WebViewMessageStreamas byte arrays (#3077)- A version of the Snaps execution environment that supports this encoding is required.
- Bump MetaMask dependencies (#3091, #3092, #3084, #3083, #3082, #3050)
- Recreate JSON-RPC request in
MultichainRouter(#3086) - Properly pass down execution service constructor args (#3110)
- Add
nameandstatetoExecutionServiceandMultichainRouter(#3058) - Allow
nullin theendowment:assetshandlers return value (#3056) - Rename
ControllerMessengertoMessenger(#3053)
- Add
MultichainRouterfor SIP-26 (#2875) - Add
onProtocolRequestsupport for SIP-26 (#2875) - Add
getRunnableSnapsaction toSnapController(#3049)
- Add support for
onAssetsLookupandonAssetsConversionhandlers (#3028)
- Added support for non-recurring cronjobs via
snap_scheduleBackgroundEvent(#2941)
- Bump MetaMask dependencies (#2946, #3007, #2999, #3003, #2991, #2989)
- Cache snap state in memory for improved performance (#2980)
- Stop storing messenger manually in
CronjobController(#3006)
- Add support for
onSettingsPageexport (#2911)
- Use
BigIntfor processing insight chain IDs (#2935)
- Add
clientCryptographyproperty for specifying custom cryptography functions (#2909)
- Emit
snapInstalledandsnapUpdatedevents for preinstalled Snaps (#2900)- This indirectly makes preinstalled Snaps trigger cronjobs and lifecycle hooks more reliably.
- Add interface persistence (#2856)
- Use
arrayBufferfor fetching local Snaps (#2884)- This fixes some incompatiblities with React Native.
- Add platform version field to manifest (#2803)
- Bump MetaMask dependencies (#2853)
- Stop unnecesarily validating JSON for stored state (#2845)
- Reduce unnecessary JSON validation (#2844)
- Pass full URLs to
PhishingController(#2835) - Ignore Snap insight response if transaction or signature has already been signed (#2825)
- Allow updating interface context (#2809)
snap_updateInterfacenow accepts acontextparameter to update the context of an interface.
- Remove
AccountSelectorcomponent (#2794)- This is technically a breaking change, but the
AccountSelectorcomponent was never actually implemented, so it should not affect any existing code.
- This is technically a breaking change, but the
- Add
AccountSelectorcomponent (#2764, #2768, #2766) - Convert
createWindowparameters to options bag (#2765)
- Add support for
metamask:schemed URLs (#2719)
- Export
WebViewMessageStreamand related types (#2746)
- Fix invalid
exportsfield (#2740)
- Fix invalid types in type declaration in some cases (#2714)
- Add
stopAllSnapsfunction toSnapController(#2674)
- Fix ESM version of the package (#2682)
- This fixes the ESM version of the package to be fully compliant with the ESM standard.
- Bump
@metamask/utilsfrom^9.1.0to^9.2.1(#2680) - Bump other MetaMask dependencies (#2703)
- Add
Selectorcomponent (#2645) - Add missing types for
getStateaction &stateChangeevent (#2655, #2659)
- Fix
fetchbinding under LavaMoat (#2642)
- Add
RadioGroupcomponent (#2592)
- Persist
severityproperty inSnapInsightsController(#2612)
- Bump
@metamask/approval-controllerfrom^7.0.0to^7.0.2(#2593) - Bump
@metamask/base-controllerfrom^6.0.1to^6.0.2(#2593) - Bump
@metamask/json-rpc-enginefrom^9.0.0to^9.0.2(#2593) - Bump
@metamask/json-rpc-middleware-streamfrom^8.0.0to^8.0.2(#2593) - Bump
@metamask/permission-controllerfrom^10.0.1to^11.0.0(#2593) - Bump
@metamask/phishing-controllerfrom^10.0.0to^10.1.1(#2593) - Bump
@metamask/snaps-utilsfrom^7.8.0to^7.8.1(#2595)
- Add
snap_resolveInterfaceRPC method to theSnapInterfaceController(#2509) - Add
SnapInsightsController(#2555)
- Bump
@metamask/base-controllerfrom^6.0.0to^6.0.1(#2445) - Bump
@metamask/permission-controllerfrom^10.0.0to^10.0.1(#2445) - Bump
@metamask/rpc-errorsfrom^6.2.1to^6.3.1(#2445) - Bump
@metamask/snaps-registryfrom^3.1.0to^3.2.1(#2445) - Bump
@metamask/snaps-rpc-methodsto^10.0.0(#2589) - Bump
@metamask/snaps-sdkto^6.1.0(#2589) - Bump
@metamask/snaps-utilsto^7.8.0(#2589) - Bump
@metamask/utilsfrom^8.3.0to^9.1.0(#2445) - Bump peer dependency
@metamask/snaps-execution-environmentsto^6.6.1(#2589)
- Handle initial connections for preinstalled Snaps (#2591)
- Account for revoked origins when calculating the difference in
initialConnections(#2535)- Fixes issue of revoking permissions that are already revoked.
- Enables revoked connections to be highlighted as being re-added in the UI.
- Enforce stricter size limits for source code, static auxiliary files, and
snap_getFilereturn values (#2527)- Prevent communication failures by enabling compliance with JSON-RPC extension message requirements.
- Add feature flag to disable Snap installation (#2521)
- Add
Checkboxcomponent (#2501) - Add
FileInputcomponent (#2469) - Support additional components inside forms (#2497)
- BREAKING: Defer creation of offscreen document in
OffscreenExecutionService(#2473) - Update
onNameLookupresponse to includedomainName(#2484) - Bump MetaMask dependencies (#2460)
- Properly decrypt legacy state blobs (#2472)
- Add
hiddenflag for preinstalled Snaps (#2463)
- Use first Dropdown option as the default value (#2465)
- Fix
react-nativeexport for tools that don't supportpackage.jsonexports (#2451)
- Add origin to lifecycle hooks (#2441)
- Lifecycle hooks can now use the
originparameter to determine the origin of the installation or update.
- Lifecycle hooks can now use the
- Add
contextfield tosnap_createInterface(#2413) - Add feature flag to disable platform (#2434)
- Add support for
Dropdowncomponent (#2420) - Add
initialConnectionsdiff calculations needed for Snap update (#2424)
- Correctly merge caveats when using initial connections (#2419)
- Re-instantiate preinstalled Snaps after clearing state (#2393)
- Add JSX support for custom UI (#2258)
- Bump
@metamask/approval-controllerfrom6.0.1to6.0.2(#2380) - Bump
@metamask/base-controllerfrom5.0.1to5.0.2(#2375)
- Fix an issue where certain types of executors would be timed out too quickly (#2389)
- BREAKING: Move
maxInitTimeconstructor argument fromSnapControllertoExecutionService(#2348)
- Increase max UI size limit from 250 KB to 10 MB (#2342)
- Consider caveats in permissions difference calculation (#2345)
- This fixes a bug where certain caveats would not be correctly applied when updating Snaps.
- Gracefully handle errors for multiple simultaneous failing requests (#2346)
- Properly handle termination of Snaps that are currently executing (#2304)
- Properly tear down partially initialized executors and improve stability when executor initialization fails (#2348)
- Fix encryption key caching issues (#2326)
- BREAKING: Refactor encryption to enable caching (#2316)
- New required constructor arguments
encryptorandgetMnemonichave been added.
- New required constructor arguments
- Include
initialConnectionsin approvalrequestState(#2322)
- Delete unencrypted state when uninstalling a Snap (#2311)
- Bump MetaMask dependencies (#2270)
- Handle unavailable registry more gracefully (#2256)
- Bump
@metamask/snaps-registryto^3.0.1(#2255) - Bump
@metamask/json-rpc-engineto^7.3.3(#2247)
- Improve timeout handling when the execution environment fails to load (#2242)
- Fix minor build configuration problems (#2220)
- BREAKING: Update ESM build to be fully compliant with the ESM standard (#2210)
- BREAKING: Move Node.js exports to separate export (#2210)
- The default export is now browser-compatible.
- Node.js APIs can be imported from
<package>/node.
- Bump
@metamask/rpc-errorsto^6.2.1(#2209)
- Add sizing limits for custom UI (#2199)
- Fix issue installing non-allowlisted Snaps in allowlist mode (#2196)
- Add support for dynamic user interfaces (#1465, #2126, #2144, #2152, #2143)
- Add support for Snap defined execution timeouts (#2098)
- A Snap can now define
maxRequestTimeto extend or shorten its execution timeout.
- A Snap can now define
- Add
WebViewExecutionServicefor mobile execution (#2005)
- Loosen allowlist requirements (#1672)
- Snaps with certain permissions can now be installed without being allowlisted.
- Reintroduce
DecompressionStreamfor improved installation performance (#2110) - Bump
tar-stream(#2116)- This fixes a problem where Snaps would sometimes fail to download from NPM.
- Bump several MetaMask dependencies (#2129, #2132, #2130, #2139, #2142)
- Pass localized snap name to SubjectMetadataController (#2157)
- BREAKING: Remove endowment permission specifications from this package (#2155)
- They can now be found in
snaps-rpc-methods.
- They can now be found in
- Add support for signature insights (#2074)
- Add support for initial connections (#2048)
- Add support for preinstalled snaps (#2008)
- Add additional install events (#2087)
- BREAKING: Remove
:snapAddedevent (#2073) - BREAKING: Remove
:snapRemovedevent (#2076) - Populate subject metadata when snaps are added to state (#2069)
- Revert usage of
DecompressionStream(#2052) - Refactor
NpmLocationclass (#2038)- Most logic is now located in
BaseNpmLocation, making it easier to extend without duplication.
- Most logic is now located in
- Bump several MetaMask dependencies (#2053, #2061, #2064, #2065, #2067)
- Remove support for object-like syntax for cronjobs (#2057)
- Since this never worked in the first place we aren't marking it as breaking.
- Reduce memory usage by removing source code and state from runtime (#2009)
- Improve base64 encoding/decoding speeds (#1985)
- Use
DecompressionStreamfor NPM fetching when available (#1971) - Bump several MetaMask dependencies (#1989, #1993, #1987, #1983)
- Fix idle snap timeout for unused snap (#2010)
- Fix a few issues with passing non-JSON-serializable values (#1974)
- Use
SubtleCryptofor checksum calculation if available (#1953)- This reduces the time of the checksum calculation by up to 95% in some environments.
- Use
@metamask/snaps-sdkpackage (#1930, #1949)- This package replaces the
@metamask/snaps-typesand @metamask/snaps-uipackages.
- This package replaces the
- Fix support for transaction insight Snaps returning
null(#1952)
- Add manifest localization functionality (#1889)
- Add support for unencrypted storage using
snap_manageState(#1902) - Add
OnHomePageexport (#1896)
- Add support for links in custom UI and notifications (#1814)
- Fix an issue where snaps throwing a
SnapErrorwould be allowed to run for longer than expected (#1897)
- Fix a few issues with allowlist version resolving (#1888)
- Add static file API (#1836)
- This adds a
snap_getFilemethod, which Snaps can use to load files.
- This adds a
- Add
originparameter tosnapInstalledandsnapUpdatedevents (#1867)
- Improve error handling (#1841)
- Snaps can now throw a
SnapError, without causing the Snap to crash.
- Snaps can now throw a
- Bump
tar-streamfrom^2.2.0to^3.1.6(#1853) - Make
snaps-execution-environmentsan optional peer dependency (#1845) - Remove snap errors from state (#1837)
- Try to match requested versions with an allowlisted version (#1877)
- Improve performance when installing snaps with a static version (#1878)
- Stop persisting snaps in the installing state (#1876)
- Add keyring export and endowment (#1787)
- Add optional
allowedOriginsfield toendowment:rpc(#1822)- This can be used to only accept certain origins in your Snap.
- BREAKING: Bump minimum Node.js version to
^18.16.0(#1741)
- Add
SnapController:snapUninstalledevent (#1800)
- Fix some issues with SnapController events (#1800)
- Fix an issue where cronjobs would continually be executed on init (#1790)
- Remove deprecated
endowment:long-running(#1751)
- Initial stable release from main branch (#1757)
- Add
onNameLookupexport (#1394)
- Fix cronjob running on disabled snaps (#1743)
- Bump
@metamask/post-message-streamfrom 6.1.2 to 7.0.0 (#1707, #1724) - Bump
@metamask/utilsand@metamask/snaps-registry(#1694)
- Fix unpacking zero byte files from NPM (#1708)
- Remove unused dependencies (#1680)
- Fix parallel usage of registry (#1669)
- Add
onInstallandonUpdatelifecycle hooks (#1643)
- Make
updateBlockedSnapsupdate the registry (#1625) - Move source code and snap state back to controller state (#1634)
- Release package independently (#1600)
- The version of the package no longer needs to match the version of all other MetaMask Snaps packages.