@metamask/snaps-rpc-methods 12.0.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/dist/endowments/index.cjs +1 -0
  3. package/dist/endowments/index.cjs.map +1 -1
  4. package/dist/endowments/index.d.cts.map +1 -1
  5. package/dist/endowments/index.d.mts.map +1 -1
  6. package/dist/endowments/index.mjs +1 -0
  7. package/dist/endowments/index.mjs.map +1 -1
  8. package/dist/permitted/createInterface.d.cts +44 -44
  9. package/dist/permitted/createInterface.d.mts +44 -44
  10. package/dist/permitted/experimentalProviderRequest.d.cts +3 -3
  11. package/dist/permitted/experimentalProviderRequest.d.mts +3 -3
  12. package/dist/permitted/getFile.d.cts +2 -2
  13. package/dist/permitted/getFile.d.mts +2 -2
  14. package/dist/permitted/getState.d.cts +1 -1
  15. package/dist/permitted/getState.d.mts +1 -1
  16. package/dist/permitted/handlers.d.cts +16 -0
  17. package/dist/permitted/handlers.d.cts.map +1 -1
  18. package/dist/permitted/handlers.d.mts +16 -0
  19. package/dist/permitted/handlers.d.mts.map +1 -1
  20. package/dist/permitted/scheduleBackgroundEvent.cjs +2 -19
  21. package/dist/permitted/scheduleBackgroundEvent.cjs.map +1 -1
  22. package/dist/permitted/scheduleBackgroundEvent.d.cts +4 -4
  23. package/dist/permitted/scheduleBackgroundEvent.d.cts.map +1 -1
  24. package/dist/permitted/scheduleBackgroundEvent.d.mts +4 -4
  25. package/dist/permitted/scheduleBackgroundEvent.d.mts.map +1 -1
  26. package/dist/permitted/scheduleBackgroundEvent.mjs +4 -21
  27. package/dist/permitted/scheduleBackgroundEvent.mjs.map +1 -1
  28. package/dist/permitted/setState.d.cts +1 -1
  29. package/dist/permitted/setState.d.mts +1 -1
  30. package/dist/permitted/updateInterface.d.cts +44 -44
  31. package/dist/permitted/updateInterface.d.mts +44 -44
  32. package/dist/restricted/dialog.d.cts +91 -147
  33. package/dist/restricted/dialog.d.cts.map +1 -1
  34. package/dist/restricted/dialog.d.mts +91 -147
  35. package/dist/restricted/dialog.d.mts.map +1 -1
  36. package/dist/restricted/getBip32PublicKey.d.cts +2 -2
  37. package/dist/restricted/getBip32PublicKey.d.mts +2 -2
  38. package/dist/restricted/getEntropy.d.cts +1 -1
  39. package/dist/restricted/getEntropy.d.mts +1 -1
  40. package/dist/restricted/manageAccounts.d.cts +1 -1
  41. package/dist/restricted/manageAccounts.d.mts +1 -1
  42. package/dist/restricted/notify.d.cts +74 -74
  43. package/dist/restricted/notify.d.mts +74 -74
  44. package/package.json +6 -6
@@ -21,17 +21,17 @@ export declare const providerRequestHandler: PermittedHandlerExport<ProviderRequ
21
21
  declare const ProviderRequestParametersStruct: import("@metamask/superstruct").Struct<{
22
22
  request: {
23
23
  method: string;
24
- params?: Record<string, Json> | Json[] | undefined;
24
+ params?: Json[] | Record<string, Json> | undefined;
25
25
  };
26
26
  chainId: `${string}:${string}`;
27
27
  }, {
28
28
  chainId: import("@metamask/superstruct").Struct<`${string}:${string}`, null>;
29
29
  request: import("@metamask/superstruct").Struct<{
30
30
  method: string;
31
- params?: Record<string, Json> | Json[] | undefined;
31
+ params?: Json[] | Record<string, Json> | undefined;
32
32
  }, {
33
33
  method: import("@metamask/superstruct").Struct<string, null>;
34
- params: import("@metamask/superstruct").Struct<Record<string, Json> | Json[] | undefined, null>;
34
+ params: import("@metamask/superstruct").Struct<Json[] | Record<string, Json> | undefined, null>;
35
35
  }>;
36
36
  }>;
37
37
  export type ProviderRequestParameters = InferMatching<typeof ProviderRequestParametersStruct, ProviderRequestParams>;
@@ -21,17 +21,17 @@ export declare const providerRequestHandler: PermittedHandlerExport<ProviderRequ
21
21
  declare const ProviderRequestParametersStruct: import("@metamask/superstruct").Struct<{
22
22
  request: {
23
23
  method: string;
24
- params?: Record<string, Json> | Json[] | undefined;
24
+ params?: Json[] | Record<string, Json> | undefined;
25
25
  };
26
26
  chainId: `${string}:${string}`;
27
27
  }, {
28
28
  chainId: import("@metamask/superstruct").Struct<`${string}:${string}`, null>;
29
29
  request: import("@metamask/superstruct").Struct<{
30
30
  method: string;
31
- params?: Record<string, Json> | Json[] | undefined;
31
+ params?: Json[] | Record<string, Json> | undefined;
32
32
  }, {
33
33
  method: import("@metamask/superstruct").Struct<string, null>;
34
- params: import("@metamask/superstruct").Struct<Record<string, Json> | Json[] | undefined, null>;
34
+ params: import("@metamask/superstruct").Struct<Json[] | Record<string, Json> | undefined, null>;
35
35
  }>;
36
36
  }>;
37
37
  export type ProviderRequestParameters = InferMatching<typeof ProviderRequestParametersStruct, ProviderRequestParams>;
@@ -3,10 +3,10 @@ import type { GetFileParams } from "@metamask/snaps-sdk";
3
3
  import type { InferMatching } from "@metamask/snaps-utils";
4
4
  export declare const GetFileArgsStruct: import("@metamask/superstruct").Struct<{
5
5
  path: string;
6
- encoding?: "base64" | "utf8" | "hex" | undefined;
6
+ encoding?: "base64" | "hex" | "utf8" | undefined;
7
7
  }, {
8
8
  path: import("@metamask/superstruct").Struct<string, null>;
9
- encoding: import("@metamask/superstruct").Struct<"base64" | "utf8" | "hex" | undefined, null>;
9
+ encoding: import("@metamask/superstruct").Struct<"base64" | "hex" | "utf8" | undefined, null>;
10
10
  }>;
11
11
  export type InferredGetFileParams = InferMatching<typeof GetFileArgsStruct, GetFileParams>;
12
12
  export declare const getFileHandler: PermittedHandlerExport<GetFileHooks, InferredGetFileParams, string>;
@@ -3,10 +3,10 @@ import type { GetFileParams } from "@metamask/snaps-sdk";
3
3
  import type { InferMatching } from "@metamask/snaps-utils";
4
4
  export declare const GetFileArgsStruct: import("@metamask/superstruct").Struct<{
5
5
  path: string;
6
- encoding?: "base64" | "utf8" | "hex" | undefined;
6
+ encoding?: "base64" | "hex" | "utf8" | undefined;
7
7
  }, {
8
8
  path: import("@metamask/superstruct").Struct<string, null>;
9
- encoding: import("@metamask/superstruct").Struct<"base64" | "utf8" | "hex" | undefined, null>;
9
+ encoding: import("@metamask/superstruct").Struct<"base64" | "hex" | "utf8" | undefined, null>;
10
10
  }>;
11
11
  export type InferredGetFileParams = InferMatching<typeof GetFileArgsStruct, GetFileParams>;
12
12
  export declare const getFileHandler: PermittedHandlerExport<GetFileHooks, InferredGetFileParams, string>;
@@ -28,8 +28,8 @@ export type GetStateHooks = {
28
28
  getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;
29
29
  };
30
30
  declare const GetStateParametersStruct: import("@metamask/superstruct").Struct<{
31
- key?: string | undefined;
32
31
  encrypted?: boolean | undefined;
32
+ key?: string | undefined;
33
33
  }, {
34
34
  key: import("@metamask/superstruct").Struct<string | undefined, null>;
35
35
  encrypted: import("@metamask/superstruct").Struct<boolean | undefined, null>;
@@ -28,8 +28,8 @@ export type GetStateHooks = {
28
28
  getUnlockPromise: (shouldShowUnlockRequest: boolean) => Promise<void>;
29
29
  };
30
30
  declare const GetStateParametersStruct: import("@metamask/superstruct").Struct<{
31
- key?: string | undefined;
32
31
  encrypted?: boolean | undefined;
32
+ key?: string | undefined;
33
33
  }, {
34
34
  key: import("@metamask/superstruct").Struct<string | undefined, null>;
35
35
  encrypted: import("@metamask/superstruct").Struct<boolean | undefined, null>;
@@ -15,11 +15,19 @@ export declare const methodHandlers: {
15
15
  size: number;
16
16
  contentType: string;
17
17
  contents: string;
18
+ } | {
19
+ symbol: string;
20
+ name: string;
21
+ asset: `${string}:${string}/${string}:${string}`;
18
22
  } | Record<string, string | boolean | {
19
23
  name: string;
20
24
  size: number;
21
25
  contentType: string;
22
26
  contents: string;
27
+ } | {
28
+ symbol: string;
29
+ name: string;
30
+ asset: `${string}:${string}/${string}:${string}`;
23
31
  } | null> | null>>;
24
32
  snap_getInterfaceContext: import("@metamask/permission-controller").PermittedHandlerExport<import("./getInterfaceContext.cjs").GetInterfaceContextMethodHooks, import("@metamask/snaps-sdk").GetInterfaceContextParams, import("@metamask/snaps-sdk").GetInterfaceContextResult>;
25
33
  snap_listEntropySources: import("@metamask/permission-controller").PermittedHandlerExport<import("./listEntropySources.cjs").ListEntropySourcesHooks, never, import("@metamask/snaps-sdk").ListEntropySourcesResult>;
@@ -36,10 +44,18 @@ export declare const handlers: (import("@metamask/permission-controller").Permit
36
44
  size: number;
37
45
  contentType: string;
38
46
  contents: string;
47
+ } | {
48
+ symbol: string;
49
+ name: string;
50
+ asset: `${string}:${string}/${string}:${string}`;
39
51
  } | Record<string, string | boolean | {
40
52
  name: string;
41
53
  size: number;
42
54
  contentType: string;
43
55
  contents: string;
56
+ } | {
57
+ symbol: string;
58
+ name: string;
59
+ asset: `${string}:${string}/${string}:${string}`;
44
60
  } | null> | null>> | import("@metamask/permission-controller").PermittedHandlerExport<import("./getSnaps.cjs").GetSnapsHooks, import("@metamask/utils").JsonRpcParams, import("@metamask/snaps-sdk").GetSnapsResult> | import("@metamask/permission-controller").PermittedHandlerExport<import("./getState.cjs").GetStateHooks, import("@metamask/snaps-sdk").GetStateParams, import("@metamask/utils").Json> | import("@metamask/permission-controller").PermittedHandlerExport<import("./listEntropySources.cjs").ListEntropySourcesHooks, never, import("@metamask/snaps-sdk").ListEntropySourcesResult> | import("@metamask/permission-controller").PermittedHandlerExport<import("./requestSnaps.cjs").RequestSnapsHooks, import("@metamask/snaps-sdk").RequestSnapsParams, import("@metamask/snaps-sdk").RequestSnapsResult> | import("@metamask/permission-controller").PermittedHandlerExport<import("./resolveInterface.cjs").ResolveInterfaceMethodHooks, import("@metamask/snaps-sdk").ResolveInterfaceParams, null> | import("@metamask/permission-controller").PermittedHandlerExport<import("./scheduleBackgroundEvent.cjs").ScheduleBackgroundEventMethodHooks, import("@metamask/snaps-sdk").ScheduleBackgroundEventParams, string> | import("@metamask/permission-controller").PermittedHandlerExport<import("./setState.cjs").SetStateHooks, import("@metamask/snaps-sdk").SetStateParams, null> | import("@metamask/permission-controller").PermittedHandlerExport<import("./updateInterface.cjs").UpdateInterfaceMethodHooks, import("@metamask/snaps-sdk").UpdateInterfaceParams, null> | import("@metamask/permission-controller").PermittedHandlerExport<import("./getFile.cjs").GetFileHooks, import("@metamask/snaps-sdk").GetFileParams, string> | import("@metamask/permission-controller").PermittedHandlerExport<import("./getInterfaceContext.cjs").GetInterfaceContextMethodHooks, import("@metamask/snaps-sdk").GetInterfaceContextParams, import("@metamask/snaps-sdk").GetInterfaceContextResult> | import("@metamask/permission-controller").PermittedHandlerExport<import("./invokeSnapSugar.cjs").InvokeSnapSugarHooks, import("@metamask/snaps-sdk").InvokeSnapParams, import("@metamask/utils").Json> | import("@metamask/permission-controller").PermittedHandlerExport<import("./invokeKeyring.cjs").InvokeKeyringHooks, import("@metamask/snaps-sdk").InvokeSnapParams, import("@metamask/utils").Json>)[];
45
61
  //# sourceMappingURL=handlers.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.cts","sourceRoot":"","sources":["../../src/permitted/handlers.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsB1B,CAAC;AAGF,eAAO,MAAM,QAAQ;;;;;;;;;;owEAAgC,CAAC"}
1
+ {"version":3,"file":"handlers.d.cts","sourceRoot":"","sources":["../../src/permitted/handlers.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsB1B,CAAC;AAGF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;owEAAgC,CAAC"}
@@ -15,11 +15,19 @@ export declare const methodHandlers: {
15
15
  size: number;
16
16
  contentType: string;
17
17
  contents: string;
18
+ } | {
19
+ symbol: string;
20
+ name: string;
21
+ asset: `${string}:${string}/${string}:${string}`;
18
22
  } | Record<string, string | boolean | {
19
23
  name: string;
20
24
  size: number;
21
25
  contentType: string;
22
26
  contents: string;
27
+ } | {
28
+ symbol: string;
29
+ name: string;
30
+ asset: `${string}:${string}/${string}:${string}`;
23
31
  } | null> | null>>;
24
32
  snap_getInterfaceContext: import("@metamask/permission-controller").PermittedHandlerExport<import("./getInterfaceContext.mjs").GetInterfaceContextMethodHooks, import("@metamask/snaps-sdk").GetInterfaceContextParams, import("@metamask/snaps-sdk").GetInterfaceContextResult>;
25
33
  snap_listEntropySources: import("@metamask/permission-controller").PermittedHandlerExport<import("./listEntropySources.mjs").ListEntropySourcesHooks, never, import("@metamask/snaps-sdk").ListEntropySourcesResult>;
@@ -36,10 +44,18 @@ export declare const handlers: (import("@metamask/permission-controller").Permit
36
44
  size: number;
37
45
  contentType: string;
38
46
  contents: string;
47
+ } | {
48
+ symbol: string;
49
+ name: string;
50
+ asset: `${string}:${string}/${string}:${string}`;
39
51
  } | Record<string, string | boolean | {
40
52
  name: string;
41
53
  size: number;
42
54
  contentType: string;
43
55
  contents: string;
56
+ } | {
57
+ symbol: string;
58
+ name: string;
59
+ asset: `${string}:${string}/${string}:${string}`;
44
60
  } | null> | null>> | import("@metamask/permission-controller").PermittedHandlerExport<import("./getSnaps.mjs").GetSnapsHooks, import("@metamask/utils").JsonRpcParams, import("@metamask/snaps-sdk").GetSnapsResult> | import("@metamask/permission-controller").PermittedHandlerExport<import("./getState.mjs").GetStateHooks, import("@metamask/snaps-sdk").GetStateParams, import("@metamask/utils").Json> | import("@metamask/permission-controller").PermittedHandlerExport<import("./listEntropySources.mjs").ListEntropySourcesHooks, never, import("@metamask/snaps-sdk").ListEntropySourcesResult> | import("@metamask/permission-controller").PermittedHandlerExport<import("./requestSnaps.mjs").RequestSnapsHooks, import("@metamask/snaps-sdk").RequestSnapsParams, import("@metamask/snaps-sdk").RequestSnapsResult> | import("@metamask/permission-controller").PermittedHandlerExport<import("./resolveInterface.mjs").ResolveInterfaceMethodHooks, import("@metamask/snaps-sdk").ResolveInterfaceParams, null> | import("@metamask/permission-controller").PermittedHandlerExport<import("./scheduleBackgroundEvent.mjs").ScheduleBackgroundEventMethodHooks, import("@metamask/snaps-sdk").ScheduleBackgroundEventParams, string> | import("@metamask/permission-controller").PermittedHandlerExport<import("./setState.mjs").SetStateHooks, import("@metamask/snaps-sdk").SetStateParams, null> | import("@metamask/permission-controller").PermittedHandlerExport<import("./updateInterface.mjs").UpdateInterfaceMethodHooks, import("@metamask/snaps-sdk").UpdateInterfaceParams, null> | import("@metamask/permission-controller").PermittedHandlerExport<import("./getFile.mjs").GetFileHooks, import("@metamask/snaps-sdk").GetFileParams, string> | import("@metamask/permission-controller").PermittedHandlerExport<import("./getInterfaceContext.mjs").GetInterfaceContextMethodHooks, import("@metamask/snaps-sdk").GetInterfaceContextParams, import("@metamask/snaps-sdk").GetInterfaceContextResult> | import("@metamask/permission-controller").PermittedHandlerExport<import("./invokeSnapSugar.mjs").InvokeSnapSugarHooks, import("@metamask/snaps-sdk").InvokeSnapParams, import("@metamask/utils").Json> | import("@metamask/permission-controller").PermittedHandlerExport<import("./invokeKeyring.mjs").InvokeKeyringHooks, import("@metamask/snaps-sdk").InvokeSnapParams, import("@metamask/utils").Json>)[];
45
61
  //# sourceMappingURL=handlers.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.mts","sourceRoot":"","sources":["../../src/permitted/handlers.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsB1B,CAAC;AAGF,eAAO,MAAM,QAAQ;;;;;;;;;;owEAAgC,CAAC"}
1
+ {"version":3,"file":"handlers.d.mts","sourceRoot":"","sources":["../../src/permitted/handlers.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsB1B,CAAC;AAGF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;owEAAgC,CAAC"}
@@ -18,29 +18,12 @@ exports.scheduleBackgroundEventHandler = {
18
18
  implementation: getScheduleBackgroundEventImplementation,
19
19
  hookNames,
20
20
  };
21
- const offsetRegex = /Z|([+-]\d{2}:?\d{2})$/u;
22
21
  const ScheduleBackgroundEventParametersWithDateStruct = (0, superstruct_1.object)({
23
- date: (0, superstruct_1.refine)((0, superstruct_1.string)(), 'date', (val) => {
24
- const date = luxon_1.DateTime.fromISO(val);
25
- if (date.isValid) {
26
- // Luxon doesn't have a reliable way to check if timezone info was not provided
27
- if (!offsetRegex.test(val)) {
28
- return 'ISO 8601 date must have timezone information';
29
- }
30
- return true;
31
- }
32
- return 'Not a valid ISO 8601 date';
33
- }),
22
+ date: snaps_utils_1.ISO8601DateStruct,
34
23
  request: snaps_utils_1.CronjobRpcRequestStruct,
35
24
  });
36
25
  const ScheduleBackgroundEventParametersWithDurationStruct = (0, superstruct_1.object)({
37
- duration: (0, superstruct_1.refine)((0, superstruct_1.string)(), 'duration', (val) => {
38
- const duration = luxon_1.Duration.fromISO(val);
39
- if (!duration.isValid) {
40
- return 'Not a valid ISO 8601 duration';
41
- }
42
- return true;
43
- }),
26
+ duration: snaps_utils_1.ISO8601DurationStruct,
44
27
  request: snaps_utils_1.CronjobRpcRequestStruct,
45
28
  });
46
29
  const ScheduleBackgroundEventParametersStruct = (0, snaps_sdk_1.selectiveUnion)((val) => {
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.cjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport {\n selectiveUnion,\n type JsonRpcRequest,\n type ScheduleBackgroundEventParams,\n type ScheduleBackgroundEventResult,\n} from '@metamask/snaps-sdk';\nimport type { CronjobRpcRequest, InferMatching } from '@metamask/snaps-utils';\nimport { CronjobRpcRequestStruct } from '@metamask/snaps-utils';\nimport {\n StructError,\n create,\n object,\n refine,\n string,\n} from '@metamask/superstruct';\nimport {\n assert,\n hasProperty,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport { DateTime, Duration } from 'luxon';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'snap_scheduleBackgroundEvent';\n\nconst hookNames: MethodHooksObject<ScheduleBackgroundEventMethodHooks> = {\n scheduleBackgroundEvent: true,\n hasPermission: true,\n};\n\ntype ScheduleBackgroundEventHookParams = {\n date: string;\n request: CronjobRpcRequest;\n};\n\nexport type ScheduleBackgroundEventMethodHooks = {\n scheduleBackgroundEvent: (\n snapEvent: ScheduleBackgroundEventHookParams,\n ) => string;\n\n hasPermission: (permissionName: string) => boolean;\n};\n\nexport const scheduleBackgroundEventHandler: PermittedHandlerExport<\n ScheduleBackgroundEventMethodHooks,\n ScheduleBackgroundEventParameters,\n ScheduleBackgroundEventResult\n> = {\n methodNames: [methodName],\n implementation: getScheduleBackgroundEventImplementation,\n hookNames,\n};\n\nconst offsetRegex = /Z|([+-]\\d{2}:?\\d{2})$/u;\n\nconst ScheduleBackgroundEventParametersWithDateStruct = object({\n date: refine(string(), 'date', (val) => {\n const date = DateTime.fromISO(val);\n if (date.isValid) {\n // Luxon doesn't have a reliable way to check if timezone info was not provided\n if (!offsetRegex.test(val)) {\n return 'ISO 8601 date must have timezone information';\n }\n return true;\n }\n return 'Not a valid ISO 8601 date';\n }),\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersWithDurationStruct = object({\n duration: refine(string(), 'duration', (val) => {\n const duration = Duration.fromISO(val);\n if (!duration.isValid) {\n return 'Not a valid ISO 8601 duration';\n }\n return true;\n }),\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersStruct = selectiveUnion((val) => {\n if (hasProperty(val, 'date')) {\n return ScheduleBackgroundEventParametersWithDateStruct;\n }\n return ScheduleBackgroundEventParametersWithDurationStruct;\n});\n\nexport type ScheduleBackgroundEventParameters = InferMatching<\n typeof ScheduleBackgroundEventParametersStruct,\n ScheduleBackgroundEventParams\n>;\n\n/**\n * Generates a `DateTime` object based on if a duration or date is provided.\n *\n * @param params - The validated params from the `snap_scheduleBackgroundEvent` call.\n * @returns A `DateTime` object.\n */\nfunction getStartDate(params: ScheduleBackgroundEventParams) {\n if ('duration' in params) {\n return DateTime.fromJSDate(new Date())\n .toUTC()\n .plus(Duration.fromISO(params.duration));\n }\n\n return DateTime.fromISO(params.date, { setZone: true });\n}\n\n/**\n * The `snap_scheduleBackgroundEvent` method implementation.\n *\n * @param req - The JSON-RPC request object.\n * @param res - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.scheduleBackgroundEvent - The function to schedule a background event.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.\n * @returns An id representing the background event.\n */\nasync function getScheduleBackgroundEventImplementation(\n req: JsonRpcRequest<ScheduleBackgroundEventParameters>,\n res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n scheduleBackgroundEvent,\n hasPermission,\n }: ScheduleBackgroundEventMethodHooks,\n): Promise<void> {\n const { params } = req;\n\n if (!hasPermission(SnapEndowments.Cronjob)) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n\n const { request } = validatedParams;\n\n const date = getStartDate(validatedParams);\n\n // Make sure any millisecond precision is removed.\n const truncatedDate = date.startOf('second').toISO({\n suppressMilliseconds: true,\n });\n\n assert(truncatedDate);\n\n const id = scheduleBackgroundEvent({ date: truncatedDate, request });\n res.result = id;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the scheduleBackgroundEvent method `params` and returns them cast to the correct\n * type. Throws if validation fails.\n *\n * @param params - The unvalidated params object from the method request.\n * @returns The validated resolveInterface method parameter object.\n */\nfunction getValidatedParams(\n params: unknown,\n): ScheduleBackgroundEventParameters {\n try {\n return create(params, ScheduleBackgroundEventParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
1
+ {"version":3,"file":"scheduleBackgroundEvent.cjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport {\n selectiveUnion,\n type JsonRpcRequest,\n type ScheduleBackgroundEventParams,\n type ScheduleBackgroundEventResult,\n} from '@metamask/snaps-sdk';\nimport type { CronjobRpcRequest, InferMatching } from '@metamask/snaps-utils';\nimport {\n CronjobRpcRequestStruct,\n ISO8601DateStruct,\n ISO8601DurationStruct,\n} from '@metamask/snaps-utils';\nimport { StructError, create, object } from '@metamask/superstruct';\nimport {\n assert,\n hasProperty,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport { DateTime, Duration } from 'luxon';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'snap_scheduleBackgroundEvent';\n\nconst hookNames: MethodHooksObject<ScheduleBackgroundEventMethodHooks> = {\n scheduleBackgroundEvent: true,\n hasPermission: true,\n};\n\ntype ScheduleBackgroundEventHookParams = {\n date: string;\n request: CronjobRpcRequest;\n};\n\nexport type ScheduleBackgroundEventMethodHooks = {\n scheduleBackgroundEvent: (\n snapEvent: ScheduleBackgroundEventHookParams,\n ) => string;\n\n hasPermission: (permissionName: string) => boolean;\n};\n\nexport const scheduleBackgroundEventHandler: PermittedHandlerExport<\n ScheduleBackgroundEventMethodHooks,\n ScheduleBackgroundEventParameters,\n ScheduleBackgroundEventResult\n> = {\n methodNames: [methodName],\n implementation: getScheduleBackgroundEventImplementation,\n hookNames,\n};\n\nconst ScheduleBackgroundEventParametersWithDateStruct = object({\n date: ISO8601DateStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersWithDurationStruct = object({\n duration: ISO8601DurationStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersStruct = selectiveUnion((val) => {\n if (hasProperty(val, 'date')) {\n return ScheduleBackgroundEventParametersWithDateStruct;\n }\n return ScheduleBackgroundEventParametersWithDurationStruct;\n});\n\nexport type ScheduleBackgroundEventParameters = InferMatching<\n typeof ScheduleBackgroundEventParametersStruct,\n ScheduleBackgroundEventParams\n>;\n\n/**\n * Generates a `DateTime` object based on if a duration or date is provided.\n *\n * @param params - The validated params from the `snap_scheduleBackgroundEvent` call.\n * @returns A `DateTime` object.\n */\nfunction getStartDate(params: ScheduleBackgroundEventParams) {\n if ('duration' in params) {\n return DateTime.fromJSDate(new Date())\n .toUTC()\n .plus(Duration.fromISO(params.duration));\n }\n\n return DateTime.fromISO(params.date, { setZone: true });\n}\n\n/**\n * The `snap_scheduleBackgroundEvent` method implementation.\n *\n * @param req - The JSON-RPC request object.\n * @param res - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.scheduleBackgroundEvent - The function to schedule a background event.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.\n * @returns An id representing the background event.\n */\nasync function getScheduleBackgroundEventImplementation(\n req: JsonRpcRequest<ScheduleBackgroundEventParameters>,\n res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n scheduleBackgroundEvent,\n hasPermission,\n }: ScheduleBackgroundEventMethodHooks,\n): Promise<void> {\n const { params } = req;\n\n if (!hasPermission(SnapEndowments.Cronjob)) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n\n const { request } = validatedParams;\n\n const date = getStartDate(validatedParams);\n\n // Make sure any millisecond precision is removed.\n const truncatedDate = date.startOf('second').toISO({\n suppressMilliseconds: true,\n });\n\n assert(truncatedDate);\n\n const id = scheduleBackgroundEvent({ date: truncatedDate, request });\n res.result = id;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the scheduleBackgroundEvent method `params` and returns them cast to the correct\n * type. Throws if validation fails.\n *\n * @param params - The unvalidated params object from the method request.\n * @returns The validated resolveInterface method parameter object.\n */\nfunction getValidatedParams(\n params: unknown,\n): ScheduleBackgroundEventParameters {\n try {\n return create(params, ScheduleBackgroundEventParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
@@ -14,16 +14,16 @@ declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superst
14
14
  date: string;
15
15
  request: {
16
16
  method: string;
17
- id?: string | number | null | undefined;
18
17
  jsonrpc?: "2.0" | undefined;
19
- params?: Record<string, import("@metamask/snaps-sdk").Json> | import("@metamask/snaps-sdk").Json[] | undefined;
18
+ id?: string | number | null | undefined;
19
+ params?: import("@metamask/snaps-sdk").Json[] | Record<string, import("@metamask/snaps-sdk").Json> | undefined;
20
20
  };
21
21
  } | {
22
22
  request: {
23
23
  method: string;
24
- id?: string | number | null | undefined;
25
24
  jsonrpc?: "2.0" | undefined;
26
- params?: Record<string, import("@metamask/snaps-sdk").Json> | import("@metamask/snaps-sdk").Json[] | undefined;
25
+ id?: string | number | null | undefined;
26
+ params?: import("@metamask/snaps-sdk").Json[] | Record<string, import("@metamask/snaps-sdk").Json> | undefined;
27
27
  };
28
28
  duration: string;
29
29
  }, null>;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.d.cts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EACnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,8BAA8B;AA0B9E,KAAK,iCAAiC,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,uBAAuB,EAAE,CACvB,SAAS,EAAE,iCAAiC,KACzC,MAAM,CAAC;IAEZ,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,sBAAsB,CACjE,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,CAK9B,CAAC;AA8BF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC"}
1
+ {"version":3,"file":"scheduleBackgroundEvent.d.cts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EACnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,8BAA8B;AAwB9E,KAAK,iCAAiC,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,uBAAuB,EAAE,CACvB,SAAS,EAAE,iCAAiC,KACzC,MAAM,CAAC;IAEZ,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,sBAAsB,CACjE,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,CAK9B,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC"}
@@ -14,16 +14,16 @@ declare const ScheduleBackgroundEventParametersStruct: import("@metamask/superst
14
14
  date: string;
15
15
  request: {
16
16
  method: string;
17
- id?: string | number | null | undefined;
18
17
  jsonrpc?: "2.0" | undefined;
19
- params?: Record<string, import("@metamask/snaps-sdk").Json> | import("@metamask/snaps-sdk").Json[] | undefined;
18
+ id?: string | number | null | undefined;
19
+ params?: import("@metamask/snaps-sdk").Json[] | Record<string, import("@metamask/snaps-sdk").Json> | undefined;
20
20
  };
21
21
  } | {
22
22
  request: {
23
23
  method: string;
24
- id?: string | number | null | undefined;
25
24
  jsonrpc?: "2.0" | undefined;
26
- params?: Record<string, import("@metamask/snaps-sdk").Json> | import("@metamask/snaps-sdk").Json[] | undefined;
25
+ id?: string | number | null | undefined;
26
+ params?: import("@metamask/snaps-sdk").Json[] | Record<string, import("@metamask/snaps-sdk").Json> | undefined;
27
27
  };
28
28
  duration: string;
29
29
  }, null>;
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.d.mts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EACnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,8BAA8B;AA0B9E,KAAK,iCAAiC,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,uBAAuB,EAAE,CACvB,SAAS,EAAE,iCAAiC,KACzC,MAAM,CAAC;IAEZ,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,sBAAsB,CACjE,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,CAK9B,CAAC;AA8BF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC"}
1
+ {"version":3,"file":"scheduleBackgroundEvent.d.mts","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,wCAAwC;AAE9E,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,6BAA6B,EACnC,4BAA4B;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,8BAA8B;AAwB9E,KAAK,iCAAiC,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,uBAAuB,EAAE,CACvB,SAAS,EAAE,iCAAiC,KACzC,MAAM,CAAC;IAEZ,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,sBAAsB,CACjE,kCAAkC,EAClC,iCAAiC,EACjC,6BAA6B,CAK9B,CAAC;AAYF,QAAA,MAAM,uCAAuC;;;;;;;;;;;;;;;;QAK3C,CAAC;AAEH,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAC3D,OAAO,uCAAuC,EAC9C,6BAA6B,CAC9B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { providerErrors, rpcErrors } from "@metamask/rpc-errors";
2
2
  import { selectiveUnion } from "@metamask/snaps-sdk";
3
- import { CronjobRpcRequestStruct } from "@metamask/snaps-utils";
4
- import { StructError, create, object, refine, string } from "@metamask/superstruct";
3
+ import { CronjobRpcRequestStruct, ISO8601DateStruct, ISO8601DurationStruct } from "@metamask/snaps-utils";
4
+ import { StructError, create, object } from "@metamask/superstruct";
5
5
  import { assert, hasProperty } from "@metamask/utils";
6
6
  import { DateTime, Duration } from "luxon";
7
7
  import { SnapEndowments } from "../endowments/index.mjs";
@@ -15,29 +15,12 @@ export const scheduleBackgroundEventHandler = {
15
15
  implementation: getScheduleBackgroundEventImplementation,
16
16
  hookNames,
17
17
  };
18
- const offsetRegex = /Z|([+-]\d{2}:?\d{2})$/u;
19
18
  const ScheduleBackgroundEventParametersWithDateStruct = object({
20
- date: refine(string(), 'date', (val) => {
21
- const date = DateTime.fromISO(val);
22
- if (date.isValid) {
23
- // Luxon doesn't have a reliable way to check if timezone info was not provided
24
- if (!offsetRegex.test(val)) {
25
- return 'ISO 8601 date must have timezone information';
26
- }
27
- return true;
28
- }
29
- return 'Not a valid ISO 8601 date';
30
- }),
19
+ date: ISO8601DateStruct,
31
20
  request: CronjobRpcRequestStruct,
32
21
  });
33
22
  const ScheduleBackgroundEventParametersWithDurationStruct = object({
34
- duration: refine(string(), 'duration', (val) => {
35
- const duration = Duration.fromISO(val);
36
- if (!duration.isValid) {
37
- return 'Not a valid ISO 8601 duration';
38
- }
39
- return true;
40
- }),
23
+ duration: ISO8601DurationStruct,
41
24
  request: CronjobRpcRequestStruct,
42
25
  });
43
26
  const ScheduleBackgroundEventParametersStruct = selectiveUnion((val) => {
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleBackgroundEvent.mjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport {\n selectiveUnion,\n type JsonRpcRequest,\n type ScheduleBackgroundEventParams,\n type ScheduleBackgroundEventResult,\n} from '@metamask/snaps-sdk';\nimport type { CronjobRpcRequest, InferMatching } from '@metamask/snaps-utils';\nimport { CronjobRpcRequestStruct } from '@metamask/snaps-utils';\nimport {\n StructError,\n create,\n object,\n refine,\n string,\n} from '@metamask/superstruct';\nimport {\n assert,\n hasProperty,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport { DateTime, Duration } from 'luxon';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'snap_scheduleBackgroundEvent';\n\nconst hookNames: MethodHooksObject<ScheduleBackgroundEventMethodHooks> = {\n scheduleBackgroundEvent: true,\n hasPermission: true,\n};\n\ntype ScheduleBackgroundEventHookParams = {\n date: string;\n request: CronjobRpcRequest;\n};\n\nexport type ScheduleBackgroundEventMethodHooks = {\n scheduleBackgroundEvent: (\n snapEvent: ScheduleBackgroundEventHookParams,\n ) => string;\n\n hasPermission: (permissionName: string) => boolean;\n};\n\nexport const scheduleBackgroundEventHandler: PermittedHandlerExport<\n ScheduleBackgroundEventMethodHooks,\n ScheduleBackgroundEventParameters,\n ScheduleBackgroundEventResult\n> = {\n methodNames: [methodName],\n implementation: getScheduleBackgroundEventImplementation,\n hookNames,\n};\n\nconst offsetRegex = /Z|([+-]\\d{2}:?\\d{2})$/u;\n\nconst ScheduleBackgroundEventParametersWithDateStruct = object({\n date: refine(string(), 'date', (val) => {\n const date = DateTime.fromISO(val);\n if (date.isValid) {\n // Luxon doesn't have a reliable way to check if timezone info was not provided\n if (!offsetRegex.test(val)) {\n return 'ISO 8601 date must have timezone information';\n }\n return true;\n }\n return 'Not a valid ISO 8601 date';\n }),\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersWithDurationStruct = object({\n duration: refine(string(), 'duration', (val) => {\n const duration = Duration.fromISO(val);\n if (!duration.isValid) {\n return 'Not a valid ISO 8601 duration';\n }\n return true;\n }),\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersStruct = selectiveUnion((val) => {\n if (hasProperty(val, 'date')) {\n return ScheduleBackgroundEventParametersWithDateStruct;\n }\n return ScheduleBackgroundEventParametersWithDurationStruct;\n});\n\nexport type ScheduleBackgroundEventParameters = InferMatching<\n typeof ScheduleBackgroundEventParametersStruct,\n ScheduleBackgroundEventParams\n>;\n\n/**\n * Generates a `DateTime` object based on if a duration or date is provided.\n *\n * @param params - The validated params from the `snap_scheduleBackgroundEvent` call.\n * @returns A `DateTime` object.\n */\nfunction getStartDate(params: ScheduleBackgroundEventParams) {\n if ('duration' in params) {\n return DateTime.fromJSDate(new Date())\n .toUTC()\n .plus(Duration.fromISO(params.duration));\n }\n\n return DateTime.fromISO(params.date, { setZone: true });\n}\n\n/**\n * The `snap_scheduleBackgroundEvent` method implementation.\n *\n * @param req - The JSON-RPC request object.\n * @param res - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.scheduleBackgroundEvent - The function to schedule a background event.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.\n * @returns An id representing the background event.\n */\nasync function getScheduleBackgroundEventImplementation(\n req: JsonRpcRequest<ScheduleBackgroundEventParameters>,\n res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n scheduleBackgroundEvent,\n hasPermission,\n }: ScheduleBackgroundEventMethodHooks,\n): Promise<void> {\n const { params } = req;\n\n if (!hasPermission(SnapEndowments.Cronjob)) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n\n const { request } = validatedParams;\n\n const date = getStartDate(validatedParams);\n\n // Make sure any millisecond precision is removed.\n const truncatedDate = date.startOf('second').toISO({\n suppressMilliseconds: true,\n });\n\n assert(truncatedDate);\n\n const id = scheduleBackgroundEvent({ date: truncatedDate, request });\n res.result = id;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the scheduleBackgroundEvent method `params` and returns them cast to the correct\n * type. Throws if validation fails.\n *\n * @param params - The unvalidated params object from the method request.\n * @returns The validated resolveInterface method parameter object.\n */\nfunction getValidatedParams(\n params: unknown,\n): ScheduleBackgroundEventParameters {\n try {\n return create(params, ScheduleBackgroundEventParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
1
+ {"version":3,"file":"scheduleBackgroundEvent.mjs","sourceRoot":"","sources":["../../src/permitted/scheduleBackgroundEvent.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PermittedHandlerExport } from '@metamask/permission-controller';\nimport { providerErrors, rpcErrors } from '@metamask/rpc-errors';\nimport {\n selectiveUnion,\n type JsonRpcRequest,\n type ScheduleBackgroundEventParams,\n type ScheduleBackgroundEventResult,\n} from '@metamask/snaps-sdk';\nimport type { CronjobRpcRequest, InferMatching } from '@metamask/snaps-utils';\nimport {\n CronjobRpcRequestStruct,\n ISO8601DateStruct,\n ISO8601DurationStruct,\n} from '@metamask/snaps-utils';\nimport { StructError, create, object } from '@metamask/superstruct';\nimport {\n assert,\n hasProperty,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\nimport { DateTime, Duration } from 'luxon';\n\nimport { SnapEndowments } from '../endowments';\nimport type { MethodHooksObject } from '../utils';\n\nconst methodName = 'snap_scheduleBackgroundEvent';\n\nconst hookNames: MethodHooksObject<ScheduleBackgroundEventMethodHooks> = {\n scheduleBackgroundEvent: true,\n hasPermission: true,\n};\n\ntype ScheduleBackgroundEventHookParams = {\n date: string;\n request: CronjobRpcRequest;\n};\n\nexport type ScheduleBackgroundEventMethodHooks = {\n scheduleBackgroundEvent: (\n snapEvent: ScheduleBackgroundEventHookParams,\n ) => string;\n\n hasPermission: (permissionName: string) => boolean;\n};\n\nexport const scheduleBackgroundEventHandler: PermittedHandlerExport<\n ScheduleBackgroundEventMethodHooks,\n ScheduleBackgroundEventParameters,\n ScheduleBackgroundEventResult\n> = {\n methodNames: [methodName],\n implementation: getScheduleBackgroundEventImplementation,\n hookNames,\n};\n\nconst ScheduleBackgroundEventParametersWithDateStruct = object({\n date: ISO8601DateStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersWithDurationStruct = object({\n duration: ISO8601DurationStruct,\n request: CronjobRpcRequestStruct,\n});\n\nconst ScheduleBackgroundEventParametersStruct = selectiveUnion((val) => {\n if (hasProperty(val, 'date')) {\n return ScheduleBackgroundEventParametersWithDateStruct;\n }\n return ScheduleBackgroundEventParametersWithDurationStruct;\n});\n\nexport type ScheduleBackgroundEventParameters = InferMatching<\n typeof ScheduleBackgroundEventParametersStruct,\n ScheduleBackgroundEventParams\n>;\n\n/**\n * Generates a `DateTime` object based on if a duration or date is provided.\n *\n * @param params - The validated params from the `snap_scheduleBackgroundEvent` call.\n * @returns A `DateTime` object.\n */\nfunction getStartDate(params: ScheduleBackgroundEventParams) {\n if ('duration' in params) {\n return DateTime.fromJSDate(new Date())\n .toUTC()\n .plus(Duration.fromISO(params.duration));\n }\n\n return DateTime.fromISO(params.date, { setZone: true });\n}\n\n/**\n * The `snap_scheduleBackgroundEvent` method implementation.\n *\n * @param req - The JSON-RPC request object.\n * @param res - The JSON-RPC response object.\n * @param _next - The `json-rpc-engine` \"next\" callback. Not used by this\n * function.\n * @param end - The `json-rpc-engine` \"end\" callback.\n * @param hooks - The RPC method hooks.\n * @param hooks.scheduleBackgroundEvent - The function to schedule a background event.\n * @param hooks.hasPermission - The function to check if a snap has the `endowment:cronjob` permission.\n * @returns An id representing the background event.\n */\nasync function getScheduleBackgroundEventImplementation(\n req: JsonRpcRequest<ScheduleBackgroundEventParameters>,\n res: PendingJsonRpcResponse<ScheduleBackgroundEventResult>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n {\n scheduleBackgroundEvent,\n hasPermission,\n }: ScheduleBackgroundEventMethodHooks,\n): Promise<void> {\n const { params } = req;\n\n if (!hasPermission(SnapEndowments.Cronjob)) {\n return end(providerErrors.unauthorized());\n }\n\n try {\n const validatedParams = getValidatedParams(params);\n\n const { request } = validatedParams;\n\n const date = getStartDate(validatedParams);\n\n // Make sure any millisecond precision is removed.\n const truncatedDate = date.startOf('second').toISO({\n suppressMilliseconds: true,\n });\n\n assert(truncatedDate);\n\n const id = scheduleBackgroundEvent({ date: truncatedDate, request });\n res.result = id;\n } catch (error) {\n return end(error);\n }\n\n return end();\n}\n\n/**\n * Validate the scheduleBackgroundEvent method `params` and returns them cast to the correct\n * type. Throws if validation fails.\n *\n * @param params - The unvalidated params object from the method request.\n * @returns The validated resolveInterface method parameter object.\n */\nfunction getValidatedParams(\n params: unknown,\n): ScheduleBackgroundEventParameters {\n try {\n return create(params, ScheduleBackgroundEventParametersStruct);\n } catch (error) {\n if (error instanceof StructError) {\n throw rpcErrors.invalidParams({\n message: `Invalid params: ${error.message}.`,\n });\n }\n /* istanbul ignore next */\n throw rpcErrors.internal();\n }\n}\n"]}
@@ -38,8 +38,8 @@ export type SetStateHooks = {
38
38
  };
39
39
  declare const SetStateParametersStruct: import("@metamask/superstruct").Struct<{
40
40
  value: Json;
41
- key?: string | undefined;
42
41
  encrypted?: boolean | undefined;
42
+ key?: string | undefined;
43
43
  }, {
44
44
  key: import("@metamask/superstruct").Struct<string | undefined, null>;
45
45
  value: import("@metamask/superstruct").Struct<Json, unknown>;
@@ -38,8 +38,8 @@ export type SetStateHooks = {
38
38
  };
39
39
  declare const SetStateParametersStruct: import("@metamask/superstruct").Struct<{
40
40
  value: Json;
41
- key?: string | undefined;
42
41
  encrypted?: boolean | undefined;
42
+ key?: string | undefined;
43
43
  }, {
44
44
  key: import("@metamask/superstruct").Struct<string | undefined, null>;
45
45
  value: import("@metamask/superstruct").Struct<Json, unknown>;