{"version":3,"file":"cronjob.mjs","sourceRoot":"","sources":["../src/cronjob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,4BAA4B;AAErD,OAAO,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACP,8BAA8B;AAC/B,OAAO,EACL,WAAW,EACX,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACrB,wBAAwB;;;AAGzB,OAAO,EAAE,qBAAqB,EAAE,mBAAe;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;IAC5C,OAAO,EAAE,QAAQ,CAAC,oBAAoB,CAAC;IACvC,EAAE,EAAE,QAAQ,CAAC,eAAe,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE;IAChB,MAAM,EAAE,QAAQ,CAAC,mBAAmB,CAAC;CACtC,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CACxC,MAAM,EAAE,EACR,oBAAoB,EACpB,CAAC,KAAK,EAAE,EAAE;IACR,IAAI,CAAC;QACH,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,iDAAiD,KAAK,GAAG,CAAC;IACnE,CAAC;AACH,CAAC,CACF,CAAC;AAIF,MAAM,oCAAoC,GAAG,MAAM,CAAC;IAClD,UAAU,EAAE,oBAAoB;IAChC,OAAO,EAAE,uBAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,kCAAkC,GAAG,MAAM,CAAC;IAChD,QAAQ,EAAE,qBAAqB;IAC/B,OAAO,EAAE,uBAAuB;CACjC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE;IACjE,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;QACtD,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,OAAO,oCAAoC,CAAC;AAC9C,CAAC,CAAC,CAAC;AAIH;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,CAClD,0BAA0B,CAC3B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["import { selectiveUnion } from '@metamask/snaps-sdk';\nimport type { Infer } from '@metamask/superstruct';\nimport {\n  array,\n  create,\n  object,\n  optional,\n  refine,\n  string,\n} from '@metamask/superstruct';\nimport {\n  hasProperty,\n  isObject,\n  JsonRpcIdStruct,\n  JsonRpcParamsStruct,\n  JsonRpcVersionStruct,\n} from '@metamask/utils';\nimport { parseExpression } from 'cron-parser';\n\nimport { ISO8601DurationStruct } from './time';\n\nexport const CronjobRpcRequestStruct = object({\n  jsonrpc: optional(JsonRpcVersionStruct),\n  id: optional(JsonRpcIdStruct),\n  method: string(),\n  params: optional(JsonRpcParamsStruct),\n});\n\nexport type CronjobRpcRequest = Infer<typeof CronjobRpcRequestStruct>;\n\nexport const CronExpressionStruct = refine(\n  string(),\n  'cronjob expression',\n  (value) => {\n    try {\n      parseExpression(value);\n      return true;\n    } catch {\n      return `Expected a cronjob expression, but received: \"${value}\"`;\n    }\n  },\n);\n\nexport type CronExpression = Infer<typeof CronExpressionStruct>;\n\nconst CronjobExpressionSpecificationStruct = object({\n  expression: CronExpressionStruct,\n  request: CronjobRpcRequestStruct,\n});\n\nconst CronjobDurationSpecificationStruct = object({\n  duration: ISO8601DurationStruct,\n  request: CronjobRpcRequestStruct,\n});\n\nexport const CronjobSpecificationStruct = selectiveUnion((value) => {\n  if (isObject(value) && hasProperty(value, 'duration')) {\n    return CronjobDurationSpecificationStruct;\n  }\n\n  return CronjobExpressionSpecificationStruct;\n});\n\nexport type CronjobSpecification = Infer<typeof CronjobSpecificationStruct>;\n\n/**\n * Check if the given value is a {@link CronjobSpecification} object.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid {@link CronjobSpecification} object.\n */\nexport function isCronjobSpecification(value: unknown): boolean {\n  try {\n    create(value, CronjobSpecificationStruct);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nexport const CronjobSpecificationArrayStruct = array(\n  CronjobSpecificationStruct,\n);\n\n/**\n * Check if the given value is an array of {@link CronjobSpecification} objects.\n *\n * @param value - The value to check.\n * @returns Whether the value is a valid array of {@link CronjobSpecification} objects.\n */\nexport function isCronjobSpecificationArray(value: unknown): boolean {\n  try {\n    create(value, CronjobSpecificationArrayStruct);\n    return true;\n  } catch {\n    return false;\n  }\n}\n"]}