@metamask-previews/snap-networks-utils 1.0.0-preview-8ff90d2f → 1.0.0-preview-e00d5bb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/dist/index.cjs +19 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -10
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +13 -10
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +9 -7
- package/dist/index.mjs.map +1 -1
- package/dist/utils/async/async.cjs +95 -0
- package/dist/utils/async/async.cjs.map +1 -0
- package/dist/utils/async/async.d.cts +51 -0
- package/dist/utils/async/async.d.cts.map +1 -0
- package/dist/utils/async/async.d.mts +51 -0
- package/dist/utils/async/async.d.mts.map +1 -0
- package/dist/utils/async/async.mjs +88 -0
- package/dist/utils/async/async.mjs.map +1 -0
- package/dist/{buildUrl → utils/buildUrl}/buildUrl.cjs +1 -1
- package/dist/utils/buildUrl/buildUrl.cjs.map +1 -0
- package/dist/utils/buildUrl/buildUrl.d.cts.map +1 -0
- package/dist/utils/buildUrl/buildUrl.d.mts.map +1 -0
- package/dist/{buildUrl → utils/buildUrl}/buildUrl.mjs +1 -1
- package/dist/utils/buildUrl/buildUrl.mjs.map +1 -0
- package/dist/utils/dedupe/InFlightCoalescer.cjs.map +1 -0
- package/dist/utils/dedupe/InFlightCoalescer.d.cts.map +1 -0
- package/dist/utils/dedupe/InFlightCoalescer.d.mts.map +1 -0
- package/dist/utils/dedupe/InFlightCoalescer.mjs.map +1 -0
- package/dist/utils/logger/Logger.cjs.map +1 -0
- package/dist/utils/logger/Logger.d.cts.map +1 -0
- package/dist/utils/logger/Logger.d.mts.map +1 -0
- package/dist/utils/logger/Logger.mjs.map +1 -0
- package/dist/utils/originPermissions/createOriginPermissions.cjs.map +1 -0
- package/dist/utils/originPermissions/createOriginPermissions.d.cts.map +1 -0
- package/dist/utils/originPermissions/createOriginPermissions.d.mts.map +1 -0
- package/dist/utils/originPermissions/createOriginPermissions.mjs.map +1 -0
- package/dist/utils/originPermissions/validateOrigin.cjs.map +1 -0
- package/dist/utils/originPermissions/validateOrigin.d.cts.map +1 -0
- package/dist/utils/originPermissions/validateOrigin.d.mts.map +1 -0
- package/dist/utils/originPermissions/validateOrigin.mjs.map +1 -0
- package/dist/utils/safeMerge/safeMerge.cjs.map +1 -0
- package/dist/utils/safeMerge/safeMerge.d.cts.map +1 -0
- package/dist/utils/safeMerge/safeMerge.d.mts.map +1 -0
- package/dist/utils/safeMerge/safeMerge.mjs.map +1 -0
- package/dist/utils/sanitize/sanitize.cjs.map +1 -0
- package/dist/utils/sanitize/sanitize.d.cts.map +1 -0
- package/dist/utils/sanitize/sanitize.d.mts.map +1 -0
- package/dist/utils/sanitize/sanitize.mjs.map +1 -0
- package/dist/utils/serialization/serialization.cjs +73 -0
- package/dist/utils/serialization/serialization.cjs.map +1 -0
- package/dist/utils/serialization/serialization.d.cts +19 -0
- package/dist/utils/serialization/serialization.d.cts.map +1 -0
- package/dist/utils/serialization/serialization.d.mts +19 -0
- package/dist/utils/serialization/serialization.d.mts.map +1 -0
- package/dist/utils/serialization/serialization.mjs +69 -0
- package/dist/utils/serialization/serialization.mjs.map +1 -0
- package/dist/utils/serialization/types.cjs +3 -0
- package/dist/utils/serialization/types.cjs.map +1 -0
- package/dist/utils/serialization/types.d.cts +8 -0
- package/dist/utils/serialization/types.d.cts.map +1 -0
- package/dist/utils/serialization/types.d.mts +8 -0
- package/dist/utils/serialization/types.d.mts.map +1 -0
- package/dist/utils/serialization/types.mjs +2 -0
- package/dist/utils/serialization/types.mjs.map +1 -0
- package/dist/utils/urlStruct/urlStruct.cjs.map +1 -0
- package/dist/utils/urlStruct/urlStruct.d.cts.map +1 -0
- package/dist/utils/urlStruct/urlStruct.d.mts.map +1 -0
- package/dist/utils/urlStruct/urlStruct.mjs.map +1 -0
- package/package.json +13 -10
- package/dist/buildUrl/buildUrl.cjs.map +0 -1
- package/dist/buildUrl/buildUrl.d.cts.map +0 -1
- package/dist/buildUrl/buildUrl.d.mts.map +0 -1
- package/dist/buildUrl/buildUrl.mjs.map +0 -1
- package/dist/dedupe/InFlightCoalescer.cjs.map +0 -1
- package/dist/dedupe/InFlightCoalescer.d.cts.map +0 -1
- package/dist/dedupe/InFlightCoalescer.d.mts.map +0 -1
- package/dist/dedupe/InFlightCoalescer.mjs.map +0 -1
- package/dist/dedupe/index.cjs +0 -6
- package/dist/dedupe/index.cjs.map +0 -1
- package/dist/dedupe/index.d.cts +0 -2
- package/dist/dedupe/index.d.cts.map +0 -1
- package/dist/dedupe/index.d.mts +0 -2
- package/dist/dedupe/index.d.mts.map +0 -1
- package/dist/dedupe/index.mjs +0 -2
- package/dist/dedupe/index.mjs.map +0 -1
- package/dist/logger/Logger.cjs.map +0 -1
- package/dist/logger/Logger.d.cts.map +0 -1
- package/dist/logger/Logger.d.mts.map +0 -1
- package/dist/logger/Logger.mjs.map +0 -1
- package/dist/logger/index.cjs +0 -7
- package/dist/logger/index.cjs.map +0 -1
- package/dist/logger/index.d.cts +0 -3
- package/dist/logger/index.d.cts.map +0 -1
- package/dist/logger/index.d.mts +0 -3
- package/dist/logger/index.d.mts.map +0 -1
- package/dist/logger/index.mjs +0 -2
- package/dist/logger/index.mjs.map +0 -1
- package/dist/originPermissions/createOriginPermissions.cjs.map +0 -1
- package/dist/originPermissions/createOriginPermissions.d.cts.map +0 -1
- package/dist/originPermissions/createOriginPermissions.d.mts.map +0 -1
- package/dist/originPermissions/createOriginPermissions.mjs.map +0 -1
- package/dist/originPermissions/validateOrigin.cjs.map +0 -1
- package/dist/originPermissions/validateOrigin.d.cts.map +0 -1
- package/dist/originPermissions/validateOrigin.d.mts.map +0 -1
- package/dist/originPermissions/validateOrigin.mjs.map +0 -1
- package/dist/safeMerge/safeMerge.cjs.map +0 -1
- package/dist/safeMerge/safeMerge.d.cts.map +0 -1
- package/dist/safeMerge/safeMerge.d.mts.map +0 -1
- package/dist/safeMerge/safeMerge.mjs.map +0 -1
- package/dist/sanitize.cjs.map +0 -1
- package/dist/sanitize.d.cts.map +0 -1
- package/dist/sanitize.d.mts.map +0 -1
- package/dist/sanitize.mjs.map +0 -1
- package/dist/urlStruct/urlStruct.cjs.map +0 -1
- package/dist/urlStruct/urlStruct.d.cts.map +0 -1
- package/dist/urlStruct/urlStruct.d.mts.map +0 -1
- package/dist/urlStruct/urlStruct.mjs.map +0 -1
- /package/dist/{buildUrl → utils/buildUrl}/buildUrl.d.cts +0 -0
- /package/dist/{buildUrl → utils/buildUrl}/buildUrl.d.mts +0 -0
- /package/dist/{dedupe → utils/dedupe}/InFlightCoalescer.cjs +0 -0
- /package/dist/{dedupe → utils/dedupe}/InFlightCoalescer.d.cts +0 -0
- /package/dist/{dedupe → utils/dedupe}/InFlightCoalescer.d.mts +0 -0
- /package/dist/{dedupe → utils/dedupe}/InFlightCoalescer.mjs +0 -0
- /package/dist/{logger → utils/logger}/Logger.cjs +0 -0
- /package/dist/{logger → utils/logger}/Logger.d.cts +0 -0
- /package/dist/{logger → utils/logger}/Logger.d.mts +0 -0
- /package/dist/{logger → utils/logger}/Logger.mjs +0 -0
- /package/dist/{originPermissions → utils/originPermissions}/createOriginPermissions.cjs +0 -0
- /package/dist/{originPermissions → utils/originPermissions}/createOriginPermissions.d.cts +0 -0
- /package/dist/{originPermissions → utils/originPermissions}/createOriginPermissions.d.mts +0 -0
- /package/dist/{originPermissions → utils/originPermissions}/createOriginPermissions.mjs +0 -0
- /package/dist/{originPermissions → utils/originPermissions}/validateOrigin.cjs +0 -0
- /package/dist/{originPermissions → utils/originPermissions}/validateOrigin.d.cts +0 -0
- /package/dist/{originPermissions → utils/originPermissions}/validateOrigin.d.mts +0 -0
- /package/dist/{originPermissions → utils/originPermissions}/validateOrigin.mjs +0 -0
- /package/dist/{safeMerge → utils/safeMerge}/safeMerge.cjs +0 -0
- /package/dist/{safeMerge → utils/safeMerge}/safeMerge.d.cts +0 -0
- /package/dist/{safeMerge → utils/safeMerge}/safeMerge.d.mts +0 -0
- /package/dist/{safeMerge → utils/safeMerge}/safeMerge.mjs +0 -0
- /package/dist/{sanitize.cjs → utils/sanitize/sanitize.cjs} +0 -0
- /package/dist/{sanitize.d.cts → utils/sanitize/sanitize.d.cts} +0 -0
- /package/dist/{sanitize.d.mts → utils/sanitize/sanitize.d.mts} +0 -0
- /package/dist/{sanitize.mjs → utils/sanitize/sanitize.mjs} +0 -0
- /package/dist/{urlStruct → utils/urlStruct}/urlStruct.cjs +0 -0
- /package/dist/{urlStruct → utils/urlStruct}/urlStruct.d.cts +0 -0
- /package/dist/{urlStruct → utils/urlStruct}/urlStruct.d.mts +0 -0
- /package/dist/{urlStruct → utils/urlStruct}/urlStruct.mjs +0 -0
package/dist/dedupe/index.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/dedupe/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gCAA4B","sourcesContent":["export { InFlightCoalescer } from './InFlightCoalescer';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.cjs","sourceRoot":"","sources":["../../src/logger/Logger.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert, enums } from '@metamask/superstruct';\n\n/**\n * The severity levels supported by {@link Logger}.\n */\nexport const LogLevel = {\n SILENT: 'silent',\n ERROR: 'error',\n WARN: 'warn',\n INFO: 'info',\n DEBUG: 'debug',\n TRACE: 'trace',\n} as const;\n\nexport type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];\n\n/**\n * Defines the severity ordering used to filter log messages.\n *\n * Lower values are less verbose. Changing these numeric priorities changes\n * which messages are emitted for each configured {@link LogLevel}, including\n * in production.\n */\nconst logLevelPriority = {\n [LogLevel.SILENT]: 0,\n [LogLevel.ERROR]: 1,\n [LogLevel.WARN]: 2,\n [LogLevel.INFO]: 3,\n [LogLevel.DEBUG]: 4,\n [LogLevel.TRACE]: 5,\n};\n\nconst LogLevelStruct = enums(Object.values(LogLevel));\n\nexport type LoggerMethod = Exclude<LogLevel, typeof LogLevel.SILENT>;\n\nexport type LogMethod = (...args: unknown[]) => void;\n\n/**\n * A function that can add behavior around a logger method.\n *\n * Call `next` to forward a message through the logger's configured output.\n */\nexport type LogMethodDecorator = (next: LogMethod, ...args: unknown[]) => void;\n\nexport type LoggerDecorators = Partial<\n Record<LoggerMethod, LogMethodDecorator>\n>;\n\n/**\n * Configuration for a {@link Logger}.\n *\n * **Example: configure logging with `LOG_LEVEL`.**\n *\n * ```ts\n * const logger = new Logger({\n * level: process.env.LOG_LEVEL\n * });\n * ```\n */\nexport type LoggerOptions = {\n /**\n * The most verbose severity level that should be logged. Use\n * {@link LogLevel.SILENT} to disable logging.\n */\n level: LogLevel;\n /**\n * An optional prefix prepended to every message.\n *\n * Use {@link Logger.withPrefix} to add prefixes after construction.\n */\n prefix?: string;\n /**\n * Optional behavior to apply to individual log methods.\n *\n * Decorators receive `next`, which preserves this logger's configured level,\n * prefix, and console output.\n */\n decorators?: LoggerDecorators;\n};\n\n/**\n * Logs network Snap messages to the console at configurable severity levels.\n *\n * Disable output with {@link LogLevel.SILENT}.\n *\n * **Example: create an enabled logger.**\n *\n * ```ts\n * import { Logger } from '@metamask/snap-networks-utils';\n *\n * const logger = new Logger({ level: LogLevel.TRACE });\n * logger.info('Account synced');\n * ```\n *\n * **Example: add a Snap or component prefix.**\n *\n * ```ts\n * const rootLogger = new Logger({ level: LogLevel.TRACE });\n * const snapLogger = rootLogger.withPrefix('[tron-wallet-snap]');\n * const accountsLogger = snapLogger.withPrefix('[accounts]');\n *\n * accountsLogger.debug('Refreshing account balances');\n * ```\n *\n * **Example: decorate a method with Snap-specific behavior.**\n *\n * ```ts\n * const logger = new Logger({\n * level: LogLevel.TRACE,\n * decorators: {\n * error: (next, error) => {\n * const details = getSolanaErrorDetails(error);\n * next(details ?? error);\n * },\n * },\n * });\n * ```\n */\nexport class Logger {\n readonly #level: LogLevel;\n\n readonly #prefix?: string;\n\n readonly #decorators?: LoggerDecorators;\n\n constructor({ level, prefix, decorators }: LoggerOptions) {\n assert(level, LogLevelStruct);\n\n this.#level = level;\n this.#prefix = prefix;\n this.#decorators = decorators;\n }\n\n /**\n * Returns a logger with an additional prefix.\n *\n * The returned logger has the same log level and decorators as this one. Call\n * this method as many times as needed; each derived logger appends its prefix\n * to the existing prefix.\n *\n * @param prefix - The prefix to add to each message.\n * @returns A derived logger.\n */\n withPrefix(prefix: string): Logger {\n return new Logger({\n level: this.#level,\n prefix: this.#prefix ? `${this.#prefix} ${prefix}` : prefix,\n decorators: this.#decorators,\n });\n }\n\n error(...args: unknown[]): void {\n this.#write(LogLevel.ERROR, console.error, args);\n }\n\n warn(...args: unknown[]): void {\n this.#write(LogLevel.WARN, console.warn, args);\n }\n\n /**\n * Logs an informational message.\n *\n * @param args - The values to write to the console.\n * @deprecated Use {@link Logger.info} instead.\n */\n log(...args: unknown[]): void {\n this.info(...args);\n }\n\n info(...args: unknown[]): void {\n this.#write(LogLevel.INFO, console.info, args);\n }\n\n debug(...args: unknown[]): void {\n this.#write(LogLevel.DEBUG, console.debug, args);\n }\n\n trace(...args: unknown[]): void {\n this.#write(LogLevel.TRACE, console.trace, args);\n }\n\n #isLevelDisabled(level: LoggerMethod): boolean {\n return logLevelPriority[level] > logLevelPriority[this.#level];\n }\n\n #write(\n level: LoggerMethod,\n writeToConsole: (...args: unknown[]) => void,\n args: unknown[],\n ): void {\n if (this.#isLevelDisabled(level)) {\n return;\n }\n\n const next: LogMethod = this.#prefix\n ? (...nextArgs: unknown[]): void =>\n writeToConsole(this.#prefix, ...nextArgs)\n : writeToConsole;\n\n const decorator = this.#decorators?.[level];\n\n if (decorator) {\n decorator(next, ...args);\n return;\n }\n\n next(...args);\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.d.cts","sourceRoot":"","sources":["../../src/logger/Logger.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;CAOX,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAoBhE,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAE/E,MAAM,MAAM,gBAAgB,GAAG,OAAO,CACpC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CACzC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,KAAK,EAAE,QAAQ,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,qBAAa,MAAM;;gBAOL,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,aAAa;IAQxD;;;;;;;;;OASG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAQlC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI7B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CA+BhC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.d.mts","sourceRoot":"","sources":["../../src/logger/Logger.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;CAOX,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAoBhE,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErE,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAErD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAE/E,MAAM,MAAM,gBAAgB,GAAG,OAAO,CACpC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CACzC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,KAAK,EAAE,QAAQ,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,qBAAa,MAAM;;gBAOL,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,aAAa;IAQxD;;;;;;;;;OASG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAQlC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B;;;;;OAKG;IACH,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI7B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CA+BhC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.mjs","sourceRoot":"","sources":["../../src/logger/Logger.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert, enums } from '@metamask/superstruct';\n\n/**\n * The severity levels supported by {@link Logger}.\n */\nexport const LogLevel = {\n SILENT: 'silent',\n ERROR: 'error',\n WARN: 'warn',\n INFO: 'info',\n DEBUG: 'debug',\n TRACE: 'trace',\n} as const;\n\nexport type LogLevel = (typeof LogLevel)[keyof typeof LogLevel];\n\n/**\n * Defines the severity ordering used to filter log messages.\n *\n * Lower values are less verbose. Changing these numeric priorities changes\n * which messages are emitted for each configured {@link LogLevel}, including\n * in production.\n */\nconst logLevelPriority = {\n [LogLevel.SILENT]: 0,\n [LogLevel.ERROR]: 1,\n [LogLevel.WARN]: 2,\n [LogLevel.INFO]: 3,\n [LogLevel.DEBUG]: 4,\n [LogLevel.TRACE]: 5,\n};\n\nconst LogLevelStruct = enums(Object.values(LogLevel));\n\nexport type LoggerMethod = Exclude<LogLevel, typeof LogLevel.SILENT>;\n\nexport type LogMethod = (...args: unknown[]) => void;\n\n/**\n * A function that can add behavior around a logger method.\n *\n * Call `next` to forward a message through the logger's configured output.\n */\nexport type LogMethodDecorator = (next: LogMethod, ...args: unknown[]) => void;\n\nexport type LoggerDecorators = Partial<\n Record<LoggerMethod, LogMethodDecorator>\n>;\n\n/**\n * Configuration for a {@link Logger}.\n *\n * **Example: configure logging with `LOG_LEVEL`.**\n *\n * ```ts\n * const logger = new Logger({\n * level: process.env.LOG_LEVEL\n * });\n * ```\n */\nexport type LoggerOptions = {\n /**\n * The most verbose severity level that should be logged. Use\n * {@link LogLevel.SILENT} to disable logging.\n */\n level: LogLevel;\n /**\n * An optional prefix prepended to every message.\n *\n * Use {@link Logger.withPrefix} to add prefixes after construction.\n */\n prefix?: string;\n /**\n * Optional behavior to apply to individual log methods.\n *\n * Decorators receive `next`, which preserves this logger's configured level,\n * prefix, and console output.\n */\n decorators?: LoggerDecorators;\n};\n\n/**\n * Logs network Snap messages to the console at configurable severity levels.\n *\n * Disable output with {@link LogLevel.SILENT}.\n *\n * **Example: create an enabled logger.**\n *\n * ```ts\n * import { Logger } from '@metamask/snap-networks-utils';\n *\n * const logger = new Logger({ level: LogLevel.TRACE });\n * logger.info('Account synced');\n * ```\n *\n * **Example: add a Snap or component prefix.**\n *\n * ```ts\n * const rootLogger = new Logger({ level: LogLevel.TRACE });\n * const snapLogger = rootLogger.withPrefix('[tron-wallet-snap]');\n * const accountsLogger = snapLogger.withPrefix('[accounts]');\n *\n * accountsLogger.debug('Refreshing account balances');\n * ```\n *\n * **Example: decorate a method with Snap-specific behavior.**\n *\n * ```ts\n * const logger = new Logger({\n * level: LogLevel.TRACE,\n * decorators: {\n * error: (next, error) => {\n * const details = getSolanaErrorDetails(error);\n * next(details ?? error);\n * },\n * },\n * });\n * ```\n */\nexport class Logger {\n readonly #level: LogLevel;\n\n readonly #prefix?: string;\n\n readonly #decorators?: LoggerDecorators;\n\n constructor({ level, prefix, decorators }: LoggerOptions) {\n assert(level, LogLevelStruct);\n\n this.#level = level;\n this.#prefix = prefix;\n this.#decorators = decorators;\n }\n\n /**\n * Returns a logger with an additional prefix.\n *\n * The returned logger has the same log level and decorators as this one. Call\n * this method as many times as needed; each derived logger appends its prefix\n * to the existing prefix.\n *\n * @param prefix - The prefix to add to each message.\n * @returns A derived logger.\n */\n withPrefix(prefix: string): Logger {\n return new Logger({\n level: this.#level,\n prefix: this.#prefix ? `${this.#prefix} ${prefix}` : prefix,\n decorators: this.#decorators,\n });\n }\n\n error(...args: unknown[]): void {\n this.#write(LogLevel.ERROR, console.error, args);\n }\n\n warn(...args: unknown[]): void {\n this.#write(LogLevel.WARN, console.warn, args);\n }\n\n /**\n * Logs an informational message.\n *\n * @param args - The values to write to the console.\n * @deprecated Use {@link Logger.info} instead.\n */\n log(...args: unknown[]): void {\n this.info(...args);\n }\n\n info(...args: unknown[]): void {\n this.#write(LogLevel.INFO, console.info, args);\n }\n\n debug(...args: unknown[]): void {\n this.#write(LogLevel.DEBUG, console.debug, args);\n }\n\n trace(...args: unknown[]): void {\n this.#write(LogLevel.TRACE, console.trace, args);\n }\n\n #isLevelDisabled(level: LoggerMethod): boolean {\n return logLevelPriority[level] > logLevelPriority[this.#level];\n }\n\n #write(\n level: LoggerMethod,\n writeToConsole: (...args: unknown[]) => void,\n args: unknown[],\n ): void {\n if (this.#isLevelDisabled(level)) {\n return;\n }\n\n const next: LogMethod = this.#prefix\n ? (...nextArgs: unknown[]): void =>\n writeToConsole(this.#prefix, ...nextArgs)\n : writeToConsole;\n\n const decorator = this.#decorators?.[level];\n\n if (decorator) {\n decorator(next, ...args);\n return;\n }\n\n next(...args);\n }\n}\n"]}
|
package/dist/logger/index.cjs
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LogLevel = exports.Logger = void 0;
|
|
4
|
-
var Logger_1 = require("./Logger.cjs");
|
|
5
|
-
Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return Logger_1.Logger; } });
|
|
6
|
-
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return Logger_1.LogLevel; } });
|
|
7
|
-
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":";;;AAAA,uCAA4C;AAAnC,gGAAA,MAAM,OAAA;AAAE,kGAAA,QAAQ,OAAA","sourcesContent":["export { Logger, LogLevel } from './Logger';\nexport type {\n LoggerOptions,\n LoggerMethod,\n LogMethod,\n LogMethodDecorator,\n LoggerDecorators,\n} from './Logger';\n"]}
|
package/dist/logger/index.d.cts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAiB;AAC5C,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,GACjB,qBAAiB"}
|
package/dist/logger/index.d.mts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAiB;AAC5C,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,GACjB,qBAAiB"}
|
package/dist/logger/index.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAiB","sourcesContent":["export { Logger, LogLevel } from './Logger';\nexport type {\n LoggerOptions,\n LoggerMethod,\n LogMethod,\n LogMethodDecorator,\n LoggerDecorators,\n} from './Logger';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createOriginPermissions.cjs","sourceRoot":"","sources":["../../src/originPermissions/createOriginPermissions.ts"],"names":[],"mappings":";;;AAAa,QAAA,oBAAoB,GAAG,CAAC,+BAA+B,CAAU,CAAC;AAElE,QAAA,mBAAmB,GAAG,CAAC,uBAAuB,CAAU,CAAC;AAEzD,QAAA,uBAAuB,GAAG,UAAU,CAAC;AASlD;;;;;;;;;;;;GAYG;AACI,MAAM,uBAAuB,GAAG,CAAC,EACtC,WAAW,EACX,eAAe,EACf,OAAO,GAAG,2BAAmB,EAC7B,cAAc,GAAG,+BAAuB,GACV,EAA4B,EAAE;IAC5D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACjD,CAAC;IACD,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IAEhE,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAfW,QAAA,uBAAuB,2BAelC","sourcesContent":["export const DEFAULT_PROD_ORIGINS = ['https://portfolio.metamask.io'] as const;\n\nexport const DEFAULT_DEV_ORIGINS = ['http://localhost:3000'] as const;\n\nexport const DEFAULT_METAMASK_ORIGIN = 'metamask';\n\nexport type CreateOriginPermissionsParams = {\n dappMethods: Iterable<string>;\n metamaskMethods: Iterable<string>;\n origins?: readonly string[];\n metamaskOrigin?: string;\n};\n\n/**\n * Builds the origin-to-method permission map used by network snaps.\n *\n * Those origins receive `dappMethods` as provided (pass an empty list to deny\n * dapp calls). The MetaMask origin always receives `metamaskMethods`.\n *\n * @param params - Origin and method lists for the snap.\n * @param params.dappMethods - Methods allowed for connected dapps.\n * @param params.metamaskMethods - Methods allowed for the MetaMask origin.\n * @param params.origins - Dapp origins to register. Defaults to localhost.\n * @param params.metamaskOrigin - Origin key for MetaMask. Defaults to `metamask`.\n * @returns A map of origin to allowed RPC methods.\n */\nexport const createOriginPermissions = ({\n dappMethods,\n metamaskMethods,\n origins = DEFAULT_DEV_ORIGINS,\n metamaskOrigin = DEFAULT_METAMASK_ORIGIN,\n}: CreateOriginPermissionsParams): Map<string, Set<string>> => {\n const originPermissions = new Map<string, Set<string>>();\n const dappPermissions = new Set(dappMethods);\n\n for (const origin of origins) {\n originPermissions.set(origin, dappPermissions);\n }\n originPermissions.set(metamaskOrigin, new Set(metamaskMethods));\n\n return originPermissions;\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createOriginPermissions.d.cts","sourceRoot":"","sources":["../../src/originPermissions/createOriginPermissions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,4CAA6C,CAAC;AAE/E,eAAO,MAAM,mBAAmB,oCAAqC,CAAC;AAEtE,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,GAAI,4DAKrC,6BAA6B,KAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAUzD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createOriginPermissions.d.mts","sourceRoot":"","sources":["../../src/originPermissions/createOriginPermissions.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,4CAA6C,CAAC;AAE/E,eAAO,MAAM,mBAAmB,oCAAqC,CAAC;AAEtE,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,GAAI,4DAKrC,6BAA6B,KAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAUzD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createOriginPermissions.mjs","sourceRoot":"","sources":["../../src/originPermissions/createOriginPermissions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,+BAA+B,CAAU,CAAC;AAE/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,uBAAuB,CAAU,CAAC;AAEtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AASlD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EACtC,WAAW,EACX,eAAe,EACf,OAAO,GAAG,mBAAmB,EAC7B,cAAc,GAAG,uBAAuB,GACV,EAA4B,EAAE;IAC5D,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACjD,CAAC;IACD,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IAEhE,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC","sourcesContent":["export const DEFAULT_PROD_ORIGINS = ['https://portfolio.metamask.io'] as const;\n\nexport const DEFAULT_DEV_ORIGINS = ['http://localhost:3000'] as const;\n\nexport const DEFAULT_METAMASK_ORIGIN = 'metamask';\n\nexport type CreateOriginPermissionsParams = {\n dappMethods: Iterable<string>;\n metamaskMethods: Iterable<string>;\n origins?: readonly string[];\n metamaskOrigin?: string;\n};\n\n/**\n * Builds the origin-to-method permission map used by network snaps.\n *\n * Those origins receive `dappMethods` as provided (pass an empty list to deny\n * dapp calls). The MetaMask origin always receives `metamaskMethods`.\n *\n * @param params - Origin and method lists for the snap.\n * @param params.dappMethods - Methods allowed for connected dapps.\n * @param params.metamaskMethods - Methods allowed for the MetaMask origin.\n * @param params.origins - Dapp origins to register. Defaults to localhost.\n * @param params.metamaskOrigin - Origin key for MetaMask. Defaults to `metamask`.\n * @returns A map of origin to allowed RPC methods.\n */\nexport const createOriginPermissions = ({\n dappMethods,\n metamaskMethods,\n origins = DEFAULT_DEV_ORIGINS,\n metamaskOrigin = DEFAULT_METAMASK_ORIGIN,\n}: CreateOriginPermissionsParams): Map<string, Set<string>> => {\n const originPermissions = new Map<string, Set<string>>();\n const dappPermissions = new Set(dappMethods);\n\n for (const origin of origins) {\n originPermissions.set(origin, dappPermissions);\n }\n originPermissions.set(metamaskOrigin, new Set(metamaskMethods));\n\n return originPermissions;\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateOrigin.cjs","sourceRoot":"","sources":["../../src/originPermissions/validateOrigin.ts"],"names":[],"mappings":";;;AAAA,gHAAgH;AAChH,mDAAwD;AAExD;;;;;;;GAOG;AACI,MAAM,cAAc,GAAG,CAC5B,MAAc,EACd,MAAc,EACd,iBAA2C,EACrC,EAAE;IACR,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,6BAAiB,CAAC,kBAAkB,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,6BAAiB,CAAC,mBAAmB,CAAC,CAAC;IACnD,CAAC;AACH,CAAC,CAAC;AAXW,QAAA,cAAc,kBAWzB","sourcesContent":["/* eslint-disable @typescript-eslint/only-throw-error -- UnauthorizedError is the JSON-RPC snap error surface */\nimport { UnauthorizedError } from '@metamask/snaps-sdk';\n\n/**\n * Validates that the origin is allowed to call the given method.\n *\n * @param origin - The origin of the request.\n * @param method - The RPC method of the request.\n * @param originPermissions - Map of origin to allowed methods.\n * @throws {UnauthorizedError} If the origin is missing or the method is not allowed.\n */\nexport const validateOrigin = (\n origin: string,\n method: string,\n originPermissions: Map<string, Set<string>>,\n): void => {\n if (!origin) {\n throw new UnauthorizedError('Origin not found');\n }\n if (!originPermissions.get(origin)?.has(method)) {\n throw new UnauthorizedError('Permission denied');\n }\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateOrigin.d.cts","sourceRoot":"","sources":["../../src/originPermissions/validateOrigin.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,mBAAmB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAC1C,IAOF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateOrigin.d.mts","sourceRoot":"","sources":["../../src/originPermissions/validateOrigin.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,mBAAmB,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAC1C,IAOF,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateOrigin.mjs","sourceRoot":"","sources":["../../src/originPermissions/validateOrigin.ts"],"names":[],"mappings":"AAAA,gHAAgH;AAChH,OAAO,EAAE,iBAAiB,EAAE,4BAA4B;AAExD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,MAAc,EACd,MAAc,EACd,iBAA2C,EACrC,EAAE;IACR,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACnD,CAAC;AACH,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/only-throw-error -- UnauthorizedError is the JSON-RPC snap error surface */\nimport { UnauthorizedError } from '@metamask/snaps-sdk';\n\n/**\n * Validates that the origin is allowed to call the given method.\n *\n * @param origin - The origin of the request.\n * @param method - The RPC method of the request.\n * @param originPermissions - Map of origin to allowed methods.\n * @throws {UnauthorizedError} If the origin is missing or the method is not allowed.\n */\nexport const validateOrigin = (\n origin: string,\n method: string,\n originPermissions: Map<string, Set<string>>,\n): void => {\n if (!origin) {\n throw new UnauthorizedError('Origin not found');\n }\n if (!originPermissions.get(origin)?.has(method)) {\n throw new UnauthorizedError('Permission denied');\n }\n};\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"safeMerge.cjs","sourceRoot":"","sources":["../../src/safeMerge/safeMerge.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;GAcG;AACI,MAAM,SAAS,GAAG,CACvB,SAAqB,EACrB,SAAqB,EACI,EAAE,CAAC,CAAC;IAC7B,GAAG,SAAS;IACZ,GAAI,MAAM,CAAC,WAAW,CACpB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAC9B,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAChB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,IAAI;QACd,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CACzE,CACa;CACjB,CAAC,CAAC;AAbU,QAAA,SAAS,aAanB","sourcesContent":["/**\n * Shallowly merges two objects at the top level, keeping values from the overridee object when the overrider's\n * corresponding top-level properties are undefined, null, or empty objects. Non-undefined values from the overrider\n * take precedence. Empty objects in the overrider are filtered out to preserve the overridee's values. Nested objects\n * are not merged recursively: if a nested property exists in the overrider, it replaces the overridee's value entirely.\n *\n * @param overridee - The object to override.\n * @param overrider - The object to override with.\n * @returns The merged object (using shallow, top-level merge semantics).\n * @example\n * const overridee = { name: 'John' };\n * const overrider = { name: undefined, age: 30 };\n * const merged = safeMerge(overridee, overrider);\n * // merged is { name: 'John', age: 30 }\n */\nexport const safeMerge = <TOverridee extends object, TOverrider extends object>(\n overridee: TOverridee,\n overrider: TOverrider,\n): TOverridee & TOverrider => ({\n ...overridee,\n ...(Object.fromEntries(\n Object.entries(overrider).filter(\n ([_key, value]) =>\n value !== undefined &&\n value !== null &&\n (!value || typeof value !== 'object' || Object.keys(value).length > 0),\n ),\n ) as TOverrider),\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"safeMerge.d.cts","sourceRoot":"","sources":["../../src/safeMerge/safeMerge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,GAAI,UAAU,SAAS,MAAM,EAAE,UAAU,SAAS,MAAM,EAC5E,WAAW,UAAU,EACrB,WAAW,UAAU,KACpB,UAAU,GAAG,UAUd,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"safeMerge.d.mts","sourceRoot":"","sources":["../../src/safeMerge/safeMerge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,GAAI,UAAU,SAAS,MAAM,EAAE,UAAU,SAAS,MAAM,EAC5E,WAAW,UAAU,EACrB,WAAW,UAAU,KACpB,UAAU,GAAG,UAUd,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"safeMerge.mjs","sourceRoot":"","sources":["../../src/safeMerge/safeMerge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,SAAqB,EACrB,SAAqB,EACI,EAAE,CAAC,CAAC;IAC7B,GAAG,SAAS;IACZ,GAAI,MAAM,CAAC,WAAW,CACpB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAC9B,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAChB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,IAAI;QACd,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CACzE,CACa;CACjB,CAAC,CAAC","sourcesContent":["/**\n * Shallowly merges two objects at the top level, keeping values from the overridee object when the overrider's\n * corresponding top-level properties are undefined, null, or empty objects. Non-undefined values from the overrider\n * take precedence. Empty objects in the overrider are filtered out to preserve the overridee's values. Nested objects\n * are not merged recursively: if a nested property exists in the overrider, it replaces the overridee's value entirely.\n *\n * @param overridee - The object to override.\n * @param overrider - The object to override with.\n * @returns The merged object (using shallow, top-level merge semantics).\n * @example\n * const overridee = { name: 'John' };\n * const overrider = { name: undefined, age: 30 };\n * const merged = safeMerge(overridee, overrider);\n * // merged is { name: 'John', age: 30 }\n */\nexport const safeMerge = <TOverridee extends object, TOverrider extends object>(\n overridee: TOverridee,\n overrider: TOverrider,\n): TOverridee & TOverrider => ({\n ...overridee,\n ...(Object.fromEntries(\n Object.entries(overrider).filter(\n ([_key, value]) =>\n value !== undefined &&\n value !== null &&\n (!value || typeof value !== 'object' || Object.keys(value).length > 0),\n ),\n ) as TOverrider),\n});\n"]}
|
package/dist/sanitize.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.cjs","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":";;AAMA,8DAQC;AAQD,kCAiBC;AAvCD;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,KAAa;IACrD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,4CAA4C;IAC5C,4CAA4C;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACxE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["/**\n * Removes control characters from a string.\n *\n * @param input - The string to sanitize.\n * @returns The sanitized string.\n */\nexport function sanitizeControlCharacters(input: string): string {\n if (!input || typeof input !== 'string') {\n return '';\n }\n\n // Remove all control characters except tab.\n // eslint-disable-next-line no-control-regex\n return input.replace(/[\\u0000-\\u0008\\u000A-\\u001F\\u007F]/gu, '');\n}\n\n/**\n * Validates and sanitizes a URI.\n *\n * @param uri - The URI to validate and sanitize.\n * @returns The sanitized URI or an empty string if invalid.\n */\nexport function sanitizeUri(uri: string): string {\n if (!uri || typeof uri !== 'string') {\n return '';\n }\n\n const sanitized = sanitizeControlCharacters(uri);\n\n try {\n const url = new URL(sanitized);\n const allowedProtocols = ['http:', 'https:', 'wss:', 'ipfs:'];\n if (!allowedProtocols.includes(url.protocol) || sanitized.length > 2048) {\n return '';\n }\n return sanitized;\n } catch {\n return '';\n }\n}\n"]}
|
package/dist/sanitize.d.cts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.d.cts","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiB/C"}
|
package/dist/sanitize.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.d.mts","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiB/C"}
|
package/dist/sanitize.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize.mjs","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,4CAA4C;IAC5C,4CAA4C;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACxE,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["/**\n * Removes control characters from a string.\n *\n * @param input - The string to sanitize.\n * @returns The sanitized string.\n */\nexport function sanitizeControlCharacters(input: string): string {\n if (!input || typeof input !== 'string') {\n return '';\n }\n\n // Remove all control characters except tab.\n // eslint-disable-next-line no-control-regex\n return input.replace(/[\\u0000-\\u0008\\u000A-\\u001F\\u007F]/gu, '');\n}\n\n/**\n * Validates and sanitizes a URI.\n *\n * @param uri - The URI to validate and sanitize.\n * @returns The sanitized URI or an empty string if invalid.\n */\nexport function sanitizeUri(uri: string): string {\n if (!uri || typeof uri !== 'string') {\n return '';\n }\n\n const sanitized = sanitizeControlCharacters(uri);\n\n try {\n const url = new URL(sanitized);\n const allowedProtocols = ['http:', 'https:', 'wss:', 'ipfs:'];\n if (!allowedProtocols.includes(url.protocol) || sanitized.length > 2048) {\n return '';\n }\n return sanitized;\n } catch {\n return '';\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"urlStruct.cjs","sourceRoot":"","sources":["../../src/urlStruct/urlStruct.ts"],"names":[],"mappings":"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","sourcesContent":["import { refine, string } from '@metamask/superstruct';\n\n/**\n * Validates that a string is a valid and safe URL.\n *\n * It rejects:\n * - Non-HTTP/HTTPS/WSS protocols\n * - Malformed URL format or incorrect protocol format\n * - Invalid hostname format (must follow proper domain naming conventions)\n * - Protocol pollution attempts (backslashes, @ symbol, %2f@, %5c@)\n * - Invalid hostname characters (backslashes, @ symbol, forward slashes, encoded forward slashes)\n * - Directory traversal attempts (../, ..%2f, ..%2F)\n *\n * Dangerous patterns including:\n * - HTML tags.\n * - JavaScript protocol.\n * - Data URI scheme.\n * - Template injection (${...}, #{...}).\n * - Command injection (|, ;).\n * - CRLF injection.\n * - URL credential injection.\n * - SQL injection attempts.\n * - Open redirect parameters.\n * - Non-printable characters.\n */\nexport const UrlStruct = refine(string(), 'safe-url', (value) => {\n try {\n // Basic URL validation\n const url = new URL(value);\n\n // Protocol check\n const supportedProtocols = ['http:', 'https:', 'wss:'];\n if (!supportedProtocols.includes(url.protocol)) {\n return `URL must use one of the following protocols: ${supportedProtocols.join(', ')}`;\n }\n\n // Validate URL format\n if (!value.match(/^(https?|wss):\\/\\/[^/]+\\/?/u)) {\n return 'Malformed URL - incorrect protocol format';\n }\n\n // Validate hostname format. Accepts localhost and ports (needed for tests)\n const hostname = url.hostname.toLowerCase();\n if (\n hostname !== 'localhost' &&\n (!hostname.includes('.') ||\n !/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/u.test(\n hostname,\n ))\n ) {\n return 'Invalid hostname format';\n }\n\n // Check for protocol pollution in the entire URL\n const decodedValue = decodeURIComponent(value.toLowerCase());\n if (\n value.includes('\\\\') ||\n value.includes('@') ||\n decodedValue.includes('\\\\') ||\n decodedValue.includes('@') ||\n value.toLowerCase().includes('%2f@') ||\n value.toLowerCase().includes('%5c@')\n ) {\n return 'URL contains protocol pollution attempts';\n }\n\n // Check for directory traversal\n if (\n value.includes('../') ||\n value.includes('..%2f') ||\n value.includes('..%2F')\n ) {\n return 'Directory traversal attempts are not allowed';\n }\n\n // Check for dangerous patterns\n const dangerousPatterns = [\n /<[^>]*>/u, // HTML tags\n /javascript:/u, // JavaScript protocol\n /data:/u, // Data URI scheme\n /\\\\[@\\\\]/u, // Enhanced protocol pollution check\n /%2f@/u, // Protocol pollution\n /[^\\x20-\\x7E]/u, // Non-printable characters\n /\\$\\{.*?\\}/u, // Template injection\n /#\\{.*?\\}/u, // Template injection\n /[|;]/u, // Command injection\n /%0[acd]|%0[acd]/u, // CRLF injection\n /\\/\\/\\w+@/u, // URL credential injection\n // Enhanced SQL injection patterns\n /(?:[^a-z]|^)(?:union\\s+(?:all\\s+)?select|select\\s+(?:.*\\s+)?from|insert\\s+into|update\\s+.*\\s+set|delete\\s+from|drop\\s+table|alter\\s+table|create\\s+table|exec(?:ute)?|union|where\\s+[\\d\\w]\\s*=\\s*[\\d\\w]|\\bor\\b\\s*[\\d\\w]\\s*=\\s*[\\d\\w])/iu,\n /'.*?(?:OR|UNION|SELECT|FROM|WHERE).*?'/iu, // SQL injection\n /%27.*?(?:OR|UNION|SELECT|FROM|WHERE).*?(?:%27|')/iu, // URL-encoded SQL injection\n /%20(?:OR|UNION|SELECT|FROM|WHERE)%20/iu, // URL-encoded SQL keywords\n /[?&](?:url|redirect|next|return_to|return_url|goto|destination|continue|redirect_uri)=(?:[^&]*\\/\\/|https?:)/iu, // Open redirect parameters\n /[?&](?:url|redirect|next|return_to|return_url|goto|destination|continue|redirect_uri)=%(?:[^&]*\\/\\/|https?:)/iu, // URL-encoded open redirect parameters\n ];\n\n for (const patt of dangerousPatterns) {\n if (patt.test(decodedValue)) {\n return 'URL contains potentially malicious patterns';\n }\n }\n\n return true;\n } catch (error) {\n return `Invalid URL format: ${(error as Error).message}`;\n }\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"urlStruct.d.cts","sourceRoot":"","sources":["../../src/urlStruct/urlStruct.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,SAAS,sDAkFpB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"urlStruct.d.mts","sourceRoot":"","sources":["../../src/urlStruct/urlStruct.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,SAAS,sDAkFpB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"urlStruct.mjs","sourceRoot":"","sources":["../../src/urlStruct/urlStruct.ts"],"names":[],"mappings":"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","sourcesContent":["import { refine, string } from '@metamask/superstruct';\n\n/**\n * Validates that a string is a valid and safe URL.\n *\n * It rejects:\n * - Non-HTTP/HTTPS/WSS protocols\n * - Malformed URL format or incorrect protocol format\n * - Invalid hostname format (must follow proper domain naming conventions)\n * - Protocol pollution attempts (backslashes, @ symbol, %2f@, %5c@)\n * - Invalid hostname characters (backslashes, @ symbol, forward slashes, encoded forward slashes)\n * - Directory traversal attempts (../, ..%2f, ..%2F)\n *\n * Dangerous patterns including:\n * - HTML tags.\n * - JavaScript protocol.\n * - Data URI scheme.\n * - Template injection (${...}, #{...}).\n * - Command injection (|, ;).\n * - CRLF injection.\n * - URL credential injection.\n * - SQL injection attempts.\n * - Open redirect parameters.\n * - Non-printable characters.\n */\nexport const UrlStruct = refine(string(), 'safe-url', (value) => {\n try {\n // Basic URL validation\n const url = new URL(value);\n\n // Protocol check\n const supportedProtocols = ['http:', 'https:', 'wss:'];\n if (!supportedProtocols.includes(url.protocol)) {\n return `URL must use one of the following protocols: ${supportedProtocols.join(', ')}`;\n }\n\n // Validate URL format\n if (!value.match(/^(https?|wss):\\/\\/[^/]+\\/?/u)) {\n return 'Malformed URL - incorrect protocol format';\n }\n\n // Validate hostname format. Accepts localhost and ports (needed for tests)\n const hostname = url.hostname.toLowerCase();\n if (\n hostname !== 'localhost' &&\n (!hostname.includes('.') ||\n !/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/u.test(\n hostname,\n ))\n ) {\n return 'Invalid hostname format';\n }\n\n // Check for protocol pollution in the entire URL\n const decodedValue = decodeURIComponent(value.toLowerCase());\n if (\n value.includes('\\\\') ||\n value.includes('@') ||\n decodedValue.includes('\\\\') ||\n decodedValue.includes('@') ||\n value.toLowerCase().includes('%2f@') ||\n value.toLowerCase().includes('%5c@')\n ) {\n return 'URL contains protocol pollution attempts';\n }\n\n // Check for directory traversal\n if (\n value.includes('../') ||\n value.includes('..%2f') ||\n value.includes('..%2F')\n ) {\n return 'Directory traversal attempts are not allowed';\n }\n\n // Check for dangerous patterns\n const dangerousPatterns = [\n /<[^>]*>/u, // HTML tags\n /javascript:/u, // JavaScript protocol\n /data:/u, // Data URI scheme\n /\\\\[@\\\\]/u, // Enhanced protocol pollution check\n /%2f@/u, // Protocol pollution\n /[^\\x20-\\x7E]/u, // Non-printable characters\n /\\$\\{.*?\\}/u, // Template injection\n /#\\{.*?\\}/u, // Template injection\n /[|;]/u, // Command injection\n /%0[acd]|%0[acd]/u, // CRLF injection\n /\\/\\/\\w+@/u, // URL credential injection\n // Enhanced SQL injection patterns\n /(?:[^a-z]|^)(?:union\\s+(?:all\\s+)?select|select\\s+(?:.*\\s+)?from|insert\\s+into|update\\s+.*\\s+set|delete\\s+from|drop\\s+table|alter\\s+table|create\\s+table|exec(?:ute)?|union|where\\s+[\\d\\w]\\s*=\\s*[\\d\\w]|\\bor\\b\\s*[\\d\\w]\\s*=\\s*[\\d\\w])/iu,\n /'.*?(?:OR|UNION|SELECT|FROM|WHERE).*?'/iu, // SQL injection\n /%27.*?(?:OR|UNION|SELECT|FROM|WHERE).*?(?:%27|')/iu, // URL-encoded SQL injection\n /%20(?:OR|UNION|SELECT|FROM|WHERE)%20/iu, // URL-encoded SQL keywords\n /[?&](?:url|redirect|next|return_to|return_url|goto|destination|continue|redirect_uri)=(?:[^&]*\\/\\/|https?:)/iu, // Open redirect parameters\n /[?&](?:url|redirect|next|return_to|return_url|goto|destination|continue|redirect_uri)=%(?:[^&]*\\/\\/|https?:)/iu, // URL-encoded open redirect parameters\n ];\n\n for (const patt of dangerousPatterns) {\n if (patt.test(decodedValue)) {\n return 'URL contains potentially malicious patterns';\n }\n }\n\n return true;\n } catch (error) {\n return `Invalid URL format: ${(error as Error).message}`;\n }\n});\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|