@metamask/snap-networks-utils 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -1
- package/README.md +4 -10
- package/dist/index.cjs +102 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +51 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +51 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +32 -1
- package/dist/index.mjs.map +1 -1
- package/dist/providers/assets/AssetsProvider.cjs +36 -18
- package/dist/providers/assets/AssetsProvider.cjs.map +1 -1
- package/dist/providers/assets/AssetsProvider.d.cts +30 -2
- package/dist/providers/assets/AssetsProvider.d.cts.map +1 -1
- package/dist/providers/assets/AssetsProvider.d.mts +30 -2
- package/dist/providers/assets/AssetsProvider.d.mts.map +1 -1
- package/dist/providers/assets/AssetsProvider.mjs +36 -18
- package/dist/providers/assets/AssetsProvider.mjs.map +1 -1
- package/dist/providers/remote-feature-flags/RemoteFeatureFlagsProvider.cjs +4 -17
- package/dist/providers/remote-feature-flags/RemoteFeatureFlagsProvider.cjs.map +1 -1
- package/dist/providers/remote-feature-flags/RemoteFeatureFlagsProvider.mjs +4 -17
- package/dist/providers/remote-feature-flags/RemoteFeatureFlagsProvider.mjs.map +1 -1
- package/dist/services/analytics/AnalyticsService.cjs +225 -0
- package/dist/services/analytics/AnalyticsService.cjs.map +1 -0
- package/dist/services/analytics/AnalyticsService.d.cts +175 -0
- package/dist/services/analytics/AnalyticsService.d.cts.map +1 -0
- package/dist/services/analytics/AnalyticsService.d.mts +175 -0
- package/dist/services/analytics/AnalyticsService.d.mts.map +1 -0
- package/dist/services/analytics/AnalyticsService.mjs +221 -0
- package/dist/services/analytics/AnalyticsService.mjs.map +1 -0
- package/dist/ui/ActionHeader/ActionHeader.cjs +23 -0
- package/dist/ui/ActionHeader/ActionHeader.cjs.map +1 -0
- package/dist/ui/ActionHeader/ActionHeader.d.cts +27 -0
- package/dist/ui/ActionHeader/ActionHeader.d.cts.map +1 -0
- package/dist/ui/ActionHeader/ActionHeader.d.mts +27 -0
- package/dist/ui/ActionHeader/ActionHeader.d.mts.map +1 -0
- package/dist/ui/ActionHeader/ActionHeader.mjs +19 -0
- package/dist/ui/ActionHeader/ActionHeader.mjs.map +1 -0
- package/dist/ui/Asset/Asset.cjs +68 -0
- package/dist/ui/Asset/Asset.cjs.map +1 -0
- package/dist/ui/Asset/Asset.d.cts +83 -0
- package/dist/ui/Asset/Asset.d.cts.map +1 -0
- package/dist/ui/Asset/Asset.d.mts +83 -0
- package/dist/ui/Asset/Asset.d.mts.map +1 -0
- package/dist/ui/Asset/Asset.mjs +60 -0
- package/dist/ui/Asset/Asset.mjs.map +1 -0
- package/dist/ui/Asset/question-mark.svg +3 -0
- package/dist/ui/EstimatedChanges/EstimatedChanges.cjs +57 -0
- package/dist/ui/EstimatedChanges/EstimatedChanges.cjs.map +1 -0
- package/dist/ui/EstimatedChanges/EstimatedChanges.d.cts +50 -0
- package/dist/ui/EstimatedChanges/EstimatedChanges.d.cts.map +1 -0
- package/dist/ui/EstimatedChanges/EstimatedChanges.d.mts +50 -0
- package/dist/ui/EstimatedChanges/EstimatedChanges.d.mts.map +1 -0
- package/dist/ui/EstimatedChanges/EstimatedChanges.mjs +53 -0
- package/dist/ui/EstimatedChanges/EstimatedChanges.mjs.map +1 -0
- package/dist/ui/TransactionAlert/TransactionAlert.cjs +72 -0
- package/dist/ui/TransactionAlert/TransactionAlert.cjs.map +1 -0
- package/dist/ui/TransactionAlert/TransactionAlert.d.cts +58 -0
- package/dist/ui/TransactionAlert/TransactionAlert.d.cts.map +1 -0
- package/dist/ui/TransactionAlert/TransactionAlert.d.mts +58 -0
- package/dist/ui/TransactionAlert/TransactionAlert.d.mts.map +1 -0
- package/dist/ui/TransactionAlert/TransactionAlert.mjs +68 -0
- package/dist/ui/TransactionAlert/TransactionAlert.mjs.map +1 -0
- package/dist/utils/async/async.cjs +95 -0
- package/dist/utils/async/async.cjs.map +1 -0
- package/dist/utils/async/async.d.cts +51 -0
- package/dist/utils/async/async.d.cts.map +1 -0
- package/dist/utils/async/async.d.mts +51 -0
- package/dist/utils/async/async.d.mts.map +1 -0
- package/dist/utils/async/async.mjs +88 -0
- package/dist/utils/async/async.mjs.map +1 -0
- package/dist/utils/buildUrl/buildUrl.cjs +54 -0
- package/dist/utils/buildUrl/buildUrl.cjs.map +1 -0
- package/dist/utils/buildUrl/buildUrl.d.cts +15 -0
- package/dist/utils/buildUrl/buildUrl.d.cts.map +1 -0
- package/dist/utils/buildUrl/buildUrl.d.mts +15 -0
- package/dist/utils/buildUrl/buildUrl.d.mts.map +1 -0
- package/dist/utils/buildUrl/buildUrl.mjs +51 -0
- package/dist/utils/buildUrl/buildUrl.mjs.map +1 -0
- package/dist/utils/cache/InMemoryCache.cjs +134 -0
- package/dist/utils/cache/InMemoryCache.cjs.map +1 -0
- package/dist/utils/cache/InMemoryCache.d.cts +29 -0
- package/dist/utils/cache/InMemoryCache.d.cts.map +1 -0
- package/dist/utils/cache/InMemoryCache.d.mts +29 -0
- package/dist/utils/cache/InMemoryCache.d.mts.map +1 -0
- package/dist/utils/cache/InMemoryCache.mjs +130 -0
- package/dist/utils/cache/InMemoryCache.mjs.map +1 -0
- package/dist/utils/cache/StateCache.cjs +193 -0
- package/dist/utils/cache/StateCache.cjs.map +1 -0
- package/dist/utils/cache/StateCache.d.cts +96 -0
- package/dist/utils/cache/StateCache.d.cts.map +1 -0
- package/dist/utils/cache/StateCache.d.mts +96 -0
- package/dist/utils/cache/StateCache.d.mts.map +1 -0
- package/dist/utils/cache/StateCache.mjs +189 -0
- package/dist/utils/cache/StateCache.mjs.map +1 -0
- package/dist/utils/cache/types.cjs +3 -0
- package/dist/utils/cache/types.cjs.map +1 -0
- package/dist/utils/cache/types.d.cts +99 -0
- package/dist/utils/cache/types.d.cts.map +1 -0
- package/dist/utils/cache/types.d.mts +99 -0
- package/dist/utils/cache/types.d.mts.map +1 -0
- package/dist/utils/cache/types.mjs +2 -0
- package/dist/utils/cache/types.mjs.map +1 -0
- package/dist/utils/cache/useCache.cjs +82 -0
- package/dist/utils/cache/useCache.cjs.map +1 -0
- package/dist/utils/cache/useCache.d.cts +57 -0
- package/dist/utils/cache/useCache.d.cts.map +1 -0
- package/dist/utils/cache/useCache.d.mts +57 -0
- package/dist/utils/cache/useCache.d.mts.map +1 -0
- package/dist/utils/cache/useCache.mjs +78 -0
- package/dist/utils/cache/useCache.mjs.map +1 -0
- package/dist/utils/cache/useCacheUntil.cjs +80 -0
- package/dist/utils/cache/useCacheUntil.cjs.map +1 -0
- package/dist/utils/cache/useCacheUntil.d.cts +54 -0
- package/dist/utils/cache/useCacheUntil.d.cts.map +1 -0
- package/dist/utils/cache/useCacheUntil.d.mts +54 -0
- package/dist/utils/cache/useCacheUntil.d.mts.map +1 -0
- package/dist/utils/cache/useCacheUntil.mjs +76 -0
- package/dist/utils/cache/useCacheUntil.mjs.map +1 -0
- package/dist/utils/config/BaseConfigProvider.cjs +62 -0
- package/dist/utils/config/BaseConfigProvider.cjs.map +1 -0
- package/dist/utils/config/BaseConfigProvider.d.cts +54 -0
- package/dist/utils/config/BaseConfigProvider.d.cts.map +1 -0
- package/dist/utils/config/BaseConfigProvider.d.mts +54 -0
- package/dist/utils/config/BaseConfigProvider.d.mts.map +1 -0
- package/dist/utils/config/BaseConfigProvider.mjs +58 -0
- package/dist/utils/config/BaseConfigProvider.mjs.map +1 -0
- package/dist/utils/config/envStructs.cjs +69 -0
- package/dist/utils/config/envStructs.cjs.map +1 -0
- package/dist/utils/config/envStructs.d.cts +57 -0
- package/dist/utils/config/envStructs.d.cts.map +1 -0
- package/dist/utils/config/envStructs.d.mts +57 -0
- package/dist/utils/config/envStructs.d.mts.map +1 -0
- package/dist/utils/config/envStructs.mjs +61 -0
- package/dist/utils/config/envStructs.mjs.map +1 -0
- package/dist/utils/config/environmentStruct.cjs +19 -0
- package/dist/utils/config/environmentStruct.cjs.map +1 -0
- package/dist/utils/config/environmentStruct.d.cts +20 -0
- package/dist/utils/config/environmentStruct.d.cts.map +1 -0
- package/dist/utils/config/environmentStruct.d.mts +20 -0
- package/dist/utils/config/environmentStruct.d.mts.map +1 -0
- package/dist/utils/config/environmentStruct.mjs +16 -0
- package/dist/utils/config/environmentStruct.mjs.map +1 -0
- package/dist/utils/config/logLevelStruct.cjs +14 -0
- package/dist/utils/config/logLevelStruct.cjs.map +1 -0
- package/dist/utils/config/logLevelStruct.d.cts +17 -0
- package/dist/utils/config/logLevelStruct.d.cts.map +1 -0
- package/dist/utils/config/logLevelStruct.d.mts +17 -0
- package/dist/utils/config/logLevelStruct.d.mts.map +1 -0
- package/dist/utils/config/logLevelStruct.mjs +11 -0
- package/dist/utils/config/logLevelStruct.mjs.map +1 -0
- package/dist/utils/config/parseEnv.cjs +30 -0
- package/dist/utils/config/parseEnv.cjs.map +1 -0
- package/dist/utils/config/parseEnv.d.cts +19 -0
- package/dist/utils/config/parseEnv.d.cts.map +1 -0
- package/dist/utils/config/parseEnv.d.mts +19 -0
- package/dist/utils/config/parseEnv.d.mts.map +1 -0
- package/dist/utils/config/parseEnv.mjs +26 -0
- package/dist/utils/config/parseEnv.mjs.map +1 -0
- package/dist/utils/dedupe/InFlightCoalescer.cjs +28 -0
- package/dist/utils/dedupe/InFlightCoalescer.cjs.map +1 -0
- package/dist/utils/dedupe/InFlightCoalescer.d.cts +12 -0
- package/dist/utils/dedupe/InFlightCoalescer.d.cts.map +1 -0
- package/dist/utils/dedupe/InFlightCoalescer.d.mts +12 -0
- package/dist/utils/dedupe/InFlightCoalescer.d.mts.map +1 -0
- package/dist/utils/dedupe/InFlightCoalescer.mjs +24 -0
- package/dist/utils/dedupe/InFlightCoalescer.mjs.map +1 -0
- package/dist/utils/errors/errors.cjs +44 -0
- package/dist/utils/errors/errors.cjs.map +1 -0
- package/dist/utils/errors/errors.d.cts +37 -0
- package/dist/utils/errors/errors.d.cts.map +1 -0
- package/dist/utils/errors/errors.d.mts +37 -0
- package/dist/utils/errors/errors.d.mts.map +1 -0
- package/dist/utils/errors/errors.mjs +40 -0
- package/dist/utils/errors/errors.mjs.map +1 -0
- package/dist/utils/errors/index.cjs +18 -0
- package/dist/utils/errors/index.cjs.map +1 -0
- package/dist/utils/errors/index.d.cts +10 -0
- package/dist/utils/errors/index.d.cts.map +1 -0
- package/dist/utils/errors/index.d.mts +10 -0
- package/dist/utils/errors/index.d.mts.map +1 -0
- package/dist/utils/errors/index.mjs +6 -0
- package/dist/utils/errors/index.mjs.map +1 -0
- package/dist/utils/errors/snapRpcError.cjs +33 -0
- package/dist/utils/errors/snapRpcError.cjs.map +1 -0
- package/dist/utils/errors/snapRpcError.d.cts +11 -0
- package/dist/utils/errors/snapRpcError.d.cts.map +1 -0
- package/dist/utils/errors/snapRpcError.d.mts +11 -0
- package/dist/utils/errors/snapRpcError.d.mts.map +1 -0
- package/dist/utils/errors/snapRpcError.mjs +30 -0
- package/dist/utils/errors/snapRpcError.mjs.map +1 -0
- package/dist/utils/errors/stringifyReason.cjs +36 -0
- package/dist/utils/errors/stringifyReason.cjs.map +1 -0
- package/dist/utils/errors/stringifyReason.d.cts +15 -0
- package/dist/utils/errors/stringifyReason.d.cts.map +1 -0
- package/dist/utils/errors/stringifyReason.d.mts +15 -0
- package/dist/utils/errors/stringifyReason.d.mts.map +1 -0
- package/dist/utils/errors/stringifyReason.mjs +33 -0
- package/dist/utils/errors/stringifyReason.mjs.map +1 -0
- package/dist/utils/errors/syncError.cjs +98 -0
- package/dist/utils/errors/syncError.cjs.map +1 -0
- package/dist/utils/errors/syncError.d.cts +60 -0
- package/dist/utils/errors/syncError.d.cts.map +1 -0
- package/dist/utils/errors/syncError.d.mts +60 -0
- package/dist/utils/errors/syncError.d.mts.map +1 -0
- package/dist/utils/errors/syncError.mjs +92 -0
- package/dist/utils/errors/syncError.mjs.map +1 -0
- package/dist/utils/errors/trackError.cjs +76 -0
- package/dist/utils/errors/trackError.cjs.map +1 -0
- package/dist/utils/errors/trackError.d.cts +64 -0
- package/dist/utils/errors/trackError.d.cts.map +1 -0
- package/dist/utils/errors/trackError.d.mts +64 -0
- package/dist/utils/errors/trackError.d.mts.map +1 -0
- package/dist/utils/errors/trackError.mjs +72 -0
- package/dist/utils/errors/trackError.mjs.map +1 -0
- package/dist/utils/handlers/wrapSnapHandlers.cjs +57 -0
- package/dist/utils/handlers/wrapSnapHandlers.cjs.map +1 -0
- package/dist/utils/handlers/wrapSnapHandlers.d.cts +74 -0
- package/dist/utils/handlers/wrapSnapHandlers.d.cts.map +1 -0
- package/dist/utils/handlers/wrapSnapHandlers.d.mts +74 -0
- package/dist/utils/handlers/wrapSnapHandlers.d.mts.map +1 -0
- package/dist/utils/handlers/wrapSnapHandlers.mjs +53 -0
- package/dist/utils/handlers/wrapSnapHandlers.mjs.map +1 -0
- package/dist/utils/keyringAccount/keyringAccount.cjs +25 -0
- package/dist/utils/keyringAccount/keyringAccount.cjs.map +1 -0
- package/dist/utils/keyringAccount/keyringAccount.d.cts +29 -0
- package/dist/utils/keyringAccount/keyringAccount.d.cts.map +1 -0
- package/dist/utils/keyringAccount/keyringAccount.d.mts +29 -0
- package/dist/utils/keyringAccount/keyringAccount.d.mts.map +1 -0
- package/dist/utils/keyringAccount/keyringAccount.mjs +22 -0
- package/dist/utils/keyringAccount/keyringAccount.mjs.map +1 -0
- package/dist/utils/logger/Logger.cjs +140 -0
- package/dist/utils/logger/Logger.cjs.map +1 -0
- package/dist/utils/logger/Logger.d.cts +118 -0
- package/dist/utils/logger/Logger.d.cts.map +1 -0
- package/dist/utils/logger/Logger.d.mts +118 -0
- package/dist/utils/logger/Logger.d.mts.map +1 -0
- package/dist/utils/logger/Logger.mjs +136 -0
- package/dist/utils/logger/Logger.mjs.map +1 -0
- package/dist/utils/logger/__mocks__/Logger.cjs +26 -0
- package/dist/utils/logger/__mocks__/Logger.cjs.map +1 -0
- package/dist/utils/logger/__mocks__/Logger.d.cts +3 -0
- package/dist/utils/logger/__mocks__/Logger.d.cts.map +1 -0
- package/dist/utils/logger/__mocks__/Logger.d.mts +3 -0
- package/dist/utils/logger/__mocks__/Logger.d.mts.map +1 -0
- package/dist/utils/logger/__mocks__/Logger.mjs +23 -0
- package/dist/utils/logger/__mocks__/Logger.mjs.map +1 -0
- package/dist/utils/originPermissions/createOriginPermissions.cjs +30 -0
- package/dist/utils/originPermissions/createOriginPermissions.cjs.map +1 -0
- package/dist/utils/originPermissions/createOriginPermissions.d.cts +24 -0
- package/dist/utils/originPermissions/createOriginPermissions.d.cts.map +1 -0
- package/dist/utils/originPermissions/createOriginPermissions.d.mts +24 -0
- package/dist/utils/originPermissions/createOriginPermissions.d.mts.map +1 -0
- package/dist/utils/originPermissions/createOriginPermissions.mjs +26 -0
- package/dist/utils/originPermissions/createOriginPermissions.mjs.map +1 -0
- package/dist/utils/originPermissions/validateOrigin.cjs +23 -0
- package/dist/utils/originPermissions/validateOrigin.cjs.map +1 -0
- package/dist/utils/originPermissions/validateOrigin.d.cts +10 -0
- package/dist/utils/originPermissions/validateOrigin.d.cts.map +1 -0
- package/dist/utils/originPermissions/validateOrigin.d.mts +10 -0
- package/dist/utils/originPermissions/validateOrigin.d.mts.map +1 -0
- package/dist/utils/originPermissions/validateOrigin.mjs +19 -0
- package/dist/utils/originPermissions/validateOrigin.mjs.map +1 -0
- package/dist/utils/proofOfOwnership/proofOfOwnership.cjs +89 -0
- package/dist/utils/proofOfOwnership/proofOfOwnership.cjs.map +1 -0
- package/dist/utils/proofOfOwnership/proofOfOwnership.d.cts +143 -0
- package/dist/utils/proofOfOwnership/proofOfOwnership.d.cts.map +1 -0
- package/dist/utils/proofOfOwnership/proofOfOwnership.d.mts +143 -0
- package/dist/utils/proofOfOwnership/proofOfOwnership.d.mts.map +1 -0
- package/dist/utils/proofOfOwnership/proofOfOwnership.mjs +85 -0
- package/dist/utils/proofOfOwnership/proofOfOwnership.mjs.map +1 -0
- package/dist/utils/safeMerge/safeMerge.cjs +26 -0
- package/dist/utils/safeMerge/safeMerge.cjs.map +1 -0
- package/dist/utils/safeMerge/safeMerge.d.cts +17 -0
- package/dist/utils/safeMerge/safeMerge.d.cts.map +1 -0
- package/dist/utils/safeMerge/safeMerge.d.mts +17 -0
- package/dist/utils/safeMerge/safeMerge.d.mts.map +1 -0
- package/dist/utils/safeMerge/safeMerge.mjs +22 -0
- package/dist/utils/safeMerge/safeMerge.mjs.map +1 -0
- package/dist/utils/sanitize/sanitize.cjs +42 -0
- package/dist/utils/sanitize/sanitize.cjs.map +1 -0
- package/dist/utils/sanitize/sanitize.d.cts +15 -0
- package/dist/utils/sanitize/sanitize.d.cts.map +1 -0
- package/dist/utils/sanitize/sanitize.d.mts +15 -0
- package/dist/utils/sanitize/sanitize.d.mts.map +1 -0
- package/dist/utils/sanitize/sanitize.mjs +38 -0
- package/dist/utils/sanitize/sanitize.mjs.map +1 -0
- package/dist/utils/serialization/serialization.cjs +73 -0
- package/dist/utils/serialization/serialization.cjs.map +1 -0
- package/dist/utils/serialization/serialization.d.cts +19 -0
- package/dist/utils/serialization/serialization.d.cts.map +1 -0
- package/dist/utils/serialization/serialization.d.mts +19 -0
- package/dist/utils/serialization/serialization.d.mts.map +1 -0
- package/dist/utils/serialization/serialization.mjs +69 -0
- package/dist/utils/serialization/serialization.mjs.map +1 -0
- package/dist/utils/serialization/types.cjs +3 -0
- package/dist/utils/serialization/types.cjs.map +1 -0
- package/dist/utils/serialization/types.d.cts +8 -0
- package/dist/utils/serialization/types.d.cts.map +1 -0
- package/dist/utils/serialization/types.d.mts +8 -0
- package/dist/utils/serialization/types.d.mts.map +1 -0
- package/dist/utils/serialization/types.mjs +2 -0
- package/dist/utils/serialization/types.mjs.map +1 -0
- package/dist/utils/state/IStateManager.cjs +3 -0
- package/dist/utils/state/IStateManager.cjs.map +1 -0
- package/dist/utils/state/IStateManager.d.cts +69 -0
- package/dist/utils/state/IStateManager.d.cts.map +1 -0
- package/dist/utils/state/IStateManager.d.mts +69 -0
- package/dist/utils/state/IStateManager.d.mts.map +1 -0
- package/dist/utils/state/IStateManager.mjs +2 -0
- package/dist/utils/state/IStateManager.mjs.map +1 -0
- package/dist/utils/state/InMemoryState.cjs +41 -0
- package/dist/utils/state/InMemoryState.cjs.map +1 -0
- package/dist/utils/state/InMemoryState.d.cts +18 -0
- package/dist/utils/state/InMemoryState.d.cts.map +1 -0
- package/dist/utils/state/InMemoryState.d.mts +18 -0
- package/dist/utils/state/InMemoryState.d.mts.map +1 -0
- package/dist/utils/state/InMemoryState.mjs +38 -0
- package/dist/utils/state/InMemoryState.mjs.map +1 -0
- package/dist/utils/state/State.cjs +159 -0
- package/dist/utils/state/State.cjs.map +1 -0
- package/dist/utils/state/State.d.cts +25 -0
- package/dist/utils/state/State.d.cts.map +1 -0
- package/dist/utils/state/State.d.mts +25 -0
- package/dist/utils/state/State.d.mts.map +1 -0
- package/dist/utils/state/State.mjs +156 -0
- package/dist/utils/state/State.mjs.map +1 -0
- package/dist/utils/transactionType/transactionType.cjs +32 -0
- package/dist/utils/transactionType/transactionType.cjs.map +1 -0
- package/dist/utils/transactionType/transactionType.d.cts +17 -0
- package/dist/utils/transactionType/transactionType.d.cts.map +1 -0
- package/dist/utils/transactionType/transactionType.d.mts +17 -0
- package/dist/utils/transactionType/transactionType.d.mts.map +1 -0
- package/dist/utils/transactionType/transactionType.mjs +28 -0
- package/dist/utils/transactionType/transactionType.mjs.map +1 -0
- package/dist/utils/urlStruct/urlStruct.cjs +96 -0
- package/dist/utils/urlStruct/urlStruct.cjs.map +1 -0
- package/dist/utils/urlStruct/urlStruct.d.cts +25 -0
- package/dist/utils/urlStruct/urlStruct.d.cts.map +1 -0
- package/dist/utils/urlStruct/urlStruct.d.mts +25 -0
- package/dist/utils/urlStruct/urlStruct.d.mts.map +1 -0
- package/dist/utils/urlStruct/urlStruct.mjs +93 -0
- package/dist/utils/urlStruct/urlStruct.mjs.map +1 -0
- package/dist/utils/uuidStruct/uuidStruct.cjs +12 -0
- package/dist/utils/uuidStruct/uuidStruct.cjs.map +1 -0
- package/dist/utils/uuidStruct/uuidStruct.d.cts +8 -0
- package/dist/utils/uuidStruct/uuidStruct.d.cts.map +1 -0
- package/dist/utils/uuidStruct/uuidStruct.d.mts +8 -0
- package/dist/utils/uuidStruct/uuidStruct.d.mts.map +1 -0
- package/dist/utils/uuidStruct/uuidStruct.mjs +9 -0
- package/dist/utils/uuidStruct/uuidStruct.mjs.map +1 -0
- package/package.json +33 -13
- package/dist/logger.cjs +0 -57
- package/dist/logger.cjs.map +0 -1
- package/dist/logger.d.cts +0 -30
- package/dist/logger.d.cts.map +0 -1
- package/dist/logger.d.mts +0 -30
- package/dist/logger.d.mts.map +0 -1
- package/dist/logger.mjs +0 -53
- package/dist/logger.mjs.map +0 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single account synchronization failure, with enough context to understand
|
|
3
|
+
* which account failed and why.
|
|
4
|
+
*/
|
|
5
|
+
export type AccountSyncFailure = {
|
|
6
|
+
/** The ID of the account that failed to synchronize. */
|
|
7
|
+
accountId: string;
|
|
8
|
+
/** The failure reason, as a human-readable string. */
|
|
9
|
+
reason: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Maps settled synchronization results to account synchronization failures:
|
|
13
|
+
* each rejection is attributed to the account ID at the same index
|
|
14
|
+
* (`Promise.allSettled` preserves order).
|
|
15
|
+
*
|
|
16
|
+
* Rejection reasons are stringified with {@link stringifyReason}, so wrapped
|
|
17
|
+
* errors report their cause as well.
|
|
18
|
+
*
|
|
19
|
+
* @param results - The settled synchronization results.
|
|
20
|
+
* @param accountIds - The account IDs, in the same order as `results`.
|
|
21
|
+
* @returns The collected failures, in results order.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getSyncFailuresFromSettledResult(results: PromiseSettledResult<unknown>[], accountIds: string[]): AccountSyncFailure[];
|
|
24
|
+
/**
|
|
25
|
+
* Formats account synchronization failures as a compact, single-line summary.
|
|
26
|
+
*
|
|
27
|
+
* The summary is intended to be embedded in the error message of a
|
|
28
|
+
* `SynchronizationError`: error tracking via `snap_trackError` serializes only
|
|
29
|
+
* the error's `name`, `message`, `stack`, and `cause`, so any details stored in
|
|
30
|
+
* other properties (e.g. a `data` field) are lost before reaching Sentry.
|
|
31
|
+
*
|
|
32
|
+
* @param failures - The account synchronization failures to format.
|
|
33
|
+
* @returns A single-line summary of the failures, truncated to keep the
|
|
34
|
+
* message readable.
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatAccountSyncFailures(failures: AccountSyncFailure[]): string;
|
|
37
|
+
/**
|
|
38
|
+
* Error thrown when one or more accounts fail to synchronize.
|
|
39
|
+
*
|
|
40
|
+
* The failure details are embedded in the message (not only in a property) so
|
|
41
|
+
* that they survive error tracking: `snap_trackError` serializes only the
|
|
42
|
+
* error's `name`, `message`, `stack`, and `cause`.
|
|
43
|
+
*/
|
|
44
|
+
export declare class SynchronizationError extends Error {
|
|
45
|
+
/**
|
|
46
|
+
* The structured list of account synchronization failures. Useful for logs;
|
|
47
|
+
* note that it is not preserved by error tracking.
|
|
48
|
+
*/
|
|
49
|
+
readonly failures: AccountSyncFailure[];
|
|
50
|
+
/**
|
|
51
|
+
* Construct a new synchronization error.
|
|
52
|
+
*
|
|
53
|
+
* @param message - The error message, e.g. `'Account synchronization failures'`.
|
|
54
|
+
* @param failures - The per-account failures to append to the message.
|
|
55
|
+
* @param options - Additional error options.
|
|
56
|
+
* @param options.cause - The underlying error that caused the synchronization failure, if any.
|
|
57
|
+
*/
|
|
58
|
+
constructor(message: string, failures?: AccountSyncFailure[], options?: ErrorOptions);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=syncError.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncError.d.cts","sourceRoot":"","sources":["../../../src/utils/errors/syncError.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,EACxC,UAAU,EAAE,MAAM,EAAE,GACnB,kBAAkB,EAAE,CActB;AAeD;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,MAAM,CAeR;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAExC;;;;;;;OAOG;gBAED,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,kBAAkB,EAAO,EACnC,OAAO,CAAC,EAAE,YAAY;CAWzB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single account synchronization failure, with enough context to understand
|
|
3
|
+
* which account failed and why.
|
|
4
|
+
*/
|
|
5
|
+
export type AccountSyncFailure = {
|
|
6
|
+
/** The ID of the account that failed to synchronize. */
|
|
7
|
+
accountId: string;
|
|
8
|
+
/** The failure reason, as a human-readable string. */
|
|
9
|
+
reason: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Maps settled synchronization results to account synchronization failures:
|
|
13
|
+
* each rejection is attributed to the account ID at the same index
|
|
14
|
+
* (`Promise.allSettled` preserves order).
|
|
15
|
+
*
|
|
16
|
+
* Rejection reasons are stringified with {@link stringifyReason}, so wrapped
|
|
17
|
+
* errors report their cause as well.
|
|
18
|
+
*
|
|
19
|
+
* @param results - The settled synchronization results.
|
|
20
|
+
* @param accountIds - The account IDs, in the same order as `results`.
|
|
21
|
+
* @returns The collected failures, in results order.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getSyncFailuresFromSettledResult(results: PromiseSettledResult<unknown>[], accountIds: string[]): AccountSyncFailure[];
|
|
24
|
+
/**
|
|
25
|
+
* Formats account synchronization failures as a compact, single-line summary.
|
|
26
|
+
*
|
|
27
|
+
* The summary is intended to be embedded in the error message of a
|
|
28
|
+
* `SynchronizationError`: error tracking via `snap_trackError` serializes only
|
|
29
|
+
* the error's `name`, `message`, `stack`, and `cause`, so any details stored in
|
|
30
|
+
* other properties (e.g. a `data` field) are lost before reaching Sentry.
|
|
31
|
+
*
|
|
32
|
+
* @param failures - The account synchronization failures to format.
|
|
33
|
+
* @returns A single-line summary of the failures, truncated to keep the
|
|
34
|
+
* message readable.
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatAccountSyncFailures(failures: AccountSyncFailure[]): string;
|
|
37
|
+
/**
|
|
38
|
+
* Error thrown when one or more accounts fail to synchronize.
|
|
39
|
+
*
|
|
40
|
+
* The failure details are embedded in the message (not only in a property) so
|
|
41
|
+
* that they survive error tracking: `snap_trackError` serializes only the
|
|
42
|
+
* error's `name`, `message`, `stack`, and `cause`.
|
|
43
|
+
*/
|
|
44
|
+
export declare class SynchronizationError extends Error {
|
|
45
|
+
/**
|
|
46
|
+
* The structured list of account synchronization failures. Useful for logs;
|
|
47
|
+
* note that it is not preserved by error tracking.
|
|
48
|
+
*/
|
|
49
|
+
readonly failures: AccountSyncFailure[];
|
|
50
|
+
/**
|
|
51
|
+
* Construct a new synchronization error.
|
|
52
|
+
*
|
|
53
|
+
* @param message - The error message, e.g. `'Account synchronization failures'`.
|
|
54
|
+
* @param failures - The per-account failures to append to the message.
|
|
55
|
+
* @param options - Additional error options.
|
|
56
|
+
* @param options.cause - The underlying error that caused the synchronization failure, if any.
|
|
57
|
+
*/
|
|
58
|
+
constructor(message: string, failures?: AccountSyncFailure[], options?: ErrorOptions);
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=syncError.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncError.d.mts","sourceRoot":"","sources":["../../../src/utils/errors/syncError.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,EACxC,UAAU,EAAE,MAAM,EAAE,GACnB,kBAAkB,EAAE,CActB;AAeD;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,kBAAkB,EAAE,GAC7B,MAAM,CAeR;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAExC;;;;;;;OAOG;gBAED,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,kBAAkB,EAAO,EACnC,OAAO,CAAC,EAAE,YAAY;CAWzB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { stringifyReason } from "./stringifyReason.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Maps settled synchronization results to account synchronization failures:
|
|
4
|
+
* each rejection is attributed to the account ID at the same index
|
|
5
|
+
* (`Promise.allSettled` preserves order).
|
|
6
|
+
*
|
|
7
|
+
* Rejection reasons are stringified with {@link stringifyReason}, so wrapped
|
|
8
|
+
* errors report their cause as well.
|
|
9
|
+
*
|
|
10
|
+
* @param results - The settled synchronization results.
|
|
11
|
+
* @param accountIds - The account IDs, in the same order as `results`.
|
|
12
|
+
* @returns The collected failures, in results order.
|
|
13
|
+
*/
|
|
14
|
+
export function getSyncFailuresFromSettledResult(results, accountIds) {
|
|
15
|
+
const failures = [];
|
|
16
|
+
results.forEach((result, index) => {
|
|
17
|
+
const accountId = accountIds[index];
|
|
18
|
+
if (accountId && result.status === 'rejected') {
|
|
19
|
+
failures.push({
|
|
20
|
+
accountId,
|
|
21
|
+
reason: stringifyReason(result.reason),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
return failures;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Maximum number of characters kept from each failure reason. Reasons can be
|
|
29
|
+
* arbitrarily long (e.g. full network error messages), so they are truncated
|
|
30
|
+
* to keep the error message readable in Sentry.
|
|
31
|
+
*/
|
|
32
|
+
const MAX_REASON_LENGTH = 300;
|
|
33
|
+
/**
|
|
34
|
+
* Maximum number of failures listed in the error message. When more accounts
|
|
35
|
+
* fail, the remaining ones are summarized with a `+N more` suffix.
|
|
36
|
+
*/
|
|
37
|
+
const MAX_LISTED_FAILURES = 10;
|
|
38
|
+
/**
|
|
39
|
+
* Formats account synchronization failures as a compact, single-line summary.
|
|
40
|
+
*
|
|
41
|
+
* The summary is intended to be embedded in the error message of a
|
|
42
|
+
* `SynchronizationError`: error tracking via `snap_trackError` serializes only
|
|
43
|
+
* the error's `name`, `message`, `stack`, and `cause`, so any details stored in
|
|
44
|
+
* other properties (e.g. a `data` field) are lost before reaching Sentry.
|
|
45
|
+
*
|
|
46
|
+
* @param failures - The account synchronization failures to format.
|
|
47
|
+
* @returns A single-line summary of the failures, truncated to keep the
|
|
48
|
+
* message readable.
|
|
49
|
+
*/
|
|
50
|
+
export function formatAccountSyncFailures(failures) {
|
|
51
|
+
const listed = failures.slice(0, MAX_LISTED_FAILURES);
|
|
52
|
+
const details = listed.map((failure) => {
|
|
53
|
+
const reason = failure.reason.length > MAX_REASON_LENGTH
|
|
54
|
+
? `${failure.reason.slice(0, MAX_REASON_LENGTH)}…`
|
|
55
|
+
: failure.reason;
|
|
56
|
+
return `${failure.accountId}: ${reason}`;
|
|
57
|
+
});
|
|
58
|
+
const remaining = failures.length - listed.length;
|
|
59
|
+
const suffix = remaining > 0 ? `; +${remaining} more` : '';
|
|
60
|
+
return `${details.join('; ')}${suffix}`;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Error thrown when one or more accounts fail to synchronize.
|
|
64
|
+
*
|
|
65
|
+
* The failure details are embedded in the message (not only in a property) so
|
|
66
|
+
* that they survive error tracking: `snap_trackError` serializes only the
|
|
67
|
+
* error's `name`, `message`, `stack`, and `cause`.
|
|
68
|
+
*/
|
|
69
|
+
export class SynchronizationError extends Error {
|
|
70
|
+
/**
|
|
71
|
+
* The structured list of account synchronization failures. Useful for logs;
|
|
72
|
+
* note that it is not preserved by error tracking.
|
|
73
|
+
*/
|
|
74
|
+
failures;
|
|
75
|
+
/**
|
|
76
|
+
* Construct a new synchronization error.
|
|
77
|
+
*
|
|
78
|
+
* @param message - The error message, e.g. `'Account synchronization failures'`.
|
|
79
|
+
* @param failures - The per-account failures to append to the message.
|
|
80
|
+
* @param options - Additional error options.
|
|
81
|
+
* @param options.cause - The underlying error that caused the synchronization failure, if any.
|
|
82
|
+
*/
|
|
83
|
+
constructor(message, failures = [], options) {
|
|
84
|
+
const details = failures.length > 0
|
|
85
|
+
? ` (${failures.length} failed): ${formatAccountSyncFailures(failures)}`
|
|
86
|
+
: '';
|
|
87
|
+
super(`${message}${details}`, options);
|
|
88
|
+
this.name = 'SynchronizationError';
|
|
89
|
+
this.failures = failures;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=syncError.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncError.mjs","sourceRoot":"","sources":["../../../src/utils/errors/syncError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,8BAA0B;AAapD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gCAAgC,CAC9C,OAAwC,EACxC,UAAoB;IAEpB,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAE1C,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC;gBACZ,SAAS;gBACT,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B;;;GAGG;AACH,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA8B;IAE9B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QACrC,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,iBAAiB;YACvC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG;YAClD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAErB,OAAO,GAAG,OAAO,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClD,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3D,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C;;;OAGG;IACM,QAAQ,CAAuB;IAExC;;;;;;;OAOG;IACH,YACE,OAAe,EACf,WAAiC,EAAE,EACnC,OAAsB;QAEtB,MAAM,OAAO,GACX,QAAQ,CAAC,MAAM,GAAG,CAAC;YACjB,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,aAAa,yBAAyB,CAAC,QAAQ,CAAC,EAAE;YACxE,CAAC,CAAC,EAAE,CAAC;QAET,KAAK,CAAC,GAAG,OAAO,GAAG,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import { stringifyReason } from './stringifyReason';\n\n/**\n * A single account synchronization failure, with enough context to understand\n * which account failed and why.\n */\nexport type AccountSyncFailure = {\n /** The ID of the account that failed to synchronize. */\n accountId: string;\n /** The failure reason, as a human-readable string. */\n reason: string;\n};\n\n/**\n * Maps settled synchronization results to account synchronization failures:\n * each rejection is attributed to the account ID at the same index\n * (`Promise.allSettled` preserves order).\n *\n * Rejection reasons are stringified with {@link stringifyReason}, so wrapped\n * errors report their cause as well.\n *\n * @param results - The settled synchronization results.\n * @param accountIds - The account IDs, in the same order as `results`.\n * @returns The collected failures, in results order.\n */\nexport function getSyncFailuresFromSettledResult(\n results: PromiseSettledResult<unknown>[],\n accountIds: string[],\n): AccountSyncFailure[] {\n const failures: AccountSyncFailure[] = [];\n\n results.forEach((result, index) => {\n const accountId = accountIds[index];\n if (accountId && result.status === 'rejected') {\n failures.push({\n accountId,\n reason: stringifyReason(result.reason),\n });\n }\n });\n\n return failures;\n}\n\n/**\n * Maximum number of characters kept from each failure reason. Reasons can be\n * arbitrarily long (e.g. full network error messages), so they are truncated\n * to keep the error message readable in Sentry.\n */\nconst MAX_REASON_LENGTH = 300;\n\n/**\n * Maximum number of failures listed in the error message. When more accounts\n * fail, the remaining ones are summarized with a `+N more` suffix.\n */\nconst MAX_LISTED_FAILURES = 10;\n\n/**\n * Formats account synchronization failures as a compact, single-line summary.\n *\n * The summary is intended to be embedded in the error message of a\n * `SynchronizationError`: error tracking via `snap_trackError` serializes only\n * the error's `name`, `message`, `stack`, and `cause`, so any details stored in\n * other properties (e.g. a `data` field) are lost before reaching Sentry.\n *\n * @param failures - The account synchronization failures to format.\n * @returns A single-line summary of the failures, truncated to keep the\n * message readable.\n */\nexport function formatAccountSyncFailures(\n failures: AccountSyncFailure[],\n): string {\n const listed = failures.slice(0, MAX_LISTED_FAILURES);\n const details = listed.map((failure) => {\n const reason =\n failure.reason.length > MAX_REASON_LENGTH\n ? `${failure.reason.slice(0, MAX_REASON_LENGTH)}…`\n : failure.reason;\n\n return `${failure.accountId}: ${reason}`;\n });\n\n const remaining = failures.length - listed.length;\n const suffix = remaining > 0 ? `; +${remaining} more` : '';\n\n return `${details.join('; ')}${suffix}`;\n}\n\n/**\n * Error thrown when one or more accounts fail to synchronize.\n *\n * The failure details are embedded in the message (not only in a property) so\n * that they survive error tracking: `snap_trackError` serializes only the\n * error's `name`, `message`, `stack`, and `cause`.\n */\nexport class SynchronizationError extends Error {\n /**\n * The structured list of account synchronization failures. Useful for logs;\n * note that it is not preserved by error tracking.\n */\n readonly failures: AccountSyncFailure[];\n\n /**\n * Construct a new synchronization error.\n *\n * @param message - The error message, e.g. `'Account synchronization failures'`.\n * @param failures - The per-account failures to append to the message.\n * @param options - Additional error options.\n * @param options.cause - The underlying error that caused the synchronization failure, if any.\n */\n constructor(\n message: string,\n failures: AccountSyncFailure[] = [],\n options?: ErrorOptions,\n ) {\n const details =\n failures.length > 0\n ? ` (${failures.length} failed): ${formatAccountSyncFailures(failures)}`\n : '';\n\n super(`${message}${details}`, options);\n this.name = 'SynchronizationError';\n this.failures = failures;\n }\n}\n"]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTrackError = createTrackError;
|
|
4
|
+
exports.createSnapErrorHandling = createSnapErrorHandling;
|
|
5
|
+
const snaps_sdk_1 = require("@metamask/snaps-sdk");
|
|
6
|
+
const utils_1 = require("@metamask/utils");
|
|
7
|
+
const errors_1 = require("./errors.cjs");
|
|
8
|
+
function defaultPrepareError(error) {
|
|
9
|
+
return error instanceof Error ? error : (0, utils_1.ensureError)(error);
|
|
10
|
+
}
|
|
11
|
+
function defaultShouldTrack(error) {
|
|
12
|
+
return !(error instanceof snaps_sdk_1.UserRejectedRequestError);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Creates a snap-bound error reporter for MetaMask Sentry (`snap_trackError`).
|
|
16
|
+
*
|
|
17
|
+
* RPC failures are caught and logged but never rethrown, so the returned function
|
|
18
|
+
* is safe to call from already-failing error-handling paths.
|
|
19
|
+
*
|
|
20
|
+
* @param options - Snap provider accessor, logger, and optional hooks.
|
|
21
|
+
* @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.
|
|
22
|
+
* @param options.logError - Logger method used when the tracking RPC fails.
|
|
23
|
+
* @param options.prepareError - Optional error normalizer before Sentry serialization.
|
|
24
|
+
* @param options.shouldTrack - Optional filter; defaults to skipping `UserRejectedRequestError`.
|
|
25
|
+
* @returns A function that reports errors to Sentry when {@link ShouldTrackErrorFn} allows it.
|
|
26
|
+
*/
|
|
27
|
+
function createTrackError({ getSnapProvider, logError, prepareError = defaultPrepareError, shouldTrack = defaultShouldTrack, }) {
|
|
28
|
+
return async (error) => {
|
|
29
|
+
if (!shouldTrack(error)) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const params = {
|
|
33
|
+
error: (0, snaps_sdk_1.getJsonError)(prepareError(error)),
|
|
34
|
+
};
|
|
35
|
+
try {
|
|
36
|
+
return await getSnapProvider().request({
|
|
37
|
+
method: 'snap_trackError',
|
|
38
|
+
params,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (trackingError) {
|
|
42
|
+
logError({ error: trackingError }, 'Failed to track error');
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Creates snap error handling utilities wired with a shared transport and logger setup.
|
|
49
|
+
*
|
|
50
|
+
* @param options - Options for both {@link createTrackError} and
|
|
51
|
+
* {@link createWithCatchAndThrowSnapError}.
|
|
52
|
+
* @param options.logError - Logger method used for handler and tracking failures.
|
|
53
|
+
* @param options.normalizeErrorFn - Optional Snap RPC error normalizer for handler boundaries.
|
|
54
|
+
* @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.
|
|
55
|
+
* @param options.prepareError - Optional error normalizer before Sentry serialization.
|
|
56
|
+
* @param options.shouldTrack - Optional tracking filter passed to {@link createTrackError}.
|
|
57
|
+
* @returns Bound {@link createTrackError trackError} and
|
|
58
|
+
* {@link createWithCatchAndThrowSnapError withCatchAndThrowSnapError} functions.
|
|
59
|
+
*/
|
|
60
|
+
function createSnapErrorHandling({ logError, normalizeErrorFn, getSnapProvider, prepareError, shouldTrack, }) {
|
|
61
|
+
const trackError = createTrackError({
|
|
62
|
+
getSnapProvider,
|
|
63
|
+
logError,
|
|
64
|
+
prepareError,
|
|
65
|
+
shouldTrack,
|
|
66
|
+
});
|
|
67
|
+
return {
|
|
68
|
+
trackError,
|
|
69
|
+
withCatchAndThrowSnapError: (0, errors_1.createWithCatchAndThrowSnapError)({
|
|
70
|
+
logError,
|
|
71
|
+
trackError,
|
|
72
|
+
normalizeErrorFn,
|
|
73
|
+
}),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=trackError.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trackError.cjs","sourceRoot":"","sources":["../../../src/utils/errors/trackError.ts"],"names":[],"mappings":";;AA0EA,4CAyBC;AAeD,0DA6BC;AA/ID,mDAA6E;AAE7E,2CAA8C;AAO9C,yCAA4D;AA4C5D,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,mBAAW,EAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,CAAC,CAAC,KAAK,YAAY,oCAAwB,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,gBAAgB,CAA8C,EAC5E,eAAe,EACf,QAAQ,EACR,YAAY,GAAG,mBAAmB,EAClC,WAAW,GAAG,kBAAkB,GACG;IACnC,OAAO,KAAK,EAAE,KAAc,EAA+B,EAAE;QAC3D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAqB;YAC/B,KAAK,EAAE,IAAA,wBAAY,EAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACzC,CAAC;QAEF,IAAI,CAAC;YACH,OAAO,MAAM,eAAe,EAAE,CAAC,OAAO,CAAC;gBACrC,MAAM,EAAE,iBAAiB;gBACzB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACvB,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,uBAAuB,CAAC,CAAC;YAC5D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,uBAAuB,CAErC,EACA,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,WAAW,GAC+B;IAM1C,MAAM,UAAU,GAAG,gBAAgB,CAAC;QAClC,eAAe;QACf,QAAQ;QACR,YAAY;QACZ,WAAW;KACZ,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,0BAA0B,EAAE,IAAA,yCAAgC,EAAC;YAC3D,QAAQ;YACR,UAAU;YACV,gBAAgB;SACjB,CAAC;KACH,CAAC;AACJ,CAAC","sourcesContent":["import { getJsonError, UserRejectedRequestError } from '@metamask/snaps-sdk';\nimport type { TrackErrorParams, TrackErrorResult } from '@metamask/snaps-sdk';\nimport { ensureError } from '@metamask/utils';\n\nimport type {\n CreateWithCatchAndThrowSnapErrorOptions,\n LogErrorFn,\n TrackErrorFn,\n} from './errors';\nimport { createWithCatchAndThrowSnapError } from './errors';\n\n/**\n * Converts a caught value into an {@link Error} before Sentry serialization.\n */\nexport type PrepareErrorForTrackingFn = (error: unknown) => Error;\n\n/**\n * Determines whether an error should be reported through `snap_trackError`.\n */\nexport type ShouldTrackErrorFn = (error: unknown) => boolean;\n\n/**\n * `snap_trackError` request shape from `@metamask/snaps-sdk`.\n */\nexport type SnapTrackErrorRequest = {\n method: 'snap_trackError';\n params: TrackErrorParams;\n};\n\n/**\n * Snap provider surface required for {@link createTrackError}, derived from SDK\n * `snap_trackError` types.\n */\nexport type TrackErrorCapableProvider = {\n request: (\n args: SnapTrackErrorRequest,\n ) => Promise<TrackErrorResult | undefined>;\n};\n\nexport type CreateTrackErrorOptions<\n TProvider extends TrackErrorCapableProvider = TrackErrorCapableProvider,\n> = {\n getSnapProvider: () => TProvider;\n logError: LogErrorFn;\n prepareError?: PrepareErrorForTrackingFn;\n shouldTrack?: ShouldTrackErrorFn;\n};\n\nexport type CreateSnapErrorHandlingOptions<\n TProvider extends TrackErrorCapableProvider = TrackErrorCapableProvider,\n> = Omit<CreateWithCatchAndThrowSnapErrorOptions, 'trackError'> &\n CreateTrackErrorOptions<TProvider>;\n\nfunction defaultPrepareError(error: unknown): Error {\n return error instanceof Error ? error : ensureError(error);\n}\n\nfunction defaultShouldTrack(error: unknown): boolean {\n return !(error instanceof UserRejectedRequestError);\n}\n\n/**\n * Creates a snap-bound error reporter for MetaMask Sentry (`snap_trackError`).\n *\n * RPC failures are caught and logged but never rethrown, so the returned function\n * is safe to call from already-failing error-handling paths.\n *\n * @param options - Snap provider accessor, logger, and optional hooks.\n * @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.\n * @param options.logError - Logger method used when the tracking RPC fails.\n * @param options.prepareError - Optional error normalizer before Sentry serialization.\n * @param options.shouldTrack - Optional filter; defaults to skipping `UserRejectedRequestError`.\n * @returns A function that reports errors to Sentry when {@link ShouldTrackErrorFn} allows it.\n */\nexport function createTrackError<TProvider extends TrackErrorCapableProvider>({\n getSnapProvider,\n logError,\n prepareError = defaultPrepareError,\n shouldTrack = defaultShouldTrack,\n}: CreateTrackErrorOptions<TProvider>): TrackErrorFn {\n return async (error: unknown): Promise<string | undefined> => {\n if (!shouldTrack(error)) {\n return undefined;\n }\n\n const params: TrackErrorParams = {\n error: getJsonError(prepareError(error)),\n };\n\n try {\n return await getSnapProvider().request({\n method: 'snap_trackError',\n params,\n });\n } catch (trackingError) {\n logError({ error: trackingError }, 'Failed to track error');\n return undefined;\n }\n };\n}\n\n/**\n * Creates snap error handling utilities wired with a shared transport and logger setup.\n *\n * @param options - Options for both {@link createTrackError} and\n * {@link createWithCatchAndThrowSnapError}.\n * @param options.logError - Logger method used for handler and tracking failures.\n * @param options.normalizeErrorFn - Optional Snap RPC error normalizer for handler boundaries.\n * @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.\n * @param options.prepareError - Optional error normalizer before Sentry serialization.\n * @param options.shouldTrack - Optional tracking filter passed to {@link createTrackError}.\n * @returns Bound {@link createTrackError trackError} and\n * {@link createWithCatchAndThrowSnapError withCatchAndThrowSnapError} functions.\n */\nexport function createSnapErrorHandling<\n TProvider extends TrackErrorCapableProvider,\n>({\n logError,\n normalizeErrorFn,\n getSnapProvider,\n prepareError,\n shouldTrack,\n}: CreateSnapErrorHandlingOptions<TProvider>): {\n trackError: TrackErrorFn;\n withCatchAndThrowSnapError: ReturnType<\n typeof createWithCatchAndThrowSnapError\n >;\n} {\n const trackError = createTrackError({\n getSnapProvider,\n logError,\n prepareError,\n shouldTrack,\n });\n\n return {\n trackError,\n withCatchAndThrowSnapError: createWithCatchAndThrowSnapError({\n logError,\n trackError,\n normalizeErrorFn,\n }),\n };\n}\n"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { TrackErrorParams, TrackErrorResult } from "@metamask/snaps-sdk";
|
|
2
|
+
import type { CreateWithCatchAndThrowSnapErrorOptions, LogErrorFn, TrackErrorFn } from "./errors.cjs";
|
|
3
|
+
import { createWithCatchAndThrowSnapError } from "./errors.cjs";
|
|
4
|
+
/**
|
|
5
|
+
* Converts a caught value into an {@link Error} before Sentry serialization.
|
|
6
|
+
*/
|
|
7
|
+
export type PrepareErrorForTrackingFn = (error: unknown) => Error;
|
|
8
|
+
/**
|
|
9
|
+
* Determines whether an error should be reported through `snap_trackError`.
|
|
10
|
+
*/
|
|
11
|
+
export type ShouldTrackErrorFn = (error: unknown) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* `snap_trackError` request shape from `@metamask/snaps-sdk`.
|
|
14
|
+
*/
|
|
15
|
+
export type SnapTrackErrorRequest = {
|
|
16
|
+
method: 'snap_trackError';
|
|
17
|
+
params: TrackErrorParams;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Snap provider surface required for {@link createTrackError}, derived from SDK
|
|
21
|
+
* `snap_trackError` types.
|
|
22
|
+
*/
|
|
23
|
+
export type TrackErrorCapableProvider = {
|
|
24
|
+
request: (args: SnapTrackErrorRequest) => Promise<TrackErrorResult | undefined>;
|
|
25
|
+
};
|
|
26
|
+
export type CreateTrackErrorOptions<TProvider extends TrackErrorCapableProvider = TrackErrorCapableProvider> = {
|
|
27
|
+
getSnapProvider: () => TProvider;
|
|
28
|
+
logError: LogErrorFn;
|
|
29
|
+
prepareError?: PrepareErrorForTrackingFn;
|
|
30
|
+
shouldTrack?: ShouldTrackErrorFn;
|
|
31
|
+
};
|
|
32
|
+
export type CreateSnapErrorHandlingOptions<TProvider extends TrackErrorCapableProvider = TrackErrorCapableProvider> = Omit<CreateWithCatchAndThrowSnapErrorOptions, 'trackError'> & CreateTrackErrorOptions<TProvider>;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a snap-bound error reporter for MetaMask Sentry (`snap_trackError`).
|
|
35
|
+
*
|
|
36
|
+
* RPC failures are caught and logged but never rethrown, so the returned function
|
|
37
|
+
* is safe to call from already-failing error-handling paths.
|
|
38
|
+
*
|
|
39
|
+
* @param options - Snap provider accessor, logger, and optional hooks.
|
|
40
|
+
* @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.
|
|
41
|
+
* @param options.logError - Logger method used when the tracking RPC fails.
|
|
42
|
+
* @param options.prepareError - Optional error normalizer before Sentry serialization.
|
|
43
|
+
* @param options.shouldTrack - Optional filter; defaults to skipping `UserRejectedRequestError`.
|
|
44
|
+
* @returns A function that reports errors to Sentry when {@link ShouldTrackErrorFn} allows it.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createTrackError<TProvider extends TrackErrorCapableProvider>({ getSnapProvider, logError, prepareError, shouldTrack, }: CreateTrackErrorOptions<TProvider>): TrackErrorFn;
|
|
47
|
+
/**
|
|
48
|
+
* Creates snap error handling utilities wired with a shared transport and logger setup.
|
|
49
|
+
*
|
|
50
|
+
* @param options - Options for both {@link createTrackError} and
|
|
51
|
+
* {@link createWithCatchAndThrowSnapError}.
|
|
52
|
+
* @param options.logError - Logger method used for handler and tracking failures.
|
|
53
|
+
* @param options.normalizeErrorFn - Optional Snap RPC error normalizer for handler boundaries.
|
|
54
|
+
* @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.
|
|
55
|
+
* @param options.prepareError - Optional error normalizer before Sentry serialization.
|
|
56
|
+
* @param options.shouldTrack - Optional tracking filter passed to {@link createTrackError}.
|
|
57
|
+
* @returns Bound {@link createTrackError trackError} and
|
|
58
|
+
* {@link createWithCatchAndThrowSnapError withCatchAndThrowSnapError} functions.
|
|
59
|
+
*/
|
|
60
|
+
export declare function createSnapErrorHandling<TProvider extends TrackErrorCapableProvider>({ logError, normalizeErrorFn, getSnapProvider, prepareError, shouldTrack, }: CreateSnapErrorHandlingOptions<TProvider>): {
|
|
61
|
+
trackError: TrackErrorFn;
|
|
62
|
+
withCatchAndThrowSnapError: ReturnType<typeof createWithCatchAndThrowSnapError>;
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=trackError.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trackError.d.cts","sourceRoot":"","sources":["../../../src/utils/errors/trackError.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,4BAA4B;AAG9E,OAAO,KAAK,EACV,uCAAuC,EACvC,UAAU,EACV,YAAY,EACb,qBAAiB;AAClB,OAAO,EAAE,gCAAgC,EAAE,qBAAiB;AAE5D;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,CACP,IAAI,EAAE,qBAAqB,KACxB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,uBAAuB,CACjC,SAAS,SAAS,yBAAyB,GAAG,yBAAyB,IACrE;IACF,eAAe,EAAE,MAAM,SAAS,CAAC;IACjC,QAAQ,EAAE,UAAU,CAAC;IACrB,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,8BAA8B,CACxC,SAAS,SAAS,yBAAyB,GAAG,yBAAyB,IACrE,IAAI,CAAC,uCAAuC,EAAE,YAAY,CAAC,GAC7D,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAUrC;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,yBAAyB,EAAE,EAC5E,eAAe,EACf,QAAQ,EACR,YAAkC,EAClC,WAAgC,GACjC,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,YAAY,CAoBnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,SAAS,yBAAyB,EAC3C,EACA,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,WAAW,GACZ,EAAE,8BAA8B,CAAC,SAAS,CAAC,GAAG;IAC7C,UAAU,EAAE,YAAY,CAAC;IACzB,0BAA0B,EAAE,UAAU,CACpC,OAAO,gCAAgC,CACxC,CAAC;CACH,CAgBA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { TrackErrorParams, TrackErrorResult } from "@metamask/snaps-sdk";
|
|
2
|
+
import type { CreateWithCatchAndThrowSnapErrorOptions, LogErrorFn, TrackErrorFn } from "./errors.mjs";
|
|
3
|
+
import { createWithCatchAndThrowSnapError } from "./errors.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* Converts a caught value into an {@link Error} before Sentry serialization.
|
|
6
|
+
*/
|
|
7
|
+
export type PrepareErrorForTrackingFn = (error: unknown) => Error;
|
|
8
|
+
/**
|
|
9
|
+
* Determines whether an error should be reported through `snap_trackError`.
|
|
10
|
+
*/
|
|
11
|
+
export type ShouldTrackErrorFn = (error: unknown) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* `snap_trackError` request shape from `@metamask/snaps-sdk`.
|
|
14
|
+
*/
|
|
15
|
+
export type SnapTrackErrorRequest = {
|
|
16
|
+
method: 'snap_trackError';
|
|
17
|
+
params: TrackErrorParams;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Snap provider surface required for {@link createTrackError}, derived from SDK
|
|
21
|
+
* `snap_trackError` types.
|
|
22
|
+
*/
|
|
23
|
+
export type TrackErrorCapableProvider = {
|
|
24
|
+
request: (args: SnapTrackErrorRequest) => Promise<TrackErrorResult | undefined>;
|
|
25
|
+
};
|
|
26
|
+
export type CreateTrackErrorOptions<TProvider extends TrackErrorCapableProvider = TrackErrorCapableProvider> = {
|
|
27
|
+
getSnapProvider: () => TProvider;
|
|
28
|
+
logError: LogErrorFn;
|
|
29
|
+
prepareError?: PrepareErrorForTrackingFn;
|
|
30
|
+
shouldTrack?: ShouldTrackErrorFn;
|
|
31
|
+
};
|
|
32
|
+
export type CreateSnapErrorHandlingOptions<TProvider extends TrackErrorCapableProvider = TrackErrorCapableProvider> = Omit<CreateWithCatchAndThrowSnapErrorOptions, 'trackError'> & CreateTrackErrorOptions<TProvider>;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a snap-bound error reporter for MetaMask Sentry (`snap_trackError`).
|
|
35
|
+
*
|
|
36
|
+
* RPC failures are caught and logged but never rethrown, so the returned function
|
|
37
|
+
* is safe to call from already-failing error-handling paths.
|
|
38
|
+
*
|
|
39
|
+
* @param options - Snap provider accessor, logger, and optional hooks.
|
|
40
|
+
* @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.
|
|
41
|
+
* @param options.logError - Logger method used when the tracking RPC fails.
|
|
42
|
+
* @param options.prepareError - Optional error normalizer before Sentry serialization.
|
|
43
|
+
* @param options.shouldTrack - Optional filter; defaults to skipping `UserRejectedRequestError`.
|
|
44
|
+
* @returns A function that reports errors to Sentry when {@link ShouldTrackErrorFn} allows it.
|
|
45
|
+
*/
|
|
46
|
+
export declare function createTrackError<TProvider extends TrackErrorCapableProvider>({ getSnapProvider, logError, prepareError, shouldTrack, }: CreateTrackErrorOptions<TProvider>): TrackErrorFn;
|
|
47
|
+
/**
|
|
48
|
+
* Creates snap error handling utilities wired with a shared transport and logger setup.
|
|
49
|
+
*
|
|
50
|
+
* @param options - Options for both {@link createTrackError} and
|
|
51
|
+
* {@link createWithCatchAndThrowSnapError}.
|
|
52
|
+
* @param options.logError - Logger method used for handler and tracking failures.
|
|
53
|
+
* @param options.normalizeErrorFn - Optional Snap RPC error normalizer for handler boundaries.
|
|
54
|
+
* @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.
|
|
55
|
+
* @param options.prepareError - Optional error normalizer before Sentry serialization.
|
|
56
|
+
* @param options.shouldTrack - Optional tracking filter passed to {@link createTrackError}.
|
|
57
|
+
* @returns Bound {@link createTrackError trackError} and
|
|
58
|
+
* {@link createWithCatchAndThrowSnapError withCatchAndThrowSnapError} functions.
|
|
59
|
+
*/
|
|
60
|
+
export declare function createSnapErrorHandling<TProvider extends TrackErrorCapableProvider>({ logError, normalizeErrorFn, getSnapProvider, prepareError, shouldTrack, }: CreateSnapErrorHandlingOptions<TProvider>): {
|
|
61
|
+
trackError: TrackErrorFn;
|
|
62
|
+
withCatchAndThrowSnapError: ReturnType<typeof createWithCatchAndThrowSnapError>;
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=trackError.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trackError.d.mts","sourceRoot":"","sources":["../../../src/utils/errors/trackError.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,4BAA4B;AAG9E,OAAO,KAAK,EACV,uCAAuC,EACvC,UAAU,EACV,YAAY,EACb,qBAAiB;AAClB,OAAO,EAAE,gCAAgC,EAAE,qBAAiB;AAE5D;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,CACP,IAAI,EAAE,qBAAqB,KACxB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,uBAAuB,CACjC,SAAS,SAAS,yBAAyB,GAAG,yBAAyB,IACrE;IACF,eAAe,EAAE,MAAM,SAAS,CAAC;IACjC,QAAQ,EAAE,UAAU,CAAC;IACrB,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,8BAA8B,CACxC,SAAS,SAAS,yBAAyB,GAAG,yBAAyB,IACrE,IAAI,CAAC,uCAAuC,EAAE,YAAY,CAAC,GAC7D,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAUrC;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,SAAS,yBAAyB,EAAE,EAC5E,eAAe,EACf,QAAQ,EACR,YAAkC,EAClC,WAAgC,GACjC,EAAE,uBAAuB,CAAC,SAAS,CAAC,GAAG,YAAY,CAoBnD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,SAAS,yBAAyB,EAC3C,EACA,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,WAAW,GACZ,EAAE,8BAA8B,CAAC,SAAS,CAAC,GAAG;IAC7C,UAAU,EAAE,YAAY,CAAC;IACzB,0BAA0B,EAAE,UAAU,CACpC,OAAO,gCAAgC,CACxC,CAAC;CACH,CAgBA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { getJsonError, UserRejectedRequestError } from "@metamask/snaps-sdk";
|
|
2
|
+
import { ensureError } from "@metamask/utils";
|
|
3
|
+
import { createWithCatchAndThrowSnapError } from "./errors.mjs";
|
|
4
|
+
function defaultPrepareError(error) {
|
|
5
|
+
return error instanceof Error ? error : ensureError(error);
|
|
6
|
+
}
|
|
7
|
+
function defaultShouldTrack(error) {
|
|
8
|
+
return !(error instanceof UserRejectedRequestError);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates a snap-bound error reporter for MetaMask Sentry (`snap_trackError`).
|
|
12
|
+
*
|
|
13
|
+
* RPC failures are caught and logged but never rethrown, so the returned function
|
|
14
|
+
* is safe to call from already-failing error-handling paths.
|
|
15
|
+
*
|
|
16
|
+
* @param options - Snap provider accessor, logger, and optional hooks.
|
|
17
|
+
* @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.
|
|
18
|
+
* @param options.logError - Logger method used when the tracking RPC fails.
|
|
19
|
+
* @param options.prepareError - Optional error normalizer before Sentry serialization.
|
|
20
|
+
* @param options.shouldTrack - Optional filter; defaults to skipping `UserRejectedRequestError`.
|
|
21
|
+
* @returns A function that reports errors to Sentry when {@link ShouldTrackErrorFn} allows it.
|
|
22
|
+
*/
|
|
23
|
+
export function createTrackError({ getSnapProvider, logError, prepareError = defaultPrepareError, shouldTrack = defaultShouldTrack, }) {
|
|
24
|
+
return async (error) => {
|
|
25
|
+
if (!shouldTrack(error)) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
const params = {
|
|
29
|
+
error: getJsonError(prepareError(error)),
|
|
30
|
+
};
|
|
31
|
+
try {
|
|
32
|
+
return await getSnapProvider().request({
|
|
33
|
+
method: 'snap_trackError',
|
|
34
|
+
params,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch (trackingError) {
|
|
38
|
+
logError({ error: trackingError }, 'Failed to track error');
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates snap error handling utilities wired with a shared transport and logger setup.
|
|
45
|
+
*
|
|
46
|
+
* @param options - Options for both {@link createTrackError} and
|
|
47
|
+
* {@link createWithCatchAndThrowSnapError}.
|
|
48
|
+
* @param options.logError - Logger method used for handler and tracking failures.
|
|
49
|
+
* @param options.normalizeErrorFn - Optional Snap RPC error normalizer for handler boundaries.
|
|
50
|
+
* @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.
|
|
51
|
+
* @param options.prepareError - Optional error normalizer before Sentry serialization.
|
|
52
|
+
* @param options.shouldTrack - Optional tracking filter passed to {@link createTrackError}.
|
|
53
|
+
* @returns Bound {@link createTrackError trackError} and
|
|
54
|
+
* {@link createWithCatchAndThrowSnapError withCatchAndThrowSnapError} functions.
|
|
55
|
+
*/
|
|
56
|
+
export function createSnapErrorHandling({ logError, normalizeErrorFn, getSnapProvider, prepareError, shouldTrack, }) {
|
|
57
|
+
const trackError = createTrackError({
|
|
58
|
+
getSnapProvider,
|
|
59
|
+
logError,
|
|
60
|
+
prepareError,
|
|
61
|
+
shouldTrack,
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
trackError,
|
|
65
|
+
withCatchAndThrowSnapError: createWithCatchAndThrowSnapError({
|
|
66
|
+
logError,
|
|
67
|
+
trackError,
|
|
68
|
+
normalizeErrorFn,
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=trackError.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trackError.mjs","sourceRoot":"","sources":["../../../src/utils/errors/trackError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,4BAA4B;AAE7E,OAAO,EAAE,WAAW,EAAE,wBAAwB;AAO9C,OAAO,EAAE,gCAAgC,EAAE,qBAAiB;AA4C5D,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,CAAC,CAAC,KAAK,YAAY,wBAAwB,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAA8C,EAC5E,eAAe,EACf,QAAQ,EACR,YAAY,GAAG,mBAAmB,EAClC,WAAW,GAAG,kBAAkB,GACG;IACnC,OAAO,KAAK,EAAE,KAAc,EAA+B,EAAE;QAC3D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAqB;YAC/B,KAAK,EAAE,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SACzC,CAAC;QAEF,IAAI,CAAC;YACH,OAAO,MAAM,eAAe,EAAE,CAAC,OAAO,CAAC;gBACrC,MAAM,EAAE,iBAAiB;gBACzB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,aAAa,EAAE,CAAC;YACvB,QAAQ,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,uBAAuB,CAAC,CAAC;YAC5D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CAErC,EACA,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,WAAW,GAC+B;IAM1C,MAAM,UAAU,GAAG,gBAAgB,CAAC;QAClC,eAAe;QACf,QAAQ;QACR,YAAY;QACZ,WAAW;KACZ,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,0BAA0B,EAAE,gCAAgC,CAAC;YAC3D,QAAQ;YACR,UAAU;YACV,gBAAgB;SACjB,CAAC;KACH,CAAC;AACJ,CAAC","sourcesContent":["import { getJsonError, UserRejectedRequestError } from '@metamask/snaps-sdk';\nimport type { TrackErrorParams, TrackErrorResult } from '@metamask/snaps-sdk';\nimport { ensureError } from '@metamask/utils';\n\nimport type {\n CreateWithCatchAndThrowSnapErrorOptions,\n LogErrorFn,\n TrackErrorFn,\n} from './errors';\nimport { createWithCatchAndThrowSnapError } from './errors';\n\n/**\n * Converts a caught value into an {@link Error} before Sentry serialization.\n */\nexport type PrepareErrorForTrackingFn = (error: unknown) => Error;\n\n/**\n * Determines whether an error should be reported through `snap_trackError`.\n */\nexport type ShouldTrackErrorFn = (error: unknown) => boolean;\n\n/**\n * `snap_trackError` request shape from `@metamask/snaps-sdk`.\n */\nexport type SnapTrackErrorRequest = {\n method: 'snap_trackError';\n params: TrackErrorParams;\n};\n\n/**\n * Snap provider surface required for {@link createTrackError}, derived from SDK\n * `snap_trackError` types.\n */\nexport type TrackErrorCapableProvider = {\n request: (\n args: SnapTrackErrorRequest,\n ) => Promise<TrackErrorResult | undefined>;\n};\n\nexport type CreateTrackErrorOptions<\n TProvider extends TrackErrorCapableProvider = TrackErrorCapableProvider,\n> = {\n getSnapProvider: () => TProvider;\n logError: LogErrorFn;\n prepareError?: PrepareErrorForTrackingFn;\n shouldTrack?: ShouldTrackErrorFn;\n};\n\nexport type CreateSnapErrorHandlingOptions<\n TProvider extends TrackErrorCapableProvider = TrackErrorCapableProvider,\n> = Omit<CreateWithCatchAndThrowSnapErrorOptions, 'trackError'> &\n CreateTrackErrorOptions<TProvider>;\n\nfunction defaultPrepareError(error: unknown): Error {\n return error instanceof Error ? error : ensureError(error);\n}\n\nfunction defaultShouldTrack(error: unknown): boolean {\n return !(error instanceof UserRejectedRequestError);\n}\n\n/**\n * Creates a snap-bound error reporter for MetaMask Sentry (`snap_trackError`).\n *\n * RPC failures are caught and logged but never rethrown, so the returned function\n * is safe to call from already-failing error-handling paths.\n *\n * @param options - Snap provider accessor, logger, and optional hooks.\n * @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.\n * @param options.logError - Logger method used when the tracking RPC fails.\n * @param options.prepareError - Optional error normalizer before Sentry serialization.\n * @param options.shouldTrack - Optional filter; defaults to skipping `UserRejectedRequestError`.\n * @returns A function that reports errors to Sentry when {@link ShouldTrackErrorFn} allows it.\n */\nexport function createTrackError<TProvider extends TrackErrorCapableProvider>({\n getSnapProvider,\n logError,\n prepareError = defaultPrepareError,\n shouldTrack = defaultShouldTrack,\n}: CreateTrackErrorOptions<TProvider>): TrackErrorFn {\n return async (error: unknown): Promise<string | undefined> => {\n if (!shouldTrack(error)) {\n return undefined;\n }\n\n const params: TrackErrorParams = {\n error: getJsonError(prepareError(error)),\n };\n\n try {\n return await getSnapProvider().request({\n method: 'snap_trackError',\n params,\n });\n } catch (trackingError) {\n logError({ error: trackingError }, 'Failed to track error');\n return undefined;\n }\n };\n}\n\n/**\n * Creates snap error handling utilities wired with a shared transport and logger setup.\n *\n * @param options - Options for both {@link createTrackError} and\n * {@link createWithCatchAndThrowSnapError}.\n * @param options.logError - Logger method used for handler and tracking failures.\n * @param options.normalizeErrorFn - Optional Snap RPC error normalizer for handler boundaries.\n * @param options.getSnapProvider - Returns the Snap provider used for `snap_trackError`.\n * @param options.prepareError - Optional error normalizer before Sentry serialization.\n * @param options.shouldTrack - Optional tracking filter passed to {@link createTrackError}.\n * @returns Bound {@link createTrackError trackError} and\n * {@link createWithCatchAndThrowSnapError withCatchAndThrowSnapError} functions.\n */\nexport function createSnapErrorHandling<\n TProvider extends TrackErrorCapableProvider,\n>({\n logError,\n normalizeErrorFn,\n getSnapProvider,\n prepareError,\n shouldTrack,\n}: CreateSnapErrorHandlingOptions<TProvider>): {\n trackError: TrackErrorFn;\n withCatchAndThrowSnapError: ReturnType<\n typeof createWithCatchAndThrowSnapError\n >;\n} {\n const trackError = createTrackError({\n getSnapProvider,\n logError,\n prepareError,\n shouldTrack,\n });\n\n return {\n trackError,\n withCatchAndThrowSnapError: createWithCatchAndThrowSnapError({\n logError,\n trackError,\n normalizeErrorFn,\n }),\n };\n}\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.noopAssetHandlers = void 0;
|
|
4
|
+
exports.wrapSnapHandlers = wrapSnapHandlers;
|
|
5
|
+
/**
|
|
6
|
+
* Wraps each given Snap entrypoint handler with `withCatchAndThrowSnapError`.
|
|
7
|
+
*
|
|
8
|
+
* @param withCatchAndThrowSnapError - The Snap's bound error wrapper.
|
|
9
|
+
* @param handlers - Entrypoint handlers, keyed by their Snap export name.
|
|
10
|
+
* @param logError - Optional per-handler `logError` overrides, forwarded as
|
|
11
|
+
* the wrapper's second argument. Omitted handlers use the logger bound in the
|
|
12
|
+
* wrapper.
|
|
13
|
+
* @returns The wrapped handlers, under the same keys.
|
|
14
|
+
* @example
|
|
15
|
+
* import {
|
|
16
|
+
* noopAssetHandlers,
|
|
17
|
+
* wrapSnapHandlers,
|
|
18
|
+
* } from '@metamask/snap-networks-utils';
|
|
19
|
+
*
|
|
20
|
+
* import { clientRequestHandler, keyringHandler, keyringLogger } from './context';
|
|
21
|
+
* import { withCatchAndThrowSnapError } from './utils/errors';
|
|
22
|
+
*
|
|
23
|
+
* export const { onKeyringRequest, onClientRequest } = wrapSnapHandlers(
|
|
24
|
+
* withCatchAndThrowSnapError,
|
|
25
|
+
* {
|
|
26
|
+
* onKeyringRequest: ({ origin, request }) =>
|
|
27
|
+
* keyringHandler.handle(origin, request),
|
|
28
|
+
* onClientRequest: ({ request }) => clientRequestHandler.handle(request),
|
|
29
|
+
* },
|
|
30
|
+
* { onKeyringRequest: keyringLogger.error.bind(keyringLogger) },
|
|
31
|
+
* );
|
|
32
|
+
*
|
|
33
|
+
* export const {
|
|
34
|
+
* onAssetsLookup,
|
|
35
|
+
* onAssetsConversion,
|
|
36
|
+
* onAssetHistoricalPrice,
|
|
37
|
+
* onAssetsMarketData,
|
|
38
|
+
* } = noopAssetHandlers;
|
|
39
|
+
*/
|
|
40
|
+
function wrapSnapHandlers(withCatchAndThrowSnapError, handlers, logError = {}) {
|
|
41
|
+
return Object.fromEntries(Object.entries(handlers).map(([name, handler]) => [
|
|
42
|
+
name,
|
|
43
|
+
async (args) => withCatchAndThrowSnapError(async () => handler(args), logError[name]),
|
|
44
|
+
]));
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* No-op asset handlers that network Snaps must export to keep the
|
|
48
|
+
* `endowment:assets` permission, since assets are provided through the
|
|
49
|
+
* Assets API instead.
|
|
50
|
+
*/
|
|
51
|
+
exports.noopAssetHandlers = {
|
|
52
|
+
onAssetsLookup: async () => ({ assets: {} }),
|
|
53
|
+
onAssetsConversion: async () => ({ conversionRates: {} }),
|
|
54
|
+
onAssetHistoricalPrice: async () => null,
|
|
55
|
+
onAssetsMarketData: async () => ({ marketData: {} }),
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=wrapSnapHandlers.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapSnapHandlers.cjs","sourceRoot":"","sources":["../../../src/utils/handlers/wrapSnapHandlers.ts"],"names":[],"mappings":";;;AA6FA,4CAeC;AAlDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,SAAgB,gBAAgB,CAC9B,0BAAsD,EACtD,QAAuD,EACvD,WAAqD,EAAE;IAEvD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI;QACJ,KAAK,EAAE,IAAa,EAAoB,EAAE,CACxC,0BAA0B,CACxB,KAAK,IAAI,EAAE,CAAE,OAA+C,CAAC,IAAI,CAAC,EAClE,QAAQ,CAAC,IAAmB,CAAC,CAC9B;KACJ,CAAC,CACgC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACU,QAAA,iBAAiB,GAM1B;IACF,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC5C,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC;IACzD,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;IACxC,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;CACrD,CAAC","sourcesContent":["import type {\n OnActiveHandler,\n OnAssetHistoricalPriceHandler,\n OnAssetsConversionHandler,\n OnAssetsLookupHandler,\n OnAssetsMarketDataHandler,\n OnClientRequestHandler,\n OnCronjobHandler,\n OnHomePageHandler,\n OnInactiveHandler,\n OnInstallHandler,\n OnKeyringRequestHandler,\n OnNameLookupHandler,\n OnProtocolRequestHandler,\n OnRpcRequestHandler,\n OnSettingsPageHandler,\n OnSignatureHandler,\n OnStartHandler,\n OnTransactionHandler,\n OnUpdateHandler,\n OnUserInputHandler,\n OnWebSocketEventHandler,\n} from '@metamask/snaps-sdk';\n\nimport type { LogErrorFn } from '../errors/errors';\n\nexport type WithCatchAndThrowSnapError = <Response>(\n handler: () => Promise<Response>,\n logErrorOverride?: LogErrorFn,\n) => Promise<Response>;\n\n/**\n * Snap entrypoint names mapped to their SDK handler types.\n */\nexport type SnapHandlers = {\n onActive: OnActiveHandler;\n onAssetHistoricalPrice: OnAssetHistoricalPriceHandler;\n onAssetsConversion: OnAssetsConversionHandler;\n onAssetsLookup: OnAssetsLookupHandler;\n onAssetsMarketData: OnAssetsMarketDataHandler;\n onClientRequest: OnClientRequestHandler;\n onCronjob: OnCronjobHandler;\n onHomePage: OnHomePageHandler;\n onInactive: OnInactiveHandler;\n onInstall: OnInstallHandler;\n onKeyringRequest: OnKeyringRequestHandler;\n onNameLookup: OnNameLookupHandler;\n onProtocolRequest: OnProtocolRequestHandler;\n onRpcRequest: OnRpcRequestHandler;\n onSettingsPage: OnSettingsPageHandler;\n onSignature: OnSignatureHandler;\n onStart: OnStartHandler;\n onTransaction: OnTransactionHandler;\n onUpdate: OnUpdateHandler;\n onUserInput: OnUserInputHandler;\n onWebSocketEvent: OnWebSocketEventHandler;\n};\n\n/**\n * Wraps each given Snap entrypoint handler with `withCatchAndThrowSnapError`.\n *\n * @param withCatchAndThrowSnapError - The Snap's bound error wrapper.\n * @param handlers - Entrypoint handlers, keyed by their Snap export name.\n * @param logError - Optional per-handler `logError` overrides, forwarded as\n * the wrapper's second argument. Omitted handlers use the logger bound in the\n * wrapper.\n * @returns The wrapped handlers, under the same keys.\n * @example\n * import {\n * noopAssetHandlers,\n * wrapSnapHandlers,\n * } from '@metamask/snap-networks-utils';\n *\n * import { clientRequestHandler, keyringHandler, keyringLogger } from './context';\n * import { withCatchAndThrowSnapError } from './utils/errors';\n *\n * export const { onKeyringRequest, onClientRequest } = wrapSnapHandlers(\n * withCatchAndThrowSnapError,\n * {\n * onKeyringRequest: ({ origin, request }) =>\n * keyringHandler.handle(origin, request),\n * onClientRequest: ({ request }) => clientRequestHandler.handle(request),\n * },\n * { onKeyringRequest: keyringLogger.error.bind(keyringLogger) },\n * );\n *\n * export const {\n * onAssetsLookup,\n * onAssetsConversion,\n * onAssetHistoricalPrice,\n * onAssetsMarketData,\n * } = noopAssetHandlers;\n */\nexport function wrapSnapHandlers<HandlerName extends keyof SnapHandlers>(\n withCatchAndThrowSnapError: WithCatchAndThrowSnapError,\n handlers: { [Name in HandlerName]: SnapHandlers[Name] },\n logError: Partial<Record<HandlerName, LogErrorFn>> = {},\n): Pick<SnapHandlers, HandlerName> {\n return Object.fromEntries(\n Object.entries(handlers).map(([name, handler]) => [\n name,\n async (args: unknown): Promise<unknown> =>\n withCatchAndThrowSnapError(\n async () => (handler as (args: unknown) => Promise<unknown>)(args),\n logError[name as HandlerName],\n ),\n ]),\n ) as Pick<SnapHandlers, HandlerName>;\n}\n\n/**\n * No-op asset handlers that network Snaps must export to keep the\n * `endowment:assets` permission, since assets are provided through the\n * Assets API instead.\n */\nexport const noopAssetHandlers: Pick<\n SnapHandlers,\n | 'onAssetsLookup'\n | 'onAssetsConversion'\n | 'onAssetHistoricalPrice'\n | 'onAssetsMarketData'\n> = {\n onAssetsLookup: async () => ({ assets: {} }),\n onAssetsConversion: async () => ({ conversionRates: {} }),\n onAssetHistoricalPrice: async () => null,\n onAssetsMarketData: async () => ({ marketData: {} }),\n};\n"]}
|