@metamask-previews/shield-controller 6.0.1-preview-3e34650c2 → 6.0.1-preview-4f4c98e
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 +4 -0
- package/dist/{ShieldController-method-action-types.d.mts → ShieldController-method-action-types.d.ts} +2 -2
- package/dist/ShieldController-method-action-types.d.ts.map +1 -0
- package/dist/{ShieldController-method-action-types.mjs → ShieldController-method-action-types.js} +1 -1
- package/dist/ShieldController-method-action-types.js.map +1 -0
- package/dist/{ShieldController.d.cts → ShieldController.d.ts} +10 -10
- package/dist/ShieldController.d.ts.map +1 -0
- package/dist/{ShieldController.mjs → ShieldController.js} +7 -8
- package/dist/ShieldController.js.map +1 -0
- package/dist/{constants.d.cts → constants.d.ts} +1 -1
- package/dist/constants.d.ts.map +1 -0
- package/dist/{constants.mjs → constants.js} +1 -1
- package/dist/constants.js.map +1 -0
- package/dist/{index.d.cts → index.d.ts} +9 -9
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +5 -0
- package/dist/logger.js.map +1 -0
- package/dist/{polling-with-policy.d.cts → polling-with-policy.d.ts} +2 -2
- package/dist/polling-with-policy.d.ts.map +1 -0
- package/dist/{polling-with-policy.mjs → polling-with-policy.js} +3 -3
- package/dist/polling-with-policy.js.map +1 -0
- package/dist/{shield-api-service-method-action-types.d.mts → shield-api-service-method-action-types.d.ts} +2 -2
- package/dist/shield-api-service-method-action-types.d.ts.map +1 -0
- package/dist/{shield-api-service-method-action-types.mjs → shield-api-service-method-action-types.js} +1 -1
- package/dist/shield-api-service-method-action-types.js.map +1 -0
- package/dist/{shield-api-service.d.cts → shield-api-service.d.ts} +14 -14
- package/dist/shield-api-service.d.ts.map +1 -0
- package/dist/{shield-api-service.mjs → shield-api-service.js} +6 -6
- package/dist/shield-api-service.js.map +1 -0
- package/dist/{types.d.cts → types.d.ts} +4 -4
- package/dist/types.d.ts.map +1 -0
- package/dist/{types.mjs → types.js} +1 -1
- package/dist/types.js.map +1 -0
- package/package.json +13 -17
- package/dist/ShieldController-method-action-types.cjs +0 -7
- package/dist/ShieldController-method-action-types.cjs.map +0 -1
- package/dist/ShieldController-method-action-types.d.cts +0 -51
- package/dist/ShieldController-method-action-types.d.cts.map +0 -1
- package/dist/ShieldController-method-action-types.d.mts.map +0 -1
- package/dist/ShieldController-method-action-types.mjs.map +0 -1
- package/dist/ShieldController.cjs +0 -294
- package/dist/ShieldController.cjs.map +0 -1
- package/dist/ShieldController.d.cts.map +0 -1
- package/dist/ShieldController.d.mts +0 -106
- package/dist/ShieldController.d.mts.map +0 -1
- package/dist/ShieldController.mjs.map +0 -1
- package/dist/constants.cjs +0 -51
- package/dist/constants.cjs.map +0 -1
- package/dist/constants.d.cts.map +0 -1
- package/dist/constants.d.mts +0 -35
- package/dist/constants.d.mts.map +0 -1
- package/dist/constants.mjs.map +0 -1
- package/dist/index.cjs +0 -16
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts +0 -9
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs +0 -4
- package/dist/index.mjs.map +0 -1
- package/dist/logger.cjs +0 -8
- package/dist/logger.cjs.map +0 -1
- package/dist/logger.d.cts +0 -5
- package/dist/logger.d.cts.map +0 -1
- package/dist/logger.d.mts +0 -5
- package/dist/logger.d.mts.map +0 -1
- package/dist/logger.mjs +0 -5
- package/dist/logger.mjs.map +0 -1
- package/dist/polling-with-policy.cjs +0 -77
- package/dist/polling-with-policy.cjs.map +0 -1
- package/dist/polling-with-policy.d.cts.map +0 -1
- package/dist/polling-with-policy.d.mts +0 -9
- package/dist/polling-with-policy.d.mts.map +0 -1
- package/dist/polling-with-policy.mjs.map +0 -1
- package/dist/shield-api-service-method-action-types.cjs +0 -7
- package/dist/shield-api-service-method-action-types.cjs.map +0 -1
- package/dist/shield-api-service-method-action-types.d.cts +0 -48
- package/dist/shield-api-service-method-action-types.d.cts.map +0 -1
- package/dist/shield-api-service-method-action-types.d.mts.map +0 -1
- package/dist/shield-api-service-method-action-types.mjs.map +0 -1
- package/dist/shield-api-service.cjs +0 -371
- package/dist/shield-api-service.cjs.map +0 -1
- package/dist/shield-api-service.d.cts.map +0 -1
- package/dist/shield-api-service.d.mts +0 -164
- package/dist/shield-api-service.d.mts.map +0 -1
- package/dist/shield-api-service.mjs.map +0 -1
- package/dist/types.cjs +0 -5
- package/dist/types.cjs.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts +0 -34
- package/dist/types.d.mts.map +0 -1
- package/dist/types.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **BREAKING:** Bump minimum Node.js version to 22 ([#9168](https://github.com/MetaMask/core/pull/9168))
|
|
13
|
+
|
|
10
14
|
## [6.0.1]
|
|
11
15
|
|
|
12
16
|
### Changed
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* This file is auto generated.
|
|
3
3
|
* Do not edit manually.
|
|
4
4
|
*/
|
|
5
|
-
import type { ShieldController } from
|
|
5
|
+
import type { ShieldController } from './ShieldController.js';
|
|
6
6
|
/**
|
|
7
7
|
* Start the ShieldController and subscribe to the transaction and signature controller state changes.
|
|
8
8
|
*/
|
|
@@ -48,4 +48,4 @@ export type ShieldControllerCheckSignatureCoverageAction = {
|
|
|
48
48
|
* Union of all ShieldController action types.
|
|
49
49
|
*/
|
|
50
50
|
export type ShieldControllerMethodActions = ShieldControllerStartAction | ShieldControllerStopAction | ShieldControllerClearStateAction | ShieldControllerCheckCoverageAction | ShieldControllerCheckSignatureCoverageAction;
|
|
51
|
-
//# sourceMappingURL=ShieldController-method-action-types.d.
|
|
51
|
+
//# sourceMappingURL=ShieldController-method-action-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShieldController-method-action-types.d.ts","sourceRoot":"","sources":["../src/ShieldController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gCAAgC,GAAG;IAC7C,IAAI,EAAE,6BAA6B,CAAC;IACpC,OAAO,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;CACzC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,mCAAmC,GAAG;IAChD,IAAI,EAAE,gCAAgC,CAAC;IACvC,OAAO,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD,IAAI,EAAE,yCAAyC,CAAC;IAChD,OAAO,EAAE,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,6BAA6B,GACrC,2BAA2B,GAC3B,0BAA0B,GAC1B,gCAAgC,GAChC,mCAAmC,GACnC,4CAA4C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShieldController-method-action-types.js","sourceRoot":"","sources":["../src/ShieldController-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated.\n * Do not edit manually.\n */\n\nimport type { ShieldController } from './ShieldController.js';\n\n/**\n * Start the ShieldController and subscribe to the transaction and signature controller state changes.\n */\nexport type ShieldControllerStartAction = {\n type: `ShieldController:start`;\n handler: ShieldController['start'];\n};\n\n/**\n * Stop the ShieldController and unsubscribe from the transaction and signature controller state changes.\n */\nexport type ShieldControllerStopAction = {\n type: `ShieldController:stop`;\n handler: ShieldController['stop'];\n};\n\n/**\n * Clears the shield state and resets to default values.\n */\nexport type ShieldControllerClearStateAction = {\n type: `ShieldController:clearState`;\n handler: ShieldController['clearState'];\n};\n\n/**\n * Checks the coverage of a transaction.\n *\n * @param txMeta - The transaction to check coverage for.\n * @returns The coverage result.\n */\nexport type ShieldControllerCheckCoverageAction = {\n type: `ShieldController:checkCoverage`;\n handler: ShieldController['checkCoverage'];\n};\n\n/**\n * Checks the coverage of a signature request.\n *\n * @param signatureRequest - The signature request to check coverage for.\n * @returns The coverage result.\n */\nexport type ShieldControllerCheckSignatureCoverageAction = {\n type: `ShieldController:checkSignatureCoverage`;\n handler: ShieldController['checkSignatureCoverage'];\n};\n\n/**\n * Union of all ShieldController action types.\n */\nexport type ShieldControllerMethodActions =\n | ShieldControllerStartAction\n | ShieldControllerStopAction\n | ShieldControllerClearStateAction\n | ShieldControllerCheckCoverageAction\n | ShieldControllerCheckSignatureCoverageAction;\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { BaseController } from
|
|
2
|
-
import type { ControllerGetStateAction, ControllerStateChangeEvent } from
|
|
3
|
-
import type { Messenger } from
|
|
4
|
-
import type { SignatureRequest, SignatureStateChange } from
|
|
5
|
-
import type { TransactionControllerStateChangeEvent, TransactionMeta } from
|
|
6
|
-
import { controllerName } from
|
|
7
|
-
import type { ShieldApiServiceMethodActions } from
|
|
8
|
-
import type { ShieldControllerMethodActions } from
|
|
9
|
-
import type { CoverageResult, NormalizeSignatureRequestFn } from
|
|
1
|
+
import { BaseController } from '@metamask/base-controller';
|
|
2
|
+
import type { ControllerGetStateAction, ControllerStateChangeEvent } from '@metamask/base-controller';
|
|
3
|
+
import type { Messenger } from '@metamask/messenger';
|
|
4
|
+
import type { SignatureRequest, SignatureStateChange } from '@metamask/signature-controller';
|
|
5
|
+
import type { TransactionControllerStateChangeEvent, TransactionMeta } from '@metamask/transaction-controller';
|
|
6
|
+
import { controllerName } from './constants.js';
|
|
7
|
+
import type { ShieldApiServiceMethodActions } from './shield-api-service-method-action-types.js';
|
|
8
|
+
import type { ShieldControllerMethodActions } from './ShieldController-method-action-types.js';
|
|
9
|
+
import type { CoverageResult, NormalizeSignatureRequestFn } from './types.js';
|
|
10
10
|
export type CoverageResultRecordEntry = {
|
|
11
11
|
/**
|
|
12
12
|
* History of coverage results, latest first.
|
|
@@ -103,4 +103,4 @@ export declare class ShieldController extends BaseController<typeof controllerNa
|
|
|
103
103
|
checkSignatureCoverage(signatureRequest: SignatureRequest): Promise<CoverageResult>;
|
|
104
104
|
}
|
|
105
105
|
export {};
|
|
106
|
-
//# sourceMappingURL=ShieldController.d.
|
|
106
|
+
//# sourceMappingURL=ShieldController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShieldController.d.ts","sourceRoot":"","sources":["../src/ShieldController.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,13 +10,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
12
|
var _ShieldController_instances, _ShieldController_coverageHistoryLimit, _ShieldController_transactionHistoryLimit, _ShieldController_normalizeSignatureRequest, _ShieldController_transactionControllerStateChangeHandler, _ShieldController_signatureControllerStateChangeHandler, _ShieldController_started, _ShieldController_handleSignatureControllerStateChange, _ShieldController_handleTransactionControllerStateChange, _ShieldController_addCoverageResult, _ShieldController_logSignature, _ShieldController_logTransaction, _ShieldController_getCoverageShownStatus, _ShieldController_getLatestCoverageId;
|
|
13
|
-
import { BaseController } from
|
|
14
|
-
import { SignatureRequestStatus } from
|
|
15
|
-
import { TransactionStatus } from
|
|
16
|
-
import
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
import { projectLogger, createModuleLogger } from "./logger.mjs";
|
|
13
|
+
import { BaseController } from '@metamask/base-controller';
|
|
14
|
+
import { SignatureRequestStatus } from '@metamask/signature-controller';
|
|
15
|
+
import { TransactionStatus } from '@metamask/transaction-controller';
|
|
16
|
+
import { cloneDeep, isEqual } from 'lodash-es';
|
|
17
|
+
import { controllerName } from './constants.js';
|
|
18
|
+
import { projectLogger, createModuleLogger } from './logger.js';
|
|
20
19
|
const log = createModuleLogger(projectLogger, 'ShieldController');
|
|
21
20
|
const MESSENGER_EXPOSED_METHODS = [
|
|
22
21
|
'start',
|
|
@@ -287,4 +286,4 @@ _ShieldController_coverageHistoryLimit = new WeakMap(), _ShieldController_transa
|
|
|
287
286
|
}, _ShieldController_getLatestCoverageId = function _ShieldController_getLatestCoverageId(itemId) {
|
|
288
287
|
return this.state.coverageResults[itemId]?.results[0]?.coverageId;
|
|
289
288
|
};
|
|
290
|
-
//# sourceMappingURL=ShieldController.
|
|
289
|
+
//# sourceMappingURL=ShieldController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShieldController.js","sourceRoot":"","sources":["../src/ShieldController.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport type { Messenger } from '@metamask/messenger';\nimport { SignatureRequestStatus } from '@metamask/signature-controller';\nimport type {\n SignatureRequest,\n SignatureStateChange,\n} from '@metamask/signature-controller';\nimport { TransactionStatus } from '@metamask/transaction-controller';\nimport type {\n TransactionControllerStateChangeEvent,\n TransactionMeta,\n} from '@metamask/transaction-controller';\nimport { cloneDeep, isEqual } from 'lodash-es';\n\nimport { controllerName } from './constants.js';\nimport { projectLogger, createModuleLogger } from './logger.js';\nimport type { ShieldApiServiceMethodActions } from './shield-api-service-method-action-types.js';\nimport type { ShieldControllerMethodActions } from './ShieldController-method-action-types.js';\nimport type { CoverageResult, NormalizeSignatureRequestFn } from './types.js';\n\nconst log = createModuleLogger(projectLogger, 'ShieldController');\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'start',\n 'stop',\n 'clearState',\n 'checkCoverage',\n 'checkSignatureCoverage',\n] as const;\n\nexport type CoverageResultRecordEntry = {\n /**\n * History of coverage results, latest first.\n */\n results: CoverageResult[];\n};\n\nexport type ShieldControllerState = {\n /**\n * Coverage results by transaction ID.\n */\n coverageResults: Record<\n string, // txId\n CoverageResultRecordEntry\n >;\n /**\n * List of txIds ordered by time, latest first.\n */\n orderedTransactionHistory: string[];\n};\n\n/**\n * Get the default state for the ShieldController.\n *\n * @returns The default state for the ShieldController.\n */\nexport function getDefaultShieldControllerState(): ShieldControllerState {\n return {\n coverageResults: {},\n orderedTransactionHistory: [],\n };\n}\n\nexport type ShieldControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n ShieldControllerState\n>;\n\n/**\n * The internal actions available to the ShieldController.\n */\nexport type ShieldControllerActions =\n | ShieldControllerGetStateAction\n | ShieldControllerMethodActions;\n\nexport type ShieldControllerCoverageResultReceivedEvent = {\n type: `${typeof controllerName}:coverageResultReceived`;\n payload: [coverageResult: CoverageResult];\n};\n\nexport type ShieldControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof controllerName,\n ShieldControllerState\n>;\n\n/**\n * The internal events available to the ShieldController.\n */\nexport type ShieldControllerEvents =\n | ShieldControllerCoverageResultReceivedEvent\n | ShieldControllerStateChangeEvent;\n\n/**\n * The external actions available to the ShieldController.\n */\ntype AllowedActions = ShieldApiServiceMethodActions;\n\n/**\n * The external events available to the ShieldController.\n */\ntype AllowedEvents =\n | SignatureStateChange\n | TransactionControllerStateChangeEvent;\n\n/**\n * The messenger of the {@link ShieldController}.\n */\nexport type ShieldControllerMessenger = Messenger<\n typeof controllerName,\n ShieldControllerActions | AllowedActions,\n ShieldControllerEvents | AllowedEvents\n>;\n\n/**\n * Metadata for the ShieldController state, describing how to \"anonymize\"\n * the state and which parts should be persisted.\n */\nconst metadata = {\n coverageResults: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: true,\n },\n orderedTransactionHistory: {\n includeInStateLogs: true,\n persist: true,\n includeInDebugSnapshot: false,\n usedInUi: false,\n },\n};\n\nexport type ShieldControllerOptions = {\n messenger: ShieldControllerMessenger;\n state?: Partial<ShieldControllerState>;\n transactionHistoryLimit?: number;\n coverageHistoryLimit?: number;\n /**\n * Normalize the signature request before sending it to the backend.\n * Please note that the reason this is not being done internally is to\n * align the request body (data & params) with the security-alerts API.\n * The same normalization function which is used to normalize security-alerts request should be used here.\n *\n * @param signatureRequest - The signature request to normalize.\n * @returns The normalized signature request.\n */\n normalizeSignatureRequest?: NormalizeSignatureRequestFn;\n};\n\nexport class ShieldController extends BaseController<\n typeof controllerName,\n ShieldControllerState,\n ShieldControllerMessenger\n> {\n readonly #coverageHistoryLimit: number;\n\n readonly #transactionHistoryLimit: number;\n\n readonly #normalizeSignatureRequest?: NormalizeSignatureRequestFn;\n\n readonly #transactionControllerStateChangeHandler: (\n transactions: TransactionMeta[],\n previousTransactions: TransactionMeta[] | undefined,\n ) => void;\n\n readonly #signatureControllerStateChangeHandler: (\n signatureRequests: Record<string, SignatureRequest>,\n previousSignatureRequests: Record<string, SignatureRequest> | undefined,\n ) => void;\n\n #started: boolean;\n\n constructor(options: ShieldControllerOptions) {\n const {\n messenger,\n state,\n transactionHistoryLimit = 100,\n coverageHistoryLimit = 10,\n normalizeSignatureRequest,\n } = options;\n super({\n name: controllerName,\n metadata,\n messenger,\n state: {\n ...getDefaultShieldControllerState(),\n ...state,\n },\n });\n\n this.#coverageHistoryLimit = coverageHistoryLimit;\n this.#transactionHistoryLimit = transactionHistoryLimit;\n this.#transactionControllerStateChangeHandler =\n this.#handleTransactionControllerStateChange.bind(this);\n this.#signatureControllerStateChangeHandler =\n this.#handleSignatureControllerStateChange.bind(this);\n this.#started = false;\n this.#normalizeSignatureRequest = normalizeSignatureRequest;\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n\n /**\n * Start the ShieldController and subscribe to the transaction and signature controller state changes.\n */\n start(): void {\n if (this.#started) {\n return;\n }\n this.#started = true;\n\n this.messenger.subscribe(\n 'TransactionController:stateChange',\n this.#transactionControllerStateChangeHandler,\n (state) => state.transactions,\n );\n\n this.messenger.subscribe(\n 'SignatureController:stateChange',\n this.#signatureControllerStateChangeHandler,\n (state) => state.signatureRequests,\n );\n }\n\n /**\n * Stop the ShieldController and unsubscribe from the transaction and signature controller state changes.\n */\n stop(): void {\n if (!this.#started) {\n return;\n }\n this.#started = false;\n\n this.messenger.unsubscribe(\n 'TransactionController:stateChange',\n this.#transactionControllerStateChangeHandler,\n );\n\n this.messenger.unsubscribe(\n 'SignatureController:stateChange',\n this.#signatureControllerStateChangeHandler,\n );\n }\n\n /**\n * Clears the shield state and resets to default values.\n */\n clearState(): void {\n this.update(() => {\n return getDefaultShieldControllerState();\n });\n }\n\n #handleSignatureControllerStateChange(\n signatureRequests: Record<string, SignatureRequest>,\n previousSignatureRequests: Record<string, SignatureRequest> | undefined,\n ): void {\n const signatureRequestsArray = Object.values(signatureRequests);\n const previousSignatureRequestsArray = Object.values(\n previousSignatureRequests ?? {},\n );\n const previousSignatureRequestsById = new Map<string, SignatureRequest>(\n previousSignatureRequestsArray.map((request) => [request.id, request]),\n );\n for (const signatureRequest of signatureRequestsArray) {\n const previousSignatureRequest = previousSignatureRequestsById.get(\n signatureRequest.id,\n );\n\n // Check coverage if the signature request is new.\n if (!previousSignatureRequest) {\n this.checkSignatureCoverage(signatureRequest).catch(\n // istanbul ignore next\n (error) => log('Error checking coverage:', error),\n );\n }\n\n // Log signature once the signature request has been fulfilled.\n if (\n signatureRequest.status === SignatureRequestStatus.Signed &&\n signatureRequest.status !== previousSignatureRequest?.status\n ) {\n this.#logSignature(signatureRequest).catch(\n // istanbul ignore next\n (error) => log('Error logging signature:', error),\n );\n }\n }\n }\n\n #handleTransactionControllerStateChange(\n transactions: TransactionMeta[],\n previousTransactions: TransactionMeta[] | undefined,\n ): void {\n const previousTransactionsById = new Map<string, TransactionMeta>(\n previousTransactions?.map((tx) => [tx.id, tx]) ?? [],\n );\n for (const transaction of transactions) {\n const previousTransaction = previousTransactionsById.get(transaction.id);\n\n if (\n // We don't need to check coverage for submitted or confirmed transactions.\n transaction.status !== TransactionStatus.submitted &&\n transaction.status !== TransactionStatus.confirmed\n ) {\n // Check if the simulation data has changed.\n const simulationDataChanged =\n // only check if the previous transaction has simulation data and if it has changed\n // this is to avoid checking coverage for the `TWICE` (once when it's added to the state and once when it's simulated for the first time).\n // we only need to update the coverage result when the simulation data has changed.\n previousTransaction?.simulationData &&\n !isEqual(\n transaction.simulationData,\n previousTransaction.simulationData,\n );\n\n // Check coverage if the transaction is new or if the simulation data has\n // changed.\n if (!previousTransaction || simulationDataChanged) {\n this.checkCoverage(transaction).catch(\n // istanbul ignore next\n (error) => log('Error checking coverage:', error),\n );\n }\n }\n\n // Log transaction once it has been submitted.\n if (\n transaction.status === TransactionStatus.submitted &&\n transaction.status !== previousTransaction?.status\n ) {\n this.#logTransaction(transaction).catch(\n // istanbul ignore next\n (error) => log('Error logging transaction:', error),\n );\n }\n }\n }\n\n /**\n * Checks the coverage of a transaction.\n *\n * @param txMeta - The transaction to check coverage for.\n * @returns The coverage result.\n */\n async checkCoverage(txMeta: TransactionMeta): Promise<CoverageResult> {\n // Check coverage\n const coverageId = this.#getLatestCoverageId(txMeta.id);\n const coverageResult = await this.messenger.call(\n 'ShieldApiService:checkCoverage',\n {\n txMeta,\n coverageId,\n },\n );\n\n // Publish coverage result\n this.messenger.publish(\n `${controllerName}:coverageResultReceived`,\n coverageResult,\n );\n\n // Update state\n this.#addCoverageResult(txMeta.id, coverageResult);\n\n return coverageResult;\n }\n\n /**\n * Checks the coverage of a signature request.\n *\n * @param signatureRequest - The signature request to check coverage for.\n * @returns The coverage result.\n */\n async checkSignatureCoverage(\n signatureRequest: SignatureRequest,\n ): Promise<CoverageResult> {\n // Check coverage\n const coverageId = this.#getLatestCoverageId(signatureRequest.id);\n\n // Normalize the signature request before sending it to the backend.\n // This is to ensure that the signature data is normalized and consistent as the security alerts api calls.\n const clonedSignatureRequest = cloneDeep(signatureRequest);\n const normalizedSignatureRequest =\n this.#normalizeSignatureRequest?.(clonedSignatureRequest) ??\n clonedSignatureRequest;\n const coverageResult = await this.messenger.call(\n 'ShieldApiService:checkSignatureCoverage',\n {\n signatureRequest: normalizedSignatureRequest,\n coverageId,\n },\n );\n\n // Publish coverage result\n this.messenger.publish(\n `${controllerName}:coverageResultReceived`,\n coverageResult,\n );\n\n // Update state\n this.#addCoverageResult(signatureRequest.id, coverageResult);\n\n return coverageResult;\n }\n\n #addCoverageResult(txId: string, coverageResult: CoverageResult): void {\n // Assert the coverageId hasn't changed.\n const latestCoverageId = this.#getLatestCoverageId(txId);\n if (latestCoverageId && coverageResult.coverageId !== latestCoverageId) {\n throw new Error('Coverage ID has changed');\n }\n\n this.update((draft) => {\n // Fetch coverage result entry.\n let newEntry = false;\n let coverageResultEntry = draft.coverageResults[txId];\n\n // Create new entry if necessary.\n if (!coverageResultEntry) {\n newEntry = true;\n coverageResultEntry = {\n results: [],\n };\n draft.coverageResults[txId] = coverageResultEntry;\n }\n\n // Trim coverage history if necessary.\n if (coverageResultEntry.results.length >= this.#coverageHistoryLimit) {\n coverageResultEntry.results.pop();\n }\n\n // Add new result.\n coverageResultEntry.results.unshift(coverageResult);\n\n // Add to history if new entry.\n const { orderedTransactionHistory } = draft;\n let removedTxId: string | undefined;\n if (newEntry) {\n // Trim transaction history if necessary.\n if (orderedTransactionHistory.length >= this.#transactionHistoryLimit) {\n removedTxId = orderedTransactionHistory.pop();\n // Delete corresponding coverage result entry.\n if (removedTxId) {\n delete draft.coverageResults[removedTxId];\n }\n }\n // Add to history.\n orderedTransactionHistory.unshift(txId);\n }\n });\n }\n\n async #logSignature(signatureRequest: SignatureRequest): Promise<void> {\n const signature = signatureRequest.rawSig;\n if (!signature) {\n throw new Error('Signature not found');\n }\n\n const { status } = this.#getCoverageShownStatus(signatureRequest.id);\n\n await this.messenger.call('ShieldApiService:logSignature', {\n signatureRequest,\n signature,\n status,\n });\n }\n\n async #logTransaction(txMeta: TransactionMeta): Promise<void> {\n const transactionHash = txMeta.hash;\n if (!transactionHash) {\n throw new Error('Transaction hash not found');\n }\n\n const rawTransactionHex = txMeta.rawTx;\n if (!rawTransactionHex) {\n throw new Error('Raw transaction hex not found');\n }\n\n const { status } = this.#getCoverageShownStatus(txMeta.id);\n\n await this.messenger.call('ShieldApiService:logTransaction', {\n txMeta,\n transactionHash,\n rawTransactionHex,\n status,\n });\n }\n\n /**\n * Get the coverage shown status for a given item ID.\n *\n * @param itemId - The item ID to get the coverage status for.\n * @returns The coverage status.\n */\n #getCoverageShownStatus(itemId: string): { status: string } {\n // The status is assigned as follows:\n // - 'shown' if we have a result\n // - 'not_shown' if we don't have a result\n const coverageId = this.#getLatestCoverageId(itemId);\n let status = 'shown';\n if (!coverageId) {\n log('Coverage ID not found for', itemId);\n status = 'not_shown';\n }\n return { status };\n }\n\n #getLatestCoverageId(itemId: string): string | undefined {\n return this.state.coverageResults[itemId]?.results[0]?.coverageId;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,cAAc,qBAAqB,CAAC;AAEjD;;GAEG;AACH,oBAAY,GAAG;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAIlD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAMpD;AAED;;;;GAIG;AACH,oBAAY,oBAAoB;IAC9B,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;CACV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAN,IAAY,GAIX;AAJD,WAAY,GAAG;IACb,kBAAW,CAAA;IACX,kBAAW,CAAA;IACX,kBAAW,CAAA;AACb,CAAC,EAJW,GAAG,KAAH,GAAG,QAId;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,+CAA+C;IAC1D,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,+CAA+C;IAC1D,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,2CAA2C;CACvD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAQ;IAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAN,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,iCAAS,CAAA;IACT,iCAAS,CAAA;IACT,iCAAS,CAAA;AACX,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,QAI/B","sourcesContent":["/**\n * The name of the {@link ShieldController}.\n */\nexport const controllerName = 'ShieldController';\n\n/**\n * The environment for the shield backend API.\n */\nexport enum Env {\n DEV = 'dev',\n UAT = 'uat',\n PRD = 'prd',\n}\n\n/**\n * The shield backend API URL for each environment.\n */\nexport const SHIELD_API_URL_MAP: Record<Env, string> = {\n [Env.DEV]: 'https://ruleset-engine.dev-api.cx.metamask.io',\n [Env.UAT]: 'https://ruleset-engine.uat-api.cx.metamask.io',\n [Env.PRD]: 'https://ruleset-engine.api.cx.metamask.io',\n};\n\n/**\n * Get the shield backend API URL for the given environment.\n *\n * @param env - The environment.\n * @returns The base URL for the given environment.\n * @throws If the environment is invalid.\n */\nexport function getShieldApiBaseUrl(env: Env): string {\n const baseUrl = SHIELD_API_URL_MAP[env];\n if (!baseUrl) {\n throw new Error('invalid environment configuration');\n }\n return baseUrl;\n}\n\n/**\n * The `signTypedMessage` version\n *\n * @see https://docs.metamask.io/guide/signing-data.html\n */\nexport enum SignTypedDataVersion {\n V1 = 'V1',\n V3 = 'V3',\n V4 = 'V4',\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export type { CoverageStatus, LogSignatureRequest, LogTransactionRequest, NormalizeSignatureRequestFn, CheckCoverageRequest, CheckSignatureCoverageRequest, CoverageResult, } from
|
|
2
|
-
export type { ShieldControllerActions, ShieldControllerEvents, ShieldControllerMessenger, ShieldControllerState, ShieldControllerGetStateAction, ShieldControllerCoverageResultReceivedEvent, ShieldControllerStateChangeEvent, } from
|
|
3
|
-
export type { ShieldControllerStartAction, ShieldControllerStopAction, ShieldControllerClearStateAction, ShieldControllerCheckCoverageAction, ShieldControllerCheckSignatureCoverageAction, } from
|
|
4
|
-
export { ShieldController, getDefaultShieldControllerState, } from
|
|
5
|
-
export { ShieldApiService, serviceName, makeInitCoverageCheckBody, parseSignatureRequestMethod, } from
|
|
6
|
-
export type { ShieldApiServiceMessenger, ShieldApiServiceActions, ShieldApiServiceEvents, ShieldApiServiceInvalidateQueriesAction, ShieldApiServiceCacheUpdatedEvent, ShieldApiServiceGranularCacheUpdatedEvent, } from
|
|
7
|
-
export type { ShieldApiServiceCheckCoverageAction, ShieldApiServiceCheckSignatureCoverageAction, ShieldApiServiceLogSignatureAction, ShieldApiServiceLogTransactionAction, } from
|
|
8
|
-
export { Env, SHIELD_API_URL_MAP, getShieldApiBaseUrl } from
|
|
9
|
-
//# sourceMappingURL=index.d.
|
|
1
|
+
export type { CoverageStatus, LogSignatureRequest, LogTransactionRequest, NormalizeSignatureRequestFn, CheckCoverageRequest, CheckSignatureCoverageRequest, CoverageResult, } from './types.js';
|
|
2
|
+
export type { ShieldControllerActions, ShieldControllerEvents, ShieldControllerMessenger, ShieldControllerState, ShieldControllerGetStateAction, ShieldControllerCoverageResultReceivedEvent, ShieldControllerStateChangeEvent, } from './ShieldController.js';
|
|
3
|
+
export type { ShieldControllerStartAction, ShieldControllerStopAction, ShieldControllerClearStateAction, ShieldControllerCheckCoverageAction, ShieldControllerCheckSignatureCoverageAction, } from './ShieldController-method-action-types.js';
|
|
4
|
+
export { ShieldController, getDefaultShieldControllerState, } from './ShieldController.js';
|
|
5
|
+
export { ShieldApiService, serviceName, makeInitCoverageCheckBody, parseSignatureRequestMethod, } from './shield-api-service.js';
|
|
6
|
+
export type { ShieldApiServiceMessenger, ShieldApiServiceActions, ShieldApiServiceEvents, ShieldApiServiceInvalidateQueriesAction, ShieldApiServiceCacheUpdatedEvent, ShieldApiServiceGranularCacheUpdatedEvent, } from './shield-api-service.js';
|
|
7
|
+
export type { ShieldApiServiceCheckCoverageAction, ShieldApiServiceCheckSignatureCoverageAction, ShieldApiServiceLogSignatureAction, ShieldApiServiceLogTransactionAction, } from './shield-api-service-method-action-types.js';
|
|
8
|
+
export { Env, SHIELD_API_URL_MAP, getShieldApiBaseUrl } from './constants.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,6BAA6B,EAC7B,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,8BAA8B,EAC9B,2CAA2C,EAC3C,gCAAgC,GACjC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,4CAA4C,GAC7C,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,EACtB,uCAAuC,EACvC,iCAAiC,EACjC,yCAAyC,GAC1C,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,mCAAmC,EACnC,4CAA4C,EAC5C,kCAAkC,EAClC,oCAAoC,GACrC,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ShieldController, getDefaultShieldControllerState, } from './ShieldController.js';
|
|
2
|
+
export { ShieldApiService, serviceName, makeInitCoverageCheckBody, parseSignatureRequestMethod, } from './shield-api-service.js';
|
|
3
|
+
export { Env, SHIELD_API_URL_MAP, getShieldApiBaseUrl } from './constants.js';
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,gBAAgB,EAChB,+BAA+B,GAChC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AAejC,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["export type {\n CoverageStatus,\n LogSignatureRequest,\n LogTransactionRequest,\n NormalizeSignatureRequestFn,\n CheckCoverageRequest,\n CheckSignatureCoverageRequest,\n CoverageResult,\n} from './types.js';\nexport type {\n ShieldControllerActions,\n ShieldControllerEvents,\n ShieldControllerMessenger,\n ShieldControllerState,\n ShieldControllerGetStateAction,\n ShieldControllerCoverageResultReceivedEvent,\n ShieldControllerStateChangeEvent,\n} from './ShieldController.js';\nexport type {\n ShieldControllerStartAction,\n ShieldControllerStopAction,\n ShieldControllerClearStateAction,\n ShieldControllerCheckCoverageAction,\n ShieldControllerCheckSignatureCoverageAction,\n} from './ShieldController-method-action-types.js';\nexport {\n ShieldController,\n getDefaultShieldControllerState,\n} from './ShieldController.js';\nexport {\n ShieldApiService,\n serviceName,\n makeInitCoverageCheckBody,\n parseSignatureRequestMethod,\n} from './shield-api-service.js';\nexport type {\n ShieldApiServiceMessenger,\n ShieldApiServiceActions,\n ShieldApiServiceEvents,\n ShieldApiServiceInvalidateQueriesAction,\n ShieldApiServiceCacheUpdatedEvent,\n ShieldApiServiceGranularCacheUpdatedEvent,\n} from './shield-api-service.js';\nexport type {\n ShieldApiServiceCheckCoverageAction,\n ShieldApiServiceCheckSignatureCoverageAction,\n ShieldApiServiceLogSignatureAction,\n ShieldApiServiceLogTransactionAction,\n} from './shield-api-service-method-action-types.js';\nexport { Env, SHIELD_API_URL_MAP, getShieldApiBaseUrl } from './constants.js';\n"]}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAI1E,eAAO,MAAM,aAAa,0BAAsC,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;AAEjE,OAAO,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import { createProjectLogger, createModuleLogger } from '@metamask/utils';\n\nimport { controllerName } from './constants.js';\n\nexport const projectLogger = createProjectLogger(controllerName);\n\nexport { createModuleLogger };\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CreateServicePolicyOptions } from
|
|
1
|
+
import type { CreateServicePolicyOptions } from '@metamask/controller-utils';
|
|
2
2
|
export type RequestFn<ReturnType> = (signal: AbortSignal) => Promise<ReturnType>;
|
|
3
3
|
export declare class PollingWithCockatielPolicy {
|
|
4
4
|
#private;
|
|
@@ -6,4 +6,4 @@ export declare class PollingWithCockatielPolicy {
|
|
|
6
6
|
start<ReturnType>(requestId: string, requestFn: RequestFn<ReturnType>): Promise<ReturnType>;
|
|
7
7
|
abortPendingRequest(requestId: string): void;
|
|
8
8
|
}
|
|
9
|
-
//# sourceMappingURL=polling-with-policy.d.
|
|
9
|
+
//# sourceMappingURL=polling-with-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling-with-policy.d.ts","sourceRoot":"","sources":["../src/polling-with-policy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,0BAA0B,EAE3B,MAAM,4BAA4B,CAAC;AAGpC,MAAM,MAAM,SAAS,CAAC,UAAU,IAAI,CAClC,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB,qBAAa,0BAA0B;;IAKrC,YAAY,aAAa,GAAE,0BAA+B,EAOzD;IAEK,KAAK,CAAC,UAAU,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,GAC/B,OAAO,CAAC,UAAU,CAAC,CAqBrB;IAED,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAI3C;CAwBF"}
|
|
@@ -10,8 +10,8 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
10
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
11
|
};
|
|
12
12
|
var _PollingWithCockatielPolicy_instances, _PollingWithCockatielPolicy_policy, _PollingWithCockatielPolicy_requestEntry, _PollingWithCockatielPolicy_addNewRequestEntry, _PollingWithCockatielPolicy_cleanup, _PollingWithCockatielPolicy_shouldRetry;
|
|
13
|
-
import { createServicePolicy, HttpError } from
|
|
14
|
-
import { handleWhen } from
|
|
13
|
+
import { createServicePolicy, HttpError } from '@metamask/controller-utils';
|
|
14
|
+
import { handleWhen } from 'cockatiel';
|
|
15
15
|
export class PollingWithCockatielPolicy {
|
|
16
16
|
constructor(policyOptions = {}) {
|
|
17
17
|
_PollingWithCockatielPolicy_instances.add(this);
|
|
@@ -70,4 +70,4 @@ _PollingWithCockatielPolicy_policy = new WeakMap(), _PollingWithCockatielPolicy_
|
|
|
70
70
|
}
|
|
71
71
|
return false;
|
|
72
72
|
};
|
|
73
|
-
//# sourceMappingURL=polling-with-policy.
|
|
73
|
+
//# sourceMappingURL=polling-with-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polling-with-policy.js","sourceRoot":"","sources":["../src/polling-with-policy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAK5E,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAMvC,MAAM,OAAO,0BAA0B;IAKrC,YAAY,aAAa,GAA+B,EAAE;;QAJjD,qDAAuB;QAEvB,mDAAgB,IAAI,GAAG,EAA2B,EAAC;QAG1D,MAAM,eAAe,GAAG,uBAAA,IAAI,sFAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,iBAAiB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;QACtD,uBAAA,IAAI,sCAAW,mBAAmB,CAAC;YACjC,GAAG,aAAa;YAChB,iBAAiB;SAClB,CAAC,MAAA,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CACT,SAAiB,EACjB,SAAgC;QAEhC,MAAM,eAAe,GAAG,uBAAA,IAAI,6FAAoB,MAAxB,IAAI,EAAqB,SAAS,CAAC,CAAC;QAE5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAA,IAAI,0CAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC7D,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;YAC3B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,wFAAwF;YACxF,oGAAoG;YACpG,oFAAoF;YACpF,IAAI,eAAe,KAAK,uBAAA,IAAI,gDAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1D,uBAAA,IAAI,kFAAS,MAAb,IAAI,EAAU,SAAS,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB,CAAC,SAAiB;QACnC,MAAM,eAAe,GAAG,uBAAA,IAAI,gDAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1D,eAAe,EAAE,KAAK,EAAE,CAAC;QACzB,uBAAA,IAAI,kFAAS,MAAb,IAAI,EAAU,SAAS,CAAC,CAAC;IAC3B,CAAC;CAwBF;8QAtBqB,SAAiB;IACnC,0CAA0C;IAC1C,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAEpC,oDAAoD;IACpD,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,uBAAA,IAAI,gDAAc,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACnD,OAAO,eAAe,CAAC;AACzB,CAAC,qFAEQ,SAAiB;IACxB,uBAAA,IAAI,gDAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC,6FAEY,KAAY;IACvB,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAC/B,0DAA0D;QAC1D,2EAA2E;QAC3E,OAAO,KAAK,CAAC,UAAU,GAAG,GAAG,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { createServicePolicy, HttpError } from '@metamask/controller-utils';\nimport type {\n CreateServicePolicyOptions,\n ServicePolicy,\n} from '@metamask/controller-utils';\nimport { handleWhen } from 'cockatiel';\n\nexport type RequestFn<ReturnType> = (\n signal: AbortSignal,\n) => Promise<ReturnType>;\n\nexport class PollingWithCockatielPolicy {\n readonly #policy: ServicePolicy;\n\n readonly #requestEntry = new Map<string, AbortController>();\n\n constructor(policyOptions: CreateServicePolicyOptions = {}) {\n const shouldRetryFunc = this.#shouldRetry.bind(this);\n const retryFilterPolicy = handleWhen(shouldRetryFunc);\n this.#policy = createServicePolicy({\n ...policyOptions,\n retryFilterPolicy,\n });\n }\n\n async start<ReturnType>(\n requestId: string,\n requestFn: RequestFn<ReturnType>,\n ): Promise<ReturnType> {\n const abortController = this.#addNewRequestEntry(requestId);\n\n try {\n const result = await this.#policy.execute(async ({ signal }) => {\n return requestFn(signal);\n }, abortController.signal);\n return result;\n } catch (error) {\n if (abortController.signal.aborted) {\n throw new Error('Request cancelled');\n }\n throw error;\n } finally {\n // Only cleanup if this abort controller is still active. If a new request with the same\n // requestId started while this one was running, it would have replaced with a new abort controller.\n // We must not delete the new request's controller when this older request finishes.\n if (abortController === this.#requestEntry.get(requestId)) {\n this.#cleanup(requestId);\n }\n }\n }\n\n abortPendingRequest(requestId: string): void {\n const abortController = this.#requestEntry.get(requestId);\n abortController?.abort();\n this.#cleanup(requestId);\n }\n\n #addNewRequestEntry(requestId: string): AbortController {\n // abort the previous request if it exists\n this.abortPendingRequest(requestId);\n\n // create a new abort controller for the new request\n const abortController = new AbortController();\n this.#requestEntry.set(requestId, abortController);\n return abortController;\n }\n\n #cleanup(requestId: string): void {\n this.#requestEntry.delete(requestId);\n }\n\n #shouldRetry(error: Error): boolean {\n if (error instanceof HttpError) {\n // Note: we don't retry on 5xx errors, only on 4xx errors.\n // but we won't retry on 400 coz it means that the request body is invalid.\n return error.httpStatus > 400 && error.httpStatus < 500;\n }\n return false;\n }\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* This file is auto generated.
|
|
3
3
|
* Do not edit manually.
|
|
4
4
|
*/
|
|
5
|
-
import type { ShieldApiService } from
|
|
5
|
+
import type { ShieldApiService } from './shield-api-service.js';
|
|
6
6
|
/**
|
|
7
7
|
* Checks the coverage of a transaction.
|
|
8
8
|
*
|
|
@@ -45,4 +45,4 @@ export type ShieldApiServiceLogTransactionAction = {
|
|
|
45
45
|
* Union of all ShieldApiService action types.
|
|
46
46
|
*/
|
|
47
47
|
export type ShieldApiServiceMethodActions = ShieldApiServiceCheckCoverageAction | ShieldApiServiceCheckSignatureCoverageAction | ShieldApiServiceLogSignatureAction | ShieldApiServiceLogTransactionAction;
|
|
48
|
-
//# sourceMappingURL=shield-api-service-method-action-types.d.
|
|
48
|
+
//# sourceMappingURL=shield-api-service-method-action-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shield-api-service-method-action-types.d.ts","sourceRoot":"","sources":["../src/shield-api-service-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,MAAM,mCAAmC,GAAG;IAChD,IAAI,EAAE,gCAAgC,CAAC;IACvC,OAAO,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;CAC5C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD,IAAI,EAAE,yCAAyC,CAAC;IAChD,OAAO,EAAE,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;CACrD,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,kCAAkC,GAAG;IAC/C,IAAI,EAAE,+BAA+B,CAAC;IACtC,OAAO,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;CAC3C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,oCAAoC,GAAG;IACjD,IAAI,EAAE,iCAAiC,CAAC;IACxC,OAAO,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;CAC7C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,6BAA6B,GACrC,mCAAmC,GACnC,4CAA4C,GAC5C,kCAAkC,GAClC,oCAAoC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shield-api-service-method-action-types.js","sourceRoot":"","sources":["../src/shield-api-service-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated.\n * Do not edit manually.\n */\n\nimport type { ShieldApiService } from './shield-api-service.js';\n\n/**\n * Checks the coverage of a transaction.\n *\n * @param req - The coverage check request.\n * @returns The coverage result.\n */\nexport type ShieldApiServiceCheckCoverageAction = {\n type: `ShieldApiService:checkCoverage`;\n handler: ShieldApiService['checkCoverage'];\n};\n\n/**\n * Checks the coverage of a signature request.\n *\n * @param req - The signature coverage check request.\n * @returns The coverage result.\n */\nexport type ShieldApiServiceCheckSignatureCoverageAction = {\n type: `ShieldApiService:checkSignatureCoverage`;\n handler: ShieldApiService['checkSignatureCoverage'];\n};\n\n/**\n * Logs a signed signature request.\n *\n * @param req - The log signature request.\n */\nexport type ShieldApiServiceLogSignatureAction = {\n type: `ShieldApiService:logSignature`;\n handler: ShieldApiService['logSignature'];\n};\n\n/**\n * Logs a submitted transaction.\n *\n * @param req - The log transaction request.\n */\nexport type ShieldApiServiceLogTransactionAction = {\n type: `ShieldApiService:logTransaction`;\n handler: ShieldApiService['logTransaction'];\n};\n\n/**\n * Union of all ShieldApiService action types.\n */\nexport type ShieldApiServiceMethodActions =\n | ShieldApiServiceCheckCoverageAction\n | ShieldApiServiceCheckSignatureCoverageAction\n | ShieldApiServiceLogSignatureAction\n | ShieldApiServiceLogTransactionAction;\n"]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { BaseDataService } from
|
|
2
|
-
import type { DataServiceCacheUpdatedEvent, DataServiceGranularCacheUpdatedEvent, DataServiceInvalidateQueriesAction } from
|
|
3
|
-
import type { CreateServicePolicyOptions } from
|
|
4
|
-
import type { Messenger } from
|
|
5
|
-
import type { AuthenticationController } from
|
|
6
|
-
import type { SignatureRequest } from
|
|
7
|
-
import type { TransactionMeta } from
|
|
8
|
-
import type { AuthorizationList } from
|
|
9
|
-
import type { Json } from
|
|
10
|
-
import type { QueryClientConfig } from
|
|
11
|
-
import { Env } from
|
|
12
|
-
import type { ShieldApiServiceMethodActions } from
|
|
13
|
-
import type { CheckCoverageRequest, CheckSignatureCoverageRequest, CoverageResult, CoverageStatus, LogSignatureRequest, LogTransactionRequest } from
|
|
1
|
+
import { BaseDataService } from '@metamask/base-data-service';
|
|
2
|
+
import type { DataServiceCacheUpdatedEvent, DataServiceGranularCacheUpdatedEvent, DataServiceInvalidateQueriesAction } from '@metamask/base-data-service';
|
|
3
|
+
import type { CreateServicePolicyOptions } from '@metamask/controller-utils';
|
|
4
|
+
import type { Messenger } from '@metamask/messenger';
|
|
5
|
+
import type { AuthenticationController } from '@metamask/profile-sync-controller';
|
|
6
|
+
import type { SignatureRequest } from '@metamask/signature-controller';
|
|
7
|
+
import type { TransactionMeta } from '@metamask/transaction-controller';
|
|
8
|
+
import type { AuthorizationList } from '@metamask/transaction-controller';
|
|
9
|
+
import type { Json } from '@metamask/utils';
|
|
10
|
+
import type { QueryClientConfig } from '@tanstack/query-core';
|
|
11
|
+
import { Env } from './constants.js';
|
|
12
|
+
import type { ShieldApiServiceMethodActions } from './shield-api-service-method-action-types.js';
|
|
13
|
+
import type { CheckCoverageRequest, CheckSignatureCoverageRequest, CoverageResult, CoverageStatus, LogSignatureRequest, LogTransactionRequest } from './types.js';
|
|
14
14
|
export type InitCoverageCheckRequest = {
|
|
15
15
|
txParams: [
|
|
16
16
|
{
|
|
@@ -161,4 +161,4 @@ export declare function makeInitCoverageCheckBody(txMeta: TransactionMeta): Init
|
|
|
161
161
|
*/
|
|
162
162
|
export declare function parseSignatureRequestMethod(signatureRequest: SignatureRequest): string;
|
|
163
163
|
export {};
|
|
164
|
-
//# sourceMappingURL=shield-api-service.d.
|
|
164
|
+
//# sourceMappingURL=shield-api-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shield-api-service.d.ts","sourceRoot":"","sources":["../src/shield-api-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,11 +10,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
12
|
var _ShieldApiService_instances, _ShieldApiService_baseUrl, _ShieldApiService_fetch, _ShieldApiService_pollingPolicy, _ShieldApiService_captureException, _ShieldApiService_initCoverageCheck, _ShieldApiService_getCoverageResult, _ShieldApiService_authHeaders;
|
|
13
|
-
import { BaseDataService } from
|
|
14
|
-
import { ConstantBackoff, DEFAULT_MAX_RETRIES, HttpError } from
|
|
15
|
-
import { EthMethod, SignatureRequestType } from
|
|
16
|
-
import {
|
|
17
|
-
import { PollingWithCockatielPolicy } from
|
|
13
|
+
import { BaseDataService } from '@metamask/base-data-service';
|
|
14
|
+
import { ConstantBackoff, DEFAULT_MAX_RETRIES, HttpError, } from '@metamask/controller-utils';
|
|
15
|
+
import { EthMethod, SignatureRequestType, } from '@metamask/signature-controller';
|
|
16
|
+
import { getShieldApiBaseUrl, SignTypedDataVersion } from './constants.js';
|
|
17
|
+
import { PollingWithCockatielPolicy } from './polling-with-policy.js';
|
|
18
18
|
/**
|
|
19
19
|
* The name of the {@link ShieldApiService}, used to namespace the service's
|
|
20
20
|
* actions and events.
|
|
@@ -362,4 +362,4 @@ function createSentryError(errorMessage, cause) {
|
|
|
362
362
|
error.cause = cause;
|
|
363
363
|
return error;
|
|
364
364
|
}
|
|
365
|
-
//# sourceMappingURL=shield-api-service.
|
|
365
|
+
//# sourceMappingURL=shield-api-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shield-api-service.js","sourceRoot":"","sources":["../src/shield-api-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseDataService } from '@metamask/base-data-service';\nimport type {\n DataServiceCacheUpdatedEvent,\n DataServiceGranularCacheUpdatedEvent,\n DataServiceInvalidateQueriesAction,\n} from '@metamask/base-data-service';\nimport type { CreateServicePolicyOptions } from '@metamask/controller-utils';\nimport {\n ConstantBackoff,\n DEFAULT_MAX_RETRIES,\n HttpError,\n} from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type { AuthenticationController } from '@metamask/profile-sync-controller';\nimport {\n EthMethod,\n SignatureRequestType,\n} from '@metamask/signature-controller';\nimport type { SignatureRequest } from '@metamask/signature-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\nimport type { AuthorizationList } from '@metamask/transaction-controller';\nimport type { Json } from '@metamask/utils';\nimport type { QueryClientConfig } from '@tanstack/query-core';\n\nimport { Env, getShieldApiBaseUrl, SignTypedDataVersion } from './constants.js';\nimport { PollingWithCockatielPolicy } from './polling-with-policy.js';\nimport type { ShieldApiServiceMethodActions } from './shield-api-service-method-action-types.js';\nimport type {\n CheckCoverageRequest,\n CheckSignatureCoverageRequest,\n CoverageResult,\n CoverageStatus,\n LogSignatureRequest,\n LogTransactionRequest,\n} from './types.js';\n\nexport type InitCoverageCheckRequest = {\n txParams: [\n {\n authorizationList?: AuthorizationList;\n from: string;\n to?: string;\n value?: string;\n data?: string;\n nonce?: string;\n },\n ];\n chainId: string;\n origin?: string;\n};\n\nexport type InitSignatureCoverageCheckRequest = {\n chainId: string;\n data: Json;\n from: string;\n method: string;\n origin?: string;\n};\n\nexport type InitCoverageCheckResponse = {\n coverageId: string;\n};\n\nexport type GetCoverageResultRequest = {\n coverageId: string;\n};\n\nexport type GetCoverageResultResponse = {\n message?: string;\n reasonCode?: string;\n status: CoverageStatus;\n metrics: {\n latency?: number;\n };\n};\n\n/**\n * The name of the {@link ShieldApiService}, used to namespace the service's\n * actions and events.\n */\nexport const serviceName = 'ShieldApiService';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'checkCoverage',\n 'checkSignatureCoverage',\n 'logSignature',\n 'logTransaction',\n] as const;\n\nconst DEFAULT_POLICY_OPTIONS: CreateServicePolicyOptions = {\n maxRetries: 0,\n};\n\n/**\n * Invalidates cached queries for {@link ShieldApiService}.\n */\nexport type ShieldApiServiceInvalidateQueriesAction =\n DataServiceInvalidateQueriesAction<typeof serviceName>;\n\n/**\n * Actions that {@link ShieldApiService} exposes to other consumers.\n */\nexport type ShieldApiServiceActions =\n | ShieldApiServiceMethodActions\n | ShieldApiServiceInvalidateQueriesAction;\n\n/**\n * Actions from other messengers that {@link ShieldApiService} calls.\n */\ntype AllowedActions =\n AuthenticationController.AuthenticationControllerGetBearerTokenAction;\n\n/**\n * Published when {@link ShieldApiService}'s cache is updated.\n */\nexport type ShieldApiServiceCacheUpdatedEvent = DataServiceCacheUpdatedEvent<\n typeof serviceName\n>;\n\n/**\n * Published when a key within {@link ShieldApiService}'s cache is updated.\n */\nexport type ShieldApiServiceGranularCacheUpdatedEvent =\n DataServiceGranularCacheUpdatedEvent<typeof serviceName>;\n\n/**\n * Events that {@link ShieldApiService} exposes to other consumers.\n */\nexport type ShieldApiServiceEvents =\n | ShieldApiServiceCacheUpdatedEvent\n | ShieldApiServiceGranularCacheUpdatedEvent;\n\n/**\n * Events from other messengers that {@link ShieldApiService} subscribes to.\n */\ntype AllowedEvents = never;\n\n/**\n * The messenger which is restricted to actions and events accessed by\n * {@link ShieldApiService}.\n */\nexport type ShieldApiServiceMessenger = Messenger<\n typeof serviceName,\n ShieldApiServiceActions | AllowedActions,\n ShieldApiServiceEvents | AllowedEvents\n>;\n\n/**\n * This service is responsible for communicating with the Shield API.\n *\n * All requests are authenticated via JWT Bearer tokens obtained from the\n * `AuthenticationController:getBearerToken` messenger action.\n */\nexport class ShieldApiService extends BaseDataService<\n typeof serviceName,\n ShieldApiServiceMessenger\n> {\n readonly #baseUrl: string;\n\n readonly #fetch: typeof globalThis.fetch;\n\n readonly #pollingPolicy: PollingWithCockatielPolicy;\n\n readonly #captureException?: (error: Error) => void;\n\n /**\n * Constructs a new ShieldApiService.\n *\n * @param args - The constructor arguments.\n * @param args.messenger - The messenger suited for this service.\n * @param args.env - The environment used to resolve the Shield API URL.\n * @param args.fetch - The fetch implementation. Defaults to `globalThis.fetch`.\n * @param args.captureException - Optional error reporter.\n * @param args.getCoverageResultTimeout - Timeout for coverage result polling.\n * @param args.getCoverageResultPollInterval - Poll interval for coverage results.\n * @param args.queryClientConfig - Configuration for the underlying TanStack\n * Query client.\n * @param args.policyOptions - Options to pass to `createServicePolicy`.\n */\n constructor({\n messenger,\n env,\n fetch: fetchFn = globalThis.fetch,\n captureException: captureExceptionFn,\n getCoverageResultTimeout = 5000,\n getCoverageResultPollInterval = 1000,\n queryClientConfig = {},\n policyOptions = {},\n }: {\n messenger: ShieldApiServiceMessenger;\n env: Env;\n /**\n * The `fetch` function to use for requests. Defaults to the global `fetch`.\n */\n fetch?: typeof globalThis.fetch;\n captureException?: (error: Error) => void;\n getCoverageResultTimeout?: number;\n getCoverageResultPollInterval?: number;\n queryClientConfig?: QueryClientConfig;\n policyOptions?: CreateServicePolicyOptions;\n }) {\n super({\n name: serviceName,\n messenger,\n queryClientConfig,\n policyOptions: { ...DEFAULT_POLICY_OPTIONS, ...policyOptions },\n });\n\n this.#baseUrl = getShieldApiBaseUrl(env);\n this.#fetch = fetchFn;\n\n const { backoff, maxRetries } = computePollingIntervalAndRetryCount(\n getCoverageResultTimeout,\n getCoverageResultPollInterval,\n );\n\n this.#pollingPolicy = new PollingWithCockatielPolicy({\n backoff,\n maxRetries,\n });\n\n this.#captureException = (error: Error): void => {\n try {\n captureExceptionFn?.(error);\n } catch {\n // ignore error thrown when calling captureException\n }\n };\n\n this.messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n\n /**\n * Checks the coverage of a transaction.\n *\n * @param req - The coverage check request.\n * @returns The coverage result.\n */\n async checkCoverage(req: CheckCoverageRequest): Promise<CoverageResult> {\n let { coverageId } = req;\n if (!coverageId) {\n const reqBody = makeInitCoverageCheckBody(req.txMeta);\n ({ coverageId } = await this.#initCoverageCheck(\n 'v1/transaction/coverage/init',\n reqBody,\n req.txMeta.id,\n ));\n }\n\n const txCoverageResultUrl = `${this.#baseUrl}/v1/transaction/coverage/result`;\n const coverageResult = await this.#getCoverageResult(\n req.txMeta.id,\n coverageId,\n txCoverageResultUrl,\n );\n return {\n coverageId,\n message: coverageResult.message,\n reasonCode: coverageResult.reasonCode,\n status: coverageResult.status,\n metrics: coverageResult.metrics,\n };\n }\n\n /**\n * Checks the coverage of a signature request.\n *\n * @param req - The signature coverage check request.\n * @returns The coverage result.\n */\n async checkSignatureCoverage(\n req: CheckSignatureCoverageRequest,\n ): Promise<CoverageResult> {\n let { coverageId } = req;\n if (!coverageId) {\n const reqBody = makeInitSignatureCoverageCheckBody(req.signatureRequest);\n ({ coverageId } = await this.#initCoverageCheck(\n 'v1/signature/coverage/init',\n reqBody,\n req.signatureRequest.id,\n ));\n }\n\n const signatureCoverageResultUrl = `${this.#baseUrl}/v1/signature/coverage/result`;\n const coverageResult = await this.#getCoverageResult(\n req.signatureRequest.id,\n coverageId,\n signatureCoverageResultUrl,\n );\n return {\n coverageId,\n message: coverageResult.message,\n reasonCode: coverageResult.reasonCode,\n status: coverageResult.status,\n metrics: coverageResult.metrics,\n };\n }\n\n /**\n * Logs a signed signature request.\n *\n * @param req - The log signature request.\n */\n async logSignature(req: LogSignatureRequest): Promise<void> {\n try {\n const initBody = makeInitSignatureCoverageCheckBody(req.signatureRequest);\n const body = {\n signature: req.signature,\n status: req.status,\n ...initBody,\n };\n\n this.#pollingPolicy.abortPendingRequest(req.signatureRequest.id);\n\n const headers = await this.#authHeaders();\n\n await this.fetchQuery({\n queryKey: [\n `${this.name}:logSignature`,\n req.signatureRequest.id,\n req.status,\n ],\n staleTime: 0,\n gcTime: 0,\n queryFn: async () => {\n const res = await this.#fetch(\n `${this.#baseUrl}/v1/signature/coverage/log`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n },\n );\n if (res.status !== 200) {\n throw new HttpError(\n res.status,\n `Failed to log signature: ${res.status}`,\n );\n }\n return null;\n },\n });\n } catch (error) {\n const sentryError = createSentryError(\n 'Failed to log signature',\n error as Error,\n );\n this.#captureException?.(sentryError);\n throw error;\n }\n }\n\n /**\n * Logs a submitted transaction.\n *\n * @param req - The log transaction request.\n */\n async logTransaction(req: LogTransactionRequest): Promise<void> {\n try {\n const initBody = makeInitCoverageCheckBody(req.txMeta);\n const body = {\n transactionHash: req.transactionHash,\n rawTransactionHex: req.rawTransactionHex,\n status: req.status,\n ...initBody,\n };\n\n this.#pollingPolicy.abortPendingRequest(req.txMeta.id);\n\n const headers = await this.#authHeaders();\n\n await this.fetchQuery({\n queryKey: [\n `${this.name}:logTransaction`,\n req.txMeta.id,\n req.transactionHash,\n req.status,\n ],\n staleTime: 0,\n gcTime: 0,\n queryFn: async () => {\n const res = await this.#fetch(\n `${this.#baseUrl}/v1/transaction/coverage/log`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n },\n );\n if (res.status !== 200) {\n throw new HttpError(\n res.status,\n `Failed to log transaction: ${res.status}`,\n );\n }\n return null;\n },\n });\n } catch (error) {\n const sentryError = createSentryError(\n 'Failed to log transaction',\n error as Error,\n );\n this.#captureException?.(sentryError);\n throw error;\n }\n }\n\n async #initCoverageCheck(\n path: string,\n reqBody: unknown,\n requestId: string,\n ): Promise<InitCoverageCheckResponse> {\n try {\n const headers = await this.#authHeaders();\n\n return await this.fetchQuery({\n queryKey: [`${this.name}:initCoverageCheck`, path, requestId],\n staleTime: 0,\n gcTime: 0,\n queryFn: async () => {\n const res = await this.#fetch(`${this.#baseUrl}/${path}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(reqBody),\n });\n if (res.status !== 200) {\n throw new HttpError(\n res.status,\n `Failed to init coverage check: ${res.status}`,\n );\n }\n return (await res.json()) as InitCoverageCheckResponse;\n },\n });\n } catch (error) {\n const sentryError = createSentryError(\n 'Failed to init coverage check',\n error as Error,\n );\n this.#captureException?.(sentryError);\n throw error;\n }\n }\n\n async #getCoverageResult(\n requestId: string,\n coverageId: string,\n coverageResultUrl: string,\n ): Promise<GetCoverageResultResponse> {\n const reqBody: GetCoverageResultRequest = {\n coverageId,\n };\n\n const headers = await this.#authHeaders();\n const startTime = Date.now();\n\n const getCoverageResultFn = async (\n signal: AbortSignal,\n ): Promise<Omit<GetCoverageResultResponse, 'metrics'>> => {\n const res = await this.#fetch(coverageResultUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify(reqBody),\n signal,\n });\n\n if (res.status === 200) {\n return (await res.json()) as Omit<GetCoverageResultResponse, 'metrics'>;\n }\n\n let errorMessage = 'Timeout waiting for coverage result';\n try {\n const errorJson = (await res.json()) as {\n message?: string;\n status?: string;\n };\n errorMessage = `Failed to get coverage result: ${errorJson.message ?? errorJson.status}`;\n } catch {\n errorMessage = `Failed to get coverage result: ${res.status}`;\n }\n throw new HttpError(res.status, errorMessage);\n };\n\n const result = await this.#pollingPolicy.start(\n requestId,\n getCoverageResultFn,\n );\n\n const totalLatency = Date.now() - startTime;\n\n return {\n ...result,\n metrics: { latency: totalLatency },\n } as GetCoverageResultResponse;\n }\n\n async #authHeaders(): Promise<Record<string, string>> {\n const token = await this.messenger.call(\n 'AuthenticationController:getBearerToken',\n );\n return {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n };\n }\n}\n\n/**\n * Make the body for the init coverage check request.\n *\n * @param txMeta - The transaction metadata.\n * @returns The body for the init coverage check request.\n */\nexport function makeInitCoverageCheckBody(\n txMeta: TransactionMeta,\n): InitCoverageCheckRequest {\n return {\n txParams: [\n {\n authorizationList: txMeta.txParams.authorizationList,\n from: txMeta.txParams.from,\n to: txMeta.txParams.to,\n value: txMeta.txParams.value,\n data: txMeta.txParams.data,\n nonce: txMeta.txParams.nonce,\n },\n ],\n chainId: txMeta.chainId,\n origin: txMeta.origin,\n };\n}\n\n/**\n * Make the body for the init signature coverage check request.\n *\n * @param signatureRequest - The signature request.\n * @returns The body for the init signature coverage check request.\n */\nfunction makeInitSignatureCoverageCheckBody(\n signatureRequest: SignatureRequest,\n): InitSignatureCoverageCheckRequest {\n const method = parseSignatureRequestMethod(signatureRequest);\n\n return {\n chainId: signatureRequest.chainId,\n data: signatureRequest.messageParams.data,\n from: signatureRequest.messageParams.from,\n method,\n origin: signatureRequest.messageParams.origin,\n };\n}\n\n/**\n * Parse the JSON-RPC method from the signature request.\n *\n * @param signatureRequest - The signature request.\n * @returns The JSON-RPC method.\n */\nexport function parseSignatureRequestMethod(\n signatureRequest: SignatureRequest,\n): string {\n if (signatureRequest.type === SignatureRequestType.TypedSign) {\n switch (signatureRequest.version) {\n case SignTypedDataVersion.V3:\n return EthMethod.SignTypedDataV3;\n case SignTypedDataVersion.V4:\n return EthMethod.SignTypedDataV4;\n case SignTypedDataVersion.V1:\n default:\n return SignatureRequestType.TypedSign;\n }\n }\n\n return signatureRequest.type;\n}\n\n/**\n * Compute the polling interval and retry count for the Cockatiel policy based on the timeout and poll interval given.\n *\n * @param timeout - The timeout in milliseconds.\n * @param pollInterval - The poll interval in milliseconds.\n * @returns The polling interval and retry count.\n */\nfunction computePollingIntervalAndRetryCount(\n timeout: number,\n pollInterval: number,\n): { backoff: ConstantBackoff; maxRetries: number } {\n const backoff = new ConstantBackoff(pollInterval);\n const computedMaxRetries = Math.floor(timeout / pollInterval) + 1;\n\n const maxRetries =\n isNaN(computedMaxRetries) || !isFinite(computedMaxRetries)\n ? DEFAULT_MAX_RETRIES\n : computedMaxRetries;\n\n return {\n backoff,\n maxRetries,\n };\n}\n\n/**\n * Create an error instance with a readable message, a cause and a context for Sentry.\n *\n * @param errorMessage - The error message.\n * @param cause - The cause of the error.\n * @returns A Sentry error.\n */\nfunction createSentryError(errorMessage: string, cause: Error): Error {\n const error = new Error(errorMessage) as Error & {\n cause: Error;\n };\n error.cause = cause;\n return error;\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { SignatureRequest } from
|
|
2
|
-
import type { TransactionMeta } from
|
|
1
|
+
import type { SignatureRequest } from '@metamask/signature-controller';
|
|
2
|
+
import type { TransactionMeta } from '@metamask/transaction-controller';
|
|
3
3
|
export type CoverageResult = {
|
|
4
4
|
coverageId: string;
|
|
5
5
|
message?: string;
|
|
@@ -9,7 +9,7 @@ export type CoverageResult = {
|
|
|
9
9
|
latency?: number;
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
|
-
export declare const coverageStatuses: readonly [
|
|
12
|
+
export declare const coverageStatuses: readonly ['covered', 'malicious', 'unknown'];
|
|
13
13
|
export type CoverageStatus = (typeof coverageStatuses)[number];
|
|
14
14
|
export type LogSignatureRequest = {
|
|
15
15
|
signatureRequest: SignatureRequest;
|
|
@@ -31,4 +31,4 @@ export type CheckSignatureCoverageRequest = {
|
|
|
31
31
|
signatureRequest: SignatureRequest;
|
|
32
32
|
};
|
|
33
33
|
export type NormalizeSignatureRequestFn = (signatureRequest: SignatureRequest) => SignatureRequest;
|
|
34
|
-
//# sourceMappingURL=types.d.
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,gBAAgB,YAAI,SAAS,EAAE,WAAW,EAAE,SAAS,CAAU,CAAC;AAC7E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG;IAChC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,CACxC,gBAAgB,EAAE,gBAAgB,KAC/B,gBAAgB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export const coverageStatuses = ['covered', 'malicious', 'unknown'];
|
|
2
|
-
//# sourceMappingURL=types.
|
|
2
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAU,CAAC","sourcesContent":["import type { SignatureRequest } from '@metamask/signature-controller';\nimport type { TransactionMeta } from '@metamask/transaction-controller';\n\nexport type CoverageResult = {\n coverageId: string;\n message?: string;\n reasonCode?: string;\n status: CoverageStatus;\n metrics: {\n latency?: number;\n };\n};\n\nexport const coverageStatuses = ['covered', 'malicious', 'unknown'] as const;\nexport type CoverageStatus = (typeof coverageStatuses)[number];\n\nexport type LogSignatureRequest = {\n signatureRequest: SignatureRequest;\n signature: string;\n status: string;\n};\n\nexport type LogTransactionRequest = {\n txMeta: TransactionMeta;\n transactionHash: string;\n rawTransactionHex: string;\n status: string;\n};\n\nexport type CheckCoverageRequest = {\n coverageId?: string;\n txMeta: TransactionMeta;\n};\n\nexport type CheckSignatureCoverageRequest = {\n coverageId?: string;\n signatureRequest: SignatureRequest;\n};\n\nexport type NormalizeSignatureRequestFn = (\n signatureRequest: SignatureRequest,\n) => SignatureRequest;\n"]}
|