@metamask-previews/snap-networks-utils 1.0.0-preview-623cc13 → 1.0.0-preview-44f19c3d

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.
Files changed (50) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/index.cjs +9 -1
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +3 -0
  5. package/dist/index.d.cts.map +1 -1
  6. package/dist/index.d.mts +3 -0
  7. package/dist/index.d.mts.map +1 -1
  8. package/dist/index.mjs +2 -0
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/utils/errors/errors.cjs +44 -0
  11. package/dist/utils/errors/errors.cjs.map +1 -0
  12. package/dist/utils/errors/errors.d.cts +37 -0
  13. package/dist/utils/errors/errors.d.cts.map +1 -0
  14. package/dist/utils/errors/errors.d.mts +37 -0
  15. package/dist/utils/errors/errors.d.mts.map +1 -0
  16. package/dist/utils/errors/errors.mjs +40 -0
  17. package/dist/utils/errors/errors.mjs.map +1 -0
  18. package/dist/utils/errors/index.cjs +12 -0
  19. package/dist/utils/errors/index.cjs.map +1 -0
  20. package/dist/utils/errors/index.d.cts +7 -0
  21. package/dist/utils/errors/index.d.cts.map +1 -0
  22. package/dist/utils/errors/index.d.mts +7 -0
  23. package/dist/utils/errors/index.d.mts.map +1 -0
  24. package/dist/utils/errors/index.mjs +4 -0
  25. package/dist/utils/errors/index.mjs.map +1 -0
  26. package/dist/utils/errors/snapRpcError.cjs +33 -0
  27. package/dist/utils/errors/snapRpcError.cjs.map +1 -0
  28. package/dist/utils/errors/snapRpcError.d.cts +11 -0
  29. package/dist/utils/errors/snapRpcError.d.cts.map +1 -0
  30. package/dist/utils/errors/snapRpcError.d.mts +11 -0
  31. package/dist/utils/errors/snapRpcError.d.mts.map +1 -0
  32. package/dist/utils/errors/snapRpcError.mjs +30 -0
  33. package/dist/utils/errors/snapRpcError.mjs.map +1 -0
  34. package/dist/utils/errors/trackError.cjs +76 -0
  35. package/dist/utils/errors/trackError.cjs.map +1 -0
  36. package/dist/utils/errors/trackError.d.cts +64 -0
  37. package/dist/utils/errors/trackError.d.cts.map +1 -0
  38. package/dist/utils/errors/trackError.d.mts +64 -0
  39. package/dist/utils/errors/trackError.d.mts.map +1 -0
  40. package/dist/utils/errors/trackError.mjs +72 -0
  41. package/dist/utils/errors/trackError.mjs.map +1 -0
  42. package/dist/utils/logger/__mocks__/Logger.cjs +26 -0
  43. package/dist/utils/logger/__mocks__/Logger.cjs.map +1 -0
  44. package/dist/utils/logger/__mocks__/Logger.d.cts +3 -0
  45. package/dist/utils/logger/__mocks__/Logger.d.cts.map +1 -0
  46. package/dist/utils/logger/__mocks__/Logger.d.mts +3 -0
  47. package/dist/utils/logger/__mocks__/Logger.d.mts.map +1 -0
  48. package/dist/utils/logger/__mocks__/Logger.mjs +23 -0
  49. package/dist/utils/logger/__mocks__/Logger.mjs.map +1 -0
  50. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -11,6 +11,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
11
11
 
12
12
  - Add a `UuidStruct` Superstruct for validating UUID v4 strings. ([#243](https://github.com/MetaMask/internal-snaps/pull/243))
13
13
  - Add helpers `serialize`, `deserialize`, and `Serializable` for round-tripping `BigNumber`, `bigint`, `Uint8Array`, and `undefined` through snap state ([#197](https://github.com/MetaMask/internal-snaps/pull/197))
14
+ - Add shared snap error utilities to the main package entry point ([#241](https://github.com/MetaMask/internal-snaps/pull/241))
15
+ - `createWithCatchAndThrowSnapError` for handler-boundary error catching, logging, and Snap RPC normalization
16
+ - `normalizeError` for converting caught values into Snap RPC errors, with optional custom normalizers via `createWithCatchAndThrowSnapError`'s `normalizeErrorFn` option
17
+ - `isSnapRpcError` type guard and `SnapRpcError` union type
18
+ - Add shared Sentry error tracking utilities for network snaps ([#246](https://github.com/MetaMask/internal-snaps/pull/246))
19
+ - `createTrackError` for reporting errors to MetaMask via `snap_trackError`
20
+ - `createSnapErrorHandling` to wire `createTrackError` and `createWithCatchAndThrowSnapError`
14
21
  - Add `InFlightCoalescer`, exported from a new `./dedupe` entry point, which coalesces concurrent async operations by key so callers share one in-flight run ([#149](https://github.com/MetaMask/internal-snaps/pull/149))
15
22
  - Add shared async batching utilities. ([#211](https://github.com/MetaMask/internal-snaps/pull/211))
16
23
  - Add origin permission helpers ([#193](https://github.com/MetaMask/internal-snaps/pull/193))
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateOrigin = exports.DEFAULT_METAMASK_ORIGIN = exports.DEFAULT_DEV_ORIGINS = exports.DEFAULT_PROD_ORIGINS = exports.createOriginPermissions = exports.deserialize = exports.serialize = exports.LogLevel = exports.Logger = exports.chunks = exports.batchesAllWithChunks = exports.batchesAllSettledWithChunks = exports.batchesAllSettled = exports.batchesAll = exports.UuidStruct = exports.UrlStruct = exports.sanitizeUri = exports.sanitizeControlCharacters = exports.buildUrl = exports.safeMerge = exports.RemoteFeatureFlagsProvider = exports.REMOTE_FEATURE_FLAGS_PROVIDER_NAME = exports.AssetsProvider = exports.ASSETS_PROVIDER_NAME = void 0;
3
+ exports.InFlightCoalescer = exports.normalizeError = exports.isSnapRpcError = exports.createWithCatchAndThrowSnapError = exports.createTrackError = exports.createSnapErrorHandling = exports.validateOrigin = exports.DEFAULT_METAMASK_ORIGIN = exports.DEFAULT_DEV_ORIGINS = exports.DEFAULT_PROD_ORIGINS = exports.createOriginPermissions = exports.deserialize = exports.serialize = exports.LogLevel = exports.Logger = exports.chunks = exports.batchesAllWithChunks = exports.batchesAllSettledWithChunks = exports.batchesAllSettled = exports.batchesAll = exports.UuidStruct = exports.UrlStruct = exports.sanitizeUri = exports.sanitizeControlCharacters = exports.buildUrl = exports.safeMerge = exports.RemoteFeatureFlagsProvider = exports.REMOTE_FEATURE_FLAGS_PROVIDER_NAME = exports.AssetsProvider = exports.ASSETS_PROVIDER_NAME = void 0;
4
4
  var AssetsProvider_1 = require("./providers/assets/AssetsProvider.cjs");
5
5
  Object.defineProperty(exports, "ASSETS_PROVIDER_NAME", { enumerable: true, get: function () { return AssetsProvider_1.ASSETS_PROVIDER_NAME; } });
6
6
  Object.defineProperty(exports, "AssetsProvider", { enumerable: true, get: function () { return AssetsProvider_1.AssetsProvider; } });
@@ -37,4 +37,12 @@ Object.defineProperty(exports, "DEFAULT_DEV_ORIGINS", { enumerable: true, get: f
37
37
  Object.defineProperty(exports, "DEFAULT_METAMASK_ORIGIN", { enumerable: true, get: function () { return createOriginPermissions_1.DEFAULT_METAMASK_ORIGIN; } });
38
38
  var validateOrigin_1 = require("./utils/originPermissions/validateOrigin.cjs");
39
39
  Object.defineProperty(exports, "validateOrigin", { enumerable: true, get: function () { return validateOrigin_1.validateOrigin; } });
40
+ var errors_1 = require("./utils/errors/index.cjs");
41
+ Object.defineProperty(exports, "createSnapErrorHandling", { enumerable: true, get: function () { return errors_1.createSnapErrorHandling; } });
42
+ Object.defineProperty(exports, "createTrackError", { enumerable: true, get: function () { return errors_1.createTrackError; } });
43
+ Object.defineProperty(exports, "createWithCatchAndThrowSnapError", { enumerable: true, get: function () { return errors_1.createWithCatchAndThrowSnapError; } });
44
+ Object.defineProperty(exports, "isSnapRpcError", { enumerable: true, get: function () { return errors_1.isSnapRpcError; } });
45
+ Object.defineProperty(exports, "normalizeError", { enumerable: true, get: function () { return errors_1.normalizeError; } });
46
+ var InFlightCoalescer_1 = require("./utils/dedupe/InFlightCoalescer.cjs");
47
+ Object.defineProperty(exports, "InFlightCoalescer", { enumerable: true, get: function () { return InFlightCoalescer_1.InFlightCoalescer; } });
40
48
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAI2C;AAHzC,sHAAA,oBAAoB,OAAA;AACpB,gHAAA,cAAc,OAAA;AAGhB,8GAIqE;AAHnE,gJAAA,kCAAkC,OAAA;AAClC,wIAAA,0BAA0B,OAAA;AAG5B,6DAAwD;AAA/C,sGAAA,SAAS,OAAA;AAClB,0DAAqD;AAA5C,oGAAA,QAAQ,OAAA;AAEjB,0DAGmC;AAFjC,qHAAA,yBAAyB,OAAA;AACzB,uGAAA,WAAW,OAAA;AAEb,6DAAwD;AAA/C,sGAAA,SAAS,OAAA;AAClB,gEAA2D;AAAlD,wGAAA,UAAU,OAAA;AACnB,iDAM6B;AAL3B,mGAAA,UAAU,OAAA;AACV,0GAAA,iBAAiB,OAAA;AACjB,oHAAA,2BAA2B,OAAA;AAC3B,6GAAA,oBAAoB,OAAA;AACpB,+FAAA,MAAM,OAAA;AAER,oDAAyD;AAAhD,gGAAA,MAAM,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAQzB,yEAA6E;AAApE,0GAAA,SAAS,OAAA;AAAE,4GAAA,WAAW,OAAA;AAE/B,iGAK2D;AAJzD,kIAAA,uBAAuB,OAAA;AACvB,+HAAA,oBAAoB,OAAA;AACpB,8HAAA,mBAAmB,OAAA;AACnB,kIAAA,uBAAuB,OAAA;AAGzB,+EAA0E;AAAjE,gHAAA,cAAc,OAAA","sourcesContent":["export {\n ASSETS_PROVIDER_NAME,\n AssetsProvider,\n type AssetsProviderMessenger,\n} from './providers/assets/AssetsProvider';\nexport {\n REMOTE_FEATURE_FLAGS_PROVIDER_NAME,\n RemoteFeatureFlagsProvider,\n type RemoteFeatureFlagsProviderMessenger,\n} from './providers/remote-feature-flags/RemoteFeatureFlagsProvider';\nexport { safeMerge } from './utils/safeMerge/safeMerge';\nexport { buildUrl } from './utils/buildUrl/buildUrl';\nexport type { BuildUrlParams } from './utils/buildUrl/buildUrl';\nexport {\n sanitizeControlCharacters,\n sanitizeUri,\n} from './utils/sanitize/sanitize';\nexport { UrlStruct } from './utils/urlStruct/urlStruct';\nexport { UuidStruct } from './utils/uuidStruct/uuidStruct';\nexport {\n batchesAll,\n batchesAllSettled,\n batchesAllSettledWithChunks,\n batchesAllWithChunks,\n chunks,\n} from './utils/async/async';\nexport { Logger, LogLevel } from './utils/logger/Logger';\nexport type {\n LoggerOptions,\n LoggerMethod,\n LogMethod,\n LogMethodDecorator,\n LoggerDecorators,\n} from './utils/logger/Logger';\nexport { serialize, deserialize } from './utils/serialization/serialization';\nexport type { Serializable } from './utils/serialization/types';\nexport {\n createOriginPermissions,\n DEFAULT_PROD_ORIGINS,\n DEFAULT_DEV_ORIGINS,\n DEFAULT_METAMASK_ORIGIN,\n} from './utils/originPermissions/createOriginPermissions';\nexport type { CreateOriginPermissionsParams } from './utils/originPermissions/createOriginPermissions';\nexport { validateOrigin } from './utils/originPermissions/validateOrigin';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAI2C;AAHzC,sHAAA,oBAAoB,OAAA;AACpB,gHAAA,cAAc,OAAA;AAGhB,8GAIqE;AAHnE,gJAAA,kCAAkC,OAAA;AAClC,wIAAA,0BAA0B,OAAA;AAG5B,6DAAwD;AAA/C,sGAAA,SAAS,OAAA;AAClB,0DAAqD;AAA5C,oGAAA,QAAQ,OAAA;AAEjB,0DAGmC;AAFjC,qHAAA,yBAAyB,OAAA;AACzB,uGAAA,WAAW,OAAA;AAEb,6DAAwD;AAA/C,sGAAA,SAAS,OAAA;AAClB,gEAA2D;AAAlD,wGAAA,UAAU,OAAA;AACnB,iDAM6B;AAL3B,mGAAA,UAAU,OAAA;AACV,0GAAA,iBAAiB,OAAA;AACjB,oHAAA,2BAA2B,OAAA;AAC3B,6GAAA,oBAAoB,OAAA;AACpB,+FAAA,MAAM,OAAA;AAER,oDAAyD;AAAhD,gGAAA,MAAM,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAQzB,yEAA6E;AAApE,0GAAA,SAAS,OAAA;AAAE,4GAAA,WAAW,OAAA;AAE/B,iGAK2D;AAJzD,kIAAA,uBAAuB,OAAA;AACvB,+HAAA,oBAAoB,OAAA;AACpB,8HAAA,mBAAmB,OAAA;AACnB,kIAAA,uBAAuB,OAAA;AAGzB,+EAA0E;AAAjE,gHAAA,cAAc,OAAA;AACvB,mDAMwB;AALtB,iHAAA,uBAAuB,OAAA;AACvB,0GAAA,gBAAgB,OAAA;AAChB,0HAAA,gCAAgC,OAAA;AAChC,wGAAA,cAAc,OAAA;AACd,wGAAA,cAAc,OAAA;AAEhB,0EAAqE;AAA5D,sHAAA,iBAAiB,OAAA","sourcesContent":["export {\n ASSETS_PROVIDER_NAME,\n AssetsProvider,\n type AssetsProviderMessenger,\n} from './providers/assets/AssetsProvider';\nexport {\n REMOTE_FEATURE_FLAGS_PROVIDER_NAME,\n RemoteFeatureFlagsProvider,\n type RemoteFeatureFlagsProviderMessenger,\n} from './providers/remote-feature-flags/RemoteFeatureFlagsProvider';\nexport { safeMerge } from './utils/safeMerge/safeMerge';\nexport { buildUrl } from './utils/buildUrl/buildUrl';\nexport type { BuildUrlParams } from './utils/buildUrl/buildUrl';\nexport {\n sanitizeControlCharacters,\n sanitizeUri,\n} from './utils/sanitize/sanitize';\nexport { UrlStruct } from './utils/urlStruct/urlStruct';\nexport { UuidStruct } from './utils/uuidStruct/uuidStruct';\nexport {\n batchesAll,\n batchesAllSettled,\n batchesAllSettledWithChunks,\n batchesAllWithChunks,\n chunks,\n} from './utils/async/async';\nexport { Logger, LogLevel } from './utils/logger/Logger';\nexport type {\n LoggerOptions,\n LoggerMethod,\n LogMethod,\n LogMethodDecorator,\n LoggerDecorators,\n} from './utils/logger/Logger';\nexport { serialize, deserialize } from './utils/serialization/serialization';\nexport type { Serializable } from './utils/serialization/types';\nexport {\n createOriginPermissions,\n DEFAULT_PROD_ORIGINS,\n DEFAULT_DEV_ORIGINS,\n DEFAULT_METAMASK_ORIGIN,\n} from './utils/originPermissions/createOriginPermissions';\nexport type { CreateOriginPermissionsParams } from './utils/originPermissions/createOriginPermissions';\nexport { validateOrigin } from './utils/originPermissions/validateOrigin';\nexport {\n createSnapErrorHandling,\n createTrackError,\n createWithCatchAndThrowSnapError,\n isSnapRpcError,\n normalizeError,\n} from './utils/errors';\nexport { InFlightCoalescer } from './utils/dedupe/InFlightCoalescer';\nexport type {\n CreateSnapErrorHandlingOptions,\n CreateTrackErrorOptions,\n CreateWithCatchAndThrowSnapErrorOptions,\n LogErrorFn,\n NormalizeErrorFn,\n PrepareErrorForTrackingFn,\n ShouldTrackErrorFn,\n SnapRpcError,\n SnapTrackErrorRequest,\n TrackErrorCapableProvider,\n TrackErrorFn,\n} from './utils/errors';\n"]}
package/dist/index.d.cts CHANGED
@@ -14,4 +14,7 @@ export type { Serializable } from "./utils/serialization/types.cjs";
14
14
  export { createOriginPermissions, DEFAULT_PROD_ORIGINS, DEFAULT_DEV_ORIGINS, DEFAULT_METAMASK_ORIGIN, } from "./utils/originPermissions/createOriginPermissions.cjs";
15
15
  export type { CreateOriginPermissionsParams } from "./utils/originPermissions/createOriginPermissions.cjs";
16
16
  export { validateOrigin } from "./utils/originPermissions/validateOrigin.cjs";
17
+ export { createSnapErrorHandling, createTrackError, createWithCatchAndThrowSnapError, isSnapRpcError, normalizeError, } from "./utils/errors/index.cjs";
18
+ export { InFlightCoalescer } from "./utils/dedupe/InFlightCoalescer.cjs";
19
+ export type { CreateSnapErrorHandlingOptions, CreateTrackErrorOptions, CreateWithCatchAndThrowSnapErrorOptions, LogErrorFn, NormalizeErrorFn, PrepareErrorForTrackingFn, ShouldTrackErrorFn, SnapRpcError, SnapTrackErrorRequest, TrackErrorCapableProvider, TrackErrorFn, } from "./utils/errors/index.cjs";
17
20
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,uBAAuB,GAC7B,8CAA0C;AAC3C,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAC1B,KAAK,mCAAmC,GACzC,wEAAoE;AACrE,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,QAAQ,EAAE,sCAAkC;AACrD,YAAY,EAAE,cAAc,EAAE,sCAAkC;AAChE,OAAO,EACL,yBAAyB,EACzB,WAAW,GACZ,sCAAkC;AACnC,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,UAAU,EAAE,0CAAsC;AAC3D,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,GACP,gCAA4B;AAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAA8B;AACzD,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,GACjB,kCAA8B;AAC/B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gDAA4C;AAC7E,YAAY,EAAE,YAAY,EAAE,wCAAoC;AAChE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,8DAA0D;AAC3D,YAAY,EAAE,6BAA6B,EAAE,8DAA0D;AACvG,OAAO,EAAE,cAAc,EAAE,qDAAiD"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,uBAAuB,GAC7B,8CAA0C;AAC3C,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAC1B,KAAK,mCAAmC,GACzC,wEAAoE;AACrE,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,QAAQ,EAAE,sCAAkC;AACrD,YAAY,EAAE,cAAc,EAAE,sCAAkC;AAChE,OAAO,EACL,yBAAyB,EACzB,WAAW,GACZ,sCAAkC;AACnC,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,UAAU,EAAE,0CAAsC;AAC3D,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,GACP,gCAA4B;AAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAA8B;AACzD,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,GACjB,kCAA8B;AAC/B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gDAA4C;AAC7E,YAAY,EAAE,YAAY,EAAE,wCAAoC;AAChE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,8DAA0D;AAC3D,YAAY,EAAE,6BAA6B,EAAE,8DAA0D;AACvG,OAAO,EAAE,cAAc,EAAE,qDAAiD;AAC1E,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,gCAAgC,EAChC,cAAc,EACd,cAAc,GACf,iCAAuB;AACxB,OAAO,EAAE,iBAAiB,EAAE,6CAAyC;AACrE,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,uCAAuC,EACvC,UAAU,EACV,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,YAAY,GACb,iCAAuB"}
package/dist/index.d.mts CHANGED
@@ -14,4 +14,7 @@ export type { Serializable } from "./utils/serialization/types.mjs";
14
14
  export { createOriginPermissions, DEFAULT_PROD_ORIGINS, DEFAULT_DEV_ORIGINS, DEFAULT_METAMASK_ORIGIN, } from "./utils/originPermissions/createOriginPermissions.mjs";
15
15
  export type { CreateOriginPermissionsParams } from "./utils/originPermissions/createOriginPermissions.mjs";
16
16
  export { validateOrigin } from "./utils/originPermissions/validateOrigin.mjs";
17
+ export { createSnapErrorHandling, createTrackError, createWithCatchAndThrowSnapError, isSnapRpcError, normalizeError, } from "./utils/errors/index.mjs";
18
+ export { InFlightCoalescer } from "./utils/dedupe/InFlightCoalescer.mjs";
19
+ export type { CreateSnapErrorHandlingOptions, CreateTrackErrorOptions, CreateWithCatchAndThrowSnapErrorOptions, LogErrorFn, NormalizeErrorFn, PrepareErrorForTrackingFn, ShouldTrackErrorFn, SnapRpcError, SnapTrackErrorRequest, TrackErrorCapableProvider, TrackErrorFn, } from "./utils/errors/index.mjs";
17
20
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,uBAAuB,GAC7B,8CAA0C;AAC3C,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAC1B,KAAK,mCAAmC,GACzC,wEAAoE;AACrE,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,QAAQ,EAAE,sCAAkC;AACrD,YAAY,EAAE,cAAc,EAAE,sCAAkC;AAChE,OAAO,EACL,yBAAyB,EACzB,WAAW,GACZ,sCAAkC;AACnC,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,UAAU,EAAE,0CAAsC;AAC3D,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,GACP,gCAA4B;AAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAA8B;AACzD,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,GACjB,kCAA8B;AAC/B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gDAA4C;AAC7E,YAAY,EAAE,YAAY,EAAE,wCAAoC;AAChE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,8DAA0D;AAC3D,YAAY,EAAE,6BAA6B,EAAE,8DAA0D;AACvG,OAAO,EAAE,cAAc,EAAE,qDAAiD"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,KAAK,uBAAuB,GAC7B,8CAA0C;AAC3C,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAC1B,KAAK,mCAAmC,GACzC,wEAAoE;AACrE,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,QAAQ,EAAE,sCAAkC;AACrD,YAAY,EAAE,cAAc,EAAE,sCAAkC;AAChE,OAAO,EACL,yBAAyB,EACzB,WAAW,GACZ,sCAAkC;AACnC,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,UAAU,EAAE,0CAAsC;AAC3D,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,GACP,gCAA4B;AAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAA8B;AACzD,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,GACjB,kCAA8B;AAC/B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gDAA4C;AAC7E,YAAY,EAAE,YAAY,EAAE,wCAAoC;AAChE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,GACxB,8DAA0D;AAC3D,YAAY,EAAE,6BAA6B,EAAE,8DAA0D;AACvG,OAAO,EAAE,cAAc,EAAE,qDAAiD;AAC1E,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,gCAAgC,EAChC,cAAc,EACd,cAAc,GACf,iCAAuB;AACxB,OAAO,EAAE,iBAAiB,EAAE,6CAAyC;AACrE,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,uCAAuC,EACvC,UAAU,EACV,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,YAAY,GACb,iCAAuB"}
package/dist/index.mjs CHANGED
@@ -10,4 +10,6 @@ export { Logger, LogLevel } from "./utils/logger/Logger.mjs";
10
10
  export { serialize, deserialize } from "./utils/serialization/serialization.mjs";
11
11
  export { createOriginPermissions, DEFAULT_PROD_ORIGINS, DEFAULT_DEV_ORIGINS, DEFAULT_METAMASK_ORIGIN } from "./utils/originPermissions/createOriginPermissions.mjs";
12
12
  export { validateOrigin } from "./utils/originPermissions/validateOrigin.mjs";
13
+ export { createSnapErrorHandling, createTrackError, createWithCatchAndThrowSnapError, isSnapRpcError, normalizeError } from "./utils/errors/index.mjs";
14
+ export { InFlightCoalescer } from "./utils/dedupe/InFlightCoalescer.mjs";
13
15
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EAEf,8CAA0C;AAC3C,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAE3B,wEAAoE;AACrE,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,QAAQ,EAAE,sCAAkC;AAErD,OAAO,EACL,yBAAyB,EACzB,WAAW,EACZ,sCAAkC;AACnC,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,UAAU,EAAE,0CAAsC;AAC3D,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,EACP,gCAA4B;AAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAA8B;AAQzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gDAA4C;AAE7E,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACxB,8DAA0D;AAE3D,OAAO,EAAE,cAAc,EAAE,qDAAiD","sourcesContent":["export {\n ASSETS_PROVIDER_NAME,\n AssetsProvider,\n type AssetsProviderMessenger,\n} from './providers/assets/AssetsProvider';\nexport {\n REMOTE_FEATURE_FLAGS_PROVIDER_NAME,\n RemoteFeatureFlagsProvider,\n type RemoteFeatureFlagsProviderMessenger,\n} from './providers/remote-feature-flags/RemoteFeatureFlagsProvider';\nexport { safeMerge } from './utils/safeMerge/safeMerge';\nexport { buildUrl } from './utils/buildUrl/buildUrl';\nexport type { BuildUrlParams } from './utils/buildUrl/buildUrl';\nexport {\n sanitizeControlCharacters,\n sanitizeUri,\n} from './utils/sanitize/sanitize';\nexport { UrlStruct } from './utils/urlStruct/urlStruct';\nexport { UuidStruct } from './utils/uuidStruct/uuidStruct';\nexport {\n batchesAll,\n batchesAllSettled,\n batchesAllSettledWithChunks,\n batchesAllWithChunks,\n chunks,\n} from './utils/async/async';\nexport { Logger, LogLevel } from './utils/logger/Logger';\nexport type {\n LoggerOptions,\n LoggerMethod,\n LogMethod,\n LogMethodDecorator,\n LoggerDecorators,\n} from './utils/logger/Logger';\nexport { serialize, deserialize } from './utils/serialization/serialization';\nexport type { Serializable } from './utils/serialization/types';\nexport {\n createOriginPermissions,\n DEFAULT_PROD_ORIGINS,\n DEFAULT_DEV_ORIGINS,\n DEFAULT_METAMASK_ORIGIN,\n} from './utils/originPermissions/createOriginPermissions';\nexport type { CreateOriginPermissionsParams } from './utils/originPermissions/createOriginPermissions';\nexport { validateOrigin } from './utils/originPermissions/validateOrigin';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,cAAc,EAEf,8CAA0C;AAC3C,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAE3B,wEAAoE;AACrE,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,QAAQ,EAAE,sCAAkC;AAErD,OAAO,EACL,yBAAyB,EACzB,WAAW,EACZ,sCAAkC;AACnC,OAAO,EAAE,SAAS,EAAE,wCAAoC;AACxD,OAAO,EAAE,UAAU,EAAE,0CAAsC;AAC3D,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,MAAM,EACP,gCAA4B;AAC7B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kCAA8B;AAQzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gDAA4C;AAE7E,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACxB,8DAA0D;AAE3D,OAAO,EAAE,cAAc,EAAE,qDAAiD;AAC1E,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,gCAAgC,EAChC,cAAc,EACd,cAAc,EACf,iCAAuB;AACxB,OAAO,EAAE,iBAAiB,EAAE,6CAAyC","sourcesContent":["export {\n ASSETS_PROVIDER_NAME,\n AssetsProvider,\n type AssetsProviderMessenger,\n} from './providers/assets/AssetsProvider';\nexport {\n REMOTE_FEATURE_FLAGS_PROVIDER_NAME,\n RemoteFeatureFlagsProvider,\n type RemoteFeatureFlagsProviderMessenger,\n} from './providers/remote-feature-flags/RemoteFeatureFlagsProvider';\nexport { safeMerge } from './utils/safeMerge/safeMerge';\nexport { buildUrl } from './utils/buildUrl/buildUrl';\nexport type { BuildUrlParams } from './utils/buildUrl/buildUrl';\nexport {\n sanitizeControlCharacters,\n sanitizeUri,\n} from './utils/sanitize/sanitize';\nexport { UrlStruct } from './utils/urlStruct/urlStruct';\nexport { UuidStruct } from './utils/uuidStruct/uuidStruct';\nexport {\n batchesAll,\n batchesAllSettled,\n batchesAllSettledWithChunks,\n batchesAllWithChunks,\n chunks,\n} from './utils/async/async';\nexport { Logger, LogLevel } from './utils/logger/Logger';\nexport type {\n LoggerOptions,\n LoggerMethod,\n LogMethod,\n LogMethodDecorator,\n LoggerDecorators,\n} from './utils/logger/Logger';\nexport { serialize, deserialize } from './utils/serialization/serialization';\nexport type { Serializable } from './utils/serialization/types';\nexport {\n createOriginPermissions,\n DEFAULT_PROD_ORIGINS,\n DEFAULT_DEV_ORIGINS,\n DEFAULT_METAMASK_ORIGIN,\n} from './utils/originPermissions/createOriginPermissions';\nexport type { CreateOriginPermissionsParams } from './utils/originPermissions/createOriginPermissions';\nexport { validateOrigin } from './utils/originPermissions/validateOrigin';\nexport {\n createSnapErrorHandling,\n createTrackError,\n createWithCatchAndThrowSnapError,\n isSnapRpcError,\n normalizeError,\n} from './utils/errors';\nexport { InFlightCoalescer } from './utils/dedupe/InFlightCoalescer';\nexport type {\n CreateSnapErrorHandlingOptions,\n CreateTrackErrorOptions,\n CreateWithCatchAndThrowSnapErrorOptions,\n LogErrorFn,\n NormalizeErrorFn,\n PrepareErrorForTrackingFn,\n ShouldTrackErrorFn,\n SnapRpcError,\n SnapTrackErrorRequest,\n TrackErrorCapableProvider,\n TrackErrorFn,\n} from './utils/errors';\n"]}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeError = normalizeError;
4
+ exports.createWithCatchAndThrowSnapError = createWithCatchAndThrowSnapError;
5
+ const snaps_sdk_1 = require("@metamask/snaps-sdk");
6
+ const snapRpcError_1 = require("./snapRpcError.cjs");
7
+ /**
8
+ * Normalizes an unknown caught value into a Snap RPC error.
9
+ *
10
+ * Preserves existing Snap RPC errors; otherwise wraps the value in {@link SnapError}.
11
+ *
12
+ * @param error - The caught value.
13
+ * @returns A Snap RPC error.
14
+ */
15
+ function normalizeError(error) {
16
+ return (0, snapRpcError_1.isSnapRpcError)(error)
17
+ ? error
18
+ : new snaps_sdk_1.SnapError(error instanceof Error ? error : (0, snaps_sdk_1.getErrorMessage)(error));
19
+ }
20
+ /**
21
+ * Creates a handler-boundary error wrapper wired with logger, tracking, and optional error normalization.
22
+ *
23
+ * @param options - Logger, error-tracking transport, and optional custom normalizer.
24
+ * @param options.logError - Logger method used to record the normalized error.
25
+ * @param options.trackError - Snap-specific Sentry transport.
26
+ * @param options.normalizeErrorFn - Optional error normalizer; defaults to {@link normalizeError}.
27
+ * @returns A function that catches errors, tracks them, logs, and rethrows as Snap RPC errors.
28
+ */
29
+ function createWithCatchAndThrowSnapError({ logError, trackError, normalizeErrorFn = normalizeError, }) {
30
+ return (fn, logErrorOverride) => withCatchAndThrowSnapErrorHandler(logErrorOverride ?? logError, trackError, normalizeErrorFn, fn);
31
+ }
32
+ async function withCatchAndThrowSnapErrorHandler(logError, trackError, normalizeErrorFn, fn) {
33
+ try {
34
+ return await fn();
35
+ }
36
+ catch (unknownError) {
37
+ await trackError(unknownError);
38
+ const error = normalizeErrorFn(unknownError);
39
+ logError({ error }, `[SnapError] ${JSON.stringify(error.toJSON(), null, 2)}`);
40
+ // eslint-disable-next-line @typescript-eslint/only-throw-error -- Snap RPC errors are the handler boundary surface
41
+ throw error;
42
+ }
43
+ }
44
+ //# sourceMappingURL=errors.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.cjs","sourceRoot":"","sources":["../../../src/utils/errors/errors.ts"],"names":[],"mappings":";;AAyBA,wCAIC;AAmBD,4EAkBC;AAlED,mDAAiE;AAGjE,qDAAgD;AAchD;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,KAAc;IAC3C,OAAO,IAAA,6BAAc,EAAC,KAAK,CAAC;QAC1B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,qBAAS,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,2BAAe,EAAC,KAAK,CAAC,CAAC,CAAC;AAC7E,CAAC;AAUD;;;;;;;;GAQG;AACH,SAAgB,gCAAgC,CAAC,EAC/C,QAAQ,EACR,UAAU,EACV,gBAAgB,GAAG,cAAc,GACO;IAIxC,OAAO,CACL,EAA4B,EAC5B,gBAA6B,EACT,EAAE,CACtB,iCAAiC,CAC/B,gBAAgB,IAAI,QAAQ,EAC5B,UAAU,EACV,gBAAgB,EAChB,EAAE,CACH,CAAC;AACN,CAAC;AAED,KAAK,UAAU,iCAAiC,CAC9C,QAAoB,EACpB,UAAwB,EACxB,gBAAkC,EAClC,EAA4B;IAE5B,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACtB,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;QAE/B,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE7C,QAAQ,CACN,EAAE,KAAK,EAAE,EACT,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CACzD,CAAC;QAEF,mHAAmH;QACnH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import { SnapError, getErrorMessage } from '@metamask/snaps-sdk';\n\nimport type { Logger } from '../logger/Logger';\nimport { isSnapRpcError } from './snapRpcError';\nimport type { SnapRpcError } from './snapRpcError';\n\n/**\n * Sends an error to the snap's tracking transport (e.g. `snap_trackError`).\n * Whether to invoke this for a given error in a given context is the caller's decision.\n */\nexport type TrackErrorFn = (error: unknown) => Promise<string | undefined>;\n\n/**\n * Converts a caught value into an error suitable for Snap RPC responses.\n */\nexport type NormalizeErrorFn = (error: unknown) => SnapRpcError;\n\n/**\n * Normalizes an unknown caught value into a Snap RPC error.\n *\n * Preserves existing Snap RPC errors; otherwise wraps the value in {@link SnapError}.\n *\n * @param error - The caught value.\n * @returns A Snap RPC error.\n */\nexport function normalizeError(error: unknown): SnapRpcError {\n return isSnapRpcError(error)\n ? error\n : new SnapError(error instanceof Error ? error : getErrorMessage(error));\n}\n\nexport type LogErrorFn = Logger['error'];\n\nexport type CreateWithCatchAndThrowSnapErrorOptions = {\n logError: LogErrorFn;\n trackError: TrackErrorFn;\n normalizeErrorFn?: NormalizeErrorFn;\n};\n\n/**\n * Creates a handler-boundary error wrapper wired with logger, tracking, and optional error normalization.\n *\n * @param options - Logger, error-tracking transport, and optional custom normalizer.\n * @param options.logError - Logger method used to record the normalized error.\n * @param options.trackError - Snap-specific Sentry transport.\n * @param options.normalizeErrorFn - Optional error normalizer; defaults to {@link normalizeError}.\n * @returns A function that catches errors, tracks them, logs, and rethrows as Snap RPC errors.\n */\nexport function createWithCatchAndThrowSnapError({\n logError,\n trackError,\n normalizeErrorFn = normalizeError,\n}: CreateWithCatchAndThrowSnapErrorOptions): <ResponseT>(\n fn: () => Promise<ResponseT>,\n logErrorOverride?: LogErrorFn,\n) => Promise<ResponseT> {\n return <ResponseT>(\n fn: () => Promise<ResponseT>,\n logErrorOverride?: LogErrorFn,\n ): Promise<ResponseT> =>\n withCatchAndThrowSnapErrorHandler(\n logErrorOverride ?? logError,\n trackError,\n normalizeErrorFn,\n fn,\n );\n}\n\nasync function withCatchAndThrowSnapErrorHandler<ResponseT>(\n logError: LogErrorFn,\n trackError: TrackErrorFn,\n normalizeErrorFn: NormalizeErrorFn,\n fn: () => Promise<ResponseT>,\n): Promise<ResponseT> {\n try {\n return await fn();\n } catch (unknownError) {\n await trackError(unknownError);\n\n const error = normalizeErrorFn(unknownError);\n\n logError(\n { error },\n `[SnapError] ${JSON.stringify(error.toJSON(), null, 2)}`,\n );\n\n // eslint-disable-next-line @typescript-eslint/only-throw-error -- Snap RPC errors are the handler boundary surface\n throw error;\n }\n}\n"]}
@@ -0,0 +1,37 @@
1
+ import type { Logger } from "../logger/Logger.cjs";
2
+ import type { SnapRpcError } from "./snapRpcError.cjs";
3
+ /**
4
+ * Sends an error to the snap's tracking transport (e.g. `snap_trackError`).
5
+ * Whether to invoke this for a given error in a given context is the caller's decision.
6
+ */
7
+ export type TrackErrorFn = (error: unknown) => Promise<string | undefined>;
8
+ /**
9
+ * Converts a caught value into an error suitable for Snap RPC responses.
10
+ */
11
+ export type NormalizeErrorFn = (error: unknown) => SnapRpcError;
12
+ /**
13
+ * Normalizes an unknown caught value into a Snap RPC error.
14
+ *
15
+ * Preserves existing Snap RPC errors; otherwise wraps the value in {@link SnapError}.
16
+ *
17
+ * @param error - The caught value.
18
+ * @returns A Snap RPC error.
19
+ */
20
+ export declare function normalizeError(error: unknown): SnapRpcError;
21
+ export type LogErrorFn = Logger['error'];
22
+ export type CreateWithCatchAndThrowSnapErrorOptions = {
23
+ logError: LogErrorFn;
24
+ trackError: TrackErrorFn;
25
+ normalizeErrorFn?: NormalizeErrorFn;
26
+ };
27
+ /**
28
+ * Creates a handler-boundary error wrapper wired with logger, tracking, and optional error normalization.
29
+ *
30
+ * @param options - Logger, error-tracking transport, and optional custom normalizer.
31
+ * @param options.logError - Logger method used to record the normalized error.
32
+ * @param options.trackError - Snap-specific Sentry transport.
33
+ * @param options.normalizeErrorFn - Optional error normalizer; defaults to {@link normalizeError}.
34
+ * @returns A function that catches errors, tracks them, logs, and rethrows as Snap RPC errors.
35
+ */
36
+ export declare function createWithCatchAndThrowSnapError({ logError, trackError, normalizeErrorFn, }: CreateWithCatchAndThrowSnapErrorOptions): <ResponseT>(fn: () => Promise<ResponseT>, logErrorOverride?: LogErrorFn) => Promise<ResponseT>;
37
+ //# sourceMappingURL=errors.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.cts","sourceRoot":"","sources":["../../../src/utils/errors/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,6BAAyB;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,2BAAuB;AAEnD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,YAAY,CAAC;AAEhE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAI3D;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAEzC,MAAM,MAAM,uCAAuC,GAAG;IACpD,QAAQ,EAAE,UAAU,CAAC;IACrB,UAAU,EAAE,YAAY,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAAC,EAC/C,QAAQ,EACR,UAAU,EACV,gBAAiC,GAClC,EAAE,uCAAuC,GAAG,CAAC,SAAS,EACrD,EAAE,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,EAC5B,gBAAgB,CAAC,EAAE,UAAU,KAC1B,OAAO,CAAC,SAAS,CAAC,CAWtB"}
@@ -0,0 +1,37 @@
1
+ import type { Logger } from "../logger/Logger.mjs";
2
+ import type { SnapRpcError } from "./snapRpcError.mjs";
3
+ /**
4
+ * Sends an error to the snap's tracking transport (e.g. `snap_trackError`).
5
+ * Whether to invoke this for a given error in a given context is the caller's decision.
6
+ */
7
+ export type TrackErrorFn = (error: unknown) => Promise<string | undefined>;
8
+ /**
9
+ * Converts a caught value into an error suitable for Snap RPC responses.
10
+ */
11
+ export type NormalizeErrorFn = (error: unknown) => SnapRpcError;
12
+ /**
13
+ * Normalizes an unknown caught value into a Snap RPC error.
14
+ *
15
+ * Preserves existing Snap RPC errors; otherwise wraps the value in {@link SnapError}.
16
+ *
17
+ * @param error - The caught value.
18
+ * @returns A Snap RPC error.
19
+ */
20
+ export declare function normalizeError(error: unknown): SnapRpcError;
21
+ export type LogErrorFn = Logger['error'];
22
+ export type CreateWithCatchAndThrowSnapErrorOptions = {
23
+ logError: LogErrorFn;
24
+ trackError: TrackErrorFn;
25
+ normalizeErrorFn?: NormalizeErrorFn;
26
+ };
27
+ /**
28
+ * Creates a handler-boundary error wrapper wired with logger, tracking, and optional error normalization.
29
+ *
30
+ * @param options - Logger, error-tracking transport, and optional custom normalizer.
31
+ * @param options.logError - Logger method used to record the normalized error.
32
+ * @param options.trackError - Snap-specific Sentry transport.
33
+ * @param options.normalizeErrorFn - Optional error normalizer; defaults to {@link normalizeError}.
34
+ * @returns A function that catches errors, tracks them, logs, and rethrows as Snap RPC errors.
35
+ */
36
+ export declare function createWithCatchAndThrowSnapError({ logError, trackError, normalizeErrorFn, }: CreateWithCatchAndThrowSnapErrorOptions): <ResponseT>(fn: () => Promise<ResponseT>, logErrorOverride?: LogErrorFn) => Promise<ResponseT>;
37
+ //# sourceMappingURL=errors.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.mts","sourceRoot":"","sources":["../../../src/utils/errors/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,6BAAyB;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,2BAAuB;AAEnD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,YAAY,CAAC;AAEhE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAI3D;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAEzC,MAAM,MAAM,uCAAuC,GAAG;IACpD,QAAQ,EAAE,UAAU,CAAC;IACrB,UAAU,EAAE,YAAY,CAAC;IACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAAC,EAC/C,QAAQ,EACR,UAAU,EACV,gBAAiC,GAClC,EAAE,uCAAuC,GAAG,CAAC,SAAS,EACrD,EAAE,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,EAC5B,gBAAgB,CAAC,EAAE,UAAU,KAC1B,OAAO,CAAC,SAAS,CAAC,CAWtB"}
@@ -0,0 +1,40 @@
1
+ import { SnapError, getErrorMessage } from "@metamask/snaps-sdk";
2
+ import { isSnapRpcError } from "./snapRpcError.mjs";
3
+ /**
4
+ * Normalizes an unknown caught value into a Snap RPC error.
5
+ *
6
+ * Preserves existing Snap RPC errors; otherwise wraps the value in {@link SnapError}.
7
+ *
8
+ * @param error - The caught value.
9
+ * @returns A Snap RPC error.
10
+ */
11
+ export function normalizeError(error) {
12
+ return isSnapRpcError(error)
13
+ ? error
14
+ : new SnapError(error instanceof Error ? error : getErrorMessage(error));
15
+ }
16
+ /**
17
+ * Creates a handler-boundary error wrapper wired with logger, tracking, and optional error normalization.
18
+ *
19
+ * @param options - Logger, error-tracking transport, and optional custom normalizer.
20
+ * @param options.logError - Logger method used to record the normalized error.
21
+ * @param options.trackError - Snap-specific Sentry transport.
22
+ * @param options.normalizeErrorFn - Optional error normalizer; defaults to {@link normalizeError}.
23
+ * @returns A function that catches errors, tracks them, logs, and rethrows as Snap RPC errors.
24
+ */
25
+ export function createWithCatchAndThrowSnapError({ logError, trackError, normalizeErrorFn = normalizeError, }) {
26
+ return (fn, logErrorOverride) => withCatchAndThrowSnapErrorHandler(logErrorOverride ?? logError, trackError, normalizeErrorFn, fn);
27
+ }
28
+ async function withCatchAndThrowSnapErrorHandler(logError, trackError, normalizeErrorFn, fn) {
29
+ try {
30
+ return await fn();
31
+ }
32
+ catch (unknownError) {
33
+ await trackError(unknownError);
34
+ const error = normalizeErrorFn(unknownError);
35
+ logError({ error }, `[SnapError] ${JSON.stringify(error.toJSON(), null, 2)}`);
36
+ // eslint-disable-next-line @typescript-eslint/only-throw-error -- Snap RPC errors are the handler boundary surface
37
+ throw error;
38
+ }
39
+ }
40
+ //# sourceMappingURL=errors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.mjs","sourceRoot":"","sources":["../../../src/utils/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,4BAA4B;AAGjE,OAAO,EAAE,cAAc,EAAE,2BAAuB;AAchD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,cAAc,CAAC,KAAK,CAAC;QAC1B,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7E,CAAC;AAUD;;;;;;;;GAQG;AACH,MAAM,UAAU,gCAAgC,CAAC,EAC/C,QAAQ,EACR,UAAU,EACV,gBAAgB,GAAG,cAAc,GACO;IAIxC,OAAO,CACL,EAA4B,EAC5B,gBAA6B,EACT,EAAE,CACtB,iCAAiC,CAC/B,gBAAgB,IAAI,QAAQ,EAC5B,UAAU,EACV,gBAAgB,EAChB,EAAE,CACH,CAAC;AACN,CAAC;AAED,KAAK,UAAU,iCAAiC,CAC9C,QAAoB,EACpB,UAAwB,EACxB,gBAAkC,EAClC,EAA4B;IAE5B,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACtB,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;QAE/B,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE7C,QAAQ,CACN,EAAE,KAAK,EAAE,EACT,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CACzD,CAAC;QAEF,mHAAmH;QACnH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import { SnapError, getErrorMessage } from '@metamask/snaps-sdk';\n\nimport type { Logger } from '../logger/Logger';\nimport { isSnapRpcError } from './snapRpcError';\nimport type { SnapRpcError } from './snapRpcError';\n\n/**\n * Sends an error to the snap's tracking transport (e.g. `snap_trackError`).\n * Whether to invoke this for a given error in a given context is the caller's decision.\n */\nexport type TrackErrorFn = (error: unknown) => Promise<string | undefined>;\n\n/**\n * Converts a caught value into an error suitable for Snap RPC responses.\n */\nexport type NormalizeErrorFn = (error: unknown) => SnapRpcError;\n\n/**\n * Normalizes an unknown caught value into a Snap RPC error.\n *\n * Preserves existing Snap RPC errors; otherwise wraps the value in {@link SnapError}.\n *\n * @param error - The caught value.\n * @returns A Snap RPC error.\n */\nexport function normalizeError(error: unknown): SnapRpcError {\n return isSnapRpcError(error)\n ? error\n : new SnapError(error instanceof Error ? error : getErrorMessage(error));\n}\n\nexport type LogErrorFn = Logger['error'];\n\nexport type CreateWithCatchAndThrowSnapErrorOptions = {\n logError: LogErrorFn;\n trackError: TrackErrorFn;\n normalizeErrorFn?: NormalizeErrorFn;\n};\n\n/**\n * Creates a handler-boundary error wrapper wired with logger, tracking, and optional error normalization.\n *\n * @param options - Logger, error-tracking transport, and optional custom normalizer.\n * @param options.logError - Logger method used to record the normalized error.\n * @param options.trackError - Snap-specific Sentry transport.\n * @param options.normalizeErrorFn - Optional error normalizer; defaults to {@link normalizeError}.\n * @returns A function that catches errors, tracks them, logs, and rethrows as Snap RPC errors.\n */\nexport function createWithCatchAndThrowSnapError({\n logError,\n trackError,\n normalizeErrorFn = normalizeError,\n}: CreateWithCatchAndThrowSnapErrorOptions): <ResponseT>(\n fn: () => Promise<ResponseT>,\n logErrorOverride?: LogErrorFn,\n) => Promise<ResponseT> {\n return <ResponseT>(\n fn: () => Promise<ResponseT>,\n logErrorOverride?: LogErrorFn,\n ): Promise<ResponseT> =>\n withCatchAndThrowSnapErrorHandler(\n logErrorOverride ?? logError,\n trackError,\n normalizeErrorFn,\n fn,\n );\n}\n\nasync function withCatchAndThrowSnapErrorHandler<ResponseT>(\n logError: LogErrorFn,\n trackError: TrackErrorFn,\n normalizeErrorFn: NormalizeErrorFn,\n fn: () => Promise<ResponseT>,\n): Promise<ResponseT> {\n try {\n return await fn();\n } catch (unknownError) {\n await trackError(unknownError);\n\n const error = normalizeErrorFn(unknownError);\n\n logError(\n { error },\n `[SnapError] ${JSON.stringify(error.toJSON(), null, 2)}`,\n );\n\n // eslint-disable-next-line @typescript-eslint/only-throw-error -- Snap RPC errors are the handler boundary surface\n throw error;\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSnapRpcError = exports.normalizeError = exports.createWithCatchAndThrowSnapError = exports.createTrackError = exports.createSnapErrorHandling = void 0;
4
+ var trackError_1 = require("./trackError.cjs");
5
+ Object.defineProperty(exports, "createSnapErrorHandling", { enumerable: true, get: function () { return trackError_1.createSnapErrorHandling; } });
6
+ Object.defineProperty(exports, "createTrackError", { enumerable: true, get: function () { return trackError_1.createTrackError; } });
7
+ var errors_1 = require("./errors.cjs");
8
+ Object.defineProperty(exports, "createWithCatchAndThrowSnapError", { enumerable: true, get: function () { return errors_1.createWithCatchAndThrowSnapError; } });
9
+ Object.defineProperty(exports, "normalizeError", { enumerable: true, get: function () { return errors_1.normalizeError; } });
10
+ var snapRpcError_1 = require("./snapRpcError.cjs");
11
+ Object.defineProperty(exports, "isSnapRpcError", { enumerable: true, get: function () { return snapRpcError_1.isSnapRpcError; } });
12
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../src/utils/errors/index.ts"],"names":[],"mappings":";;;AAAA,+CAAyE;AAAhE,qHAAA,uBAAuB,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAClD,uCAA4E;AAAnE,0HAAA,gCAAgC,OAAA;AAAE,wGAAA,cAAc,OAAA;AACzD,mDAAgD;AAAvC,8GAAA,cAAc,OAAA","sourcesContent":["export { createSnapErrorHandling, createTrackError } from './trackError';\nexport { createWithCatchAndThrowSnapError, normalizeError } from './errors';\nexport { isSnapRpcError } from './snapRpcError';\nexport type {\n CreateSnapErrorHandlingOptions,\n CreateTrackErrorOptions,\n PrepareErrorForTrackingFn,\n ShouldTrackErrorFn,\n SnapTrackErrorRequest,\n TrackErrorCapableProvider,\n} from './trackError';\nexport type {\n CreateWithCatchAndThrowSnapErrorOptions,\n LogErrorFn,\n NormalizeErrorFn,\n TrackErrorFn,\n} from './errors';\nexport type { SnapRpcError } from './snapRpcError';\n"]}
@@ -0,0 +1,7 @@
1
+ export { createSnapErrorHandling, createTrackError } from "./trackError.cjs";
2
+ export { createWithCatchAndThrowSnapError, normalizeError } from "./errors.cjs";
3
+ export { isSnapRpcError } from "./snapRpcError.cjs";
4
+ export type { CreateSnapErrorHandlingOptions, CreateTrackErrorOptions, PrepareErrorForTrackingFn, ShouldTrackErrorFn, SnapTrackErrorRequest, TrackErrorCapableProvider, } from "./trackError.cjs";
5
+ export type { CreateWithCatchAndThrowSnapErrorOptions, LogErrorFn, NormalizeErrorFn, TrackErrorFn, } from "./errors.cjs";
6
+ export type { SnapRpcError } from "./snapRpcError.cjs";
7
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/utils/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,yBAAqB;AACzE,OAAO,EAAE,gCAAgC,EAAE,cAAc,EAAE,qBAAiB;AAC5E,OAAO,EAAE,cAAc,EAAE,2BAAuB;AAChD,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,GAC1B,yBAAqB;AACtB,YAAY,EACV,uCAAuC,EACvC,UAAU,EACV,gBAAgB,EAChB,YAAY,GACb,qBAAiB;AAClB,YAAY,EAAE,YAAY,EAAE,2BAAuB"}
@@ -0,0 +1,7 @@
1
+ export { createSnapErrorHandling, createTrackError } from "./trackError.mjs";
2
+ export { createWithCatchAndThrowSnapError, normalizeError } from "./errors.mjs";
3
+ export { isSnapRpcError } from "./snapRpcError.mjs";
4
+ export type { CreateSnapErrorHandlingOptions, CreateTrackErrorOptions, PrepareErrorForTrackingFn, ShouldTrackErrorFn, SnapTrackErrorRequest, TrackErrorCapableProvider, } from "./trackError.mjs";
5
+ export type { CreateWithCatchAndThrowSnapErrorOptions, LogErrorFn, NormalizeErrorFn, TrackErrorFn, } from "./errors.mjs";
6
+ export type { SnapRpcError } from "./snapRpcError.mjs";
7
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/utils/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,yBAAqB;AACzE,OAAO,EAAE,gCAAgC,EAAE,cAAc,EAAE,qBAAiB;AAC5E,OAAO,EAAE,cAAc,EAAE,2BAAuB;AAChD,YAAY,EACV,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,GAC1B,yBAAqB;AACtB,YAAY,EACV,uCAAuC,EACvC,UAAU,EACV,gBAAgB,EAChB,YAAY,GACb,qBAAiB;AAClB,YAAY,EAAE,YAAY,EAAE,2BAAuB"}
@@ -0,0 +1,4 @@
1
+ export { createSnapErrorHandling, createTrackError } from "./trackError.mjs";
2
+ export { createWithCatchAndThrowSnapError, normalizeError } from "./errors.mjs";
3
+ export { isSnapRpcError } from "./snapRpcError.mjs";
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/utils/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,yBAAqB;AACzE,OAAO,EAAE,gCAAgC,EAAE,cAAc,EAAE,qBAAiB;AAC5E,OAAO,EAAE,cAAc,EAAE,2BAAuB","sourcesContent":["export { createSnapErrorHandling, createTrackError } from './trackError';\nexport { createWithCatchAndThrowSnapError, normalizeError } from './errors';\nexport { isSnapRpcError } from './snapRpcError';\nexport type {\n CreateSnapErrorHandlingOptions,\n CreateTrackErrorOptions,\n PrepareErrorForTrackingFn,\n ShouldTrackErrorFn,\n SnapTrackErrorRequest,\n TrackErrorCapableProvider,\n} from './trackError';\nexport type {\n CreateWithCatchAndThrowSnapErrorOptions,\n LogErrorFn,\n NormalizeErrorFn,\n TrackErrorFn,\n} from './errors';\nexport type { SnapRpcError } from './snapRpcError';\n"]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSnapRpcError = isSnapRpcError;
4
+ const snaps_sdk_1 = require("@metamask/snaps-sdk");
5
+ const SNAP_RPC_ERROR_TYPES = [
6
+ snaps_sdk_1.SnapError,
7
+ snaps_sdk_1.MethodNotFoundError,
8
+ snaps_sdk_1.UserRejectedRequestError,
9
+ snaps_sdk_1.MethodNotSupportedError,
10
+ snaps_sdk_1.ParseError,
11
+ snaps_sdk_1.ResourceNotFoundError,
12
+ snaps_sdk_1.ResourceUnavailableError,
13
+ snaps_sdk_1.TransactionRejected,
14
+ snaps_sdk_1.ChainDisconnectedError,
15
+ snaps_sdk_1.DisconnectedError,
16
+ snaps_sdk_1.UnauthorizedError,
17
+ snaps_sdk_1.UnsupportedMethodError,
18
+ snaps_sdk_1.InternalError,
19
+ snaps_sdk_1.InvalidInputError,
20
+ snaps_sdk_1.InvalidParamsError,
21
+ snaps_sdk_1.InvalidRequestError,
22
+ snaps_sdk_1.LimitExceededError,
23
+ ];
24
+ /**
25
+ * Determines if the given error is a Snap RPC error.
26
+ *
27
+ * @param error - The error instance to be checked.
28
+ * @returns A boolean indicating whether the error is a Snap RPC error.
29
+ */
30
+ function isSnapRpcError(error) {
31
+ return SNAP_RPC_ERROR_TYPES.some((errType) => error instanceof errType);
32
+ }
33
+ //# sourceMappingURL=snapRpcError.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapRpcError.cjs","sourceRoot":"","sources":["../../../src/utils/errors/snapRpcError.ts"],"names":[],"mappings":";;AAkEA,wCAEC;AApED,mDAkB6B;AAsB7B,MAAM,oBAAoB,GAAG;IAC3B,qBAAS;IACT,+BAAmB;IACnB,oCAAwB;IACxB,mCAAuB;IACvB,sBAAU;IACV,iCAAqB;IACrB,oCAAwB;IACxB,+BAAmB;IACnB,kCAAsB;IACtB,6BAAiB;IACjB,6BAAiB;IACjB,kCAAsB;IACtB,yBAAa;IACb,6BAAiB;IACjB,8BAAkB;IAClB,+BAAmB;IACnB,8BAAkB;CACV,CAAC;AAEX;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,KAAsB;IACnD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,YAAY,OAAO,CAAC,CAAC;AAC1E,CAAC","sourcesContent":["import {\n MethodNotFoundError,\n ParseError,\n ResourceNotFoundError,\n ResourceUnavailableError,\n ChainDisconnectedError,\n TransactionRejected,\n DisconnectedError,\n InternalError,\n UnauthorizedError,\n UnsupportedMethodError,\n InvalidInputError,\n InvalidParamsError,\n InvalidRequestError,\n LimitExceededError,\n SnapError,\n MethodNotSupportedError,\n UserRejectedRequestError,\n} from '@metamask/snaps-sdk';\n\n/** Union of Snap RPC error instance types (for type narrowing). */\nexport type SnapRpcError =\n | InstanceType<typeof SnapError>\n | InstanceType<typeof MethodNotFoundError>\n | InstanceType<typeof UserRejectedRequestError>\n | InstanceType<typeof MethodNotSupportedError>\n | InstanceType<typeof ParseError>\n | InstanceType<typeof ResourceNotFoundError>\n | InstanceType<typeof ResourceUnavailableError>\n | InstanceType<typeof TransactionRejected>\n | InstanceType<typeof ChainDisconnectedError>\n | InstanceType<typeof DisconnectedError>\n | InstanceType<typeof UnauthorizedError>\n | InstanceType<typeof UnsupportedMethodError>\n | InstanceType<typeof InternalError>\n | InstanceType<typeof InvalidInputError>\n | InstanceType<typeof InvalidParamsError>\n | InstanceType<typeof InvalidRequestError>\n | InstanceType<typeof LimitExceededError>;\n\nconst SNAP_RPC_ERROR_TYPES = [\n SnapError,\n MethodNotFoundError,\n UserRejectedRequestError,\n MethodNotSupportedError,\n ParseError,\n ResourceNotFoundError,\n ResourceUnavailableError,\n TransactionRejected,\n ChainDisconnectedError,\n DisconnectedError,\n UnauthorizedError,\n UnsupportedMethodError,\n InternalError,\n InvalidInputError,\n InvalidParamsError,\n InvalidRequestError,\n LimitExceededError,\n] as const;\n\n/**\n * Determines if the given error is a Snap RPC error.\n *\n * @param error - The error instance to be checked.\n * @returns A boolean indicating whether the error is a Snap RPC error.\n */\nexport function isSnapRpcError(error: Error | unknown): error is SnapRpcError {\n return SNAP_RPC_ERROR_TYPES.some((errType) => error instanceof errType);\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { MethodNotFoundError, ParseError, ResourceNotFoundError, ResourceUnavailableError, ChainDisconnectedError, TransactionRejected, DisconnectedError, InternalError, UnauthorizedError, UnsupportedMethodError, InvalidInputError, InvalidParamsError, InvalidRequestError, LimitExceededError, SnapError, MethodNotSupportedError, UserRejectedRequestError } from "@metamask/snaps-sdk";
2
+ /** Union of Snap RPC error instance types (for type narrowing). */
3
+ export type SnapRpcError = InstanceType<typeof SnapError> | InstanceType<typeof MethodNotFoundError> | InstanceType<typeof UserRejectedRequestError> | InstanceType<typeof MethodNotSupportedError> | InstanceType<typeof ParseError> | InstanceType<typeof ResourceNotFoundError> | InstanceType<typeof ResourceUnavailableError> | InstanceType<typeof TransactionRejected> | InstanceType<typeof ChainDisconnectedError> | InstanceType<typeof DisconnectedError> | InstanceType<typeof UnauthorizedError> | InstanceType<typeof UnsupportedMethodError> | InstanceType<typeof InternalError> | InstanceType<typeof InvalidInputError> | InstanceType<typeof InvalidParamsError> | InstanceType<typeof InvalidRequestError> | InstanceType<typeof LimitExceededError>;
4
+ /**
5
+ * Determines if the given error is a Snap RPC error.
6
+ *
7
+ * @param error - The error instance to be checked.
8
+ * @returns A boolean indicating whether the error is a Snap RPC error.
9
+ */
10
+ export declare function isSnapRpcError(error: Error | unknown): error is SnapRpcError;
11
+ //# sourceMappingURL=snapRpcError.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapRpcError.d.cts","sourceRoot":"","sources":["../../../src/utils/errors/snapRpcError.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,uBAAuB,EACvB,wBAAwB,EACzB,4BAA4B;AAE7B,mEAAmE;AACnE,MAAM,MAAM,YAAY,GACpB,YAAY,CAAC,OAAO,SAAS,CAAC,GAC9B,YAAY,CAAC,OAAO,mBAAmB,CAAC,GACxC,YAAY,CAAC,OAAO,wBAAwB,CAAC,GAC7C,YAAY,CAAC,OAAO,uBAAuB,CAAC,GAC5C,YAAY,CAAC,OAAO,UAAU,CAAC,GAC/B,YAAY,CAAC,OAAO,qBAAqB,CAAC,GAC1C,YAAY,CAAC,OAAO,wBAAwB,CAAC,GAC7C,YAAY,CAAC,OAAO,mBAAmB,CAAC,GACxC,YAAY,CAAC,OAAO,sBAAsB,CAAC,GAC3C,YAAY,CAAC,OAAO,iBAAiB,CAAC,GACtC,YAAY,CAAC,OAAO,iBAAiB,CAAC,GACtC,YAAY,CAAC,OAAO,sBAAsB,CAAC,GAC3C,YAAY,CAAC,OAAO,aAAa,CAAC,GAClC,YAAY,CAAC,OAAO,iBAAiB,CAAC,GACtC,YAAY,CAAC,OAAO,kBAAkB,CAAC,GACvC,YAAY,CAAC,OAAO,mBAAmB,CAAC,GACxC,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAsB5C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,IAAI,YAAY,CAE5E"}
@@ -0,0 +1,11 @@
1
+ import { MethodNotFoundError, ParseError, ResourceNotFoundError, ResourceUnavailableError, ChainDisconnectedError, TransactionRejected, DisconnectedError, InternalError, UnauthorizedError, UnsupportedMethodError, InvalidInputError, InvalidParamsError, InvalidRequestError, LimitExceededError, SnapError, MethodNotSupportedError, UserRejectedRequestError } from "@metamask/snaps-sdk";
2
+ /** Union of Snap RPC error instance types (for type narrowing). */
3
+ export type SnapRpcError = InstanceType<typeof SnapError> | InstanceType<typeof MethodNotFoundError> | InstanceType<typeof UserRejectedRequestError> | InstanceType<typeof MethodNotSupportedError> | InstanceType<typeof ParseError> | InstanceType<typeof ResourceNotFoundError> | InstanceType<typeof ResourceUnavailableError> | InstanceType<typeof TransactionRejected> | InstanceType<typeof ChainDisconnectedError> | InstanceType<typeof DisconnectedError> | InstanceType<typeof UnauthorizedError> | InstanceType<typeof UnsupportedMethodError> | InstanceType<typeof InternalError> | InstanceType<typeof InvalidInputError> | InstanceType<typeof InvalidParamsError> | InstanceType<typeof InvalidRequestError> | InstanceType<typeof LimitExceededError>;
4
+ /**
5
+ * Determines if the given error is a Snap RPC error.
6
+ *
7
+ * @param error - The error instance to be checked.
8
+ * @returns A boolean indicating whether the error is a Snap RPC error.
9
+ */
10
+ export declare function isSnapRpcError(error: Error | unknown): error is SnapRpcError;
11
+ //# sourceMappingURL=snapRpcError.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapRpcError.d.mts","sourceRoot":"","sources":["../../../src/utils/errors/snapRpcError.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,uBAAuB,EACvB,wBAAwB,EACzB,4BAA4B;AAE7B,mEAAmE;AACnE,MAAM,MAAM,YAAY,GACpB,YAAY,CAAC,OAAO,SAAS,CAAC,GAC9B,YAAY,CAAC,OAAO,mBAAmB,CAAC,GACxC,YAAY,CAAC,OAAO,wBAAwB,CAAC,GAC7C,YAAY,CAAC,OAAO,uBAAuB,CAAC,GAC5C,YAAY,CAAC,OAAO,UAAU,CAAC,GAC/B,YAAY,CAAC,OAAO,qBAAqB,CAAC,GAC1C,YAAY,CAAC,OAAO,wBAAwB,CAAC,GAC7C,YAAY,CAAC,OAAO,mBAAmB,CAAC,GACxC,YAAY,CAAC,OAAO,sBAAsB,CAAC,GAC3C,YAAY,CAAC,OAAO,iBAAiB,CAAC,GACtC,YAAY,CAAC,OAAO,iBAAiB,CAAC,GACtC,YAAY,CAAC,OAAO,sBAAsB,CAAC,GAC3C,YAAY,CAAC,OAAO,aAAa,CAAC,GAClC,YAAY,CAAC,OAAO,iBAAiB,CAAC,GACtC,YAAY,CAAC,OAAO,kBAAkB,CAAC,GACvC,YAAY,CAAC,OAAO,mBAAmB,CAAC,GACxC,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAsB5C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,IAAI,YAAY,CAE5E"}
@@ -0,0 +1,30 @@
1
+ import { MethodNotFoundError, ParseError, ResourceNotFoundError, ResourceUnavailableError, ChainDisconnectedError, TransactionRejected, DisconnectedError, InternalError, UnauthorizedError, UnsupportedMethodError, InvalidInputError, InvalidParamsError, InvalidRequestError, LimitExceededError, SnapError, MethodNotSupportedError, UserRejectedRequestError } from "@metamask/snaps-sdk";
2
+ const SNAP_RPC_ERROR_TYPES = [
3
+ SnapError,
4
+ MethodNotFoundError,
5
+ UserRejectedRequestError,
6
+ MethodNotSupportedError,
7
+ ParseError,
8
+ ResourceNotFoundError,
9
+ ResourceUnavailableError,
10
+ TransactionRejected,
11
+ ChainDisconnectedError,
12
+ DisconnectedError,
13
+ UnauthorizedError,
14
+ UnsupportedMethodError,
15
+ InternalError,
16
+ InvalidInputError,
17
+ InvalidParamsError,
18
+ InvalidRequestError,
19
+ LimitExceededError,
20
+ ];
21
+ /**
22
+ * Determines if the given error is a Snap RPC error.
23
+ *
24
+ * @param error - The error instance to be checked.
25
+ * @returns A boolean indicating whether the error is a Snap RPC error.
26
+ */
27
+ export function isSnapRpcError(error) {
28
+ return SNAP_RPC_ERROR_TYPES.some((errType) => error instanceof errType);
29
+ }
30
+ //# sourceMappingURL=snapRpcError.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapRpcError.mjs","sourceRoot":"","sources":["../../../src/utils/errors/snapRpcError.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,uBAAuB,EACvB,wBAAwB,EACzB,4BAA4B;AAsB7B,MAAM,oBAAoB,GAAG;IAC3B,SAAS;IACT,mBAAmB;IACnB,wBAAwB;IACxB,uBAAuB;IACvB,UAAU;IACV,qBAAqB;IACrB,wBAAwB;IACxB,mBAAmB;IACnB,sBAAsB;IACtB,iBAAiB;IACjB,iBAAiB;IACjB,sBAAsB;IACtB,aAAa;IACb,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,kBAAkB;CACV,CAAC;AAEX;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,YAAY,OAAO,CAAC,CAAC;AAC1E,CAAC","sourcesContent":["import {\n MethodNotFoundError,\n ParseError,\n ResourceNotFoundError,\n ResourceUnavailableError,\n ChainDisconnectedError,\n TransactionRejected,\n DisconnectedError,\n InternalError,\n UnauthorizedError,\n UnsupportedMethodError,\n InvalidInputError,\n InvalidParamsError,\n InvalidRequestError,\n LimitExceededError,\n SnapError,\n MethodNotSupportedError,\n UserRejectedRequestError,\n} from '@metamask/snaps-sdk';\n\n/** Union of Snap RPC error instance types (for type narrowing). */\nexport type SnapRpcError =\n | InstanceType<typeof SnapError>\n | InstanceType<typeof MethodNotFoundError>\n | InstanceType<typeof UserRejectedRequestError>\n | InstanceType<typeof MethodNotSupportedError>\n | InstanceType<typeof ParseError>\n | InstanceType<typeof ResourceNotFoundError>\n | InstanceType<typeof ResourceUnavailableError>\n | InstanceType<typeof TransactionRejected>\n | InstanceType<typeof ChainDisconnectedError>\n | InstanceType<typeof DisconnectedError>\n | InstanceType<typeof UnauthorizedError>\n | InstanceType<typeof UnsupportedMethodError>\n | InstanceType<typeof InternalError>\n | InstanceType<typeof InvalidInputError>\n | InstanceType<typeof InvalidParamsError>\n | InstanceType<typeof InvalidRequestError>\n | InstanceType<typeof LimitExceededError>;\n\nconst SNAP_RPC_ERROR_TYPES = [\n SnapError,\n MethodNotFoundError,\n UserRejectedRequestError,\n MethodNotSupportedError,\n ParseError,\n ResourceNotFoundError,\n ResourceUnavailableError,\n TransactionRejected,\n ChainDisconnectedError,\n DisconnectedError,\n UnauthorizedError,\n UnsupportedMethodError,\n InternalError,\n InvalidInputError,\n InvalidParamsError,\n InvalidRequestError,\n LimitExceededError,\n] as const;\n\n/**\n * Determines if the given error is a Snap RPC error.\n *\n * @param error - The error instance to be checked.\n * @returns A boolean indicating whether the error is a Snap RPC error.\n */\nexport function isSnapRpcError(error: Error | unknown): error is SnapRpcError {\n return SNAP_RPC_ERROR_TYPES.some((errType) => error instanceof errType);\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,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mockLogger = void 0;
4
+ exports.mockLogger = {
5
+ log: jest.fn(),
6
+ info: jest.fn(),
7
+ warn: jest.fn(),
8
+ error: jest.fn(),
9
+ debug: jest.fn(),
10
+ trace: jest.fn(),
11
+ withPrefix: (prefix) => createPrefixedLogger([prefix]),
12
+ };
13
+ function createPrefixedLogger(prefixes) {
14
+ return new Proxy(exports.mockLogger, {
15
+ get(target, property) {
16
+ if (property === 'withPrefix') {
17
+ return (prefix) => createPrefixedLogger([...prefixes, prefix]);
18
+ }
19
+ const method = target[property];
20
+ return typeof method === 'function'
21
+ ? (...args) => method(...prefixes, ...args)
22
+ : method;
23
+ },
24
+ });
25
+ }
26
+ //# sourceMappingURL=Logger.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.cjs","sourceRoot":"","sources":["../../../../src/utils/logger/__mocks__/Logger.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAG;IACxB,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;IACd,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;IACf,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;IACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;IAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;IAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;IAChB,UAAU,EAAE,CAAC,MAAc,EAAU,EAAE,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;CACrC,CAAC;AAEpC,SAAS,oBAAoB,CAAC,QAAkB;IAC9C,OAAO,IAAI,KAAK,CAAC,kBAAU,EAAE;QAC3B,GAAG,CAAC,MAAM,EAAE,QAAsB;YAChC,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAc,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,OAAO,MAAM,KAAK,UAAU;gBACjC,CAAC,CAAC,CAAC,GAAG,IAAe,EAAW,EAAE,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;gBAC/D,CAAC,CAAC,MAAM,CAAC;QACb,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { Logger } from '../Logger';\n\nexport const mockLogger = {\n log: jest.fn(),\n info: jest.fn(),\n warn: jest.fn(),\n error: jest.fn(),\n debug: jest.fn(),\n trace: jest.fn(),\n withPrefix: (prefix: string): Logger => createPrefixedLogger([prefix]),\n} as unknown as jest.Mocked<Logger>;\n\nfunction createPrefixedLogger(prefixes: string[]): Logger {\n return new Proxy(mockLogger, {\n get(target, property: keyof Logger): unknown {\n if (property === 'withPrefix') {\n return (prefix: string) => createPrefixedLogger([...prefixes, prefix]);\n }\n\n const method = target[property];\n return typeof method === 'function'\n ? (...args: unknown[]): unknown => method(...prefixes, ...args)\n : method;\n },\n });\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Logger } from "../Logger.cjs";
2
+ export declare const mockLogger: jest.Mocked<Logger>;
3
+ //# sourceMappingURL=Logger.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.d.cts","sourceRoot":"","sources":["../../../../src/utils/logger/__mocks__/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,sBAAkB;AAExC,eAAO,MAAM,UAAU,EAQP,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Logger } from "../Logger.mjs";
2
+ export declare const mockLogger: jest.Mocked<Logger>;
3
+ //# sourceMappingURL=Logger.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.d.mts","sourceRoot":"","sources":["../../../../src/utils/logger/__mocks__/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,sBAAkB;AAExC,eAAO,MAAM,UAAU,EAQP,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ export const mockLogger = {
2
+ log: jest.fn(),
3
+ info: jest.fn(),
4
+ warn: jest.fn(),
5
+ error: jest.fn(),
6
+ debug: jest.fn(),
7
+ trace: jest.fn(),
8
+ withPrefix: (prefix) => createPrefixedLogger([prefix]),
9
+ };
10
+ function createPrefixedLogger(prefixes) {
11
+ return new Proxy(mockLogger, {
12
+ get(target, property) {
13
+ if (property === 'withPrefix') {
14
+ return (prefix) => createPrefixedLogger([...prefixes, prefix]);
15
+ }
16
+ const method = target[property];
17
+ return typeof method === 'function'
18
+ ? (...args) => method(...prefixes, ...args)
19
+ : method;
20
+ },
21
+ });
22
+ }
23
+ //# sourceMappingURL=Logger.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.mjs","sourceRoot":"","sources":["../../../../src/utils/logger/__mocks__/Logger.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;IACd,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;IACf,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;IACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;IAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;IAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;IAChB,UAAU,EAAE,CAAC,MAAc,EAAU,EAAE,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;CACrC,CAAC;AAEpC,SAAS,oBAAoB,CAAC,QAAkB;IAC9C,OAAO,IAAI,KAAK,CAAC,UAAU,EAAE;QAC3B,GAAG,CAAC,MAAM,EAAE,QAAsB;YAChC,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAc,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,OAAO,MAAM,KAAK,UAAU;gBACjC,CAAC,CAAC,CAAC,GAAG,IAAe,EAAW,EAAE,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;gBAC/D,CAAC,CAAC,MAAM,CAAC;QACb,CAAC;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { Logger } from '../Logger';\n\nexport const mockLogger = {\n log: jest.fn(),\n info: jest.fn(),\n warn: jest.fn(),\n error: jest.fn(),\n debug: jest.fn(),\n trace: jest.fn(),\n withPrefix: (prefix: string): Logger => createPrefixedLogger([prefix]),\n} as unknown as jest.Mocked<Logger>;\n\nfunction createPrefixedLogger(prefixes: string[]): Logger {\n return new Proxy(mockLogger, {\n get(target, property: keyof Logger): unknown {\n if (property === 'withPrefix') {\n return (prefix: string) => createPrefixedLogger([...prefixes, prefix]);\n }\n\n const method = target[property];\n return typeof method === 'function'\n ? (...args: unknown[]): unknown => method(...prefixes, ...args)\n : method;\n },\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/snap-networks-utils",
3
- "version": "1.0.0-preview-623cc13",
3
+ "version": "1.0.0-preview-44f19c3d",
4
4
  "description": "Shared utilities for MetaMask network snaps",
5
5
  "keywords": [
6
6
  "Ethereum",