@metamask/snaps-controllers 9.4.0 → 9.5.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 (102) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/dist/{chunk-OJBUUQ5D.js → chunk-2D5PGL7S.js} +7 -7
  3. package/dist/chunk-2D5PGL7S.js.map +1 -0
  4. package/dist/{chunk-6GMWL4JR.mjs → chunk-2SRKMEUV.mjs} +2 -2
  5. package/dist/chunk-2SRKMEUV.mjs.map +1 -0
  6. package/dist/{chunk-5O4O4BI5.js → chunk-36QDTCDZ.js} +1 -1
  7. package/dist/chunk-36QDTCDZ.js.map +1 -0
  8. package/dist/{chunk-POQSARDG.js → chunk-3WWZDKQL.js} +7 -7
  9. package/dist/{chunk-FKQTV3LO.js → chunk-6K4MATNG.js} +4 -4
  10. package/dist/chunk-6K4MATNG.js.map +1 -0
  11. package/dist/{chunk-LWBPKSU2.js → chunk-6Z4WDAVC.js} +3 -3
  12. package/dist/{chunk-WKQRCGUW.mjs → chunk-BAUQWPSP.mjs} +2 -2
  13. package/dist/chunk-BAUQWPSP.mjs.map +1 -0
  14. package/dist/{chunk-XFUP7RFI.js → chunk-DSOZPX7I.js} +1 -1
  15. package/dist/chunk-DSOZPX7I.js.map +1 -0
  16. package/dist/{chunk-UMVUXQ3B.mjs → chunk-F3ZMDQ52.mjs} +1 -1
  17. package/dist/chunk-F3ZMDQ52.mjs.map +1 -0
  18. package/dist/{chunk-3WEWHK2I.mjs → chunk-HULNFJMA.mjs} +7 -3
  19. package/dist/chunk-HULNFJMA.mjs.map +1 -0
  20. package/dist/{chunk-CPUUURMT.js → chunk-I25KLPIS.js} +2 -2
  21. package/dist/chunk-I25KLPIS.js.map +1 -0
  22. package/dist/{chunk-6M4XK4PN.mjs → chunk-I5V56NYO.mjs} +2 -2
  23. package/dist/chunk-I5V56NYO.mjs.map +1 -0
  24. package/dist/{chunk-XWDEGRM5.js → chunk-K3TNQEM5.js} +2 -2
  25. package/dist/chunk-K3TNQEM5.js.map +1 -0
  26. package/dist/{chunk-2MH7QYBP.mjs → chunk-QWN3UOMA.mjs} +3 -3
  27. package/dist/chunk-QWN3UOMA.mjs.map +1 -0
  28. package/dist/{chunk-EVKVZUYY.js → chunk-RZ2NHZXH.js} +7 -3
  29. package/dist/chunk-RZ2NHZXH.js.map +1 -0
  30. package/dist/{chunk-RDBT3ZJQ.js → chunk-TIURYSSR.js} +2 -2
  31. package/dist/{chunk-RDBT3ZJQ.js.map → chunk-TIURYSSR.js.map} +1 -1
  32. package/dist/{chunk-B3UTLNYS.mjs → chunk-UM4NFNEI.mjs} +2 -2
  33. package/dist/{chunk-33RRV7F4.mjs → chunk-Z4BUMSH3.mjs} +1 -1
  34. package/dist/chunk-Z4BUMSH3.mjs.map +1 -0
  35. package/dist/{chunk-CJY2LYEL.mjs → chunk-Z5QWRDUN.mjs} +2 -2
  36. package/dist/chunk-Z5QWRDUN.mjs.map +1 -0
  37. package/dist/{chunk-2AEM5R2M.mjs → chunk-ZKG6FRKN.mjs} +4 -4
  38. package/dist/cronjob/CronjobController.js +11 -11
  39. package/dist/cronjob/CronjobController.mjs +10 -10
  40. package/dist/cronjob/index.js +11 -11
  41. package/dist/cronjob/index.mjs +10 -10
  42. package/dist/index.js +11 -11
  43. package/dist/index.mjs +10 -10
  44. package/dist/insights/SnapInsightsController.js +8 -8
  45. package/dist/insights/SnapInsightsController.mjs +7 -7
  46. package/dist/insights/index.js +8 -8
  47. package/dist/insights/index.mjs +7 -7
  48. package/dist/interface/SnapInterfaceController.js +3 -3
  49. package/dist/interface/SnapInterfaceController.mjs +2 -2
  50. package/dist/interface/index.js +3 -3
  51. package/dist/interface/index.mjs +2 -2
  52. package/dist/interface/utils.js +2 -2
  53. package/dist/interface/utils.mjs +1 -1
  54. package/dist/node.js +11 -11
  55. package/dist/node.mjs +10 -10
  56. package/dist/react-native.js +11 -11
  57. package/dist/react-native.mjs +10 -10
  58. package/dist/snaps/SnapController.js +7 -7
  59. package/dist/snaps/SnapController.mjs +6 -6
  60. package/dist/snaps/index.js +7 -7
  61. package/dist/snaps/index.mjs +6 -6
  62. package/dist/snaps/location/http.js +2 -2
  63. package/dist/snaps/location/http.mjs +1 -1
  64. package/dist/snaps/location/index.js +5 -5
  65. package/dist/snaps/location/index.mjs +4 -4
  66. package/dist/snaps/location/local.js +3 -3
  67. package/dist/snaps/location/local.mjs +2 -2
  68. package/dist/snaps/location/location.js +5 -5
  69. package/dist/snaps/location/location.mjs +4 -4
  70. package/dist/snaps/location/npm.js +2 -2
  71. package/dist/snaps/location/npm.mjs +1 -1
  72. package/dist/snaps/registry/index.js +2 -2
  73. package/dist/snaps/registry/index.mjs +1 -1
  74. package/dist/snaps/registry/json.js +2 -2
  75. package/dist/snaps/registry/json.mjs +1 -1
  76. package/dist/tsconfig.build.tsbuildinfo +1 -1
  77. package/dist/types/cronjob/CronjobController.d.ts +6 -4
  78. package/dist/types/insights/SnapInsightsController.d.ts +6 -3
  79. package/dist/types/interface/SnapInterfaceController.d.ts +6 -3
  80. package/dist/types/snaps/SnapController.d.ts +8 -3
  81. package/dist/types/snaps/registry/json.d.ts +5 -3
  82. package/dist/types/utils.d.ts +1 -1
  83. package/package.json +3 -3
  84. package/dist/chunk-2MH7QYBP.mjs.map +0 -1
  85. package/dist/chunk-33RRV7F4.mjs.map +0 -1
  86. package/dist/chunk-3WEWHK2I.mjs.map +0 -1
  87. package/dist/chunk-5O4O4BI5.js.map +0 -1
  88. package/dist/chunk-6GMWL4JR.mjs.map +0 -1
  89. package/dist/chunk-6M4XK4PN.mjs.map +0 -1
  90. package/dist/chunk-CJY2LYEL.mjs.map +0 -1
  91. package/dist/chunk-CPUUURMT.js.map +0 -1
  92. package/dist/chunk-EVKVZUYY.js.map +0 -1
  93. package/dist/chunk-FKQTV3LO.js.map +0 -1
  94. package/dist/chunk-OJBUUQ5D.js.map +0 -1
  95. package/dist/chunk-UMVUXQ3B.mjs.map +0 -1
  96. package/dist/chunk-WKQRCGUW.mjs.map +0 -1
  97. package/dist/chunk-XFUP7RFI.js.map +0 -1
  98. package/dist/chunk-XWDEGRM5.js.map +0 -1
  99. /package/dist/{chunk-POQSARDG.js.map → chunk-3WWZDKQL.js.map} +0 -0
  100. /package/dist/{chunk-LWBPKSU2.js.map → chunk-6Z4WDAVC.js.map} +0 -0
  101. /package/dist/{chunk-B3UTLNYS.mjs.map → chunk-UM4NFNEI.mjs.map} +0 -0
  102. /package/dist/{chunk-2AEM5R2M.mjs.map → chunk-ZKG6FRKN.mjs.map} +0 -0
@@ -29,6 +29,10 @@ function constructComponentSpecificDefaultState(element) {
29
29
  const children = _snapsutils.getJsxChildren.call(void 0, element);
30
30
  return children[0]?.props.value;
31
31
  }
32
+ case "Selector": {
33
+ const children = _snapsutils.getJsxChildren.call(void 0, element);
34
+ return children[0]?.props.value;
35
+ }
32
36
  case "Checkbox":
33
37
  return false;
34
38
  default:
@@ -66,7 +70,7 @@ function constructState(oldState, rootComponent) {
66
70
  newState[component.props.name] = {};
67
71
  return;
68
72
  }
69
- if (currentForm && (component.type === "Input" || component.type === "Dropdown" || component.type === "RadioGroup" || component.type === "FileInput" || component.type === "Checkbox")) {
73
+ if (currentForm && (component.type === "Input" || component.type === "Dropdown" || component.type === "RadioGroup" || component.type === "FileInput" || component.type === "Checkbox" || component.type === "Selector")) {
70
74
  const formState = newState[currentForm.name];
71
75
  assertNameIsUnique(formState, component.props.name);
72
76
  formState[component.props.name] = constructInputState(
@@ -76,7 +80,7 @@ function constructState(oldState, rootComponent) {
76
80
  );
77
81
  return;
78
82
  }
79
- if (component.type === "Input" || component.type === "Dropdown" || component.type === "RadioGroup" || component.type === "FileInput" || component.type === "Checkbox") {
83
+ if (component.type === "Input" || component.type === "Dropdown" || component.type === "RadioGroup" || component.type === "FileInput" || component.type === "Checkbox" || component.type === "Selector") {
80
84
  assertNameIsUnique(newState, component.props.name);
81
85
  newState[component.props.name] = constructInputState(oldState, component);
82
86
  }
@@ -101,4 +105,4 @@ function validateInterfaceContext(context) {
101
105
 
102
106
 
103
107
  exports.getJsxInterface = getJsxInterface; exports.assertNameIsUnique = assertNameIsUnique; exports.constructState = constructState; exports.validateInterfaceContext = validateInterfaceContext;
104
- //# sourceMappingURL=chunk-EVKVZUYY.js.map
108
+ //# sourceMappingURL=chunk-RZ2NHZXH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/interface/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { assert } from '@metamask/snaps-sdk';\nimport type {\n FormState,\n InterfaceState,\n ComponentOrElement,\n InterfaceContext,\n State,\n} from '@metamask/snaps-sdk';\nimport type {\n DropdownElement,\n InputElement,\n JSXElement,\n OptionElement,\n FileInputElement,\n CheckboxElement,\n RadioGroupElement,\n RadioElement,\n SelectorElement,\n SelectorOptionElement,\n} from '@metamask/snaps-sdk/jsx';\nimport { isJSXElementUnsafe } from '@metamask/snaps-sdk/jsx';\nimport {\n getJsonSizeUnsafe,\n getJsxChildren,\n getJsxElementFromComponent,\n walkJsx,\n} from '@metamask/snaps-utils';\n\n/**\n * Get a JSX element from a component or JSX element. If the component is a\n * JSX element, it is returned as is. Otherwise, the component is converted to\n * a JSX element.\n *\n * @param component - The component to convert.\n * @returns The JSX element.\n */\nexport function getJsxInterface(component: ComponentOrElement): JSXElement {\n if (isJSXElementUnsafe(component)) {\n return component;\n }\n\n return getJsxElementFromComponent(component);\n}\n\n/**\n * Assert that the component name is unique in state.\n *\n * @param state - The interface state to verify against.\n * @param name - The component name to verify.\n */\nexport function assertNameIsUnique(state: InterfaceState, name: string) {\n assert(\n state[name] === undefined,\n `Duplicate component names are not allowed, found multiple instances of: \"${name}\".`,\n );\n}\n\n/**\n * Construct default state for a component.\n *\n * This function is meant to be used inside constructInputState to account\n * for component specific defaults and will not override the component value or existing form state.\n *\n * @param element - The input element.\n * @returns The default state for the specific component, if any.\n */\nfunction constructComponentSpecificDefaultState(\n element:\n | InputElement\n | DropdownElement\n | RadioGroupElement\n | CheckboxElement\n | SelectorElement,\n) {\n switch (element.type) {\n case 'Dropdown': {\n const children = getJsxChildren(element) as OptionElement[];\n return children[0]?.props.value;\n }\n\n case 'RadioGroup': {\n const children = getJsxChildren(element) as RadioElement[];\n return children[0]?.props.value;\n }\n\n case 'Selector': {\n const children = getJsxChildren(element) as SelectorOptionElement[];\n return children[0]?.props.value;\n }\n\n case 'Checkbox':\n return false;\n\n default:\n return null;\n }\n}\n\n/**\n * Get the state value for a stateful component.\n *\n * Most components store the state value as a `value` prop.\n * This function exists to account for components where that isn't the case.\n *\n * @param element - The input element.\n * @returns The state value for a given component.\n */\nfunction getComponentStateValue(\n element:\n | InputElement\n | DropdownElement\n | RadioGroupElement\n | CheckboxElement\n | SelectorElement,\n) {\n switch (element.type) {\n case 'Checkbox':\n return element.props.checked;\n\n default:\n return element.props.value;\n }\n}\n\n/**\n * Construct the state for an input field.\n *\n * @param oldState - The previous state.\n * @param element - The input element.\n * @param form - An optional form that the input is enclosed in.\n * @returns The input state.\n */\nfunction constructInputState(\n oldState: InterfaceState,\n element:\n | InputElement\n | DropdownElement\n | RadioGroupElement\n | FileInputElement\n | CheckboxElement\n | SelectorElement,\n form?: string,\n) {\n const oldStateUnwrapped = form ? (oldState[form] as FormState) : oldState;\n const oldInputState = oldStateUnwrapped?.[element.props.name] as State;\n\n if (element.type === 'FileInput') {\n return oldInputState ?? null;\n }\n\n return (\n getComponentStateValue(element) ??\n oldInputState ??\n constructComponentSpecificDefaultState(element) ??\n null\n );\n}\n\n/**\n * Construct the interface state for a given component tree.\n *\n * @param oldState - The previous state.\n * @param rootComponent - The UI component to construct state from.\n * @returns The interface state of the passed component.\n */\nexport function constructState(\n oldState: InterfaceState,\n rootComponent: JSXElement,\n): InterfaceState {\n const newState: InterfaceState = {};\n\n // Stack containing the forms we have visited and at which depth\n const formStack: { name: string; depth: number }[] = [];\n\n walkJsx(rootComponent, (component, depth) => {\n let currentForm = formStack[formStack.length - 1];\n\n // Pop the current form of the stack once we leave its depth.\n if (currentForm && depth <= currentForm.depth) {\n formStack.pop();\n currentForm = formStack[formStack.length - 1];\n }\n\n if (component.type === 'Form') {\n assertNameIsUnique(newState, component.props.name);\n formStack.push({ name: component.props.name, depth });\n newState[component.props.name] = {};\n return;\n }\n\n // Stateful components inside a form\n if (\n currentForm &&\n (component.type === 'Input' ||\n component.type === 'Dropdown' ||\n component.type === 'RadioGroup' ||\n component.type === 'FileInput' ||\n component.type === 'Checkbox' ||\n component.type === 'Selector')\n ) {\n const formState = newState[currentForm.name] as FormState;\n assertNameIsUnique(formState, component.props.name);\n formState[component.props.name] = constructInputState(\n oldState,\n component,\n currentForm.name,\n );\n return;\n }\n\n // Stateful components outside a form\n if (\n component.type === 'Input' ||\n component.type === 'Dropdown' ||\n component.type === 'RadioGroup' ||\n component.type === 'FileInput' ||\n component.type === 'Checkbox' ||\n component.type === 'Selector'\n ) {\n assertNameIsUnique(newState, component.props.name);\n newState[component.props.name] = constructInputState(oldState, component);\n }\n });\n\n return newState;\n}\n\nconst MAX_CONTEXT_SIZE = 1_000_000; // 1 mb\n\n/**\n * Validate a JSON blob to be used as the interface context.\n *\n * @param context - The JSON blob.\n * @throws If the JSON blob is too large.\n */\nexport function validateInterfaceContext(context?: InterfaceContext) {\n if (!context) {\n return;\n }\n\n // We assume the validity of this JSON to be validated by the caller.\n // E.g., in the RPC method implementation.\n const size = getJsonSizeUnsafe(context);\n assert(\n size <= MAX_CONTEXT_SIZE,\n `A Snap interface context may not be larger than ${\n MAX_CONTEXT_SIZE / 1000000\n } MB.`,\n );\n}\n"]}
@@ -18,7 +18,7 @@ var HttpLocation = class {
18
18
  // in most often case we'll only have one file contents in common case.
19
19
  this.cache = /* @__PURE__ */ new Map();
20
20
  _utils.assertStruct.call(void 0, url.toString(), _snapsutils.HttpSnapIdStruct, "Invalid Snap Id: ");
21
- this.fetchFn = opts.fetch ?? globalThis.fetch.bind(globalThis);
21
+ this.fetchFn = opts.fetch ?? globalThis.fetch.bind(void 0);
22
22
  this.fetchOptions = opts.fetchOptions;
23
23
  this.url = url;
24
24
  }
@@ -89,4 +89,4 @@ var HttpLocation = class {
89
89
 
90
90
 
91
91
  exports.HttpLocation = HttpLocation;
92
- //# sourceMappingURL=chunk-RDBT3ZJQ.js.map
92
+ //# sourceMappingURL=chunk-TIURYSSR.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/snaps/location/http.ts"],"names":["vfile"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,QAAQ,oBAAoB;AAY9B,IAAM,eAAN,MAA2C;AAAA,EAoBhD,YAAY,KAAU,OAAoB,CAAC,GAAG;AAb9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAiB,QAAQ,oBAAI,IAG3B;AAWA,iBAAa,IAAI,SAAS,GAAG,kBAAkB,mBAAmB;AAClE,SAAK,UAAU,KAAK,SAAS,WAAW,MAAM,KAAK,UAAU;AAC7D,SAAK,eAAe,KAAK;AACzB,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,MAAM,WAA+C;AACnD,QAAI,KAAK,mBAAmB;AAC1B,aAAO,KAAK,kBAAkB,MAAM;AAAA,IACtC;AAGA,UAAM,gBAAgB,IAAI;AAAA,MACxB,iBAAiB;AAAA,MACjB,KAAK;AAAA,IACP,EAAE,SAAS;AAEX,UAAM,WAAW,MAAM,KAAK,QAAQ,eAAe,KAAK,YAAY;AACpE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,oBAAoB,aAAa,mBAAmB,SAAS,MAAM;AAAA,MACrE;AAAA,IACF;AACA,UAAM,WAAW,MAAM,SAAS,KAAK;AACrC,UAAM,WAAW,UAAU,QAAQ;AACnC,UAAM,QAAQ,IAAI,YAA0B;AAAA,MAC1C,OAAO;AAAA,MACP,QAAQ,mBAAmB,QAAQ;AAAA,MACnC,MAAM,iBAAiB;AAAA,MACvB,MAAM,EAAE,cAAc;AAAA,IACxB,CAAC;AACD,SAAK,oBAAoB;AAEzB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,MAAM,MAAM,MAAoC;AAC9C,UAAM,eAAe,kBAAkB,IAAI;AAC3C,UAAM,SAAS,KAAK,MAAM,IAAI,YAAY;AAC1C,QAAI,WAAW,QAAW;AACxB,YAAM,EAAE,MAAM,SAAS,IAAI;AAC3B,YAAM,QAAQ,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AACzD,YAAMA,SAAQ,KAAK,MAAM;AACzB,MAAAA,OAAM,QAAQ;AACd,aAAOA;AAAA,IACT;AAEA,UAAM,gBAAgB,KAAK,YAAY,YAAY,EAAE,SAAS;AAC9D,UAAM,WAAW,MAAM,KAAK,QAAQ,eAAe,KAAK,YAAY;AACpE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,oBAAoB,aAAa,mBAAmB,SAAS,MAAM;AAAA,MACrE;AAAA,IACF;AACA,UAAM,QAAQ,IAAI,YAAY;AAAA,MAC5B,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM,EAAE,cAAc;AAAA,IACxB,CAAC;AACD,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC;AAAA,MACE,CAAC,KAAK,MAAM,IAAI,YAAY;AAAA,MAC5B;AAAA,IACF;AACA,SAAK,MAAM,IAAI,cAAc,EAAE,MAAM,OAAO,UAAU,KAAK,CAAC;AAE5D,WAAO,KAAK,MAAM,YAAY;AAAA,EAChC;AAAA,EAEA,IAAI,OAAY;AACd,WAAO,IAAI,IAAI,KAAK,GAAG;AAAA,EACzB;AAAA,EAEQ,YAAY,MAAmB;AACrC,WAAO,CAAC,KAAK,WAAW,GAAG,GAAG,+BAA+B;AAC7D,WAAO,IAAI,IAAI,MAAM,KAAK,GAAG;AAAA,EAC/B;AACF","sourcesContent":["import type { SnapManifest } from '@metamask/snaps-utils';\nimport {\n VirtualFile,\n HttpSnapIdStruct,\n NpmSnapFileNames,\n createSnapManifest,\n normalizeRelative,\n parseJson,\n} from '@metamask/snaps-utils';\nimport { assert, assertStruct } from '@metamask/utils';\n\nimport type { SnapLocation } from './location';\n\nexport interface HttpOptions {\n /**\n * @default fetch\n */\n fetch?: typeof fetch;\n fetchOptions?: RequestInit;\n}\n\nexport class HttpLocation implements SnapLocation {\n // We keep contents separate because then we can use only one Blob in cache,\n // which we convert to Uint8Array when actually returning the file.\n //\n // That avoids deepCloning file contents.\n // I imagine ArrayBuffers are copy-on-write optimized, meaning\n // in most often case we'll only have one file contents in common case.\n private readonly cache = new Map<\n string,\n { file: VirtualFile; contents: Blob }\n >();\n\n private validatedManifest?: VirtualFile<SnapManifest>;\n\n private readonly url: URL;\n\n private readonly fetchFn: typeof fetch;\n\n private readonly fetchOptions?: RequestInit;\n\n constructor(url: URL, opts: HttpOptions = {}) {\n assertStruct(url.toString(), HttpSnapIdStruct, 'Invalid Snap Id: ');\n this.fetchFn = opts.fetch ?? globalThis.fetch.bind(globalThis);\n this.fetchOptions = opts.fetchOptions;\n this.url = url;\n }\n\n async manifest(): Promise<VirtualFile<SnapManifest>> {\n if (this.validatedManifest) {\n return this.validatedManifest.clone();\n }\n\n // jest-fetch-mock doesn't handle new URL(), we need to convert .toString()\n const canonicalPath = new URL(\n NpmSnapFileNames.Manifest,\n this.url,\n ).toString();\n\n const response = await this.fetchFn(canonicalPath, this.fetchOptions);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch \"${canonicalPath}\". Status code: ${response.status}.`,\n );\n }\n const contents = await response.text();\n const manifest = parseJson(contents);\n const vfile = new VirtualFile<SnapManifest>({\n value: contents,\n result: createSnapManifest(manifest),\n path: NpmSnapFileNames.Manifest,\n data: { canonicalPath },\n });\n this.validatedManifest = vfile;\n\n return this.manifest();\n }\n\n async fetch(path: string): Promise<VirtualFile> {\n const relativePath = normalizeRelative(path);\n const cached = this.cache.get(relativePath);\n if (cached !== undefined) {\n const { file, contents } = cached;\n const value = new Uint8Array(await contents.arrayBuffer());\n const vfile = file.clone();\n vfile.value = value;\n return vfile;\n }\n\n const canonicalPath = this.toCanonical(relativePath).toString();\n const response = await this.fetchFn(canonicalPath, this.fetchOptions);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch \"${canonicalPath}\". Status code: ${response.status}.`,\n );\n }\n const vfile = new VirtualFile({\n value: '',\n path: relativePath,\n data: { canonicalPath },\n });\n const blob = await response.blob();\n assert(\n !this.cache.has(relativePath),\n 'Corrupted cache, multiple files with same path.',\n );\n this.cache.set(relativePath, { file: vfile, contents: blob });\n\n return this.fetch(relativePath);\n }\n\n get root(): URL {\n return new URL(this.url);\n }\n\n private toCanonical(path: string): URL {\n assert(!path.startsWith('/'), 'Tried to parse absolute path.');\n return new URL(path, this.url);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/snaps/location/http.ts"],"names":["vfile"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,QAAQ,oBAAoB;AAY9B,IAAM,eAAN,MAA2C;AAAA,EAoBhD,YAAY,KAAU,OAAoB,CAAC,GAAG;AAb9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAiB,QAAQ,oBAAI,IAG3B;AAWA,iBAAa,IAAI,SAAS,GAAG,kBAAkB,mBAAmB;AAClE,SAAK,UAAU,KAAK,SAAS,WAAW,MAAM,KAAK,MAAS;AAC5D,SAAK,eAAe,KAAK;AACzB,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,MAAM,WAA+C;AACnD,QAAI,KAAK,mBAAmB;AAC1B,aAAO,KAAK,kBAAkB,MAAM;AAAA,IACtC;AAGA,UAAM,gBAAgB,IAAI;AAAA,MACxB,iBAAiB;AAAA,MACjB,KAAK;AAAA,IACP,EAAE,SAAS;AAEX,UAAM,WAAW,MAAM,KAAK,QAAQ,eAAe,KAAK,YAAY;AACpE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,oBAAoB,aAAa,mBAAmB,SAAS,MAAM;AAAA,MACrE;AAAA,IACF;AACA,UAAM,WAAW,MAAM,SAAS,KAAK;AACrC,UAAM,WAAW,UAAU,QAAQ;AACnC,UAAM,QAAQ,IAAI,YAA0B;AAAA,MAC1C,OAAO;AAAA,MACP,QAAQ,mBAAmB,QAAQ;AAAA,MACnC,MAAM,iBAAiB;AAAA,MACvB,MAAM,EAAE,cAAc;AAAA,IACxB,CAAC;AACD,SAAK,oBAAoB;AAEzB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,MAAM,MAAM,MAAoC;AAC9C,UAAM,eAAe,kBAAkB,IAAI;AAC3C,UAAM,SAAS,KAAK,MAAM,IAAI,YAAY;AAC1C,QAAI,WAAW,QAAW;AACxB,YAAM,EAAE,MAAM,SAAS,IAAI;AAC3B,YAAM,QAAQ,IAAI,WAAW,MAAM,SAAS,YAAY,CAAC;AACzD,YAAMA,SAAQ,KAAK,MAAM;AACzB,MAAAA,OAAM,QAAQ;AACd,aAAOA;AAAA,IACT;AAEA,UAAM,gBAAgB,KAAK,YAAY,YAAY,EAAE,SAAS;AAC9D,UAAM,WAAW,MAAM,KAAK,QAAQ,eAAe,KAAK,YAAY;AACpE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR,oBAAoB,aAAa,mBAAmB,SAAS,MAAM;AAAA,MACrE;AAAA,IACF;AACA,UAAM,QAAQ,IAAI,YAAY;AAAA,MAC5B,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM,EAAE,cAAc;AAAA,IACxB,CAAC;AACD,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC;AAAA,MACE,CAAC,KAAK,MAAM,IAAI,YAAY;AAAA,MAC5B;AAAA,IACF;AACA,SAAK,MAAM,IAAI,cAAc,EAAE,MAAM,OAAO,UAAU,KAAK,CAAC;AAE5D,WAAO,KAAK,MAAM,YAAY;AAAA,EAChC;AAAA,EAEA,IAAI,OAAY;AACd,WAAO,IAAI,IAAI,KAAK,GAAG;AAAA,EACzB;AAAA,EAEQ,YAAY,MAAmB;AACrC,WAAO,CAAC,KAAK,WAAW,GAAG,GAAG,+BAA+B;AAC7D,WAAO,IAAI,IAAI,MAAM,KAAK,GAAG;AAAA,EAC/B;AACF","sourcesContent":["import type { SnapManifest } from '@metamask/snaps-utils';\nimport {\n VirtualFile,\n HttpSnapIdStruct,\n NpmSnapFileNames,\n createSnapManifest,\n normalizeRelative,\n parseJson,\n} from '@metamask/snaps-utils';\nimport { assert, assertStruct } from '@metamask/utils';\n\nimport type { SnapLocation } from './location';\n\nexport interface HttpOptions {\n /**\n * @default fetch\n */\n fetch?: typeof fetch;\n fetchOptions?: RequestInit;\n}\n\nexport class HttpLocation implements SnapLocation {\n // We keep contents separate because then we can use only one Blob in cache,\n // which we convert to Uint8Array when actually returning the file.\n //\n // That avoids deepCloning file contents.\n // I imagine ArrayBuffers are copy-on-write optimized, meaning\n // in most often case we'll only have one file contents in common case.\n private readonly cache = new Map<\n string,\n { file: VirtualFile; contents: Blob }\n >();\n\n private validatedManifest?: VirtualFile<SnapManifest>;\n\n private readonly url: URL;\n\n private readonly fetchFn: typeof fetch;\n\n private readonly fetchOptions?: RequestInit;\n\n constructor(url: URL, opts: HttpOptions = {}) {\n assertStruct(url.toString(), HttpSnapIdStruct, 'Invalid Snap Id: ');\n this.fetchFn = opts.fetch ?? globalThis.fetch.bind(undefined);\n this.fetchOptions = opts.fetchOptions;\n this.url = url;\n }\n\n async manifest(): Promise<VirtualFile<SnapManifest>> {\n if (this.validatedManifest) {\n return this.validatedManifest.clone();\n }\n\n // jest-fetch-mock doesn't handle new URL(), we need to convert .toString()\n const canonicalPath = new URL(\n NpmSnapFileNames.Manifest,\n this.url,\n ).toString();\n\n const response = await this.fetchFn(canonicalPath, this.fetchOptions);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch \"${canonicalPath}\". Status code: ${response.status}.`,\n );\n }\n const contents = await response.text();\n const manifest = parseJson(contents);\n const vfile = new VirtualFile<SnapManifest>({\n value: contents,\n result: createSnapManifest(manifest),\n path: NpmSnapFileNames.Manifest,\n data: { canonicalPath },\n });\n this.validatedManifest = vfile;\n\n return this.manifest();\n }\n\n async fetch(path: string): Promise<VirtualFile> {\n const relativePath = normalizeRelative(path);\n const cached = this.cache.get(relativePath);\n if (cached !== undefined) {\n const { file, contents } = cached;\n const value = new Uint8Array(await contents.arrayBuffer());\n const vfile = file.clone();\n vfile.value = value;\n return vfile;\n }\n\n const canonicalPath = this.toCanonical(relativePath).toString();\n const response = await this.fetchFn(canonicalPath, this.fetchOptions);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch \"${canonicalPath}\". Status code: ${response.status}.`,\n );\n }\n const vfile = new VirtualFile({\n value: '',\n path: relativePath,\n data: { canonicalPath },\n });\n const blob = await response.blob();\n assert(\n !this.cache.has(relativePath),\n 'Corrupted cache, multiple files with same path.',\n );\n this.cache.set(relativePath, { file: vfile, contents: blob });\n\n return this.fetch(relativePath);\n }\n\n get root(): URL {\n return new URL(this.url);\n }\n\n private toCanonical(path: string): URL {\n assert(!path.startsWith('/'), 'Tried to parse absolute path.');\n return new URL(path, this.url);\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  HttpLocation
3
- } from "./chunk-6GMWL4JR.mjs";
3
+ } from "./chunk-2SRKMEUV.mjs";
4
4
  import {
5
5
  __privateAdd,
6
6
  __privateGet,
@@ -45,4 +45,4 @@ function convertCanonical(vfile) {
45
45
  export {
46
46
  LocalLocation
47
47
  };
48
- //# sourceMappingURL=chunk-B3UTLNYS.mjs.map
48
+ //# sourceMappingURL=chunk-UM4NFNEI.mjs.map
@@ -280,4 +280,4 @@ export {
280
280
  DAILY_TIMEOUT,
281
281
  CronjobController
282
282
  };
283
- //# sourceMappingURL=chunk-33RRV7F4.mjs.map
283
+ //# sourceMappingURL=chunk-Z4BUMSH3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cronjob/CronjobController.ts"],"sourcesContent":["import type {\n RestrictedControllerMessenger,\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { GetPermissions } from '@metamask/permission-controller';\nimport {\n getCronjobCaveatJobs,\n SnapEndowments,\n} from '@metamask/snaps-rpc-methods';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport type {\n TruncatedSnap,\n CronjobSpecification,\n} from '@metamask/snaps-utils';\nimport {\n HandlerType,\n parseCronExpression,\n logError,\n} from '@metamask/snaps-utils';\nimport { Duration, inMilliseconds } from '@metamask/utils';\n\nimport type {\n GetAllSnaps,\n HandleSnapRequest,\n SnapDisabled,\n SnapEnabled,\n SnapInstalled,\n SnapUninstalled,\n SnapUpdated,\n} from '..';\nimport { getRunnableSnaps } from '..';\nimport { Timer } from '../snaps/Timer';\n\nexport type CronjobControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n CronjobControllerState\n>;\nexport type CronjobControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof controllerName,\n CronjobControllerState\n>;\nexport type CronjobControllerActions =\n | GetAllSnaps\n | HandleSnapRequest\n | GetPermissions\n | CronjobControllerGetStateAction;\n\nexport type CronjobControllerEvents =\n | SnapInstalled\n | SnapUninstalled\n | SnapUpdated\n | SnapEnabled\n | SnapDisabled\n | CronjobControllerStateChangeEvent;\n\nexport type CronjobControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n CronjobControllerActions,\n CronjobControllerEvents,\n CronjobControllerActions['type'],\n CronjobControllerEvents['type']\n>;\n\nexport const DAILY_TIMEOUT = inMilliseconds(24, Duration.Hour);\n\nexport type CronjobControllerArgs = {\n messenger: CronjobControllerMessenger;\n /**\n * Persisted state that will be used for rehydration.\n */\n state?: CronjobControllerState;\n};\n\nexport type Cronjob = {\n timer?: Timer;\n id: string;\n snapId: SnapId;\n} & CronjobSpecification;\n\nexport type StoredJobInformation = {\n lastRun: number;\n};\n\nexport type CronjobControllerState = {\n jobs: Record<string, StoredJobInformation>;\n};\n\nconst controllerName = 'CronjobController';\n\n/**\n * Use this controller to register and schedule periodically executed jobs\n * using RPC method hooks.\n */\nexport class CronjobController extends BaseController<\n typeof controllerName,\n CronjobControllerState,\n CronjobControllerMessenger\n> {\n #messenger: CronjobControllerMessenger;\n\n #dailyTimer!: Timer;\n\n #timers: Map<string, Timer>;\n\n // Mapping from jobId to snapId\n #snapIds: Map<string, string>;\n\n constructor({ messenger, state }: CronjobControllerArgs) {\n super({\n messenger,\n metadata: {\n jobs: { persist: true, anonymous: false },\n },\n name: controllerName,\n state: {\n jobs: {},\n ...state,\n },\n });\n this.#timers = new Map();\n this.#snapIds = new Map();\n this.#messenger = messenger;\n\n this._handleSnapRegisterEvent = this._handleSnapRegisterEvent.bind(this);\n this._handleSnapUnregisterEvent =\n this._handleSnapUnregisterEvent.bind(this);\n this._handleEventSnapUpdated = this._handleEventSnapUpdated.bind(this);\n\n // Subscribe to Snap events\n /* eslint-disable @typescript-eslint/unbound-method */\n this.messagingSystem.subscribe(\n 'SnapController:snapInstalled',\n this._handleSnapRegisterEvent,\n );\n\n this.messagingSystem.subscribe(\n 'SnapController:snapUninstalled',\n this._handleSnapUnregisterEvent,\n );\n\n this.messagingSystem.subscribe(\n 'SnapController:snapEnabled',\n this._handleSnapRegisterEvent,\n );\n\n this.messagingSystem.subscribe(\n 'SnapController:snapDisabled',\n this._handleSnapUnregisterEvent,\n );\n\n this.messagingSystem.subscribe(\n 'SnapController:snapUpdated',\n this._handleEventSnapUpdated,\n );\n /* eslint-enable @typescript-eslint/unbound-method */\n\n this.dailyCheckIn().catch((error) => {\n logError(error);\n });\n }\n\n /**\n * Retrieve all cronjob specifications for all runnable snaps.\n *\n * @returns Array of Cronjob specifications.\n */\n private getAllJobs(): Cronjob[] {\n const snaps = this.messagingSystem.call('SnapController:getAll');\n const filteredSnaps = getRunnableSnaps(snaps);\n\n const jobs = filteredSnaps.map((snap) => this.getSnapJobs(snap.id));\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n return jobs.flat().filter((job) => job !== undefined) as Cronjob[];\n }\n\n /**\n * Retrieve all Cronjob specifications for a Snap.\n *\n * @param snapId - ID of a Snap.\n * @returns Array of Cronjob specifications.\n */\n private getSnapJobs(snapId: SnapId): Cronjob[] | undefined {\n const permissions = this.#messenger.call(\n 'PermissionController:getPermissions',\n snapId,\n );\n\n const permission = permissions?.[SnapEndowments.Cronjob];\n const definitions = getCronjobCaveatJobs(permission);\n\n return definitions?.map((definition, idx) => {\n return { ...definition, id: `${snapId}-${idx}`, snapId };\n });\n }\n\n /**\n * Register cron jobs for a given snap by getting specification from a permission caveats.\n * Once registered, each job will be scheduled.\n *\n * @param snapId - ID of a snap.\n */\n register(snapId: SnapId) {\n const jobs = this.getSnapJobs(snapId);\n jobs?.forEach((job) => this.schedule(job));\n }\n\n /**\n * Schedule a new job.\n * This will interpret the cron expression and tell the timer to execute the job\n * at the next suitable point in time.\n * Job last run state will be initialized afterwards.\n *\n * Note: Schedule will be skipped if the job's execution time is too far in the future and\n * will be revisited on a daily check.\n *\n * @param job - Cronjob specification.\n */\n private schedule(job: Cronjob) {\n if (this.#timers.has(job.id)) {\n return;\n }\n\n const parsed = parseCronExpression(job.expression);\n const next = parsed.next();\n const now = new Date();\n const ms = next.getTime() - now.getTime();\n\n // Don't schedule this job yet as it is too far in the future\n if (ms > DAILY_TIMEOUT) {\n return;\n }\n\n const timer = new Timer(ms);\n timer.start(() => {\n this.executeCronjob(job).catch((error) => {\n // TODO: Decide how to handle errors.\n logError(error);\n });\n\n this.#timers.delete(job.id);\n this.schedule(job);\n });\n\n if (!this.state.jobs[job.id]?.lastRun) {\n this.updateJobLastRunState(job.id, 0); // 0 for init, never ran actually\n }\n\n this.#timers.set(job.id, timer);\n this.#snapIds.set(job.id, job.snapId);\n }\n\n /**\n * Execute job.\n *\n * @param job - Cronjob specification.\n */\n private async executeCronjob(job: Cronjob) {\n this.updateJobLastRunState(job.id, Date.now());\n await this.#messenger.call('SnapController:handleRequest', {\n snapId: job.snapId,\n origin: '',\n handler: HandlerType.OnCronjob,\n request: job.request,\n });\n }\n\n /**\n * Unregister all jobs related to the given snapId.\n *\n * @param snapId - ID of a snap.\n */\n unregister(snapId: string) {\n const jobs = [...this.#snapIds.entries()].filter(\n ([_, jobSnapId]) => jobSnapId === snapId,\n );\n\n if (jobs.length) {\n jobs.forEach(([id]) => {\n const timer = this.#timers.get(id);\n if (timer) {\n timer.cancel();\n this.#timers.delete(id);\n this.#snapIds.delete(id);\n }\n });\n }\n }\n\n /**\n * Update time of a last run for the Cronjob specified by ID.\n *\n * @param jobId - ID of a cron job.\n * @param lastRun - Unix timestamp when the job was last ran.\n */\n private updateJobLastRunState(jobId: string, lastRun: number) {\n this.update((state) => {\n state.jobs[jobId] = {\n lastRun,\n };\n });\n }\n\n /**\n * Runs every 24 hours to check if new jobs need to be scheduled.\n *\n * This is necessary for longer running jobs that execute with more than 24 hours between them.\n */\n async dailyCheckIn() {\n const jobs = this.getAllJobs();\n\n for (const job of jobs) {\n const parsed = parseCronExpression(job.expression);\n const lastRun = this.state.jobs[job.id]?.lastRun;\n // If a job was supposed to run while we were shut down but wasn't we run it now\n if (\n lastRun !== undefined &&\n parsed.hasPrev() &&\n parsed.prev().getTime() > lastRun\n ) {\n await this.executeCronjob(job);\n }\n\n // Try scheduling, will fail if an existing scheduled job is found\n this.schedule(job);\n }\n\n this.#dailyTimer = new Timer(DAILY_TIMEOUT);\n this.#dailyTimer.start(() => {\n this.dailyCheckIn().catch((error) => {\n // TODO: Decide how to handle errors.\n logError(error);\n });\n });\n }\n\n /**\n * Run controller teardown process and unsubscribe from Snap events.\n */\n destroy() {\n super.destroy();\n\n /* eslint-disable @typescript-eslint/unbound-method */\n this.messagingSystem.unsubscribe(\n 'SnapController:snapInstalled',\n this._handleSnapRegisterEvent,\n );\n\n this.messagingSystem.unsubscribe(\n 'SnapController:snapUninstalled',\n this._handleSnapUnregisterEvent,\n );\n\n this.messagingSystem.unsubscribe(\n 'SnapController:snapEnabled',\n this._handleSnapRegisterEvent,\n );\n\n this.messagingSystem.unsubscribe(\n 'SnapController:snapDisabled',\n this._handleSnapUnregisterEvent,\n );\n\n this.messagingSystem.unsubscribe(\n 'SnapController:snapUpdated',\n this._handleEventSnapUpdated,\n );\n /* eslint-enable @typescript-eslint/unbound-method */\n\n this.#snapIds.forEach((snapId) => {\n this.unregister(snapId);\n });\n }\n\n /**\n * Handle events that should cause cronjobs to be registered.\n *\n * @param snap - Basic Snap information.\n */\n private _handleSnapRegisterEvent(snap: TruncatedSnap) {\n this.register(snap.id);\n }\n\n /**\n * Handle events that should cause cronjobs to be unregistered.\n *\n * @param snap - Basic Snap information.\n */\n private _handleSnapUnregisterEvent(snap: TruncatedSnap) {\n this.unregister(snap.id);\n }\n\n /**\n * Handle cron jobs on 'snapUpdated' event.\n *\n * @param snap - Basic Snap information.\n */\n private _handleEventSnapUpdated(snap: TruncatedSnap) {\n this.unregister(snap.id);\n this.register(snap.id);\n }\n}\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  constructState,
3
3
  getJsxInterface,
4
4
  validateInterfaceContext
5
- } from "./chunk-3WEWHK2I.mjs";
5
+ } from "./chunk-HULNFJMA.mjs";
6
6
  import {
7
7
  __privateAdd,
8
8
  __privateMethod
@@ -250,4 +250,4 @@ validateContent_fn = async function(element) {
250
250
  export {
251
251
  SnapInterfaceController
252
252
  };
253
- //# sourceMappingURL=chunk-CJY2LYEL.mjs.map
253
+ //# sourceMappingURL=chunk-Z5QWRDUN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/interface/SnapInterfaceController.ts"],"sourcesContent":["import type {\n AcceptRequest,\n HasApprovalRequest,\n} from '@metamask/approval-controller';\nimport type {\n RestrictedControllerMessenger,\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type {\n MaybeUpdateState,\n TestOrigin,\n} from '@metamask/phishing-controller';\nimport type {\n InterfaceState,\n SnapId,\n ComponentOrElement,\n InterfaceContext,\n} from '@metamask/snaps-sdk';\nimport type { JSXElement } from '@metamask/snaps-sdk/jsx';\nimport { getJsonSizeUnsafe, validateJsxLinks } from '@metamask/snaps-utils';\nimport type { Json } from '@metamask/utils';\nimport { assert } from '@metamask/utils';\nimport { nanoid } from 'nanoid';\n\nimport {\n constructState,\n getJsxInterface,\n validateInterfaceContext,\n} from './utils';\n\nconst MAX_UI_CONTENT_SIZE = 10_000_000; // 10 mb\n\nconst controllerName = 'SnapInterfaceController';\n\nexport type CreateInterface = {\n type: `${typeof controllerName}:createInterface`;\n handler: SnapInterfaceController['createInterface'];\n};\n\nexport type GetInterface = {\n type: `${typeof controllerName}:getInterface`;\n handler: SnapInterfaceController['getInterface'];\n};\n\nexport type UpdateInterface = {\n type: `${typeof controllerName}:updateInterface`;\n handler: SnapInterfaceController['updateInterface'];\n};\n\nexport type DeleteInterface = {\n type: `${typeof controllerName}:deleteInterface`;\n handler: SnapInterfaceController['deleteInterface'];\n};\n\nexport type UpdateInterfaceState = {\n type: `${typeof controllerName}:updateInterfaceState`;\n handler: SnapInterfaceController['updateInterfaceState'];\n};\n\nexport type ResolveInterface = {\n type: `${typeof controllerName}:resolveInterface`;\n handler: SnapInterfaceController['resolveInterface'];\n};\n\nexport type SnapInterfaceControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n SnapInterfaceControllerState\n>;\n\nexport type SnapInterfaceControllerAllowedActions =\n | TestOrigin\n | MaybeUpdateState\n | HasApprovalRequest\n | AcceptRequest;\n\nexport type SnapInterfaceControllerActions =\n | CreateInterface\n | GetInterface\n | UpdateInterface\n | DeleteInterface\n | UpdateInterfaceState\n | ResolveInterface\n | SnapInterfaceControllerGetStateAction;\n\nexport type SnapInterfaceControllerStateChangeEvent =\n ControllerStateChangeEvent<\n typeof controllerName,\n SnapInterfaceControllerState\n >;\n\nexport type SnapInterfaceControllerEvents =\n SnapInterfaceControllerStateChangeEvent;\n\nexport type SnapInterfaceControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SnapInterfaceControllerActions | SnapInterfaceControllerAllowedActions,\n SnapInterfaceControllerEvents,\n SnapInterfaceControllerAllowedActions['type'],\n SnapInterfaceControllerEvents['type']\n>;\n\nexport type StoredInterface = {\n snapId: SnapId;\n content: JSXElement;\n state: InterfaceState;\n context: InterfaceContext | null;\n};\n\nexport type SnapInterfaceControllerState = {\n interfaces: Record<string, StoredInterface>;\n};\n\nexport type SnapInterfaceControllerArgs = {\n messenger: SnapInterfaceControllerMessenger;\n state?: SnapInterfaceControllerState;\n};\n\n/**\n * Use this controller to manage snaps UI interfaces using RPC method hooks.\n */\nexport class SnapInterfaceController extends BaseController<\n typeof controllerName,\n SnapInterfaceControllerState,\n SnapInterfaceControllerMessenger\n> {\n constructor({ messenger, state }: SnapInterfaceControllerArgs) {\n super({\n messenger,\n metadata: {\n interfaces: { persist: false, anonymous: false },\n },\n name: controllerName,\n state: { interfaces: {}, ...state },\n });\n\n this.#registerMessageHandlers();\n }\n\n /**\n * Constructor helper for registering this controller's messaging system\n * actions.\n */\n #registerMessageHandlers() {\n this.messagingSystem.registerActionHandler(\n `${controllerName}:createInterface`,\n this.createInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:getInterface`,\n this.getInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:updateInterface`,\n this.updateInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:deleteInterface`,\n this.deleteInterface.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:updateInterfaceState`,\n this.updateInterfaceState.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n `${controllerName}:resolveInterface`,\n this.resolveInterface.bind(this),\n );\n }\n\n /**\n * Create an interface in the controller state with the associated data.\n *\n * @param snapId - The snap id that created the interface.\n * @param content - The interface content.\n * @param context - An optional interface context object.\n * @returns The newly interface id.\n */\n async createInterface(\n snapId: SnapId,\n content: ComponentOrElement,\n context?: InterfaceContext,\n ) {\n const element = getJsxInterface(content);\n await this.#validateContent(element);\n validateInterfaceContext(context);\n\n const id = nanoid();\n const componentState = constructState({}, element);\n\n this.update((draftState) => {\n // @ts-expect-error - TS2589: Type instantiation is excessively deep and\n // possibly infinite.\n draftState.interfaces[id] = {\n snapId,\n content: element,\n state: componentState,\n context: context ?? null,\n };\n });\n\n return id;\n }\n\n /**\n * Get the data of a given interface id.\n *\n * @param snapId - The snap id requesting the interface data.\n * @param id - The interface id.\n * @returns The interface state.\n */\n getInterface(snapId: SnapId, id: string) {\n this.#validateArgs(snapId, id);\n\n return this.state.interfaces[id];\n }\n\n /**\n * Update the interface with the given content.\n *\n * @param snapId - The snap id requesting the update.\n * @param id - The interface id.\n * @param content - The new content.\n */\n async updateInterface(\n snapId: SnapId,\n id: string,\n content: ComponentOrElement,\n ) {\n this.#validateArgs(snapId, id);\n const element = getJsxInterface(content);\n await this.#validateContent(element);\n\n const oldState = this.state.interfaces[id].state;\n const newState = constructState(oldState, element);\n\n this.update((draftState) => {\n draftState.interfaces[id].state = newState;\n draftState.interfaces[id].content = element;\n });\n }\n\n /**\n * Delete an interface from state.\n *\n * @param id - The interface id.\n */\n deleteInterface(id: string) {\n this.update((draftState) => {\n delete draftState.interfaces[id];\n });\n }\n\n /**\n * Update the interface state.\n *\n * @param id - The interface id.\n * @param state - The new state.\n */\n updateInterfaceState(id: string, state: InterfaceState) {\n this.update((draftState) => {\n draftState.interfaces[id].state = state;\n });\n }\n\n /**\n * Resolve the promise of a given interface approval request.\n * The approval needs to have the same ID as the interface.\n *\n * @param snapId - The snap id.\n * @param id - The interface id.\n * @param value - The value to resolve the promise with.\n */\n async resolveInterface(snapId: SnapId, id: string, value: Json) {\n this.#validateArgs(snapId, id);\n this.#validateApproval(id);\n\n await this.#acceptApprovalRequest(id, value);\n\n this.deleteInterface(id);\n }\n\n /**\n * Utility function to validate the args passed to the other methods.\n *\n * @param snapId - The snap id.\n * @param id - The interface id.\n */\n #validateArgs(snapId: SnapId, id: string) {\n const existingInterface = this.state.interfaces[id];\n\n assert(\n existingInterface !== undefined,\n `Interface with id '${id}' not found.`,\n );\n assert(\n existingInterface.snapId === snapId,\n `Interface not created by ${snapId}.`,\n );\n }\n\n /**\n * Utility function to validate that the approval request exists.\n *\n * @param id - The interface id.\n */\n #validateApproval(id: string) {\n assert(\n this.#hasApprovalRequest(id),\n `Approval request with id '${id}' not found.`,\n );\n }\n\n /**\n * Trigger a Phishing list update if needed.\n */\n async #triggerPhishingListUpdate() {\n await this.messagingSystem.call('PhishingController:maybeUpdateState');\n }\n\n /**\n * Check an origin against the phishing list.\n *\n * @param origin - The origin to check.\n * @returns True if the origin is on the phishing list, otherwise false.\n */\n #checkPhishingList(origin: string) {\n return this.messagingSystem.call('PhishingController:testOrigin', origin)\n .result;\n }\n\n /**\n * Check if an approval request exists for a given interface by looking up\n * if the ApprovalController has a request with the given interface ID.\n *\n * @param id - The interface id.\n * @returns True if an approval request exists, otherwise false.\n */\n #hasApprovalRequest(id: string) {\n return this.messagingSystem.call('ApprovalController:hasRequest', {\n id,\n });\n }\n\n /**\n * Accept an approval request for a given interface.\n *\n * @param id - The interface id.\n * @param value - The value to resolve the promise with.\n */\n async #acceptApprovalRequest(id: string, value: Json) {\n await this.messagingSystem.call(\n 'ApprovalController:acceptRequest',\n id,\n value,\n );\n }\n\n /**\n * Utility function to validate the components of an interface.\n * Throws if something is invalid.\n *\n * @param element - The JSX element to verify.\n */\n async #validateContent(element: JSXElement) {\n // We assume the validity of this JSON to be validated by the caller.\n // E.g., in the RPC method implementation.\n const size = getJsonSizeUnsafe(element);\n assert(\n size <= MAX_UI_CONTENT_SIZE,\n `A Snap UI may not be larger than ${MAX_UI_CONTENT_SIZE / 1000000} MB.`,\n );\n\n await this.#triggerPhishingListUpdate();\n validateJsxLinks(element, this.#checkPhishingList.bind(this));\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  LocalLocation
3
- } from "./chunk-B3UTLNYS.mjs";
3
+ } from "./chunk-UM4NFNEI.mjs";
4
4
  import {
5
5
  HttpLocation
6
- } from "./chunk-6GMWL4JR.mjs";
6
+ } from "./chunk-2SRKMEUV.mjs";
7
7
  import {
8
8
  NpmLocation
9
- } from "./chunk-WKQRCGUW.mjs";
9
+ } from "./chunk-BAUQWPSP.mjs";
10
10
 
11
11
  // src/snaps/location/location.ts
12
12
  import { assert } from "@metamask/utils";
@@ -37,4 +37,4 @@ function detectSnapLocation(location, opts) {
37
37
  export {
38
38
  detectSnapLocation
39
39
  };
40
- //# sourceMappingURL=chunk-2AEM5R2M.mjs.map
40
+ //# sourceMappingURL=chunk-ZKG6FRKN.mjs.map
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkXFUP7RFIjs = require('../chunk-XFUP7RFI.js');
4
+ var _chunkDSOZPX7Ijs = require('../chunk-DSOZPX7I.js');
5
5
  require('../chunk-4URGXJP7.js');
6
6
  require('../chunk-D74XJG2L.js');
7
7
  require('../chunk-P66VIDFG.js');
@@ -11,23 +11,23 @@ require('../chunk-FZOI4WPB.js');
11
11
  require('../chunk-HOY6NKQR.js');
12
12
  require('../chunk-PYSDWIVK.js');
13
13
  require('../chunk-IDCWJJCQ.js');
14
- require('../chunk-5O4O4BI5.js');
14
+ require('../chunk-36QDTCDZ.js');
15
15
  require('../chunk-JAUAKTUL.js');
16
16
  require('../chunk-YYPUPKQY.js');
17
- require('../chunk-FKQTV3LO.js');
17
+ require('../chunk-6K4MATNG.js');
18
18
  require('../chunk-WEY7ICES.js');
19
- require('../chunk-POQSARDG.js');
20
- require('../chunk-LWBPKSU2.js');
21
- require('../chunk-RDBT3ZJQ.js');
22
- require('../chunk-XWDEGRM5.js');
19
+ require('../chunk-3WWZDKQL.js');
20
+ require('../chunk-6Z4WDAVC.js');
21
+ require('../chunk-TIURYSSR.js');
22
+ require('../chunk-K3TNQEM5.js');
23
23
  require('../chunk-G66GQJS6.js');
24
- require('../chunk-CPUUURMT.js');
24
+ require('../chunk-I25KLPIS.js');
25
25
  require('../chunk-4CA3O64H.js');
26
26
  require('../chunk-AP7CJ6DA.js');
27
27
  require('../chunk-JQ54YYLU.js');
28
28
  require('../chunk-VNOCJWOK.js');
29
- require('../chunk-OJBUUQ5D.js');
30
- require('../chunk-EVKVZUYY.js');
29
+ require('../chunk-2D5PGL7S.js');
30
+ require('../chunk-RZ2NHZXH.js');
31
31
  require('../chunk-QRISQRFI.js');
32
32
  require('../chunk-OIEUL55W.js');
33
33
  require('../chunk-7Y6P5FRN.js');
@@ -39,5 +39,5 @@ require('../chunk-EXN2TFDJ.js');
39
39
 
40
40
 
41
41
 
42
- exports.CronjobController = _chunkXFUP7RFIjs.CronjobController; exports.DAILY_TIMEOUT = _chunkXFUP7RFIjs.DAILY_TIMEOUT;
42
+ exports.CronjobController = _chunkDSOZPX7Ijs.CronjobController; exports.DAILY_TIMEOUT = _chunkDSOZPX7Ijs.DAILY_TIMEOUT;
43
43
  //# sourceMappingURL=CronjobController.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CronjobController,
3
3
  DAILY_TIMEOUT
4
- } from "../chunk-33RRV7F4.mjs";
4
+ } from "../chunk-Z4BUMSH3.mjs";
5
5
  import "../chunk-IABOI7TW.mjs";
6
6
  import "../chunk-V6NFZ47P.mjs";
7
7
  import "../chunk-HLQQTAMM.mjs";
@@ -11,23 +11,23 @@ import "../chunk-XOSHP4J3.mjs";
11
11
  import "../chunk-KCMULJ2M.mjs";
12
12
  import "../chunk-LDL6LJ3P.mjs";
13
13
  import "../chunk-272IFIK7.mjs";
14
- import "../chunk-UMVUXQ3B.mjs";
14
+ import "../chunk-F3ZMDQ52.mjs";
15
15
  import "../chunk-BAEXVO3U.mjs";
16
16
  import "../chunk-P7Y6MIZW.mjs";
17
- import "../chunk-2MH7QYBP.mjs";
17
+ import "../chunk-QWN3UOMA.mjs";
18
18
  import "../chunk-QL3QGUTM.mjs";
19
- import "../chunk-2AEM5R2M.mjs";
20
- import "../chunk-B3UTLNYS.mjs";
21
- import "../chunk-6GMWL4JR.mjs";
22
- import "../chunk-WKQRCGUW.mjs";
19
+ import "../chunk-ZKG6FRKN.mjs";
20
+ import "../chunk-UM4NFNEI.mjs";
21
+ import "../chunk-2SRKMEUV.mjs";
22
+ import "../chunk-BAUQWPSP.mjs";
23
23
  import "../chunk-HWJE3SDW.mjs";
24
- import "../chunk-6M4XK4PN.mjs";
24
+ import "../chunk-I5V56NYO.mjs";
25
25
  import "../chunk-ZZD3HUNE.mjs";
26
26
  import "../chunk-NC5PBDKD.mjs";
27
27
  import "../chunk-4M2FX2AT.mjs";
28
28
  import "../chunk-U74FML7Z.mjs";
29
- import "../chunk-CJY2LYEL.mjs";
30
- import "../chunk-3WEWHK2I.mjs";
29
+ import "../chunk-Z5QWRDUN.mjs";
30
+ import "../chunk-HULNFJMA.mjs";
31
31
  import "../chunk-TSDUJNOP.mjs";
32
32
  import "../chunk-3RNW7OKG.mjs";
33
33
  import "../chunk-ZVOYOZFT.mjs";
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkXFUP7RFIjs = require('../chunk-XFUP7RFI.js');
4
+ var _chunkDSOZPX7Ijs = require('../chunk-DSOZPX7I.js');
5
5
  require('../chunk-4URGXJP7.js');
6
6
  require('../chunk-D74XJG2L.js');
7
7
  require('../chunk-P66VIDFG.js');
@@ -11,23 +11,23 @@ require('../chunk-FZOI4WPB.js');
11
11
  require('../chunk-HOY6NKQR.js');
12
12
  require('../chunk-PYSDWIVK.js');
13
13
  require('../chunk-IDCWJJCQ.js');
14
- require('../chunk-5O4O4BI5.js');
14
+ require('../chunk-36QDTCDZ.js');
15
15
  require('../chunk-JAUAKTUL.js');
16
16
  require('../chunk-YYPUPKQY.js');
17
- require('../chunk-FKQTV3LO.js');
17
+ require('../chunk-6K4MATNG.js');
18
18
  require('../chunk-WEY7ICES.js');
19
- require('../chunk-POQSARDG.js');
20
- require('../chunk-LWBPKSU2.js');
21
- require('../chunk-RDBT3ZJQ.js');
22
- require('../chunk-XWDEGRM5.js');
19
+ require('../chunk-3WWZDKQL.js');
20
+ require('../chunk-6Z4WDAVC.js');
21
+ require('../chunk-TIURYSSR.js');
22
+ require('../chunk-K3TNQEM5.js');
23
23
  require('../chunk-G66GQJS6.js');
24
- require('../chunk-CPUUURMT.js');
24
+ require('../chunk-I25KLPIS.js');
25
25
  require('../chunk-4CA3O64H.js');
26
26
  require('../chunk-AP7CJ6DA.js');
27
27
  require('../chunk-JQ54YYLU.js');
28
28
  require('../chunk-VNOCJWOK.js');
29
- require('../chunk-OJBUUQ5D.js');
30
- require('../chunk-EVKVZUYY.js');
29
+ require('../chunk-2D5PGL7S.js');
30
+ require('../chunk-RZ2NHZXH.js');
31
31
  require('../chunk-QRISQRFI.js');
32
32
  require('../chunk-OIEUL55W.js');
33
33
  require('../chunk-7Y6P5FRN.js');
@@ -39,5 +39,5 @@ require('../chunk-EXN2TFDJ.js');
39
39
 
40
40
 
41
41
 
42
- exports.CronjobController = _chunkXFUP7RFIjs.CronjobController; exports.DAILY_TIMEOUT = _chunkXFUP7RFIjs.DAILY_TIMEOUT;
42
+ exports.CronjobController = _chunkDSOZPX7Ijs.CronjobController; exports.DAILY_TIMEOUT = _chunkDSOZPX7Ijs.DAILY_TIMEOUT;
43
43
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CronjobController,
3
3
  DAILY_TIMEOUT
4
- } from "../chunk-33RRV7F4.mjs";
4
+ } from "../chunk-Z4BUMSH3.mjs";
5
5
  import "../chunk-IABOI7TW.mjs";
6
6
  import "../chunk-V6NFZ47P.mjs";
7
7
  import "../chunk-HLQQTAMM.mjs";
@@ -11,23 +11,23 @@ import "../chunk-XOSHP4J3.mjs";
11
11
  import "../chunk-KCMULJ2M.mjs";
12
12
  import "../chunk-LDL6LJ3P.mjs";
13
13
  import "../chunk-272IFIK7.mjs";
14
- import "../chunk-UMVUXQ3B.mjs";
14
+ import "../chunk-F3ZMDQ52.mjs";
15
15
  import "../chunk-BAEXVO3U.mjs";
16
16
  import "../chunk-P7Y6MIZW.mjs";
17
- import "../chunk-2MH7QYBP.mjs";
17
+ import "../chunk-QWN3UOMA.mjs";
18
18
  import "../chunk-QL3QGUTM.mjs";
19
- import "../chunk-2AEM5R2M.mjs";
20
- import "../chunk-B3UTLNYS.mjs";
21
- import "../chunk-6GMWL4JR.mjs";
22
- import "../chunk-WKQRCGUW.mjs";
19
+ import "../chunk-ZKG6FRKN.mjs";
20
+ import "../chunk-UM4NFNEI.mjs";
21
+ import "../chunk-2SRKMEUV.mjs";
22
+ import "../chunk-BAUQWPSP.mjs";
23
23
  import "../chunk-HWJE3SDW.mjs";
24
- import "../chunk-6M4XK4PN.mjs";
24
+ import "../chunk-I5V56NYO.mjs";
25
25
  import "../chunk-ZZD3HUNE.mjs";
26
26
  import "../chunk-NC5PBDKD.mjs";
27
27
  import "../chunk-4M2FX2AT.mjs";
28
28
  import "../chunk-U74FML7Z.mjs";
29
- import "../chunk-CJY2LYEL.mjs";
30
- import "../chunk-3WEWHK2I.mjs";
29
+ import "../chunk-Z5QWRDUN.mjs";
30
+ import "../chunk-HULNFJMA.mjs";
31
31
  import "../chunk-TSDUJNOP.mjs";
32
32
  import "../chunk-3RNW7OKG.mjs";
33
33
  import "../chunk-ZVOYOZFT.mjs";
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkXFUP7RFIjs = require('./chunk-XFUP7RFI.js');
4
+ var _chunkDSOZPX7Ijs = require('./chunk-DSOZPX7I.js');
5
5
  require('./chunk-4URGXJP7.js');
6
6
  require('./chunk-D74XJG2L.js');
7
7
 
@@ -19,7 +19,7 @@ var _chunkPYSDWIVKjs = require('./chunk-PYSDWIVK.js');
19
19
  require('./chunk-IDCWJJCQ.js');
20
20
 
21
21
 
22
- var _chunk5O4O4BI5js = require('./chunk-5O4O4BI5.js');
22
+ var _chunk36QDTCDZjs = require('./chunk-36QDTCDZ.js');
23
23
  require('./chunk-JAUAKTUL.js');
24
24
 
25
25
 
@@ -30,17 +30,17 @@ var _chunkYYPUPKQYjs = require('./chunk-YYPUPKQY.js');
30
30
 
31
31
 
32
32
 
33
- var _chunkFKQTV3LOjs = require('./chunk-FKQTV3LO.js');
33
+ var _chunk6K4MATNGjs = require('./chunk-6K4MATNG.js');
34
34
  require('./chunk-WEY7ICES.js');
35
35
 
36
36
 
37
- var _chunkPOQSARDGjs = require('./chunk-POQSARDG.js');
37
+ var _chunk3WWZDKQLjs = require('./chunk-3WWZDKQL.js');
38
38
 
39
39
 
40
- var _chunkLWBPKSU2js = require('./chunk-LWBPKSU2.js');
40
+ var _chunk6Z4WDAVCjs = require('./chunk-6Z4WDAVC.js');
41
41
 
42
42
 
43
- var _chunkRDBT3ZJQjs = require('./chunk-RDBT3ZJQ.js');
43
+ var _chunkTIURYSSRjs = require('./chunk-TIURYSSR.js');
44
44
 
45
45
 
46
46
 
@@ -48,11 +48,11 @@ var _chunkRDBT3ZJQjs = require('./chunk-RDBT3ZJQ.js');
48
48
 
49
49
 
50
50
 
51
- var _chunkXWDEGRM5js = require('./chunk-XWDEGRM5.js');
51
+ var _chunkK3TNQEM5js = require('./chunk-K3TNQEM5.js');
52
52
  require('./chunk-G66GQJS6.js');
53
53
 
54
54
 
55
- var _chunkCPUUURMTjs = require('./chunk-CPUUURMT.js');
55
+ var _chunkI25KLPISjs = require('./chunk-I25KLPIS.js');
56
56
 
57
57
 
58
58
  var _chunk4CA3O64Hjs = require('./chunk-4CA3O64H.js');
@@ -61,8 +61,8 @@ require('./chunk-JQ54YYLU.js');
61
61
  require('./chunk-VNOCJWOK.js');
62
62
 
63
63
 
64
- var _chunkOJBUUQ5Djs = require('./chunk-OJBUUQ5D.js');
65
- require('./chunk-EVKVZUYY.js');
64
+ var _chunk2D5PGL7Sjs = require('./chunk-2D5PGL7S.js');
65
+ require('./chunk-RZ2NHZXH.js');
66
66
 
67
67
 
68
68
 
@@ -121,5 +121,5 @@ require('./chunk-EXN2TFDJ.js');
121
121
 
122
122
 
123
123
 
124
- exports.AbstractExecutionService = _chunkQRISQRFIjs.AbstractExecutionService; exports.BaseNpmLocation = _chunkXWDEGRM5js.BaseNpmLocation; exports.CronjobController = _chunkXFUP7RFIjs.CronjobController; exports.DAILY_TIMEOUT = _chunkXFUP7RFIjs.DAILY_TIMEOUT; exports.DEFAULT_NPM_REGISTRY = _chunkXWDEGRM5js.DEFAULT_NPM_REGISTRY; exports.HttpLocation = _chunkRDBT3ZJQjs.HttpLocation; exports.IframeExecutionService = _chunkPYSDWIVKjs.IframeExecutionService; exports.JsonSnapsRegistry = _chunkCPUUURMTjs.JsonSnapsRegistry; exports.LocalLocation = _chunkLWBPKSU2js.LocalLocation; exports.NpmLocation = _chunkXWDEGRM5js.NpmLocation; exports.OffscreenExecutionService = _chunkOVATPF5Ijs.OffscreenExecutionService; exports.ProxyPostMessageStream = _chunk7Y6P5FRNjs.ProxyPostMessageStream; exports.SNAP_APPROVAL_INSTALL = _chunkFKQTV3LOjs.SNAP_APPROVAL_INSTALL; exports.SNAP_APPROVAL_RESULT = _chunkFKQTV3LOjs.SNAP_APPROVAL_RESULT; exports.SNAP_APPROVAL_UPDATE = _chunkFKQTV3LOjs.SNAP_APPROVAL_UPDATE; exports.SnapController = _chunkFKQTV3LOjs.SnapController; exports.SnapInsightsController = _chunk5O4O4BI5js.SnapInsightsController; exports.SnapInterfaceController = _chunkOJBUUQ5Djs.SnapInterfaceController; exports.SnapsRegistryStatus = _chunk4CA3O64Hjs.SnapsRegistryStatus; exports.TARBALL_SIZE_SAFETY_LIMIT = _chunkXWDEGRM5js.TARBALL_SIZE_SAFETY_LIMIT; exports.WebWorkerExecutionService = _chunkP66VIDFGjs.WebWorkerExecutionService; exports.controllerName = _chunkFKQTV3LOjs.controllerName; exports.delay = _chunkB6KTRDBKjs.delay; exports.delayWithTimer = _chunkB6KTRDBKjs.delayWithTimer; exports.detectSnapLocation = _chunkPOQSARDGjs.detectSnapLocation; exports.fetchNpmMetadata = _chunkXWDEGRM5js.fetchNpmMetadata; exports.fetchSnap = _chunkB6KTRDBKjs.fetchSnap; exports.getNpmCanonicalBasePath = _chunkXWDEGRM5js.getNpmCanonicalBasePath; exports.getRunnableSnaps = _chunkYYPUPKQYjs.getRunnableSnaps; exports.getSnapFiles = _chunkB6KTRDBKjs.getSnapFiles; exports.hasTimedOut = _chunkB6KTRDBKjs.hasTimedOut; exports.permissionsDiff = _chunkB6KTRDBKjs.permissionsDiff; exports.setDiff = _chunkB6KTRDBKjs.setDiff; exports.setupMultiplex = _chunkQRISQRFIjs.setupMultiplex; exports.withTimeout = _chunkB6KTRDBKjs.withTimeout;
124
+ exports.AbstractExecutionService = _chunkQRISQRFIjs.AbstractExecutionService; exports.BaseNpmLocation = _chunkK3TNQEM5js.BaseNpmLocation; exports.CronjobController = _chunkDSOZPX7Ijs.CronjobController; exports.DAILY_TIMEOUT = _chunkDSOZPX7Ijs.DAILY_TIMEOUT; exports.DEFAULT_NPM_REGISTRY = _chunkK3TNQEM5js.DEFAULT_NPM_REGISTRY; exports.HttpLocation = _chunkTIURYSSRjs.HttpLocation; exports.IframeExecutionService = _chunkPYSDWIVKjs.IframeExecutionService; exports.JsonSnapsRegistry = _chunkI25KLPISjs.JsonSnapsRegistry; exports.LocalLocation = _chunk6Z4WDAVCjs.LocalLocation; exports.NpmLocation = _chunkK3TNQEM5js.NpmLocation; exports.OffscreenExecutionService = _chunkOVATPF5Ijs.OffscreenExecutionService; exports.ProxyPostMessageStream = _chunk7Y6P5FRNjs.ProxyPostMessageStream; exports.SNAP_APPROVAL_INSTALL = _chunk6K4MATNGjs.SNAP_APPROVAL_INSTALL; exports.SNAP_APPROVAL_RESULT = _chunk6K4MATNGjs.SNAP_APPROVAL_RESULT; exports.SNAP_APPROVAL_UPDATE = _chunk6K4MATNGjs.SNAP_APPROVAL_UPDATE; exports.SnapController = _chunk6K4MATNGjs.SnapController; exports.SnapInsightsController = _chunk36QDTCDZjs.SnapInsightsController; exports.SnapInterfaceController = _chunk2D5PGL7Sjs.SnapInterfaceController; exports.SnapsRegistryStatus = _chunk4CA3O64Hjs.SnapsRegistryStatus; exports.TARBALL_SIZE_SAFETY_LIMIT = _chunkK3TNQEM5js.TARBALL_SIZE_SAFETY_LIMIT; exports.WebWorkerExecutionService = _chunkP66VIDFGjs.WebWorkerExecutionService; exports.controllerName = _chunk6K4MATNGjs.controllerName; exports.delay = _chunkB6KTRDBKjs.delay; exports.delayWithTimer = _chunkB6KTRDBKjs.delayWithTimer; exports.detectSnapLocation = _chunk3WWZDKQLjs.detectSnapLocation; exports.fetchNpmMetadata = _chunkK3TNQEM5js.fetchNpmMetadata; exports.fetchSnap = _chunkB6KTRDBKjs.fetchSnap; exports.getNpmCanonicalBasePath = _chunkK3TNQEM5js.getNpmCanonicalBasePath; exports.getRunnableSnaps = _chunkYYPUPKQYjs.getRunnableSnaps; exports.getSnapFiles = _chunkB6KTRDBKjs.getSnapFiles; exports.hasTimedOut = _chunkB6KTRDBKjs.hasTimedOut; exports.permissionsDiff = _chunkB6KTRDBKjs.permissionsDiff; exports.setDiff = _chunkB6KTRDBKjs.setDiff; exports.setupMultiplex = _chunkQRISQRFIjs.setupMultiplex; exports.withTimeout = _chunkB6KTRDBKjs.withTimeout;
125
125
  //# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  CronjobController,
3
3
  DAILY_TIMEOUT
4
- } from "./chunk-33RRV7F4.mjs";
4
+ } from "./chunk-Z4BUMSH3.mjs";
5
5
  import "./chunk-IABOI7TW.mjs";
6
6
  import "./chunk-V6NFZ47P.mjs";
7
7
  import {
@@ -19,7 +19,7 @@ import {
19
19
  import "./chunk-272IFIK7.mjs";
20
20
  import {
21
21
  SnapInsightsController
22
- } from "./chunk-UMVUXQ3B.mjs";
22
+ } from "./chunk-F3ZMDQ52.mjs";
23
23
  import "./chunk-BAEXVO3U.mjs";
24
24
  import {
25
25
  getRunnableSnaps
@@ -30,17 +30,17 @@ import {
30
30
  SNAP_APPROVAL_UPDATE,
31
31
  SnapController,
32
32
  controllerName
33
- } from "./chunk-2MH7QYBP.mjs";
33
+ } from "./chunk-QWN3UOMA.mjs";
34
34
  import "./chunk-QL3QGUTM.mjs";
35
35
  import {
36
36
  detectSnapLocation
37
- } from "./chunk-2AEM5R2M.mjs";
37
+ } from "./chunk-ZKG6FRKN.mjs";
38
38
  import {
39
39
  LocalLocation
40
- } from "./chunk-B3UTLNYS.mjs";
40
+ } from "./chunk-UM4NFNEI.mjs";
41
41
  import {
42
42
  HttpLocation
43
- } from "./chunk-6GMWL4JR.mjs";
43
+ } from "./chunk-2SRKMEUV.mjs";
44
44
  import {
45
45
  BaseNpmLocation,
46
46
  DEFAULT_NPM_REGISTRY,
@@ -48,11 +48,11 @@ import {
48
48
  TARBALL_SIZE_SAFETY_LIMIT,
49
49
  fetchNpmMetadata,
50
50
  getNpmCanonicalBasePath
51
- } from "./chunk-WKQRCGUW.mjs";
51
+ } from "./chunk-BAUQWPSP.mjs";
52
52
  import "./chunk-HWJE3SDW.mjs";
53
53
  import {
54
54
  JsonSnapsRegistry
55
- } from "./chunk-6M4XK4PN.mjs";
55
+ } from "./chunk-I5V56NYO.mjs";
56
56
  import {
57
57
  SnapsRegistryStatus
58
58
  } from "./chunk-ZZD3HUNE.mjs";
@@ -61,8 +61,8 @@ import "./chunk-4M2FX2AT.mjs";
61
61
  import "./chunk-U74FML7Z.mjs";
62
62
  import {
63
63
  SnapInterfaceController
64
- } from "./chunk-CJY2LYEL.mjs";
65
- import "./chunk-3WEWHK2I.mjs";
64
+ } from "./chunk-Z5QWRDUN.mjs";
65
+ import "./chunk-HULNFJMA.mjs";
66
66
  import {
67
67
  AbstractExecutionService,
68
68
  setupMultiplex
@@ -1,16 +1,16 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk5O4O4BI5js = require('../chunk-5O4O4BI5.js');
3
+ var _chunk36QDTCDZjs = require('../chunk-36QDTCDZ.js');
4
4
  require('../chunk-JAUAKTUL.js');
5
5
  require('../chunk-YYPUPKQY.js');
6
- require('../chunk-FKQTV3LO.js');
6
+ require('../chunk-6K4MATNG.js');
7
7
  require('../chunk-WEY7ICES.js');
8
- require('../chunk-POQSARDG.js');
9
- require('../chunk-LWBPKSU2.js');
10
- require('../chunk-RDBT3ZJQ.js');
11
- require('../chunk-XWDEGRM5.js');
8
+ require('../chunk-3WWZDKQL.js');
9
+ require('../chunk-6Z4WDAVC.js');
10
+ require('../chunk-TIURYSSR.js');
11
+ require('../chunk-K3TNQEM5.js');
12
12
  require('../chunk-G66GQJS6.js');
13
- require('../chunk-CPUUURMT.js');
13
+ require('../chunk-I25KLPIS.js');
14
14
  require('../chunk-4CA3O64H.js');
15
15
  require('../chunk-AP7CJ6DA.js');
16
16
  require('../chunk-JQ54YYLU.js');
@@ -21,5 +21,5 @@ require('../chunk-BOFPNIRX.js');
21
21
  require('../chunk-EXN2TFDJ.js');
22
22
 
23
23
 
24
- exports.SnapInsightsController = _chunk5O4O4BI5js.SnapInsightsController;
24
+ exports.SnapInsightsController = _chunk36QDTCDZjs.SnapInsightsController;
25
25
  //# sourceMappingURL=SnapInsightsController.js.map
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  SnapInsightsController
3
- } from "../chunk-UMVUXQ3B.mjs";
3
+ } from "../chunk-F3ZMDQ52.mjs";
4
4
  import "../chunk-BAEXVO3U.mjs";
5
5
  import "../chunk-P7Y6MIZW.mjs";
6
- import "../chunk-2MH7QYBP.mjs";
6
+ import "../chunk-QWN3UOMA.mjs";
7
7
  import "../chunk-QL3QGUTM.mjs";
8
- import "../chunk-2AEM5R2M.mjs";
9
- import "../chunk-B3UTLNYS.mjs";
10
- import "../chunk-6GMWL4JR.mjs";
11
- import "../chunk-WKQRCGUW.mjs";
8
+ import "../chunk-ZKG6FRKN.mjs";
9
+ import "../chunk-UM4NFNEI.mjs";
10
+ import "../chunk-2SRKMEUV.mjs";
11
+ import "../chunk-BAUQWPSP.mjs";
12
12
  import "../chunk-HWJE3SDW.mjs";
13
- import "../chunk-6M4XK4PN.mjs";
13
+ import "../chunk-I5V56NYO.mjs";
14
14
  import "../chunk-ZZD3HUNE.mjs";
15
15
  import "../chunk-NC5PBDKD.mjs";
16
16
  import "../chunk-4M2FX2AT.mjs";