@metamask/profile-sync-controller 0.0.0 → 0.1.1

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 (266) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/dist/chunk-2XGRQBXI.mjs +70 -0
  3. package/dist/chunk-2XGRQBXI.mjs.map +1 -0
  4. package/dist/chunk-32HAX3MW.mjs +224 -0
  5. package/dist/chunk-32HAX3MW.mjs.map +1 -0
  6. package/dist/chunk-5SXXO4MV.js +70 -0
  7. package/dist/chunk-5SXXO4MV.js.map +1 -0
  8. package/dist/chunk-5TOWF6UW.mjs +11 -0
  9. package/dist/chunk-5TOWF6UW.mjs.map +1 -0
  10. package/dist/chunk-6P6CUKKI.mjs +30 -0
  11. package/dist/chunk-6P6CUKKI.mjs.map +1 -0
  12. package/dist/chunk-76VRE4BI.mjs +18 -0
  13. package/dist/chunk-76VRE4BI.mjs.map +1 -0
  14. package/dist/chunk-AARMY5TW.mjs +86 -0
  15. package/dist/chunk-AARMY5TW.mjs.map +1 -0
  16. package/dist/chunk-AK7OTIWA.js +11 -0
  17. package/dist/chunk-AK7OTIWA.js.map +1 -0
  18. package/dist/chunk-AUFUOKJW.mjs +25 -0
  19. package/dist/chunk-AUFUOKJW.mjs.map +1 -0
  20. package/dist/{chunk-OF3TQWGX.js → chunk-AVOOINGJ.js} +34 -34
  21. package/dist/chunk-AVOOINGJ.js.map +1 -0
  22. package/dist/{chunk-CZ7YK35S.mjs → chunk-AXWK4Y23.mjs} +7 -5
  23. package/dist/{chunk-CZ7YK35S.mjs.map → chunk-AXWK4Y23.mjs.map} +1 -1
  24. package/dist/{chunk-UMKBFFZ5.mjs → chunk-B5DBQDB3.mjs} +13 -4
  25. package/dist/chunk-B5DBQDB3.mjs.map +1 -0
  26. package/dist/chunk-B6CSNLGE.js +25 -0
  27. package/dist/chunk-B6CSNLGE.js.map +1 -0
  28. package/dist/{chunk-NRH6O4QZ.js → chunk-BOET676P.js} +45 -14
  29. package/dist/chunk-BOET676P.js.map +1 -0
  30. package/dist/{chunk-2FZSWVHT.mjs → chunk-CAIIVJAO.mjs} +1 -1
  31. package/dist/chunk-CAIIVJAO.mjs.map +1 -0
  32. package/dist/chunk-ELHJSRS2.js +98 -0
  33. package/dist/chunk-ELHJSRS2.js.map +1 -0
  34. package/dist/chunk-FCT2LIGH.mjs +106 -0
  35. package/dist/chunk-FCT2LIGH.mjs.map +1 -0
  36. package/dist/chunk-FQ5SDMRE.mjs +77 -0
  37. package/dist/chunk-FQ5SDMRE.mjs.map +1 -0
  38. package/dist/chunk-H25EBXG5.mjs +58 -0
  39. package/dist/chunk-H25EBXG5.mjs.map +1 -0
  40. package/dist/chunk-H4TDS65R.js +81 -0
  41. package/dist/chunk-H4TDS65R.js.map +1 -0
  42. package/dist/{chunk-Z4BLTVTB.js → chunk-IGY2S5BC.js} +9 -3
  43. package/dist/chunk-IPSBQ3MS.js +30 -0
  44. package/dist/chunk-IPSBQ3MS.js.map +1 -0
  45. package/dist/{chunk-4NGEEDGV.mjs → chunk-JLDFMYAH.mjs} +9 -9
  46. package/dist/chunk-JLDFMYAH.mjs.map +1 -0
  47. package/dist/chunk-K5UKU454.mjs +158 -0
  48. package/dist/chunk-K5UKU454.mjs.map +1 -0
  49. package/dist/chunk-KBCXN3YW.mjs +98 -0
  50. package/dist/chunk-KBCXN3YW.mjs.map +1 -0
  51. package/dist/chunk-LSVRA3X2.mjs +81 -0
  52. package/dist/chunk-LSVRA3X2.mjs.map +1 -0
  53. package/dist/{chunk-GQLHSQGZ.js → chunk-MBTBE4P5.js} +9 -2
  54. package/dist/chunk-MBTBE4P5.js.map +1 -0
  55. package/dist/chunk-NLHLVVOO.js +106 -0
  56. package/dist/chunk-NLHLVVOO.js.map +1 -0
  57. package/dist/{chunk-VZXD5DCQ.js → chunk-P4DUDLMY.js} +36 -27
  58. package/dist/chunk-P4DUDLMY.js.map +1 -0
  59. package/dist/{chunk-6X6I3HZU.js → chunk-P52TG263.js} +28 -26
  60. package/dist/chunk-P52TG263.js.map +1 -0
  61. package/dist/{chunk-CFST6GWE.js → chunk-PBRUOBEQ.js} +1 -1
  62. package/dist/chunk-PBRUOBEQ.js.map +1 -0
  63. package/dist/chunk-PCOIRDTO.js +18 -0
  64. package/dist/chunk-PCOIRDTO.js.map +1 -0
  65. package/dist/chunk-PTR4DAX6.js +79 -0
  66. package/dist/chunk-PTR4DAX6.js.map +1 -0
  67. package/dist/chunk-Q5WIUNX5.js +126 -0
  68. package/dist/chunk-Q5WIUNX5.js.map +1 -0
  69. package/dist/chunk-RX5R6BUI.js +86 -0
  70. package/dist/chunk-RX5R6BUI.js.map +1 -0
  71. package/dist/chunk-SMKTWM6I.js +77 -0
  72. package/dist/chunk-SMKTWM6I.js.map +1 -0
  73. package/dist/chunk-T3FNDVE3.js +158 -0
  74. package/dist/chunk-T3FNDVE3.js.map +1 -0
  75. package/dist/{chunk-BHVT2QEA.mjs → chunk-TFFQFIJV.mjs} +8 -1
  76. package/dist/chunk-TFFQFIJV.mjs.map +1 -0
  77. package/dist/chunk-TGFMKARH.mjs +274 -0
  78. package/dist/chunk-TGFMKARH.mjs.map +1 -0
  79. package/dist/{chunk-XUI43LEZ.mjs → chunk-U5UIDVOO.mjs} +7 -1
  80. package/dist/chunk-UAXWZN5J.js +58 -0
  81. package/dist/chunk-UAXWZN5J.js.map +1 -0
  82. package/dist/{chunk-CYGZ4WLJ.mjs → chunk-WB6MUIML.mjs} +36 -5
  83. package/dist/chunk-WB6MUIML.mjs.map +1 -0
  84. package/dist/chunk-WJCKQLKK.mjs +79 -0
  85. package/dist/chunk-WJCKQLKK.mjs.map +1 -0
  86. package/dist/{chunk-VXPVURGH.mjs → chunk-Y46NMA3V.mjs} +9 -9
  87. package/dist/chunk-Y46NMA3V.mjs.map +1 -0
  88. package/dist/chunk-YASNOFBV.js +274 -0
  89. package/dist/chunk-YASNOFBV.js.map +1 -0
  90. package/dist/chunk-YUXN5GSW.js +224 -0
  91. package/dist/chunk-YUXN5GSW.js.map +1 -0
  92. package/dist/controllers/authentication/AuthenticationController.js +24 -0
  93. package/dist/controllers/authentication/AuthenticationController.mjs +24 -0
  94. package/dist/controllers/authentication/auth-snap-requests.js +10 -0
  95. package/dist/controllers/authentication/auth-snap-requests.mjs +10 -0
  96. package/dist/controllers/authentication/index.js +28 -0
  97. package/dist/controllers/authentication/index.js.map +1 -0
  98. package/dist/controllers/authentication/index.mjs +28 -0
  99. package/dist/controllers/authentication/index.mjs.map +1 -0
  100. package/dist/controllers/authentication/services.js +32 -0
  101. package/dist/controllers/authentication/services.js.map +1 -0
  102. package/dist/controllers/authentication/services.mjs +32 -0
  103. package/dist/controllers/authentication/services.mjs.map +1 -0
  104. package/dist/controllers/index.js +34 -0
  105. package/dist/controllers/index.js.map +1 -0
  106. package/dist/controllers/index.mjs +34 -0
  107. package/dist/controllers/index.mjs.map +1 -0
  108. package/dist/controllers/user-storage/UserStorageController.js +29 -0
  109. package/dist/controllers/user-storage/UserStorageController.js.map +1 -0
  110. package/dist/controllers/user-storage/UserStorageController.mjs +29 -0
  111. package/dist/controllers/user-storage/UserStorageController.mjs.map +1 -0
  112. package/dist/controllers/user-storage/encryption/cache.js +13 -0
  113. package/dist/controllers/user-storage/encryption/cache.js.map +1 -0
  114. package/dist/controllers/user-storage/encryption/cache.mjs +13 -0
  115. package/dist/controllers/user-storage/encryption/cache.mjs.map +1 -0
  116. package/dist/controllers/user-storage/encryption/encryption.js +12 -0
  117. package/dist/controllers/user-storage/encryption/encryption.js.map +1 -0
  118. package/dist/controllers/user-storage/encryption/encryption.mjs +12 -0
  119. package/dist/controllers/user-storage/encryption/encryption.mjs.map +1 -0
  120. package/dist/controllers/user-storage/encryption/index.js +16 -0
  121. package/dist/controllers/user-storage/encryption/index.js.map +1 -0
  122. package/dist/controllers/user-storage/encryption/index.mjs +16 -0
  123. package/dist/controllers/user-storage/encryption/index.mjs.map +1 -0
  124. package/dist/controllers/user-storage/encryption/utils.js +12 -0
  125. package/dist/controllers/user-storage/encryption/utils.js.map +1 -0
  126. package/dist/controllers/user-storage/encryption/utils.mjs +12 -0
  127. package/dist/controllers/user-storage/encryption/utils.mjs.map +1 -0
  128. package/dist/controllers/user-storage/index.js +38 -0
  129. package/dist/controllers/user-storage/index.js.map +1 -0
  130. package/dist/controllers/user-storage/index.mjs +38 -0
  131. package/dist/controllers/user-storage/index.mjs.map +1 -0
  132. package/dist/controllers/user-storage/schema.js +14 -0
  133. package/dist/controllers/user-storage/schema.js.map +1 -0
  134. package/dist/controllers/user-storage/schema.mjs +14 -0
  135. package/dist/controllers/user-storage/schema.mjs.map +1 -0
  136. package/dist/controllers/user-storage/services.js +31 -0
  137. package/dist/controllers/user-storage/services.js.map +1 -0
  138. package/dist/controllers/user-storage/services.mjs +31 -0
  139. package/dist/controllers/user-storage/services.mjs.map +1 -0
  140. package/dist/index.js +31 -62
  141. package/dist/index.mjs +32 -63
  142. package/dist/sdk/authentication-jwt-bearer/flow-siwe.js +7 -8
  143. package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs +6 -7
  144. package/dist/sdk/authentication-jwt-bearer/flow-srp.js +7 -8
  145. package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs +6 -7
  146. package/dist/sdk/authentication-jwt-bearer/services.js +10 -6
  147. package/dist/sdk/authentication-jwt-bearer/services.mjs +11 -7
  148. package/dist/sdk/authentication-jwt-bearer/types.js +3 -3
  149. package/dist/sdk/authentication-jwt-bearer/types.mjs +2 -2
  150. package/dist/sdk/authentication.js +9 -10
  151. package/dist/sdk/authentication.mjs +8 -9
  152. package/dist/sdk/encryption.js +5 -3
  153. package/dist/sdk/encryption.mjs +4 -2
  154. package/dist/sdk/env.js +5 -3
  155. package/dist/sdk/env.mjs +4 -2
  156. package/dist/sdk/errors.js +5 -3
  157. package/dist/sdk/errors.mjs +4 -2
  158. package/dist/sdk/index.js +18 -13
  159. package/dist/sdk/index.mjs +17 -12
  160. package/dist/sdk/user-storage.js +6 -6
  161. package/dist/sdk/user-storage.mjs +5 -5
  162. package/dist/sdk/utils/eip-6963-metamask-provider.js +1 -1
  163. package/dist/sdk/utils/eip-6963-metamask-provider.mjs +1 -1
  164. package/dist/sdk/utils/messaging-signing-snap-requests.js +1 -1
  165. package/dist/sdk/utils/messaging-signing-snap-requests.mjs +1 -1
  166. package/dist/tsconfig.build.tsbuildinfo +1 -1
  167. package/dist/types/controllers/authentication/AuthenticationController.d.ts +74 -0
  168. package/dist/types/controllers/authentication/AuthenticationController.d.ts.map +1 -0
  169. package/dist/types/controllers/authentication/__fixtures__/index.d.ts +2 -0
  170. package/dist/types/controllers/authentication/__fixtures__/index.d.ts.map +1 -0
  171. package/dist/types/controllers/authentication/__fixtures__/mockResponses.d.ts +23 -0
  172. package/dist/types/controllers/authentication/__fixtures__/mockResponses.d.ts.map +1 -0
  173. package/dist/types/controllers/authentication/__fixtures__/mockServices.d.ts +10 -0
  174. package/dist/types/controllers/authentication/__fixtures__/mockServices.d.ts.map +1 -0
  175. package/dist/types/controllers/authentication/auth-snap-requests.d.ts +17 -0
  176. package/dist/types/controllers/authentication/auth-snap-requests.d.ts.map +1 -0
  177. package/dist/types/controllers/authentication/index.d.ts +5 -0
  178. package/dist/types/controllers/authentication/index.d.ts.map +1 -0
  179. package/dist/types/controllers/authentication/services.d.ts +69 -0
  180. package/dist/types/controllers/authentication/services.d.ts.map +1 -0
  181. package/dist/types/controllers/index.d.ts +3 -0
  182. package/dist/types/controllers/index.d.ts.map +1 -0
  183. package/dist/types/controllers/user-storage/UserStorageController.d.ts +85 -0
  184. package/dist/types/controllers/user-storage/UserStorageController.d.ts.map +1 -0
  185. package/dist/types/controllers/user-storage/__fixtures__/index.d.ts +3 -0
  186. package/dist/types/controllers/user-storage/__fixtures__/index.d.ts.map +1 -0
  187. package/dist/types/controllers/user-storage/__fixtures__/mockResponses.d.ts +13 -0
  188. package/dist/types/controllers/user-storage/__fixtures__/mockResponses.d.ts.map +1 -0
  189. package/dist/types/controllers/user-storage/__fixtures__/mockServices.d.ts +9 -0
  190. package/dist/types/controllers/user-storage/__fixtures__/mockServices.d.ts.map +1 -0
  191. package/dist/types/controllers/user-storage/__fixtures__/mockStorage.d.ts +5 -0
  192. package/dist/types/controllers/user-storage/__fixtures__/mockStorage.d.ts.map +1 -0
  193. package/dist/types/controllers/user-storage/encryption/cache.d.ts +31 -0
  194. package/dist/types/controllers/user-storage/encryption/cache.d.ts.map +1 -0
  195. package/dist/types/controllers/user-storage/encryption/encryption.d.ts +26 -0
  196. package/dist/types/controllers/user-storage/encryption/encryption.d.ts.map +1 -0
  197. package/dist/types/controllers/user-storage/encryption/index.d.ts +5 -0
  198. package/dist/types/controllers/user-storage/encryption/index.d.ts.map +1 -0
  199. package/dist/types/controllers/user-storage/encryption/utils.d.ts +4 -0
  200. package/dist/types/controllers/user-storage/encryption/utils.d.ts.map +1 -0
  201. package/dist/types/controllers/user-storage/index.d.ts +6 -0
  202. package/dist/types/controllers/user-storage/index.d.ts.map +1 -0
  203. package/dist/types/controllers/user-storage/schema.d.ts +22 -0
  204. package/dist/types/controllers/user-storage/schema.d.ts.map +1 -0
  205. package/dist/types/controllers/user-storage/services.d.ts +30 -0
  206. package/dist/types/controllers/user-storage/services.d.ts.map +1 -0
  207. package/dist/types/index.d.ts +3 -1
  208. package/dist/types/index.d.ts.map +1 -1
  209. package/dist/types/sdk/__fixtures__/mock-auth.d.ts +3 -0
  210. package/dist/types/sdk/__fixtures__/mock-auth.d.ts.map +1 -1
  211. package/dist/types/sdk/__fixtures__/mock-userstorage.d.ts.map +1 -1
  212. package/dist/types/sdk/__fixtures__/test-utils.d.ts.map +1 -1
  213. package/dist/types/sdk/authentication-jwt-bearer/flow-siwe.d.ts.map +1 -1
  214. package/dist/types/sdk/authentication-jwt-bearer/flow-srp.d.ts.map +1 -1
  215. package/dist/types/sdk/authentication-jwt-bearer/services.d.ts +20 -2
  216. package/dist/types/sdk/authentication-jwt-bearer/services.d.ts.map +1 -1
  217. package/dist/types/sdk/authentication-jwt-bearer/types.d.ts +9 -2
  218. package/dist/types/sdk/authentication-jwt-bearer/types.d.ts.map +1 -1
  219. package/dist/types/sdk/authentication.d.ts +2 -1
  220. package/dist/types/sdk/authentication.d.ts.map +1 -1
  221. package/dist/types/sdk/encryption.d.ts +2 -2
  222. package/dist/types/sdk/encryption.d.ts.map +1 -1
  223. package/dist/types/sdk/env.d.ts +9 -2
  224. package/dist/types/sdk/env.d.ts.map +1 -1
  225. package/dist/types/sdk/errors.d.ts +3 -0
  226. package/dist/types/sdk/errors.d.ts.map +1 -1
  227. package/dist/types/sdk/user-storage.d.ts.map +1 -1
  228. package/package.json +15 -2
  229. package/dist/chunk-2FZSWVHT.mjs.map +0 -1
  230. package/dist/chunk-4NGEEDGV.mjs.map +0 -1
  231. package/dist/chunk-6X6I3HZU.js.map +0 -1
  232. package/dist/chunk-BARZBXO7.js +0 -7
  233. package/dist/chunk-BARZBXO7.js.map +0 -1
  234. package/dist/chunk-BHVT2QEA.mjs.map +0 -1
  235. package/dist/chunk-CFST6GWE.js.map +0 -1
  236. package/dist/chunk-CYGZ4WLJ.mjs.map +0 -1
  237. package/dist/chunk-DEATIRII.js +0 -1
  238. package/dist/chunk-GQLHSQGZ.js.map +0 -1
  239. package/dist/chunk-GVMIXMYB.mjs +0 -67
  240. package/dist/chunk-GVMIXMYB.mjs.map +0 -1
  241. package/dist/chunk-KHFPE566.js +0 -49
  242. package/dist/chunk-KHFPE566.js.map +0 -1
  243. package/dist/chunk-KKRIOEXD.mjs +0 -7
  244. package/dist/chunk-KKRIOEXD.mjs.map +0 -1
  245. package/dist/chunk-MKJYSWME.mjs +0 -1
  246. package/dist/chunk-NRH6O4QZ.js.map +0 -1
  247. package/dist/chunk-OF3TQWGX.js.map +0 -1
  248. package/dist/chunk-UMKBFFZ5.mjs.map +0 -1
  249. package/dist/chunk-UVJVONBF.js +0 -126
  250. package/dist/chunk-UVJVONBF.js.map +0 -1
  251. package/dist/chunk-VHUU4HEY.js +0 -67
  252. package/dist/chunk-VHUU4HEY.js.map +0 -1
  253. package/dist/chunk-VXPVURGH.mjs.map +0 -1
  254. package/dist/chunk-VZXD5DCQ.js.map +0 -1
  255. package/dist/chunk-WJRV2JCX.mjs +0 -49
  256. package/dist/chunk-WJRV2JCX.mjs.map +0 -1
  257. package/dist/sdk/authentication-jwt-bearer/constants.js +0 -8
  258. package/dist/sdk/authentication-jwt-bearer/constants.mjs +0 -8
  259. package/dist/types/sdk/authentication-jwt-bearer/constants.d.ts +0 -2
  260. package/dist/types/sdk/authentication-jwt-bearer/constants.d.ts.map +0 -1
  261. /package/dist/{chunk-DEATIRII.js.map → chunk-IGY2S5BC.js.map} +0 -0
  262. /package/dist/{chunk-MKJYSWME.mjs.map → chunk-U5UIDVOO.mjs.map} +0 -0
  263. /package/dist/{chunk-Z4BLTVTB.js.map → controllers/authentication/AuthenticationController.js.map} +0 -0
  264. /package/dist/{chunk-XUI43LEZ.mjs.map → controllers/authentication/AuthenticationController.mjs.map} +0 -0
  265. /package/dist/{sdk/authentication-jwt-bearer/constants.js.map → controllers/authentication/auth-snap-requests.js.map} +0 -0
  266. /package/dist/{sdk/authentication-jwt-bearer/constants.mjs.map → controllers/authentication/auth-snap-requests.mjs.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -7,4 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- [Unreleased]: https://github.com/MetaMask/core/
10
+ ## [0.1.1]
11
+
12
+ ### Added
13
+
14
+ - export `defaultState` for `AuthenticationController` and `UserStorageController`. ([#4441](https://github.com/MetaMask/core/pull/4441))
15
+
16
+ ### Changed
17
+
18
+ - `AuthType`, `Env`, `Platform` are changed from const enums to enums ([#4441](https://github.com/MetaMask/core/pull/4441))
19
+
20
+ ## [0.1.0]
21
+
22
+ ### Added
23
+
24
+ - Initial release
25
+
26
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@0.1.1...HEAD
27
+ [0.1.1]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@0.1.0...@metamask/profile-sync-controller@0.1.1
28
+ [0.1.0]: https://github.com/MetaMask/core/releases/tag/@metamask/profile-sync-controller@0.1.0
@@ -0,0 +1,70 @@
1
+ import {
2
+ createEntryPath
3
+ } from "./chunk-AUFUOKJW.mjs";
4
+ import {
5
+ encryption_default
6
+ } from "./chunk-5TOWF6UW.mjs";
7
+ import {
8
+ getEnvUrls
9
+ } from "./chunk-FQ5SDMRE.mjs";
10
+
11
+ // src/controllers/user-storage/services.ts
12
+ import log from "loglevel";
13
+ var ENV_URLS = getEnvUrls("prd" /* PRD */);
14
+ var USER_STORAGE_API = ENV_URLS.userStorageApiUrl;
15
+ var USER_STORAGE_ENDPOINT = `${USER_STORAGE_API}/api/v1/userstorage`;
16
+ async function getUserStorage(opts) {
17
+ try {
18
+ const path = createEntryPath(opts.entryKey, opts.storageKey);
19
+ const url = new URL(`${USER_STORAGE_ENDPOINT}${path}`);
20
+ const userStorageResponse = await fetch(url.toString(), {
21
+ headers: {
22
+ "Content-Type": "application/json",
23
+ Authorization: `Bearer ${opts.bearerToken}`
24
+ }
25
+ });
26
+ if (userStorageResponse.status === 404) {
27
+ return null;
28
+ }
29
+ if (userStorageResponse.status !== 200) {
30
+ throw new Error("Unable to get User Storage");
31
+ }
32
+ const userStorage = await userStorageResponse.json();
33
+ const encryptedData = userStorage?.Data ?? null;
34
+ if (!encryptedData) {
35
+ return null;
36
+ }
37
+ const decryptedData = encryption_default.decryptString(
38
+ encryptedData,
39
+ opts.storageKey
40
+ );
41
+ return decryptedData;
42
+ } catch (e) {
43
+ log.error("Failed to get user storage", e);
44
+ return null;
45
+ }
46
+ }
47
+ async function upsertUserStorage(data, opts) {
48
+ const encryptedData = encryption_default.encryptString(data, opts.storageKey);
49
+ const path = createEntryPath(opts.entryKey, opts.storageKey);
50
+ const url = new URL(`${USER_STORAGE_ENDPOINT}${path}`);
51
+ const res = await fetch(url.toString(), {
52
+ method: "PUT",
53
+ headers: {
54
+ "Content-Type": "application/json",
55
+ Authorization: `Bearer ${opts.bearerToken}`
56
+ },
57
+ body: JSON.stringify({ data: encryptedData })
58
+ });
59
+ if (!res.ok) {
60
+ throw new Error("user-storage - unable to upsert data");
61
+ }
62
+ }
63
+
64
+ export {
65
+ USER_STORAGE_API,
66
+ USER_STORAGE_ENDPOINT,
67
+ getUserStorage,
68
+ upsertUserStorage
69
+ };
70
+ //# sourceMappingURL=chunk-2XGRQBXI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/controllers/user-storage/services.ts"],"sourcesContent":["import log from 'loglevel';\n\nimport { Env, getEnvUrls } from '../../sdk';\nimport encryption from './encryption';\nimport type { UserStorageEntryKeys } from './schema';\nimport { createEntryPath } from './schema';\n\nconst ENV_URLS = getEnvUrls(Env.PRD);\n\nexport const USER_STORAGE_API: string = ENV_URLS.userStorageApiUrl;\nexport const USER_STORAGE_ENDPOINT = `${USER_STORAGE_API}/api/v1/userstorage`;\n\n/**\n * This is the Server Response shape\n */\nexport type GetUserStorageResponse = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n HashedKey: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n Data: string;\n};\n\nexport type UserStorageOptions = {\n bearerToken: string;\n entryKey: UserStorageEntryKeys;\n storageKey: string;\n};\n\n/**\n * User Storage Service - Get Storage Entry.\n *\n * @param opts - User Storage Options\n * @returns The storage entry, or null if fails to find entry\n */\nexport async function getUserStorage(\n opts: UserStorageOptions,\n): Promise<string | null> {\n try {\n const path = createEntryPath(opts.entryKey, opts.storageKey);\n const url = new URL(`${USER_STORAGE_ENDPOINT}${path}`);\n\n const userStorageResponse = await fetch(url.toString(), {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${opts.bearerToken}`,\n },\n });\n\n // Acceptable error - since indicates entry does not exist.\n if (userStorageResponse.status === 404) {\n return null;\n }\n\n if (userStorageResponse.status !== 200) {\n throw new Error('Unable to get User Storage');\n }\n\n const userStorage: GetUserStorageResponse | null =\n await userStorageResponse.json();\n const encryptedData = userStorage?.Data ?? null;\n\n if (!encryptedData) {\n return null;\n }\n\n const decryptedData = encryption.decryptString(\n encryptedData,\n opts.storageKey,\n );\n\n return decryptedData;\n } catch (e) {\n log.error('Failed to get user storage', e);\n return null;\n }\n}\n\n/**\n * User Storage Service - Set Storage Entry.\n *\n * @param data - data to store\n * @param opts - storage options\n */\nexport async function upsertUserStorage(\n data: string,\n opts: UserStorageOptions,\n): Promise<void> {\n const encryptedData = encryption.encryptString(data, opts.storageKey);\n const path = createEntryPath(opts.entryKey, opts.storageKey);\n const url = new URL(`${USER_STORAGE_ENDPOINT}${path}`);\n\n const res = await fetch(url.toString(), {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${opts.bearerToken}`,\n },\n body: JSON.stringify({ data: encryptedData }),\n });\n\n if (!res.ok) {\n throw new Error('user-storage - unable to upsert data');\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,SAAS;AAOhB,IAAM,WAAW,0BAAkB;AAE5B,IAAM,mBAA2B,SAAS;AAC1C,IAAM,wBAAwB,GAAG,gBAAgB;AAwBxD,eAAsB,eACpB,MACwB;AACxB,MAAI;AACF,UAAM,OAAO,gBAAgB,KAAK,UAAU,KAAK,UAAU;AAC3D,UAAM,MAAM,IAAI,IAAI,GAAG,qBAAqB,GAAG,IAAI,EAAE;AAErD,UAAM,sBAAsB,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,MACtD,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,KAAK,WAAW;AAAA,MAC3C;AAAA,IACF,CAAC;AAGD,QAAI,oBAAoB,WAAW,KAAK;AACtC,aAAO;AAAA,IACT;AAEA,QAAI,oBAAoB,WAAW,KAAK;AACtC,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAEA,UAAM,cACJ,MAAM,oBAAoB,KAAK;AACjC,UAAM,gBAAgB,aAAa,QAAQ;AAE3C,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,IACT;AAEA,UAAM,gBAAgB,mBAAW;AAAA,MAC/B;AAAA,MACA,KAAK;AAAA,IACP;AAEA,WAAO;AAAA,EACT,SAAS,GAAG;AACV,QAAI,MAAM,8BAA8B,CAAC;AACzC,WAAO;AAAA,EACT;AACF;AAQA,eAAsB,kBACpB,MACA,MACe;AACf,QAAM,gBAAgB,mBAAW,cAAc,MAAM,KAAK,UAAU;AACpE,QAAM,OAAO,gBAAgB,KAAK,UAAU,KAAK,UAAU;AAC3D,QAAM,MAAM,IAAI,IAAI,GAAG,qBAAqB,GAAG,IAAI,EAAE;AAErD,QAAM,MAAM,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,IACtC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,eAAe,UAAU,KAAK,WAAW;AAAA,IAC3C;AAAA,IACA,MAAM,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAAA,EAC9C,CAAC;AAED,MAAI,CAAC,IAAI,IAAI;AACX,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACF;","names":[]}
@@ -0,0 +1,224 @@
1
+ import {
2
+ createLoginRawMessage,
3
+ getAccessToken,
4
+ getNonce,
5
+ login
6
+ } from "./chunk-KBCXN3YW.mjs";
7
+ import {
8
+ createSnapPublicKeyRequest,
9
+ createSnapSignMessageRequest
10
+ } from "./chunk-6P6CUKKI.mjs";
11
+ import {
12
+ __privateAdd,
13
+ __privateGet,
14
+ __privateMethod,
15
+ __privateSet
16
+ } from "./chunk-U5UIDVOO.mjs";
17
+
18
+ // src/controllers/authentication/AuthenticationController.ts
19
+ import { BaseController } from "@metamask/base-controller";
20
+ var THIRTY_MIN_MS = 1e3 * 60 * 30;
21
+ var controllerName = "AuthenticationController";
22
+ var defaultState = {
23
+ isSignedIn: false
24
+ };
25
+ var metadata = {
26
+ isSignedIn: {
27
+ persist: true,
28
+ anonymous: true
29
+ },
30
+ sessionData: {
31
+ persist: true,
32
+ anonymous: false
33
+ }
34
+ };
35
+ var _metametrics, _registerMessageHandlers, registerMessageHandlers_fn, _assertLoggedIn, assertLoggedIn_fn, _performAuthenticationFlow, performAuthenticationFlow_fn, _hasValidSession, hasValidSession_fn, _snapGetPublicKey, snapGetPublicKey_fn, _snapSignMessage, snapSignMessage_fn;
36
+ var AuthenticationController = class extends BaseController {
37
+ constructor({
38
+ messenger,
39
+ state,
40
+ metametrics
41
+ }) {
42
+ super({
43
+ messenger,
44
+ metadata,
45
+ name: controllerName,
46
+ state: { ...defaultState, ...state }
47
+ });
48
+ /**
49
+ * Constructor helper for registering this controller's messaging system
50
+ * actions.
51
+ */
52
+ __privateAdd(this, _registerMessageHandlers);
53
+ __privateAdd(this, _assertLoggedIn);
54
+ __privateAdd(this, _performAuthenticationFlow);
55
+ __privateAdd(this, _hasValidSession);
56
+ /**
57
+ * Returns the auth snap public key.
58
+ *
59
+ * @returns The snap public key.
60
+ */
61
+ __privateAdd(this, _snapGetPublicKey);
62
+ /**
63
+ * Signs a specific message using an underlying auth snap.
64
+ *
65
+ * @param message - A specific tagged message to sign.
66
+ * @returns A Signature created by the snap.
67
+ */
68
+ __privateAdd(this, _snapSignMessage);
69
+ __privateAdd(this, _metametrics, void 0);
70
+ __privateSet(this, _metametrics, metametrics);
71
+ __privateMethod(this, _registerMessageHandlers, registerMessageHandlers_fn).call(this);
72
+ }
73
+ async performSignIn() {
74
+ const { accessToken } = await __privateMethod(this, _performAuthenticationFlow, performAuthenticationFlow_fn).call(this);
75
+ return accessToken;
76
+ }
77
+ performSignOut() {
78
+ __privateMethod(this, _assertLoggedIn, assertLoggedIn_fn).call(this);
79
+ this.update((state) => {
80
+ state.isSignedIn = false;
81
+ state.sessionData = void 0;
82
+ });
83
+ }
84
+ async getBearerToken() {
85
+ __privateMethod(this, _assertLoggedIn, assertLoggedIn_fn).call(this);
86
+ if (__privateMethod(this, _hasValidSession, hasValidSession_fn).call(this, this.state.sessionData)) {
87
+ return this.state.sessionData.accessToken;
88
+ }
89
+ const { accessToken } = await __privateMethod(this, _performAuthenticationFlow, performAuthenticationFlow_fn).call(this);
90
+ return accessToken;
91
+ }
92
+ /**
93
+ * Will return a session profile.
94
+ * Throws if a user is not logged in.
95
+ *
96
+ * @returns profile for the session.
97
+ */
98
+ async getSessionProfile() {
99
+ __privateMethod(this, _assertLoggedIn, assertLoggedIn_fn).call(this);
100
+ if (__privateMethod(this, _hasValidSession, hasValidSession_fn).call(this, this.state.sessionData)) {
101
+ return this.state.sessionData.profile;
102
+ }
103
+ const { profile } = await __privateMethod(this, _performAuthenticationFlow, performAuthenticationFlow_fn).call(this);
104
+ return profile;
105
+ }
106
+ isSignedIn() {
107
+ return this.state.isSignedIn;
108
+ }
109
+ };
110
+ _metametrics = new WeakMap();
111
+ _registerMessageHandlers = new WeakSet();
112
+ registerMessageHandlers_fn = function() {
113
+ this.messagingSystem.registerActionHandler(
114
+ "AuthenticationController:getBearerToken",
115
+ this.getBearerToken.bind(this)
116
+ );
117
+ this.messagingSystem.registerActionHandler(
118
+ "AuthenticationController:getSessionProfile",
119
+ this.getSessionProfile.bind(this)
120
+ );
121
+ this.messagingSystem.registerActionHandler(
122
+ "AuthenticationController:isSignedIn",
123
+ this.isSignedIn.bind(this)
124
+ );
125
+ this.messagingSystem.registerActionHandler(
126
+ "AuthenticationController:performSignIn",
127
+ this.performSignIn.bind(this)
128
+ );
129
+ this.messagingSystem.registerActionHandler(
130
+ "AuthenticationController:performSignOut",
131
+ this.performSignOut.bind(this)
132
+ );
133
+ };
134
+ _assertLoggedIn = new WeakSet();
135
+ assertLoggedIn_fn = function() {
136
+ if (!this.state.isSignedIn) {
137
+ throw new Error(
138
+ `${controllerName}: Unable to call method, user is not authenticated`
139
+ );
140
+ }
141
+ };
142
+ _performAuthenticationFlow = new WeakSet();
143
+ performAuthenticationFlow_fn = async function() {
144
+ try {
145
+ const publicKey = await __privateMethod(this, _snapGetPublicKey, snapGetPublicKey_fn).call(this);
146
+ const nonce = await getNonce(publicKey);
147
+ if (!nonce) {
148
+ throw new Error(`Unable to get nonce`);
149
+ }
150
+ const rawMessage = createLoginRawMessage(nonce, publicKey);
151
+ const signature = await __privateMethod(this, _snapSignMessage, snapSignMessage_fn).call(this, rawMessage);
152
+ const loginResponse = await login(rawMessage, signature, {
153
+ metametricsId: __privateGet(this, _metametrics).getMetaMetricsId(),
154
+ agent: __privateGet(this, _metametrics).agent
155
+ });
156
+ if (!loginResponse?.token) {
157
+ throw new Error(`Unable to login`);
158
+ }
159
+ const profile = {
160
+ identifierId: loginResponse.profile.identifier_id,
161
+ profileId: loginResponse.profile.profile_id
162
+ };
163
+ const accessToken = await getAccessToken(loginResponse.token);
164
+ if (!accessToken) {
165
+ throw new Error(`Unable to get Access Token`);
166
+ }
167
+ this.update((state) => {
168
+ state.isSignedIn = true;
169
+ const expiresIn = /* @__PURE__ */ new Date();
170
+ expiresIn.setTime(expiresIn.getTime() + THIRTY_MIN_MS);
171
+ state.sessionData = {
172
+ profile,
173
+ accessToken,
174
+ expiresIn: expiresIn.toString()
175
+ };
176
+ });
177
+ return {
178
+ profile,
179
+ accessToken
180
+ };
181
+ } catch (e) {
182
+ console.error("Failed to authenticate", e);
183
+ await this.messagingSystem.call(
184
+ "UserStorageController:disableProfileSyncing"
185
+ );
186
+ const errorMessage = e instanceof Error ? e.message : JSON.stringify(e ?? "");
187
+ throw new Error(
188
+ `${controllerName}: Failed to authenticate - ${errorMessage}`
189
+ );
190
+ }
191
+ };
192
+ _hasValidSession = new WeakSet();
193
+ hasValidSession_fn = function(sessionData) {
194
+ if (!sessionData) {
195
+ return false;
196
+ }
197
+ const prevDate = Date.parse(sessionData.expiresIn);
198
+ if (isNaN(prevDate)) {
199
+ return false;
200
+ }
201
+ const currentDate = /* @__PURE__ */ new Date();
202
+ const diffMs = Math.abs(currentDate.getTime() - prevDate);
203
+ return THIRTY_MIN_MS > diffMs;
204
+ };
205
+ _snapGetPublicKey = new WeakSet();
206
+ snapGetPublicKey_fn = function() {
207
+ return this.messagingSystem.call(
208
+ "SnapController:handleRequest",
209
+ createSnapPublicKeyRequest()
210
+ );
211
+ };
212
+ _snapSignMessage = new WeakSet();
213
+ snapSignMessage_fn = function(message) {
214
+ return this.messagingSystem.call(
215
+ "SnapController:handleRequest",
216
+ createSnapSignMessageRequest(message)
217
+ );
218
+ };
219
+
220
+ export {
221
+ defaultState,
222
+ AuthenticationController
223
+ };
224
+ //# sourceMappingURL=chunk-32HAX3MW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/controllers/authentication/AuthenticationController.ts"],"sourcesContent":["import type {\n RestrictedControllerMessenger,\n StateMetadata,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\n\nimport type { UserStorageControllerDisableProfileSyncing } from '../user-storage/UserStorageController';\nimport {\n createSnapPublicKeyRequest,\n createSnapSignMessageRequest,\n} from './auth-snap-requests';\nimport {\n createLoginRawMessage,\n getAccessToken,\n getNonce,\n login,\n} from './services';\n\nconst THIRTY_MIN_MS = 1000 * 60 * 30;\n\nconst controllerName = 'AuthenticationController';\n\n// State\ntype SessionProfile = {\n identifierId: string;\n profileId: string;\n};\n\ntype SessionData = {\n /** profile - anonymous profile data for the given logged in user */\n profile: SessionProfile;\n /** accessToken - used to make requests authorized endpoints */\n accessToken: string;\n /** expiresIn - string date to determine if new access token is required */\n expiresIn: string;\n};\n\ntype MetaMetricsAuth = {\n getMetaMetricsId: () => string;\n agent: 'extension' | 'mobile';\n};\n\nexport type AuthenticationControllerState = {\n /**\n * Global isSignedIn state.\n * Can be used to determine if \"Profile Syncing\" is enabled.\n */\n isSignedIn: boolean;\n sessionData?: SessionData;\n};\nexport const defaultState: AuthenticationControllerState = {\n isSignedIn: false,\n};\nconst metadata: StateMetadata<AuthenticationControllerState> = {\n isSignedIn: {\n persist: true,\n anonymous: true,\n },\n sessionData: {\n persist: true,\n anonymous: false,\n },\n};\n\n// Messenger Actions\ntype CreateActionsObj<Controller extends keyof AuthenticationController> = {\n [K in Controller]: {\n type: `${typeof controllerName}:${K}`;\n handler: AuthenticationController[K];\n };\n};\ntype ActionsObj = CreateActionsObj<\n | 'performSignIn'\n | 'performSignOut'\n | 'getBearerToken'\n | 'getSessionProfile'\n | 'isSignedIn'\n>;\nexport type Actions = ActionsObj[keyof ActionsObj];\nexport type AuthenticationControllerPerformSignIn = ActionsObj['performSignIn'];\nexport type AuthenticationControllerPerformSignOut =\n ActionsObj['performSignOut'];\nexport type AuthenticationControllerGetBearerToken =\n ActionsObj['getBearerToken'];\nexport type AuthenticationControllerGetSessionProfile =\n ActionsObj['getSessionProfile'];\nexport type AuthenticationControllerIsSignedIn = ActionsObj['isSignedIn'];\n\n// Allowed Actions\nexport type AllowedActions =\n | HandleSnapRequest\n | UserStorageControllerDisableProfileSyncing;\n\n// Messenger\nexport type AuthenticationControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n Actions | AllowedActions,\n never,\n AllowedActions['type'],\n never\n>;\n\n/**\n * Controller that enables authentication for restricted endpoints.\n * Used for Global Profile Syncing and Notifications\n */\nexport default class AuthenticationController extends BaseController<\n typeof controllerName,\n AuthenticationControllerState,\n AuthenticationControllerMessenger\n> {\n #metametrics: MetaMetricsAuth;\n\n constructor({\n messenger,\n state,\n metametrics,\n }: {\n messenger: AuthenticationControllerMessenger;\n state?: AuthenticationControllerState;\n /**\n * Not using the Messaging System as we\n * do not want to tie this strictly to extension\n */\n metametrics: MetaMetricsAuth;\n }) {\n super({\n messenger,\n metadata,\n name: controllerName,\n state: { ...defaultState, ...state },\n });\n\n this.#metametrics = metametrics;\n\n this.#registerMessageHandlers();\n }\n\n /**\n * Constructor helper for registering this controller's messaging system\n * actions.\n */\n #registerMessageHandlers(): void {\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:getBearerToken',\n this.getBearerToken.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:getSessionProfile',\n this.getSessionProfile.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:isSignedIn',\n this.isSignedIn.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:performSignIn',\n this.performSignIn.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'AuthenticationController:performSignOut',\n this.performSignOut.bind(this),\n );\n }\n\n public async performSignIn(): Promise<string> {\n const { accessToken } = await this.#performAuthenticationFlow();\n return accessToken;\n }\n\n public performSignOut(): void {\n this.#assertLoggedIn();\n\n this.update((state) => {\n state.isSignedIn = false;\n state.sessionData = undefined;\n });\n }\n\n public async getBearerToken(): Promise<string> {\n this.#assertLoggedIn();\n\n if (this.#hasValidSession(this.state.sessionData)) {\n return this.state.sessionData.accessToken;\n }\n\n const { accessToken } = await this.#performAuthenticationFlow();\n return accessToken;\n }\n\n /**\n * Will return a session profile.\n * Throws if a user is not logged in.\n *\n * @returns profile for the session.\n */\n public async getSessionProfile(): Promise<SessionProfile> {\n this.#assertLoggedIn();\n\n if (this.#hasValidSession(this.state.sessionData)) {\n return this.state.sessionData.profile;\n }\n\n const { profile } = await this.#performAuthenticationFlow();\n return profile;\n }\n\n public isSignedIn(): boolean {\n return this.state.isSignedIn;\n }\n\n #assertLoggedIn(): void {\n if (!this.state.isSignedIn) {\n throw new Error(\n `${controllerName}: Unable to call method, user is not authenticated`,\n );\n }\n }\n\n async #performAuthenticationFlow(): Promise<{\n profile: SessionProfile;\n accessToken: string;\n }> {\n try {\n // 1. Nonce\n const publicKey = await this.#snapGetPublicKey();\n const nonce = await getNonce(publicKey);\n if (!nonce) {\n throw new Error(`Unable to get nonce`);\n }\n\n // 2. Login\n const rawMessage = createLoginRawMessage(nonce, publicKey);\n const signature = await this.#snapSignMessage(rawMessage);\n const loginResponse = await login(rawMessage, signature, {\n metametricsId: this.#metametrics.getMetaMetricsId(),\n agent: this.#metametrics.agent,\n });\n if (!loginResponse?.token) {\n throw new Error(`Unable to login`);\n }\n\n const profile: SessionProfile = {\n identifierId: loginResponse.profile.identifier_id,\n profileId: loginResponse.profile.profile_id,\n };\n\n // 3. Trade for Access Token\n const accessToken = await getAccessToken(loginResponse.token);\n if (!accessToken) {\n throw new Error(`Unable to get Access Token`);\n }\n\n // Update Internal State\n this.update((state) => {\n state.isSignedIn = true;\n const expiresIn = new Date();\n expiresIn.setTime(expiresIn.getTime() + THIRTY_MIN_MS);\n state.sessionData = {\n profile,\n accessToken,\n expiresIn: expiresIn.toString(),\n };\n });\n\n return {\n profile,\n accessToken,\n };\n } catch (e) {\n console.error('Failed to authenticate', e);\n // Disable Profile Syncing\n await this.messagingSystem.call(\n 'UserStorageController:disableProfileSyncing',\n );\n const errorMessage =\n e instanceof Error ? e.message : JSON.stringify(e ?? '');\n throw new Error(\n `${controllerName}: Failed to authenticate - ${errorMessage}`,\n );\n }\n }\n\n #hasValidSession(\n sessionData: SessionData | undefined,\n ): sessionData is SessionData {\n if (!sessionData) {\n return false;\n }\n\n const prevDate = Date.parse(sessionData.expiresIn);\n if (isNaN(prevDate)) {\n return false;\n }\n\n const currentDate = new Date();\n const diffMs = Math.abs(currentDate.getTime() - prevDate);\n\n return THIRTY_MIN_MS > diffMs;\n }\n\n /**\n * Returns the auth snap public key.\n *\n * @returns The snap public key.\n */\n #snapGetPublicKey(): Promise<string> {\n return this.messagingSystem.call(\n 'SnapController:handleRequest',\n createSnapPublicKeyRequest(),\n ) as Promise<string>;\n }\n\n /**\n * Signs a specific message using an underlying auth snap.\n *\n * @param message - A specific tagged message to sign.\n * @returns A Signature created by the snap.\n */\n #snapSignMessage(message: `metamask:${string}`): Promise<string> {\n return this.messagingSystem.call(\n 'SnapController:handleRequest',\n createSnapSignMessageRequest(message),\n ) as Promise<string>;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,70 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
+
3
+ var _chunkB6CSNLGEjs = require('./chunk-B6CSNLGE.js');
4
+
5
+
6
+ var _chunkAK7OTIWAjs = require('./chunk-AK7OTIWA.js');
7
+
8
+
9
+ var _chunkSMKTWM6Ijs = require('./chunk-SMKTWM6I.js');
10
+
11
+ // src/controllers/user-storage/services.ts
12
+ var _loglevel = require('loglevel'); var _loglevel2 = _interopRequireDefault(_loglevel);
13
+ var ENV_URLS = _chunkSMKTWM6Ijs.getEnvUrls.call(void 0, "prd" /* PRD */);
14
+ var USER_STORAGE_API = ENV_URLS.userStorageApiUrl;
15
+ var USER_STORAGE_ENDPOINT = `${USER_STORAGE_API}/api/v1/userstorage`;
16
+ async function getUserStorage(opts) {
17
+ try {
18
+ const path = _chunkB6CSNLGEjs.createEntryPath.call(void 0, opts.entryKey, opts.storageKey);
19
+ const url = new URL(`${USER_STORAGE_ENDPOINT}${path}`);
20
+ const userStorageResponse = await fetch(url.toString(), {
21
+ headers: {
22
+ "Content-Type": "application/json",
23
+ Authorization: `Bearer ${opts.bearerToken}`
24
+ }
25
+ });
26
+ if (userStorageResponse.status === 404) {
27
+ return null;
28
+ }
29
+ if (userStorageResponse.status !== 200) {
30
+ throw new Error("Unable to get User Storage");
31
+ }
32
+ const userStorage = await userStorageResponse.json();
33
+ const encryptedData = userStorage?.Data ?? null;
34
+ if (!encryptedData) {
35
+ return null;
36
+ }
37
+ const decryptedData = _chunkAK7OTIWAjs.encryption_default.decryptString(
38
+ encryptedData,
39
+ opts.storageKey
40
+ );
41
+ return decryptedData;
42
+ } catch (e) {
43
+ _loglevel2.default.error("Failed to get user storage", e);
44
+ return null;
45
+ }
46
+ }
47
+ async function upsertUserStorage(data, opts) {
48
+ const encryptedData = _chunkAK7OTIWAjs.encryption_default.encryptString(data, opts.storageKey);
49
+ const path = _chunkB6CSNLGEjs.createEntryPath.call(void 0, opts.entryKey, opts.storageKey);
50
+ const url = new URL(`${USER_STORAGE_ENDPOINT}${path}`);
51
+ const res = await fetch(url.toString(), {
52
+ method: "PUT",
53
+ headers: {
54
+ "Content-Type": "application/json",
55
+ Authorization: `Bearer ${opts.bearerToken}`
56
+ },
57
+ body: JSON.stringify({ data: encryptedData })
58
+ });
59
+ if (!res.ok) {
60
+ throw new Error("user-storage - unable to upsert data");
61
+ }
62
+ }
63
+
64
+
65
+
66
+
67
+
68
+
69
+ exports.USER_STORAGE_API = USER_STORAGE_API; exports.USER_STORAGE_ENDPOINT = USER_STORAGE_ENDPOINT; exports.getUserStorage = getUserStorage; exports.upsertUserStorage = upsertUserStorage;
70
+ //# sourceMappingURL=chunk-5SXXO4MV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/controllers/user-storage/services.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,SAAS;AAOhB,IAAM,WAAW,0BAAkB;AAE5B,IAAM,mBAA2B,SAAS;AAC1C,IAAM,wBAAwB,GAAG,gBAAgB;AAwBxD,eAAsB,eACpB,MACwB;AACxB,MAAI;AACF,UAAM,OAAO,gBAAgB,KAAK,UAAU,KAAK,UAAU;AAC3D,UAAM,MAAM,IAAI,IAAI,GAAG,qBAAqB,GAAG,IAAI,EAAE;AAErD,UAAM,sBAAsB,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,MACtD,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,KAAK,WAAW;AAAA,MAC3C;AAAA,IACF,CAAC;AAGD,QAAI,oBAAoB,WAAW,KAAK;AACtC,aAAO;AAAA,IACT;AAEA,QAAI,oBAAoB,WAAW,KAAK;AACtC,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAEA,UAAM,cACJ,MAAM,oBAAoB,KAAK;AACjC,UAAM,gBAAgB,aAAa,QAAQ;AAE3C,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,IACT;AAEA,UAAM,gBAAgB,mBAAW;AAAA,MAC/B;AAAA,MACA,KAAK;AAAA,IACP;AAEA,WAAO;AAAA,EACT,SAAS,GAAG;AACV,QAAI,MAAM,8BAA8B,CAAC;AACzC,WAAO;AAAA,EACT;AACF;AAQA,eAAsB,kBACpB,MACA,MACe;AACf,QAAM,gBAAgB,mBAAW,cAAc,MAAM,KAAK,UAAU;AACpE,QAAM,OAAO,gBAAgB,KAAK,UAAU,KAAK,UAAU;AAC3D,QAAM,MAAM,IAAI,IAAI,GAAG,qBAAqB,GAAG,IAAI,EAAE;AAErD,QAAM,MAAM,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,IACtC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,eAAe,UAAU,KAAK,WAAW;AAAA,IAC3C;AAAA,IACA,MAAM,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAAA,EAC9C,CAAC;AAED,MAAI,CAAC,IAAI,IAAI;AACX,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACF","sourcesContent":["import log from 'loglevel';\n\nimport { Env, getEnvUrls } from '../../sdk';\nimport encryption from './encryption';\nimport type { UserStorageEntryKeys } from './schema';\nimport { createEntryPath } from './schema';\n\nconst ENV_URLS = getEnvUrls(Env.PRD);\n\nexport const USER_STORAGE_API: string = ENV_URLS.userStorageApiUrl;\nexport const USER_STORAGE_ENDPOINT = `${USER_STORAGE_API}/api/v1/userstorage`;\n\n/**\n * This is the Server Response shape\n */\nexport type GetUserStorageResponse = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n HashedKey: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n Data: string;\n};\n\nexport type UserStorageOptions = {\n bearerToken: string;\n entryKey: UserStorageEntryKeys;\n storageKey: string;\n};\n\n/**\n * User Storage Service - Get Storage Entry.\n *\n * @param opts - User Storage Options\n * @returns The storage entry, or null if fails to find entry\n */\nexport async function getUserStorage(\n opts: UserStorageOptions,\n): Promise<string | null> {\n try {\n const path = createEntryPath(opts.entryKey, opts.storageKey);\n const url = new URL(`${USER_STORAGE_ENDPOINT}${path}`);\n\n const userStorageResponse = await fetch(url.toString(), {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${opts.bearerToken}`,\n },\n });\n\n // Acceptable error - since indicates entry does not exist.\n if (userStorageResponse.status === 404) {\n return null;\n }\n\n if (userStorageResponse.status !== 200) {\n throw new Error('Unable to get User Storage');\n }\n\n const userStorage: GetUserStorageResponse | null =\n await userStorageResponse.json();\n const encryptedData = userStorage?.Data ?? null;\n\n if (!encryptedData) {\n return null;\n }\n\n const decryptedData = encryption.decryptString(\n encryptedData,\n opts.storageKey,\n );\n\n return decryptedData;\n } catch (e) {\n log.error('Failed to get user storage', e);\n return null;\n }\n}\n\n/**\n * User Storage Service - Set Storage Entry.\n *\n * @param data - data to store\n * @param opts - storage options\n */\nexport async function upsertUserStorage(\n data: string,\n opts: UserStorageOptions,\n): Promise<void> {\n const encryptedData = encryption.encryptString(data, opts.storageKey);\n const path = createEntryPath(opts.entryKey, opts.storageKey);\n const url = new URL(`${USER_STORAGE_ENDPOINT}${path}`);\n\n const res = await fetch(url.toString(), {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${opts.bearerToken}`,\n },\n body: JSON.stringify({ data: encryptedData }),\n });\n\n if (!res.ok) {\n throw new Error('user-storage - unable to upsert data');\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import {
2
+ encryption_default
3
+ } from "./chunk-K5UKU454.mjs";
4
+
5
+ // src/controllers/user-storage/encryption/index.ts
6
+ var encryption_default2 = encryption_default;
7
+
8
+ export {
9
+ encryption_default2 as encryption_default
10
+ };
11
+ //# sourceMappingURL=chunk-5TOWF6UW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/controllers/user-storage/encryption/index.ts"],"sourcesContent":["import Encryption from './encryption';\n\nexport { Encryption };\nexport * from './encryption';\nexport default Encryption;\n"],"mappings":";;;;;AAIA,IAAOA,sBAAQ;","names":["encryption_default"]}
@@ -0,0 +1,30 @@
1
+ // src/controllers/authentication/auth-snap-requests.ts
2
+ import { HandlerType } from "@metamask/snaps-utils";
3
+ var snapId = "npm:@metamask/message-signing-snap";
4
+ function createSnapPublicKeyRequest() {
5
+ return {
6
+ snapId,
7
+ origin: "",
8
+ handler: HandlerType.OnRpcRequest,
9
+ request: {
10
+ method: "getPublicKey"
11
+ }
12
+ };
13
+ }
14
+ function createSnapSignMessageRequest(message) {
15
+ return {
16
+ snapId,
17
+ origin: "",
18
+ handler: HandlerType.OnRpcRequest,
19
+ request: {
20
+ method: "signMessage",
21
+ params: { message }
22
+ }
23
+ };
24
+ }
25
+
26
+ export {
27
+ createSnapPublicKeyRequest,
28
+ createSnapSignMessageRequest
29
+ };
30
+ //# sourceMappingURL=chunk-6P6CUKKI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/controllers/authentication/auth-snap-requests.ts"],"sourcesContent":["import type { HandleSnapRequest } from '@metamask/snaps-controllers';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport { HandlerType } from '@metamask/snaps-utils';\n\ntype SnapRPCRequest = Parameters<HandleSnapRequest['handler']>[0];\n\nconst snapId = 'npm:@metamask/message-signing-snap' as SnapId;\n\n/**\n * Constructs Request to Message Signing Snap to get Public Key\n *\n * @returns Snap Public Key Request\n */\nexport function createSnapPublicKeyRequest(): SnapRPCRequest {\n return {\n snapId,\n origin: '',\n handler: HandlerType.OnRpcRequest,\n request: {\n method: 'getPublicKey',\n },\n };\n}\n\n/**\n * Constructs Request to get Message Signing Snap to sign a message.\n *\n * @param message - message to sign\n * @returns Snap Sign Message Request\n */\nexport function createSnapSignMessageRequest(\n message: `metamask:${string}`,\n): SnapRPCRequest {\n return {\n snapId,\n origin: '',\n handler: HandlerType.OnRpcRequest,\n request: {\n method: 'signMessage',\n params: { message },\n },\n };\n}\n"],"mappings":";AAEA,SAAS,mBAAmB;AAI5B,IAAM,SAAS;AAOR,SAAS,6BAA6C;AAC3D,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,IACR,SAAS,YAAY;AAAA,IACrB,SAAS;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAQO,SAAS,6BACd,SACgB;AAChB,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,IACR,SAAS,YAAY;AAAA,IACrB,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,EAAE,QAAQ;AAAA,IACpB;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,18 @@
1
+ // src/controllers/user-storage/encryption/utils.ts
2
+ var byteArrayToBase64 = (byteArray) => {
3
+ return Buffer.from(byteArray).toString("base64");
4
+ };
5
+ var base64ToByteArray = (base64) => {
6
+ return new Uint8Array(Buffer.from(base64, "base64"));
7
+ };
8
+ var bytesToUtf8 = (byteArray) => {
9
+ const decoder = new TextDecoder("utf-8");
10
+ return decoder.decode(byteArray);
11
+ };
12
+
13
+ export {
14
+ byteArrayToBase64,
15
+ base64ToByteArray,
16
+ bytesToUtf8
17
+ };
18
+ //# sourceMappingURL=chunk-76VRE4BI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/controllers/user-storage/encryption/utils.ts"],"sourcesContent":["export const byteArrayToBase64 = (byteArray: Uint8Array) => {\n return Buffer.from(byteArray).toString('base64');\n};\n\nexport const base64ToByteArray = (base64: string) => {\n return new Uint8Array(Buffer.from(base64, 'base64'));\n};\n\nexport const bytesToUtf8 = (byteArray: Uint8Array) => {\n const decoder = new TextDecoder('utf-8');\n return decoder.decode(byteArray);\n};\n"],"mappings":";AAAO,IAAM,oBAAoB,CAAC,cAA0B;AAC1D,SAAO,OAAO,KAAK,SAAS,EAAE,SAAS,QAAQ;AACjD;AAEO,IAAM,oBAAoB,CAAC,WAAmB;AACnD,SAAO,IAAI,WAAW,OAAO,KAAK,QAAQ,QAAQ,CAAC;AACrD;AAEO,IAAM,cAAc,CAAC,cAA0B;AACpD,QAAM,UAAU,IAAI,YAAY,OAAO;AACvC,SAAO,QAAQ,OAAO,SAAS;AACjC;","names":[]}
@@ -0,0 +1,86 @@
1
+ import {
2
+ AuthenticationController,
3
+ defaultState
4
+ } from "./chunk-32HAX3MW.mjs";
5
+ import {
6
+ AUTH_LOGIN_ENDPOINT,
7
+ AUTH_NONCE_ENDPOINT,
8
+ OIDC_TOKENS_ENDPOINT
9
+ } from "./chunk-KBCXN3YW.mjs";
10
+ import {
11
+ __export
12
+ } from "./chunk-U5UIDVOO.mjs";
13
+
14
+ // src/controllers/authentication/index.ts
15
+ var authentication_exports = {};
16
+ __export(authentication_exports, {
17
+ Controller: () => AuthenticationController,
18
+ Mocks: () => fixtures_exports,
19
+ defaultState: () => defaultState
20
+ });
21
+
22
+ // src/controllers/authentication/__fixtures__/index.ts
23
+ var fixtures_exports = {};
24
+ __export(fixtures_exports, {
25
+ MOCK_ACCESS_TOKEN: () => MOCK_ACCESS_TOKEN,
26
+ MOCK_JWT: () => MOCK_JWT,
27
+ MOCK_LOGIN_RESPONSE: () => MOCK_LOGIN_RESPONSE,
28
+ MOCK_NONCE: () => MOCK_NONCE,
29
+ MOCK_NONCE_RESPONSE: () => MOCK_NONCE_RESPONSE,
30
+ MOCK_OATH_TOKEN_RESPONSE: () => MOCK_OATH_TOKEN_RESPONSE,
31
+ getMockAuthAccessTokenResponse: () => getMockAuthAccessTokenResponse,
32
+ getMockAuthLoginResponse: () => getMockAuthLoginResponse,
33
+ getMockAuthNonceResponse: () => getMockAuthNonceResponse
34
+ });
35
+
36
+ // src/controllers/authentication/__fixtures__/mockResponses.ts
37
+ var MOCK_NONCE = "4cbfqzoQpcNxVImGv";
38
+ var MOCK_NONCE_RESPONSE = {
39
+ nonce: MOCK_NONCE
40
+ };
41
+ var getMockAuthNonceResponse = () => {
42
+ return {
43
+ url: AUTH_NONCE_ENDPOINT,
44
+ requestMethod: "GET",
45
+ response: MOCK_NONCE_RESPONSE
46
+ };
47
+ };
48
+ var MOCK_JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
49
+ var MOCK_LOGIN_RESPONSE = {
50
+ token: MOCK_JWT,
51
+ // eslint-disable-next-line @typescript-eslint/naming-convention
52
+ expires_in: (/* @__PURE__ */ new Date()).toString(),
53
+ profile: {
54
+ // eslint-disable-next-line @typescript-eslint/naming-convention
55
+ identifier_id: "MOCK_IDENTIFIER",
56
+ // eslint-disable-next-line @typescript-eslint/naming-convention
57
+ profile_id: "MOCK_PROFILE_ID"
58
+ }
59
+ };
60
+ var getMockAuthLoginResponse = () => {
61
+ return {
62
+ url: AUTH_LOGIN_ENDPOINT,
63
+ requestMethod: "POST",
64
+ response: MOCK_LOGIN_RESPONSE
65
+ };
66
+ };
67
+ var MOCK_ACCESS_TOKEN = `MOCK_ACCESS_TOKEN-${MOCK_JWT}`;
68
+ var MOCK_OATH_TOKEN_RESPONSE = {
69
+ // eslint-disable-next-line @typescript-eslint/naming-convention
70
+ access_token: MOCK_ACCESS_TOKEN,
71
+ // eslint-disable-next-line @typescript-eslint/naming-convention
72
+ expires_in: (/* @__PURE__ */ new Date()).getTime()
73
+ };
74
+ var getMockAuthAccessTokenResponse = () => {
75
+ return {
76
+ url: OIDC_TOKENS_ENDPOINT,
77
+ requestMethod: "POST",
78
+ response: MOCK_OATH_TOKEN_RESPONSE
79
+ };
80
+ };
81
+
82
+ export {
83
+ fixtures_exports,
84
+ authentication_exports
85
+ };
86
+ //# sourceMappingURL=chunk-AARMY5TW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/controllers/authentication/index.ts","../src/controllers/authentication/__fixtures__/index.ts","../src/controllers/authentication/__fixtures__/mockResponses.ts"],"sourcesContent":["import Controller from './AuthenticationController';\n\nexport { Controller };\nexport * from './AuthenticationController';\nexport * as Mocks from './__fixtures__';\n","export * from './mockResponses';\n","import type {\n LoginResponse,\n NonceResponse,\n OAuthTokenResponse,\n} from '../services';\nimport {\n AUTH_LOGIN_ENDPOINT,\n AUTH_NONCE_ENDPOINT,\n OIDC_TOKENS_ENDPOINT,\n} from '../services';\n\ntype MockResponse = {\n url: string;\n requestMethod: 'GET' | 'POST' | 'PUT';\n response: unknown;\n};\n\nexport const MOCK_NONCE = '4cbfqzoQpcNxVImGv';\nexport const MOCK_NONCE_RESPONSE: NonceResponse = {\n nonce: MOCK_NONCE,\n};\n\nexport const getMockAuthNonceResponse = () => {\n return {\n url: AUTH_NONCE_ENDPOINT,\n requestMethod: 'GET',\n response: MOCK_NONCE_RESPONSE,\n } satisfies MockResponse;\n};\n\nexport const MOCK_JWT =\n 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';\nexport const MOCK_LOGIN_RESPONSE: LoginResponse = {\n token: MOCK_JWT,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n expires_in: new Date().toString(),\n profile: {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n identifier_id: 'MOCK_IDENTIFIER',\n // eslint-disable-next-line @typescript-eslint/naming-convention\n profile_id: 'MOCK_PROFILE_ID',\n },\n};\n\nexport const getMockAuthLoginResponse = () => {\n return {\n url: AUTH_LOGIN_ENDPOINT,\n requestMethod: 'POST',\n response: MOCK_LOGIN_RESPONSE,\n } satisfies MockResponse;\n};\n\nexport const MOCK_ACCESS_TOKEN = `MOCK_ACCESS_TOKEN-${MOCK_JWT}`;\nexport const MOCK_OATH_TOKEN_RESPONSE: OAuthTokenResponse = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n access_token: MOCK_ACCESS_TOKEN,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n expires_in: new Date().getTime(),\n};\n\nexport const getMockAuthAccessTokenResponse = () => {\n return {\n url: OIDC_TOKENS_ENDPOINT,\n requestMethod: 'POST',\n response: MOCK_OATH_TOKEN_RESPONSE,\n } satisfies MockResponse;\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACiBO,IAAM,aAAa;AACnB,IAAM,sBAAqC;AAAA,EAChD,OAAO;AACT;AAEO,IAAM,2BAA2B,MAAM;AAC5C,SAAO;AAAA,IACL,KAAK;AAAA,IACL,eAAe;AAAA,IACf,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,WACX;AACK,IAAM,sBAAqC;AAAA,EAChD,OAAO;AAAA;AAAA,EAEP,aAAY,oBAAI,KAAK,GAAE,SAAS;AAAA,EAChC,SAAS;AAAA;AAAA,IAEP,eAAe;AAAA;AAAA,IAEf,YAAY;AAAA,EACd;AACF;AAEO,IAAM,2BAA2B,MAAM;AAC5C,SAAO;AAAA,IACL,KAAK;AAAA,IACL,eAAe;AAAA,IACf,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,oBAAoB,qBAAqB,QAAQ;AACvD,IAAM,2BAA+C;AAAA;AAAA,EAE1D,cAAc;AAAA;AAAA,EAEd,aAAY,oBAAI,KAAK,GAAE,QAAQ;AACjC;AAEO,IAAM,iCAAiC,MAAM;AAClD,SAAO;AAAA,IACL,KAAK;AAAA,IACL,eAAe;AAAA,IACf,UAAU;AAAA,EACZ;AACF;","names":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkT3FNDVE3js = require('./chunk-T3FNDVE3.js');
4
+
5
+ // src/controllers/user-storage/encryption/index.ts
6
+ var encryption_default2 = _chunkT3FNDVE3js.encryption_default;
7
+
8
+
9
+
10
+ exports.encryption_default = encryption_default2;
11
+ //# sourceMappingURL=chunk-AK7OTIWA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/controllers/user-storage/encryption/index.ts"],"names":["encryption_default"],"mappings":";;;;;AAIA,IAAOA,sBAAQ","sourcesContent":["import Encryption from './encryption';\n\nexport { Encryption };\nexport * from './encryption';\nexport default Encryption;\n"]}
@@ -0,0 +1,25 @@
1
+ import {
2
+ createSHA256Hash
3
+ } from "./chunk-K5UKU454.mjs";
4
+
5
+ // src/controllers/user-storage/schema.ts
6
+ var USER_STORAGE_ENTRIES = {
7
+ notificationSettings: {
8
+ path: "notifications",
9
+ entryName: "notificationSettings"
10
+ }
11
+ };
12
+ function createEntryPath(entryKey, storageKey) {
13
+ const entry = USER_STORAGE_ENTRIES[entryKey];
14
+ if (!entry) {
15
+ throw new Error(`user-storage - invalid entry provided: ${entryKey}`);
16
+ }
17
+ const hashedKey = createSHA256Hash(entry.entryName + storageKey);
18
+ return `/${entry.path}/${hashedKey}`;
19
+ }
20
+
21
+ export {
22
+ USER_STORAGE_ENTRIES,
23
+ createEntryPath
24
+ };
25
+ //# sourceMappingURL=chunk-AUFUOKJW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/controllers/user-storage/schema.ts"],"sourcesContent":["import { createSHA256Hash } from './encryption';\n\ntype UserStorageEntry = { path: string; entryName: string };\n\n/**\n * The User Storage Endpoint requires a path and an entry name.\n * Developers can provide additional paths by extending this variable below\n */\nexport const USER_STORAGE_ENTRIES = {\n notificationSettings: {\n path: 'notifications',\n entryName: 'notificationSettings',\n },\n} satisfies Record<string, UserStorageEntry>;\n\nexport type UserStorageEntryKeys = keyof typeof USER_STORAGE_ENTRIES;\n\n/**\n * Constructs a unique entry path for a user.\n * This can be done due to the uniqueness of the storage key (no users will share the same storage key).\n * The users entry is a unique hash that cannot be reversed.\n *\n * @param entryKey - storage schema entry key\n * @param storageKey - users storage key\n * @returns path to store entry\n */\nexport function createEntryPath(\n entryKey: UserStorageEntryKeys,\n storageKey: string,\n): string {\n const entry = USER_STORAGE_ENTRIES[entryKey];\n if (!entry) {\n throw new Error(`user-storage - invalid entry provided: ${entryKey}`);\n }\n\n const hashedKey = createSHA256Hash(entry.entryName + storageKey);\n return `/${entry.path}/${hashedKey}`;\n}\n"],"mappings":";;;;;AAQO,IAAM,uBAAuB;AAAA,EAClC,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AACF;AAaO,SAAS,gBACd,UACA,YACQ;AACR,QAAM,QAAQ,qBAAqB,QAAQ;AAC3C,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,0CAA0C,QAAQ,EAAE;AAAA,EACtE;AAEA,QAAM,YAAY,iBAAiB,MAAM,YAAY,UAAU;AAC/D,SAAO,IAAI,MAAM,IAAI,IAAI,SAAS;AACpC;","names":[]}