@cartridge/controller 0.5.9 → 0.6.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 (51) hide show
  1. package/.turbo/turbo-build$colon$deps.log +44 -82
  2. package/.turbo/turbo-build.log +47 -85
  3. package/dist/__tests__/parseChainId.test.js.map +1 -1
  4. package/dist/account.js +4 -0
  5. package/dist/account.js.map +1 -1
  6. package/dist/controller.js +177 -109
  7. package/dist/controller.js.map +1 -1
  8. package/dist/iframe/base.js +4 -0
  9. package/dist/iframe/base.js.map +1 -1
  10. package/dist/iframe/index.js +4 -0
  11. package/dist/iframe/index.js.map +1 -1
  12. package/dist/iframe/keychain.js +4 -0
  13. package/dist/iframe/keychain.js.map +1 -1
  14. package/dist/iframe/profile.js +4 -0
  15. package/dist/iframe/profile.js.map +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +181 -111
  18. package/dist/index.js.map +1 -1
  19. package/dist/mutex.d.ts +14 -0
  20. package/dist/mutex.js +22 -0
  21. package/dist/mutex.js.map +1 -0
  22. package/dist/policies.d.ts +19 -0
  23. package/dist/policies.js +26 -0
  24. package/dist/policies.js.map +1 -0
  25. package/dist/provider.d.ts +2 -0
  26. package/dist/provider.js +163 -109
  27. package/dist/provider.js.map +1 -1
  28. package/dist/session/account.js +2 -0
  29. package/dist/session/account.js.map +1 -1
  30. package/dist/session/index.d.ts +1 -0
  31. package/dist/session/index.js +286 -121
  32. package/dist/session/index.js.map +1 -1
  33. package/dist/session/provider.d.ts +7 -2
  34. package/dist/session/provider.js +286 -121
  35. package/dist/session/provider.js.map +1 -1
  36. package/dist/telegram/provider.d.ts +2 -1
  37. package/dist/telegram/provider.js +198 -112
  38. package/dist/telegram/provider.js.map +1 -1
  39. package/dist/utils.d.ts +2 -1
  40. package/dist/utils.js +4 -2
  41. package/dist/utils.js.map +1 -1
  42. package/package.json +22 -8
  43. package/src/controller.ts +1 -0
  44. package/src/mutex.ts +22 -0
  45. package/src/policies.ts +49 -0
  46. package/src/provider.ts +33 -2
  47. package/src/session/account.ts +1 -0
  48. package/src/session/provider.ts +139 -10
  49. package/src/telegram/provider.ts +3 -2
  50. package/src/utils.ts +4 -1
  51. package/tsconfig.json +1 -2
@@ -1,119 +1,81 @@
1
1
 
2
- > @cartridge/controller@0.5.9 build:deps /home/runner/work/controller/controller/packages/controller
2
+ > @cartridge/controller@0.6.0 build:deps /home/runner/work/controller/controller/packages/controller
3
3
  > tsup --dts-resolve
4
4
 
5
- CLI Building entry: src/account.ts, src/constants.ts, src/controller.ts, src/errors.ts, src/icon.ts, src/index.ts, src/lookup.ts, src/provider.ts, src/types.ts, src/utils.ts, src/__tests__/parseChainId.test.ts, src/iframe/base.ts, src/iframe/index.ts, src/iframe/keychain.ts, src/iframe/profile.ts, src/session/account.ts, src/session/backend.ts, src/session/index.ts, src/session/provider.ts, src/telegram/backend.ts, src/telegram/provider.ts
5
+ CLI Building entry: src/account.ts, src/constants.ts, src/controller.ts, src/errors.ts, src/icon.ts, src/index.ts, src/lookup.ts, src/mutex.ts, src/policies.ts, src/provider.ts, src/types.ts, src/utils.ts, src/__tests__/parseChainId.test.ts, src/iframe/base.ts, src/iframe/index.ts, src/iframe/keychain.ts, src/iframe/profile.ts, src/session/account.ts, src/session/backend.ts, src/session/index.ts, src/session/provider.ts, src/telegram/backend.ts, src/telegram/provider.ts
6
6
  CLI Using tsconfig: tsconfig.json
7
7
  CLI tsup v8.3.5
8
8
  CLI Using tsup config: /home/runner/work/controller/controller/packages/controller/package.json
9
- CLI Target: es2020
9
+ CLI Target: esnext
10
10
  CLI Cleaning output folder
11
11
  ESM Build start
12
- ESM dist/account.js 2.83 KB
13
12
  ESM dist/__tests__/parseChainId.test.js 2.92 KB
14
- ESM dist/iframe/base.js 3.64 KB
15
- ESM dist/session/account.js 2.28 KB
13
+ ESM dist/account.js 2.88 KB
14
+ ESM dist/iframe/base.js 3.68 KB
15
+ ESM dist/session/account.js 2.32 KB
16
16
  ESM dist/telegram/backend.js 1.27 KB
17
17
  ESM dist/constants.js 247.00 B
18
- ESM dist/controller.js 36.66 KB
18
+ ESM dist/controller.js 37.77 KB
19
19
  ESM dist/errors.js 271.00 B
20
20
  ESM dist/icon.js 15.15 KB
21
- ESM dist/index.js 260.76 KB
21
+ ESM dist/index.js 261.94 KB
22
22
  ESM dist/lookup.js 1.59 KB
23
- ESM dist/provider.js 20.61 KB
23
+ ESM dist/mutex.js 502.00 B
24
+ ESM dist/policies.js 593.00 B
24
25
  ESM dist/types.js 437.00 B
25
- ESM dist/utils.js 3.53 KB
26
- ESM dist/iframe/index.js 5.16 KB
27
- ESM dist/iframe/keychain.js 4.12 KB
28
- ESM dist/iframe/profile.js 4.69 KB
26
+ ESM dist/provider.js 21.57 KB
27
+ ESM dist/utils.js 3.60 KB
28
+ ESM dist/iframe/index.js 5.20 KB
29
+ ESM dist/iframe/keychain.js 4.16 KB
30
+ ESM dist/iframe/profile.js 4.73 KB
29
31
  ESM dist/session/backend.js 1.18 KB
30
- ESM dist/session/index.js 26.63 KB
31
- ESM dist/session/provider.js 26.03 KB
32
- ESM dist/telegram/provider.js 25.58 KB
33
- ESM dist/account.js.map 9.72 KB
34
- ESM dist/__tests__/parseChainId.test.js.map 8.47 KB
35
- ESM dist/iframe/base.js.map 7.08 KB
36
- ESM dist/session/account.js.map 12.10 KB
32
+ ESM dist/session/index.js 30.96 KB
33
+ ESM dist/session/provider.js 30.36 KB
34
+ ESM dist/telegram/provider.js 27.24 KB
35
+ ESM dist/__tests__/parseChainId.test.js.map 8.60 KB
36
+ ESM dist/account.js.map 9.89 KB
37
+ ESM dist/iframe/base.js.map 7.12 KB
38
+ ESM dist/session/account.js.map 12.28 KB
37
39
  ESM dist/telegram/backend.js.map 1.98 KB
38
40
  ESM dist/constants.js.map 315.00 B
39
- ESM dist/controller.js.map 61.03 KB
40
- ESM dist/icon.js.map 15.20 KB
41
+ ESM dist/controller.js.map 63.97 KB
41
42
  ESM dist/errors.js.map 385.00 B
42
- ESM dist/index.js.map 394.34 KB
43
+ ESM dist/icon.js.map 15.20 KB
43
44
  ESM dist/lookup.js.map 3.49 KB
44
- ESM dist/provider.js.map 25.59 KB
45
- ESM dist/utils.js.map 7.10 KB
45
+ ESM dist/mutex.js.map 1.00 KB
46
+ ESM dist/policies.js.map 1.61 KB
46
47
  ESM dist/types.js.map 4.75 KB
47
- ESM dist/iframe/index.js.map 10.47 KB
48
- ESM dist/iframe/keychain.js.map 8.27 KB
49
- ESM dist/iframe/profile.js.map 9.47 KB
48
+ ESM dist/provider.js.map 28.26 KB
49
+ ESM dist/utils.js.map 7.28 KB
50
+ ESM dist/iframe/index.js.map 10.50 KB
51
+ ESM dist/index.js.map 397.32 KB
52
+ ESM dist/iframe/keychain.js.map 8.31 KB
53
+ ESM dist/iframe/profile.js.map 9.51 KB
50
54
  ESM dist/session/backend.js.map 2.88 KB
51
- ESM dist/session/index.js.map 44.69 KB
52
- ESM dist/telegram/provider.js.map 38.84 KB
53
- ESM dist/session/provider.js.map 39.69 KB
55
+ ESM dist/session/provider.js.map 48.42 KB
56
+ ESM dist/session/index.js.map 53.42 KB
57
+ ESM dist/telegram/provider.js.map 43.43 KB
54
58
  ESM ⚡️ Build success in 118ms
55
59
  DTS Build start
56
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
57
-
58
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
59
-
60
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
61
-
62
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
63
-
64
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
65
-
66
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
67
-
68
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
69
-
70
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
71
-
72
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
73
-
74
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
75
-
76
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
77
-
78
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
79
-
80
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
81
-
82
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
83
-
84
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
85
-
86
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
87
-
88
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
89
-
90
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
91
-
92
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
93
-
94
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
95
-
96
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
97
-
98
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
99
-
100
- DTS ⚡️ Build success in 9903ms
101
- DTS dist/index.d.ts 1.28 KB
60
+ DTS ⚡️ Build success in 9873ms
61
+ DTS dist/index.d.ts 1.31 KB
102
62
  DTS dist/__tests__/parseChainId.test.d.ts 13.00 B
103
- DTS dist/session/index.d.ts 737.00 B
63
+ DTS dist/session/index.d.ts 762.00 B
104
64
  DTS dist/account.d.ts 1.64 KB
105
65
  DTS dist/constants.d.ts 215.00 B
106
66
  DTS dist/icon.d.ts 15.11 KB
107
67
  DTS dist/controller.d.ts 1.36 KB
108
68
  DTS dist/lookup.d.ts 216.00 B
109
- DTS dist/utils.d.ts 806.00 B
69
+ DTS dist/mutex.d.ts 378.00 B
70
+ DTS dist/utils.d.ts 867.00 B
110
71
  DTS dist/session/account.d.ts 1.83 KB
111
72
  DTS dist/errors.d.ts 100.00 B
112
- DTS dist/session/provider.d.ts 1.10 KB
73
+ DTS dist/session/provider.d.ts 1.30 KB
113
74
  DTS dist/telegram/backend.d.ts 1.28 KB
114
75
  DTS dist/session/backend.d.ts 2.29 KB
115
- DTS dist/telegram/provider.d.ts 975.00 B
116
- DTS dist/provider.d.ts 897.00 B
76
+ DTS dist/telegram/provider.d.ts 1.01 KB
77
+ DTS dist/policies.d.ts 680.00 B
78
+ DTS dist/provider.d.ts 987.00 B
117
79
  DTS dist/iframe/base.d.ts 184.00 B
118
80
  DTS dist/iframe/keychain.d.ts 172.00 B
119
81
  DTS dist/iframe/profile.d.ts 198.00 B
@@ -1,123 +1,85 @@
1
1
 
2
- > @cartridge/controller@0.5.9 build /home/runner/work/controller/controller/packages/controller
2
+ > @cartridge/controller@0.6.0 build /home/runner/work/controller/controller/packages/controller
3
3
  > pnpm build:deps
4
4
 
5
5
 
6
- > @cartridge/controller@0.5.9 build:deps /home/runner/work/controller/controller/packages/controller
6
+ > @cartridge/controller@0.6.0 build:deps /home/runner/work/controller/controller/packages/controller
7
7
  > tsup --dts-resolve
8
8
 
9
- CLI Building entry: src/account.ts, src/constants.ts, src/controller.ts, src/errors.ts, src/icon.ts, src/index.ts, src/lookup.ts, src/provider.ts, src/types.ts, src/utils.ts, src/__tests__/parseChainId.test.ts, src/iframe/base.ts, src/iframe/index.ts, src/iframe/keychain.ts, src/iframe/profile.ts, src/session/account.ts, src/session/backend.ts, src/session/index.ts, src/session/provider.ts, src/telegram/backend.ts, src/telegram/provider.ts
9
+ CLI Building entry: src/account.ts, src/constants.ts, src/controller.ts, src/errors.ts, src/icon.ts, src/index.ts, src/lookup.ts, src/mutex.ts, src/policies.ts, src/provider.ts, src/types.ts, src/utils.ts, src/__tests__/parseChainId.test.ts, src/iframe/base.ts, src/iframe/index.ts, src/iframe/keychain.ts, src/iframe/profile.ts, src/session/account.ts, src/session/backend.ts, src/session/index.ts, src/session/provider.ts, src/telegram/backend.ts, src/telegram/provider.ts
10
10
  CLI Using tsconfig: tsconfig.json
11
11
  CLI tsup v8.3.5
12
12
  CLI Using tsup config: /home/runner/work/controller/controller/packages/controller/package.json
13
- CLI Target: es2020
13
+ CLI Target: esnext
14
14
  CLI Cleaning output folder
15
15
  ESM Build start
16
- ESM dist/account.js 2.83 KB
17
- ESM dist/constants.js 247.00 B
18
- ESM dist/controller.js 36.66 KB
16
+ ESM dist/account.js 2.88 KB
17
+ ESM dist/controller.js 37.77 KB
19
18
  ESM dist/errors.js 271.00 B
19
+ ESM dist/constants.js 247.00 B
20
20
  ESM dist/icon.js 15.15 KB
21
- ESM dist/index.js 260.76 KB
22
21
  ESM dist/lookup.js 1.59 KB
23
- ESM dist/provider.js 20.61 KB
22
+ ESM dist/mutex.js 502.00 B
23
+ ESM dist/policies.js 593.00 B
24
+ ESM dist/provider.js 21.57 KB
24
25
  ESM dist/types.js 437.00 B
25
- ESM dist/utils.js 3.53 KB
26
+ ESM dist/utils.js 3.60 KB
26
27
  ESM dist/__tests__/parseChainId.test.js 2.92 KB
27
- ESM dist/iframe/index.js 5.16 KB
28
- ESM dist/iframe/base.js 3.64 KB
29
- ESM dist/iframe/keychain.js 4.12 KB
30
- ESM dist/session/account.js 2.28 KB
31
- ESM dist/iframe/profile.js 4.69 KB
28
+ ESM dist/iframe/base.js 3.68 KB
29
+ ESM dist/iframe/index.js 5.20 KB
30
+ ESM dist/iframe/keychain.js 4.16 KB
31
+ ESM dist/iframe/profile.js 4.73 KB
32
+ ESM dist/session/account.js 2.32 KB
32
33
  ESM dist/session/backend.js 1.18 KB
33
- ESM dist/session/provider.js 26.03 KB
34
- ESM dist/session/index.js 26.63 KB
35
- ESM dist/telegram/provider.js 25.58 KB
34
+ ESM dist/session/index.js 30.96 KB
35
+ ESM dist/session/provider.js 30.36 KB
36
36
  ESM dist/telegram/backend.js 1.27 KB
37
- ESM dist/account.js.map 9.72 KB
38
- ESM dist/constants.js.map 315.00 B
39
- ESM dist/controller.js.map 61.03 KB
37
+ ESM dist/telegram/provider.js 27.24 KB
38
+ ESM dist/index.js 261.94 KB
39
+ ESM dist/account.js.map 9.89 KB
40
+ ESM dist/controller.js.map 63.97 KB
40
41
  ESM dist/errors.js.map 385.00 B
42
+ ESM dist/constants.js.map 315.00 B
41
43
  ESM dist/icon.js.map 15.20 KB
42
- ESM dist/index.js.map 394.34 KB
43
44
  ESM dist/lookup.js.map 3.49 KB
44
- ESM dist/provider.js.map 25.59 KB
45
+ ESM dist/mutex.js.map 1.00 KB
46
+ ESM dist/policies.js.map 1.61 KB
47
+ ESM dist/provider.js.map 28.26 KB
45
48
  ESM dist/types.js.map 4.75 KB
46
- ESM dist/utils.js.map 7.10 KB
47
- ESM dist/__tests__/parseChainId.test.js.map 8.47 KB
48
- ESM dist/iframe/index.js.map 10.47 KB
49
- ESM dist/iframe/base.js.map 7.08 KB
50
- ESM dist/iframe/keychain.js.map 8.27 KB
51
- ESM dist/session/account.js.map 12.10 KB
52
- ESM dist/iframe/profile.js.map 9.47 KB
49
+ ESM dist/__tests__/parseChainId.test.js.map 8.60 KB
50
+ ESM dist/utils.js.map 7.28 KB
51
+ ESM dist/iframe/base.js.map 7.12 KB
52
+ ESM dist/iframe/index.js.map 10.50 KB
53
+ ESM dist/iframe/keychain.js.map 8.31 KB
54
+ ESM dist/iframe/profile.js.map 9.51 KB
55
+ ESM dist/session/account.js.map 12.28 KB
53
56
  ESM dist/session/backend.js.map 2.88 KB
54
- ESM dist/session/provider.js.map 39.69 KB
55
- ESM dist/session/index.js.map 44.69 KB
56
- ESM dist/telegram/provider.js.map 38.84 KB
57
+ ESM dist/session/index.js.map 53.42 KB
58
+ ESM dist/session/provider.js.map 48.42 KB
57
59
  ESM dist/telegram/backend.js.map 1.98 KB
58
- ESM ⚡️ Build success in 162ms
60
+ ESM dist/telegram/provider.js.map 43.43 KB
61
+ ESM dist/index.js.map 397.32 KB
62
+ ESM ⚡️ Build success in 179ms
59
63
  DTS Build start
60
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
61
-
62
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
63
-
64
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
65
-
66
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
67
-
68
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
69
-
70
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
71
-
72
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
73
-
74
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
75
-
76
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
77
-
78
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
79
-
80
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
81
-
82
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
83
-
84
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
85
-
86
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
87
-
88
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
89
-
90
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
91
-
92
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
93
-
94
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
95
-
96
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
97
-
98
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
99
-
100
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
101
-
102
- ../tsconfig/base.json(6,25): error TS6046: Argument for '--moduleResolution' option must be: 'node', 'classic', 'node16', 'nodenext'.
103
-
104
- DTS ⚡️ Build success in 9945ms
105
- DTS dist/index.d.ts 1.28 KB
64
+ DTS ⚡️ Build success in 9600ms
65
+ DTS dist/index.d.ts 1.31 KB
106
66
  DTS dist/__tests__/parseChainId.test.d.ts 13.00 B
107
- DTS dist/session/index.d.ts 737.00 B
67
+ DTS dist/session/index.d.ts 762.00 B
108
68
  DTS dist/account.d.ts 1.64 KB
109
69
  DTS dist/constants.d.ts 215.00 B
110
70
  DTS dist/icon.d.ts 15.11 KB
111
71
  DTS dist/controller.d.ts 1.36 KB
112
72
  DTS dist/lookup.d.ts 216.00 B
113
- DTS dist/utils.d.ts 806.00 B
73
+ DTS dist/mutex.d.ts 378.00 B
74
+ DTS dist/utils.d.ts 867.00 B
114
75
  DTS dist/session/account.d.ts 1.83 KB
115
76
  DTS dist/errors.d.ts 100.00 B
116
- DTS dist/session/provider.d.ts 1.10 KB
77
+ DTS dist/session/provider.d.ts 1.30 KB
117
78
  DTS dist/telegram/backend.d.ts 1.28 KB
118
79
  DTS dist/session/backend.d.ts 2.29 KB
119
- DTS dist/telegram/provider.d.ts 975.00 B
120
- DTS dist/provider.d.ts 897.00 B
80
+ DTS dist/telegram/provider.d.ts 1.01 KB
81
+ DTS dist/policies.d.ts 680.00 B
82
+ DTS dist/provider.d.ts 987.00 B
121
83
  DTS dist/iframe/base.d.ts 184.00 B
122
84
  DTS dist/iframe/keychain.d.ts 172.00 B
123
85
  DTS dist/iframe/profile.d.ts 198.00 B
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/__tests__/parseChainId.test.ts","../../src/utils.ts"],"sourcesContent":["import { constants, shortString } from \"starknet\";\nimport { parseChainId } from \"../utils\";\n\ndescribe(\"parseChainId\", () => {\n describe(\"Starknet chains\", () => {\n test(\"identifies mainnet\", () => {\n expect(\n parseChainId(new URL(\"https://api.cartridge.gg/x/starknet/mainnet\")),\n ).toBe(constants.StarknetChainId.SN_MAIN);\n });\n\n test(\"identifies sepolia\", () => {\n expect(\n parseChainId(new URL(\"https://api.cartridge.gg/x/starknet/sepolia\")),\n ).toBe(constants.StarknetChainId.SN_SEPOLIA);\n });\n });\n\n describe(\"Project-specific chains\", () => {\n test(\"identifies slot chain\", () => {\n expect(\n parseChainId(new URL(\"https://api.cartridge.gg/x/slot/katana\")),\n ).toBe(shortString.encodeShortString(\"WP_SLOT\"));\n });\n\n test(\"identifies slot chain on localhost\", () => {\n expect(parseChainId(new URL(\"http://localhost:8001/x/slot/katana\"))).toBe(\n shortString.encodeShortString(\"WP_SLOT\"),\n );\n });\n\n test(\"identifies slot chain with hyphenated name\", () => {\n expect(\n parseChainId(\n new URL(\"https://api.cartridge.gg/x/my-slot-chain/katana\"),\n ),\n ).toBe(shortString.encodeShortString(\"WP_MY_SLOT_CHAIN\"));\n });\n\n test(\"identifies slot mainnet chain\", () => {\n expect(\n parseChainId(new URL(\"https://api.cartridge.gg/x/slot/mainnet\")),\n ).toBe(shortString.encodeShortString(\"GG_SLOT\"));\n });\n });\n\n describe(\"Error cases\", () => {\n test(\"throws error for unsupported URL format\", () => {\n expect(() =>\n parseChainId(new URL(\"https://api.example.com/unsupported\")),\n ).toThrow(\"Chain https://api.example.com/unsupported not supported\");\n });\n\n test(\"throws error for URLs without proper chain identifiers\", () => {\n expect(() =>\n parseChainId(new URL(\"https://api.example.com/v1/starknet\")),\n ).toThrow(\"Chain https://api.example.com/v1/starknet not supported\");\n });\n });\n});\n","import {\n addAddressPadding,\n Call,\n CallData,\n constants,\n getChecksumAddress,\n hash,\n shortString,\n typedData,\n TypedDataRevision,\n} from \"starknet\";\nimport wasm from \"@cartridge/account-wasm/controller\";\nimport { Policies, SessionPolicies } from \"@cartridge/presets\";\nimport { ChainId } from \"@starknet-io/types-js\";\n\n// Whitelist of allowed property names to prevent prototype pollution\nconst ALLOWED_PROPERTIES = new Set([\n \"contracts\",\n \"messages\",\n \"target\",\n \"method\",\n \"name\",\n \"description\",\n \"types\",\n \"domain\",\n \"primaryType\",\n]);\n\nfunction validatePropertyName(prop: string): void {\n if (!ALLOWED_PROPERTIES.has(prop)) {\n throw new Error(`Invalid property name: ${prop}`);\n }\n}\n\nfunction safeObjectAccess<T>(obj: any, prop: string): T {\n validatePropertyName(prop);\n return obj[prop];\n}\n\nexport function normalizeCalls(calls: Call | Call[]) {\n return toArray(calls).map((call) => {\n return {\n entrypoint: call.entrypoint,\n contractAddress: addAddressPadding(call.contractAddress),\n calldata: CallData.toHex(call.calldata),\n };\n });\n}\n\nexport function toSessionPolicies(policies: Policies): SessionPolicies {\n return Array.isArray(policies)\n ? policies.reduce<SessionPolicies>(\n (prev, p) => {\n if (safeObjectAccess<string>(p, \"target\")) {\n const target = getChecksumAddress(\n safeObjectAccess<string>(p, \"target\"),\n );\n const entrypoint = safeObjectAccess<string>(p, \"method\");\n const contracts = safeObjectAccess<Record<string, any>>(\n prev,\n \"contracts\",\n );\n const item = {\n name: humanizeString(entrypoint),\n entrypoint: entrypoint,\n description: safeObjectAccess<string>(p, \"description\"),\n };\n\n if (target in contracts) {\n const methods = toArray(contracts[target].methods);\n contracts[target] = {\n methods: [...methods, item],\n };\n } else {\n contracts[target] = {\n methods: [item],\n };\n }\n } else {\n const messages = safeObjectAccess<any[]>(prev, \"messages\");\n messages.push(p);\n }\n\n return prev;\n },\n { contracts: {}, messages: [] },\n )\n : policies;\n}\n\nexport function toWasmPolicies(policies: SessionPolicies): wasm.Policy[] {\n return [\n ...Object.entries(policies.contracts ?? {}).flatMap(\n ([target, { methods }]) =>\n toArray(methods).map((m) => ({\n target,\n method: m.entrypoint,\n })),\n ),\n ...(policies.messages ?? []).map((p) => {\n const domainHash = typedData.getStructHash(\n p.types,\n \"StarknetDomain\",\n p.domain,\n TypedDataRevision.ACTIVE,\n );\n const typeHash = typedData.getTypeHash(\n p.types,\n p.primaryType,\n TypedDataRevision.ACTIVE,\n );\n\n return {\n scope_hash: hash.computePoseidonHash(domainHash, typeHash),\n };\n }),\n ];\n}\n\nexport function toArray<T>(val: T | T[]): T[] {\n return Array.isArray(val) ? val : [val];\n}\n\nexport function humanizeString(str: string): string {\n return (\n str\n // Convert from camelCase or snake_case\n .replace(/([a-z])([A-Z])/g, \"$1 $2\") // camelCase to spaces\n .replace(/_/g, \" \") // snake_case to spaces\n .toLowerCase()\n // Capitalize first letter\n .replace(/^\\w/, (c) => c.toUpperCase())\n );\n}\n\nexport function parseChainId(url: URL): ChainId {\n const parts = url.pathname.split(\"/\");\n\n if (parts.includes(\"starknet\")) {\n if (parts.includes(\"mainnet\")) {\n return constants.StarknetChainId.SN_MAIN;\n } else if (parts.includes(\"sepolia\")) {\n return constants.StarknetChainId.SN_SEPOLIA;\n }\n } else if (parts.length >= 3) {\n const projectName = parts[2];\n if (parts.includes(\"katana\")) {\n return shortString.encodeShortString(\n `WP_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n } else if (parts.includes(\"mainnet\")) {\n return shortString.encodeShortString(\n `GG_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n }\n }\n\n throw new Error(`Chain ${url.toString()} not supported`);\n}\n"],"mappings":";AAAA,SAAS,aAAAA,YAAW,eAAAC,oBAAmB;;;ACAvC;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA6HA,SAAS,aAAa,KAAmB;AAC9C,QAAM,QAAQ,IAAI,SAAS,MAAM,GAAG;AAEpC,MAAI,MAAM,SAAS,UAAU,GAAG;AAC9B,QAAI,MAAM,SAAS,SAAS,GAAG;AAC7B,aAAO,UAAU,gBAAgB;AAAA,IACnC,WAAW,MAAM,SAAS,SAAS,GAAG;AACpC,aAAO,UAAU,gBAAgB;AAAA,IACnC;AAAA,EACF,WAAW,MAAM,UAAU,GAAG;AAC5B,UAAM,cAAc,MAAM,CAAC;AAC3B,QAAI,MAAM,SAAS,QAAQ,GAAG;AAC5B,aAAO,YAAY;AAAA,QACjB,MAAM,YAAY,YAAY,EAAE,QAAQ,MAAM,GAAG,CAAC;AAAA,MACpD;AAAA,IACF,WAAW,MAAM,SAAS,SAAS,GAAG;AACpC,aAAO,YAAY;AAAA,QACjB,MAAM,YAAY,YAAY,EAAE,QAAQ,MAAM,GAAG,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,SAAS,IAAI,SAAS,CAAC,gBAAgB;AACzD;;;AD3JA,SAAS,gBAAgB,MAAM;AAC7B,WAAS,mBAAmB,MAAM;AAChC,SAAK,sBAAsB,MAAM;AAC/B;AAAA,QACE,aAAa,IAAI,IAAI,6CAA6C,CAAC;AAAA,MACrE,EAAE,KAAKC,WAAU,gBAAgB,OAAO;AAAA,IAC1C,CAAC;AAED,SAAK,sBAAsB,MAAM;AAC/B;AAAA,QACE,aAAa,IAAI,IAAI,6CAA6C,CAAC;AAAA,MACrE,EAAE,KAAKA,WAAU,gBAAgB,UAAU;AAAA,IAC7C,CAAC;AAAA,EACH,CAAC;AAED,WAAS,2BAA2B,MAAM;AACxC,SAAK,yBAAyB,MAAM;AAClC;AAAA,QACE,aAAa,IAAI,IAAI,wCAAwC,CAAC;AAAA,MAChE,EAAE,KAAKC,aAAY,kBAAkB,SAAS,CAAC;AAAA,IACjD,CAAC;AAED,SAAK,sCAAsC,MAAM;AAC/C,aAAO,aAAa,IAAI,IAAI,qCAAqC,CAAC,CAAC,EAAE;AAAA,QACnEA,aAAY,kBAAkB,SAAS;AAAA,MACzC;AAAA,IACF,CAAC;AAED,SAAK,8CAA8C,MAAM;AACvD;AAAA,QACE;AAAA,UACE,IAAI,IAAI,iDAAiD;AAAA,QAC3D;AAAA,MACF,EAAE,KAAKA,aAAY,kBAAkB,kBAAkB,CAAC;AAAA,IAC1D,CAAC;AAED,SAAK,iCAAiC,MAAM;AAC1C;AAAA,QACE,aAAa,IAAI,IAAI,yCAAyC,CAAC;AAAA,MACjE,EAAE,KAAKA,aAAY,kBAAkB,SAAS,CAAC;AAAA,IACjD,CAAC;AAAA,EACH,CAAC;AAED,WAAS,eAAe,MAAM;AAC5B,SAAK,2CAA2C,MAAM;AACpD;AAAA,QAAO,MACL,aAAa,IAAI,IAAI,qCAAqC,CAAC;AAAA,MAC7D,EAAE,QAAQ,yDAAyD;AAAA,IACrE,CAAC;AAED,SAAK,0DAA0D,MAAM;AACnE;AAAA,QAAO,MACL,aAAa,IAAI,IAAI,qCAAqC,CAAC;AAAA,MAC7D,EAAE,QAAQ,yDAAyD;AAAA,IACrE,CAAC;AAAA,EACH,CAAC;AACH,CAAC;","names":["constants","shortString","constants","shortString"]}
1
+ {"version":3,"sources":["../../src/__tests__/parseChainId.test.ts","../../src/utils.ts"],"sourcesContent":["import { constants, shortString } from \"starknet\";\nimport { parseChainId } from \"../utils\";\n\ndescribe(\"parseChainId\", () => {\n describe(\"Starknet chains\", () => {\n test(\"identifies mainnet\", () => {\n expect(\n parseChainId(new URL(\"https://api.cartridge.gg/x/starknet/mainnet\")),\n ).toBe(constants.StarknetChainId.SN_MAIN);\n });\n\n test(\"identifies sepolia\", () => {\n expect(\n parseChainId(new URL(\"https://api.cartridge.gg/x/starknet/sepolia\")),\n ).toBe(constants.StarknetChainId.SN_SEPOLIA);\n });\n });\n\n describe(\"Project-specific chains\", () => {\n test(\"identifies slot chain\", () => {\n expect(\n parseChainId(new URL(\"https://api.cartridge.gg/x/slot/katana\")),\n ).toBe(shortString.encodeShortString(\"WP_SLOT\"));\n });\n\n test(\"identifies slot chain on localhost\", () => {\n expect(parseChainId(new URL(\"http://localhost:8001/x/slot/katana\"))).toBe(\n shortString.encodeShortString(\"WP_SLOT\"),\n );\n });\n\n test(\"identifies slot chain with hyphenated name\", () => {\n expect(\n parseChainId(\n new URL(\"https://api.cartridge.gg/x/my-slot-chain/katana\"),\n ),\n ).toBe(shortString.encodeShortString(\"WP_MY_SLOT_CHAIN\"));\n });\n\n test(\"identifies slot mainnet chain\", () => {\n expect(\n parseChainId(new URL(\"https://api.cartridge.gg/x/slot/mainnet\")),\n ).toBe(shortString.encodeShortString(\"GG_SLOT\"));\n });\n });\n\n describe(\"Error cases\", () => {\n test(\"throws error for unsupported URL format\", () => {\n expect(() =>\n parseChainId(new URL(\"https://api.example.com/unsupported\")),\n ).toThrow(\"Chain https://api.example.com/unsupported not supported\");\n });\n\n test(\"throws error for URLs without proper chain identifiers\", () => {\n expect(() =>\n parseChainId(new URL(\"https://api.example.com/v1/starknet\")),\n ).toThrow(\"Chain https://api.example.com/v1/starknet not supported\");\n });\n });\n});\n","import {\n addAddressPadding,\n Call,\n CallData,\n constants,\n getChecksumAddress,\n hash,\n shortString,\n typedData,\n TypedDataRevision,\n} from \"starknet\";\nimport wasm from \"@cartridge/account-wasm/controller\";\nimport { Policies, SessionPolicies } from \"@cartridge/presets\";\nimport { ChainId } from \"@starknet-io/types-js\";\nimport { ParsedSessionPolicies } from \"./policies\";\n\n// Whitelist of allowed property names to prevent prototype pollution\nconst ALLOWED_PROPERTIES = new Set([\n \"contracts\",\n \"messages\",\n \"target\",\n \"method\",\n \"name\",\n \"description\",\n \"types\",\n \"domain\",\n \"primaryType\",\n]);\n\nfunction validatePropertyName(prop: string): void {\n if (!ALLOWED_PROPERTIES.has(prop)) {\n throw new Error(`Invalid property name: ${prop}`);\n }\n}\n\nfunction safeObjectAccess<T>(obj: any, prop: string): T {\n validatePropertyName(prop);\n return obj[prop];\n}\n\nexport function normalizeCalls(calls: Call | Call[]) {\n return toArray(calls).map((call) => {\n return {\n entrypoint: call.entrypoint,\n contractAddress: addAddressPadding(call.contractAddress),\n calldata: CallData.toHex(call.calldata),\n };\n });\n}\n\nexport function toSessionPolicies(policies: Policies): SessionPolicies {\n return Array.isArray(policies)\n ? policies.reduce<SessionPolicies>(\n (prev, p) => {\n if (safeObjectAccess<string>(p, \"target\")) {\n const target = getChecksumAddress(\n safeObjectAccess<string>(p, \"target\"),\n );\n const entrypoint = safeObjectAccess<string>(p, \"method\");\n const contracts = safeObjectAccess<Record<string, any>>(\n prev,\n \"contracts\",\n );\n const item = {\n name: humanizeString(entrypoint),\n entrypoint: entrypoint,\n description: safeObjectAccess<string>(p, \"description\"),\n };\n\n if (target in contracts) {\n const methods = toArray(contracts[target].methods);\n contracts[target] = {\n methods: [...methods, item],\n };\n } else {\n contracts[target] = {\n methods: [item],\n };\n }\n } else {\n const messages = safeObjectAccess<any[]>(prev, \"messages\");\n messages.push(p);\n }\n\n return prev;\n },\n { contracts: {}, messages: [] },\n )\n : policies;\n}\n\nexport function toWasmPolicies(policies: ParsedSessionPolicies): wasm.Policy[] {\n return [\n ...Object.entries(policies.contracts ?? {}).flatMap(\n ([target, { methods }]) =>\n toArray(methods).map((m) => ({\n target,\n method: m.entrypoint,\n authorized: m.authorized,\n })),\n ),\n ...(policies.messages ?? []).map((p) => {\n const domainHash = typedData.getStructHash(\n p.types,\n \"StarknetDomain\",\n p.domain,\n TypedDataRevision.ACTIVE,\n );\n const typeHash = typedData.getTypeHash(\n p.types,\n p.primaryType,\n TypedDataRevision.ACTIVE,\n );\n\n return {\n scope_hash: hash.computePoseidonHash(domainHash, typeHash),\n authorized: p.authorized,\n };\n }),\n ];\n}\n\nexport function toArray<T>(val: T | T[]): T[] {\n return Array.isArray(val) ? val : [val];\n}\n\nexport function humanizeString(str: string): string {\n return (\n str\n // Convert from camelCase or snake_case\n .replace(/([a-z])([A-Z])/g, \"$1 $2\") // camelCase to spaces\n .replace(/_/g, \" \") // snake_case to spaces\n .toLowerCase()\n // Capitalize first letter\n .replace(/^\\w/, (c) => c.toUpperCase())\n );\n}\n\nexport function parseChainId(url: URL): ChainId {\n const parts = url.pathname.split(\"/\");\n\n if (parts.includes(\"starknet\")) {\n if (parts.includes(\"mainnet\")) {\n return constants.StarknetChainId.SN_MAIN;\n } else if (parts.includes(\"sepolia\")) {\n return constants.StarknetChainId.SN_SEPOLIA;\n }\n } else if (parts.length >= 3) {\n const projectName = parts[2];\n if (parts.includes(\"katana\")) {\n return shortString.encodeShortString(\n `WP_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n } else if (parts.includes(\"mainnet\")) {\n return shortString.encodeShortString(\n `GG_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n }\n }\n\n throw new Error(`Chain ${url.toString()} not supported`);\n}\n"],"mappings":";AAAA,SAAS,aAAAA,YAAW,eAAAC,oBAAmB;;;ACAvC;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAgIA,SAAS,aAAa,KAAmB;AAC9C,QAAM,QAAQ,IAAI,SAAS,MAAM,GAAG;AAEpC,MAAI,MAAM,SAAS,UAAU,GAAG;AAC9B,QAAI,MAAM,SAAS,SAAS,GAAG;AAC7B,aAAO,UAAU,gBAAgB;AAAA,IACnC,WAAW,MAAM,SAAS,SAAS,GAAG;AACpC,aAAO,UAAU,gBAAgB;AAAA,IACnC;AAAA,EACF,WAAW,MAAM,UAAU,GAAG;AAC5B,UAAM,cAAc,MAAM,CAAC;AAC3B,QAAI,MAAM,SAAS,QAAQ,GAAG;AAC5B,aAAO,YAAY;AAAA,QACjB,MAAM,YAAY,YAAY,EAAE,QAAQ,MAAM,GAAG,CAAC;AAAA,MACpD;AAAA,IACF,WAAW,MAAM,SAAS,SAAS,GAAG;AACpC,aAAO,YAAY;AAAA,QACjB,MAAM,YAAY,YAAY,EAAE,QAAQ,MAAM,GAAG,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,SAAS,IAAI,SAAS,CAAC,gBAAgB;AACzD;;;AD9JA,SAAS,gBAAgB,MAAM;AAC7B,WAAS,mBAAmB,MAAM;AAChC,SAAK,sBAAsB,MAAM;AAC/B;AAAA,QACE,aAAa,IAAI,IAAI,6CAA6C,CAAC;AAAA,MACrE,EAAE,KAAKC,WAAU,gBAAgB,OAAO;AAAA,IAC1C,CAAC;AAED,SAAK,sBAAsB,MAAM;AAC/B;AAAA,QACE,aAAa,IAAI,IAAI,6CAA6C,CAAC;AAAA,MACrE,EAAE,KAAKA,WAAU,gBAAgB,UAAU;AAAA,IAC7C,CAAC;AAAA,EACH,CAAC;AAED,WAAS,2BAA2B,MAAM;AACxC,SAAK,yBAAyB,MAAM;AAClC;AAAA,QACE,aAAa,IAAI,IAAI,wCAAwC,CAAC;AAAA,MAChE,EAAE,KAAKC,aAAY,kBAAkB,SAAS,CAAC;AAAA,IACjD,CAAC;AAED,SAAK,sCAAsC,MAAM;AAC/C,aAAO,aAAa,IAAI,IAAI,qCAAqC,CAAC,CAAC,EAAE;AAAA,QACnEA,aAAY,kBAAkB,SAAS;AAAA,MACzC;AAAA,IACF,CAAC;AAED,SAAK,8CAA8C,MAAM;AACvD;AAAA,QACE;AAAA,UACE,IAAI,IAAI,iDAAiD;AAAA,QAC3D;AAAA,MACF,EAAE,KAAKA,aAAY,kBAAkB,kBAAkB,CAAC;AAAA,IAC1D,CAAC;AAED,SAAK,iCAAiC,MAAM;AAC1C;AAAA,QACE,aAAa,IAAI,IAAI,yCAAyC,CAAC;AAAA,MACjE,EAAE,KAAKA,aAAY,kBAAkB,SAAS,CAAC;AAAA,IACjD,CAAC;AAAA,EACH,CAAC;AAED,WAAS,eAAe,MAAM;AAC5B,SAAK,2CAA2C,MAAM;AACpD;AAAA,QAAO,MACL,aAAa,IAAI,IAAI,qCAAqC,CAAC;AAAA,MAC7D,EAAE,QAAQ,yDAAyD;AAAA,IACrE,CAAC;AAED,SAAK,0DAA0D,MAAM;AACnE;AAAA,QAAO,MACL,aAAa,IAAI,IAAI,qCAAqC,CAAC;AAAA,MAC7D,EAAE,QAAQ,yDAAyD;AAAA,IACrE,CAAC;AAAA,EACH,CAAC;AACH,CAAC;","names":["constants","shortString","constants","shortString"]}
package/dist/account.js CHANGED
@@ -20,6 +20,10 @@ function toArray(val) {
20
20
 
21
21
  // src/account.ts
22
22
  var ControllerAccount = class extends WalletAccount {
23
+ address;
24
+ keychain;
25
+ modal;
26
+ options;
23
27
  constructor(provider, rpcUrl, address, keychain, options, modal) {
24
28
  super({ nodeUrl: rpcUrl }, provider);
25
29
  this.address = address;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/account.ts","../src/utils.ts"],"sourcesContent":["import {\n InvokeFunctionResponse,\n TypedData,\n WalletAccount,\n Call,\n AllowArray,\n} from \"starknet\";\n\nimport { SPEC } from \"@starknet-io/types-js\";\n\nimport {\n ConnectError,\n Keychain,\n KeychainOptions,\n Modal,\n ResponseCodes,\n} from \"./types\";\nimport { AsyncMethodReturns } from \"@cartridge/penpal\";\nimport BaseProvider from \"./provider\";\nimport { toArray } from \"./utils\";\n\nclass ControllerAccount extends WalletAccount {\n address: string;\n private keychain: AsyncMethodReturns<Keychain>;\n private modal: Modal;\n private options?: KeychainOptions;\n\n constructor(\n provider: BaseProvider,\n rpcUrl: string,\n address: string,\n keychain: AsyncMethodReturns<Keychain>,\n options: KeychainOptions,\n modal: Modal,\n ) {\n super({ nodeUrl: rpcUrl }, provider);\n\n this.address = address;\n this.keychain = keychain;\n this.options = options;\n this.modal = modal;\n }\n\n /**\n * Invoke execute function in account contract\n *\n * @param calls the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abis (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n async execute(calls: AllowArray<Call>): Promise<InvokeFunctionResponse> {\n calls = toArray(calls);\n\n return new Promise(async (resolve, reject) => {\n const sessionExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n false,\n );\n\n // Session call succeeded\n if (sessionExecute.code === ResponseCodes.SUCCESS) {\n resolve(sessionExecute as InvokeFunctionResponse);\n return;\n }\n\n // Propagates session txn error back to caller\n if (this.options?.propagateSessionErrors) {\n reject((sessionExecute as ConnectError).error);\n return;\n }\n\n // Session call or Paymaster flow failed.\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n true,\n (sessionExecute as ConnectError).error,\n );\n\n // Manual call succeeded\n if (manualExecute.code === ResponseCodes.SUCCESS) {\n resolve(manualExecute as InvokeFunctionResponse);\n this.modal.close();\n return;\n }\n\n reject((manualExecute as ConnectError).error);\n return;\n });\n }\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n async signMessage(typedData: TypedData): Promise<SPEC.SIGNATURE> {\n return new Promise(async (resolve, reject) => {\n const sessionSign = await this.keychain.signMessage(typedData, \"\", true);\n\n // Session sign succeeded\n if (!(\"code\" in sessionSign)) {\n resolve(sessionSign as SPEC.SIGNATURE);\n return;\n }\n\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualSign = await this.keychain.signMessage(typedData, \"\", false);\n\n if (!(\"code\" in manualSign)) {\n resolve(manualSign as SPEC.SIGNATURE);\n } else {\n reject((manualSign as ConnectError).error);\n }\n this.modal.close();\n });\n }\n}\n\nexport default ControllerAccount;\n","import {\n addAddressPadding,\n Call,\n CallData,\n constants,\n getChecksumAddress,\n hash,\n shortString,\n typedData,\n TypedDataRevision,\n} from \"starknet\";\nimport wasm from \"@cartridge/account-wasm/controller\";\nimport { Policies, SessionPolicies } from \"@cartridge/presets\";\nimport { ChainId } from \"@starknet-io/types-js\";\n\n// Whitelist of allowed property names to prevent prototype pollution\nconst ALLOWED_PROPERTIES = new Set([\n \"contracts\",\n \"messages\",\n \"target\",\n \"method\",\n \"name\",\n \"description\",\n \"types\",\n \"domain\",\n \"primaryType\",\n]);\n\nfunction validatePropertyName(prop: string): void {\n if (!ALLOWED_PROPERTIES.has(prop)) {\n throw new Error(`Invalid property name: ${prop}`);\n }\n}\n\nfunction safeObjectAccess<T>(obj: any, prop: string): T {\n validatePropertyName(prop);\n return obj[prop];\n}\n\nexport function normalizeCalls(calls: Call | Call[]) {\n return toArray(calls).map((call) => {\n return {\n entrypoint: call.entrypoint,\n contractAddress: addAddressPadding(call.contractAddress),\n calldata: CallData.toHex(call.calldata),\n };\n });\n}\n\nexport function toSessionPolicies(policies: Policies): SessionPolicies {\n return Array.isArray(policies)\n ? policies.reduce<SessionPolicies>(\n (prev, p) => {\n if (safeObjectAccess<string>(p, \"target\")) {\n const target = getChecksumAddress(\n safeObjectAccess<string>(p, \"target\"),\n );\n const entrypoint = safeObjectAccess<string>(p, \"method\");\n const contracts = safeObjectAccess<Record<string, any>>(\n prev,\n \"contracts\",\n );\n const item = {\n name: humanizeString(entrypoint),\n entrypoint: entrypoint,\n description: safeObjectAccess<string>(p, \"description\"),\n };\n\n if (target in contracts) {\n const methods = toArray(contracts[target].methods);\n contracts[target] = {\n methods: [...methods, item],\n };\n } else {\n contracts[target] = {\n methods: [item],\n };\n }\n } else {\n const messages = safeObjectAccess<any[]>(prev, \"messages\");\n messages.push(p);\n }\n\n return prev;\n },\n { contracts: {}, messages: [] },\n )\n : policies;\n}\n\nexport function toWasmPolicies(policies: SessionPolicies): wasm.Policy[] {\n return [\n ...Object.entries(policies.contracts ?? {}).flatMap(\n ([target, { methods }]) =>\n toArray(methods).map((m) => ({\n target,\n method: m.entrypoint,\n })),\n ),\n ...(policies.messages ?? []).map((p) => {\n const domainHash = typedData.getStructHash(\n p.types,\n \"StarknetDomain\",\n p.domain,\n TypedDataRevision.ACTIVE,\n );\n const typeHash = typedData.getTypeHash(\n p.types,\n p.primaryType,\n TypedDataRevision.ACTIVE,\n );\n\n return {\n scope_hash: hash.computePoseidonHash(domainHash, typeHash),\n };\n }),\n ];\n}\n\nexport function toArray<T>(val: T | T[]): T[] {\n return Array.isArray(val) ? val : [val];\n}\n\nexport function humanizeString(str: string): string {\n return (\n str\n // Convert from camelCase or snake_case\n .replace(/([a-z])([A-Z])/g, \"$1 $2\") // camelCase to spaces\n .replace(/_/g, \" \") // snake_case to spaces\n .toLowerCase()\n // Capitalize first letter\n .replace(/^\\w/, (c) => c.toUpperCase())\n );\n}\n\nexport function parseChainId(url: URL): ChainId {\n const parts = url.pathname.split(\"/\");\n\n if (parts.includes(\"starknet\")) {\n if (parts.includes(\"mainnet\")) {\n return constants.StarknetChainId.SN_MAIN;\n } else if (parts.includes(\"sepolia\")) {\n return constants.StarknetChainId.SN_SEPOLIA;\n }\n } else if (parts.length >= 3) {\n const projectName = parts[2];\n if (parts.includes(\"katana\")) {\n return shortString.encodeShortString(\n `WP_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n } else if (parts.includes(\"mainnet\")) {\n return shortString.encodeShortString(\n `GG_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n }\n }\n\n throw new Error(`Chain ${url.toString()} not supported`);\n}\n"],"mappings":";AAAA;AAAA,EAGE;AAAA,OAGK;;;ACNP;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA6GA,SAAS,QAAW,KAAmB;AAC5C,SAAO,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG;AACxC;;;ADpGA,IAAM,oBAAN,cAAgC,cAAc;AAAA,EAM5C,YACE,UACA,QACA,SACA,UACA,SACA,OACA;AACA,UAAM,EAAE,SAAS,OAAO,GAAG,QAAQ;AAEnC,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,QAAQ,OAA0D;AACtE,YAAQ,QAAQ,KAAK;AAErB,WAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,YAAM,iBAAiB,MAAM,KAAK,SAAS;AAAA,QACzC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAGA,UAAI,eAAe,kCAAgC;AACjD,gBAAQ,cAAwC;AAChD;AAAA,MACF;AAGA,UAAI,KAAK,SAAS,wBAAwB;AACxC,eAAQ,eAAgC,KAAK;AAC7C;AAAA,MACF;AAIA,WAAK,MAAM,KAAK;AAChB,YAAM,gBAAgB,MAAM,KAAK,SAAS;AAAA,QACxC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACC,eAAgC;AAAA,MACnC;AAGA,UAAI,cAAc,kCAAgC;AAChD,gBAAQ,aAAuC;AAC/C,aAAK,MAAM,MAAM;AACjB;AAAA,MACF;AAEA,aAAQ,cAA+B,KAAK;AAC5C;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,YAAYA,YAA+C;AAC/D,WAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,YAAM,cAAc,MAAM,KAAK,SAAS,YAAYA,YAAW,IAAI,IAAI;AAGvE,UAAI,EAAE,UAAU,cAAc;AAC5B,gBAAQ,WAA6B;AACrC;AAAA,MACF;AAGA,WAAK,MAAM,KAAK;AAChB,YAAM,aAAa,MAAM,KAAK,SAAS,YAAYA,YAAW,IAAI,KAAK;AAEvE,UAAI,EAAE,UAAU,aAAa;AAC3B,gBAAQ,UAA4B;AAAA,MACtC,OAAO;AACL,eAAQ,WAA4B,KAAK;AAAA,MAC3C;AACA,WAAK,MAAM,MAAM;AAAA,IACnB,CAAC;AAAA,EACH;AACF;AAEA,IAAO,kBAAQ;","names":["typedData"]}
1
+ {"version":3,"sources":["../src/account.ts","../src/utils.ts"],"sourcesContent":["import {\n InvokeFunctionResponse,\n TypedData,\n WalletAccount,\n Call,\n AllowArray,\n} from \"starknet\";\n\nimport { SPEC } from \"@starknet-io/types-js\";\n\nimport {\n ConnectError,\n Keychain,\n KeychainOptions,\n Modal,\n ResponseCodes,\n} from \"./types\";\nimport { AsyncMethodReturns } from \"@cartridge/penpal\";\nimport BaseProvider from \"./provider\";\nimport { toArray } from \"./utils\";\n\nclass ControllerAccount extends WalletAccount {\n address: string;\n private keychain: AsyncMethodReturns<Keychain>;\n private modal: Modal;\n private options?: KeychainOptions;\n\n constructor(\n provider: BaseProvider,\n rpcUrl: string,\n address: string,\n keychain: AsyncMethodReturns<Keychain>,\n options: KeychainOptions,\n modal: Modal,\n ) {\n super({ nodeUrl: rpcUrl }, provider);\n\n this.address = address;\n this.keychain = keychain;\n this.options = options;\n this.modal = modal;\n }\n\n /**\n * Invoke execute function in account contract\n *\n * @param calls the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abis (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n async execute(calls: AllowArray<Call>): Promise<InvokeFunctionResponse> {\n calls = toArray(calls);\n\n return new Promise(async (resolve, reject) => {\n const sessionExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n false,\n );\n\n // Session call succeeded\n if (sessionExecute.code === ResponseCodes.SUCCESS) {\n resolve(sessionExecute as InvokeFunctionResponse);\n return;\n }\n\n // Propagates session txn error back to caller\n if (this.options?.propagateSessionErrors) {\n reject((sessionExecute as ConnectError).error);\n return;\n }\n\n // Session call or Paymaster flow failed.\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualExecute = await this.keychain.execute(\n calls,\n undefined,\n undefined,\n true,\n (sessionExecute as ConnectError).error,\n );\n\n // Manual call succeeded\n if (manualExecute.code === ResponseCodes.SUCCESS) {\n resolve(manualExecute as InvokeFunctionResponse);\n this.modal.close();\n return;\n }\n\n reject((manualExecute as ConnectError).error);\n return;\n });\n }\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n async signMessage(typedData: TypedData): Promise<SPEC.SIGNATURE> {\n return new Promise(async (resolve, reject) => {\n const sessionSign = await this.keychain.signMessage(typedData, \"\", true);\n\n // Session sign succeeded\n if (!(\"code\" in sessionSign)) {\n resolve(sessionSign as SPEC.SIGNATURE);\n return;\n }\n\n // Session not avaialble, manual flow fallback\n this.modal.open();\n const manualSign = await this.keychain.signMessage(typedData, \"\", false);\n\n if (!(\"code\" in manualSign)) {\n resolve(manualSign as SPEC.SIGNATURE);\n } else {\n reject((manualSign as ConnectError).error);\n }\n this.modal.close();\n });\n }\n}\n\nexport default ControllerAccount;\n","import {\n addAddressPadding,\n Call,\n CallData,\n constants,\n getChecksumAddress,\n hash,\n shortString,\n typedData,\n TypedDataRevision,\n} from \"starknet\";\nimport wasm from \"@cartridge/account-wasm/controller\";\nimport { Policies, SessionPolicies } from \"@cartridge/presets\";\nimport { ChainId } from \"@starknet-io/types-js\";\nimport { ParsedSessionPolicies } from \"./policies\";\n\n// Whitelist of allowed property names to prevent prototype pollution\nconst ALLOWED_PROPERTIES = new Set([\n \"contracts\",\n \"messages\",\n \"target\",\n \"method\",\n \"name\",\n \"description\",\n \"types\",\n \"domain\",\n \"primaryType\",\n]);\n\nfunction validatePropertyName(prop: string): void {\n if (!ALLOWED_PROPERTIES.has(prop)) {\n throw new Error(`Invalid property name: ${prop}`);\n }\n}\n\nfunction safeObjectAccess<T>(obj: any, prop: string): T {\n validatePropertyName(prop);\n return obj[prop];\n}\n\nexport function normalizeCalls(calls: Call | Call[]) {\n return toArray(calls).map((call) => {\n return {\n entrypoint: call.entrypoint,\n contractAddress: addAddressPadding(call.contractAddress),\n calldata: CallData.toHex(call.calldata),\n };\n });\n}\n\nexport function toSessionPolicies(policies: Policies): SessionPolicies {\n return Array.isArray(policies)\n ? policies.reduce<SessionPolicies>(\n (prev, p) => {\n if (safeObjectAccess<string>(p, \"target\")) {\n const target = getChecksumAddress(\n safeObjectAccess<string>(p, \"target\"),\n );\n const entrypoint = safeObjectAccess<string>(p, \"method\");\n const contracts = safeObjectAccess<Record<string, any>>(\n prev,\n \"contracts\",\n );\n const item = {\n name: humanizeString(entrypoint),\n entrypoint: entrypoint,\n description: safeObjectAccess<string>(p, \"description\"),\n };\n\n if (target in contracts) {\n const methods = toArray(contracts[target].methods);\n contracts[target] = {\n methods: [...methods, item],\n };\n } else {\n contracts[target] = {\n methods: [item],\n };\n }\n } else {\n const messages = safeObjectAccess<any[]>(prev, \"messages\");\n messages.push(p);\n }\n\n return prev;\n },\n { contracts: {}, messages: [] },\n )\n : policies;\n}\n\nexport function toWasmPolicies(policies: ParsedSessionPolicies): wasm.Policy[] {\n return [\n ...Object.entries(policies.contracts ?? {}).flatMap(\n ([target, { methods }]) =>\n toArray(methods).map((m) => ({\n target,\n method: m.entrypoint,\n authorized: m.authorized,\n })),\n ),\n ...(policies.messages ?? []).map((p) => {\n const domainHash = typedData.getStructHash(\n p.types,\n \"StarknetDomain\",\n p.domain,\n TypedDataRevision.ACTIVE,\n );\n const typeHash = typedData.getTypeHash(\n p.types,\n p.primaryType,\n TypedDataRevision.ACTIVE,\n );\n\n return {\n scope_hash: hash.computePoseidonHash(domainHash, typeHash),\n authorized: p.authorized,\n };\n }),\n ];\n}\n\nexport function toArray<T>(val: T | T[]): T[] {\n return Array.isArray(val) ? val : [val];\n}\n\nexport function humanizeString(str: string): string {\n return (\n str\n // Convert from camelCase or snake_case\n .replace(/([a-z])([A-Z])/g, \"$1 $2\") // camelCase to spaces\n .replace(/_/g, \" \") // snake_case to spaces\n .toLowerCase()\n // Capitalize first letter\n .replace(/^\\w/, (c) => c.toUpperCase())\n );\n}\n\nexport function parseChainId(url: URL): ChainId {\n const parts = url.pathname.split(\"/\");\n\n if (parts.includes(\"starknet\")) {\n if (parts.includes(\"mainnet\")) {\n return constants.StarknetChainId.SN_MAIN;\n } else if (parts.includes(\"sepolia\")) {\n return constants.StarknetChainId.SN_SEPOLIA;\n }\n } else if (parts.length >= 3) {\n const projectName = parts[2];\n if (parts.includes(\"katana\")) {\n return shortString.encodeShortString(\n `WP_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n } else if (parts.includes(\"mainnet\")) {\n return shortString.encodeShortString(\n `GG_${projectName.toUpperCase().replace(/-/g, \"_\")}`,\n ) as ChainId;\n }\n }\n\n throw new Error(`Chain ${url.toString()} not supported`);\n}\n"],"mappings":";AAAA;AAAA,EAGE;AAAA,OAGK;;;ACNP;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAgHA,SAAS,QAAW,KAAmB;AAC5C,SAAO,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG;AACxC;;;ADvGA,IAAM,oBAAN,cAAgC,cAAc;AAAA,EAC5C;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACE,UACA,QACA,SACA,UACA,SACA,OACA;AACA,UAAM,EAAE,SAAS,OAAO,GAAG,QAAQ;AAEnC,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,QAAQ,OAA0D;AACtE,YAAQ,QAAQ,KAAK;AAErB,WAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,YAAM,iBAAiB,MAAM,KAAK,SAAS;AAAA,QACzC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAGA,UAAI,eAAe,kCAAgC;AACjD,gBAAQ,cAAwC;AAChD;AAAA,MACF;AAGA,UAAI,KAAK,SAAS,wBAAwB;AACxC,eAAQ,eAAgC,KAAK;AAC7C;AAAA,MACF;AAIA,WAAK,MAAM,KAAK;AAChB,YAAM,gBAAgB,MAAM,KAAK,SAAS;AAAA,QACxC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACC,eAAgC;AAAA,MACnC;AAGA,UAAI,cAAc,kCAAgC;AAChD,gBAAQ,aAAuC;AAC/C,aAAK,MAAM,MAAM;AACjB;AAAA,MACF;AAEA,aAAQ,cAA+B,KAAK;AAC5C;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,YAAYA,YAA+C;AAC/D,WAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,YAAM,cAAc,MAAM,KAAK,SAAS,YAAYA,YAAW,IAAI,IAAI;AAGvE,UAAI,EAAE,UAAU,cAAc;AAC5B,gBAAQ,WAA6B;AACrC;AAAA,MACF;AAGA,WAAK,MAAM,KAAK;AAChB,YAAM,aAAa,MAAM,KAAK,SAAS,YAAYA,YAAW,IAAI,KAAK;AAEvE,UAAI,EAAE,UAAU,aAAa;AAC3B,gBAAQ,UAA4B;AAAA,MACtC,OAAO;AACL,eAAQ,WAA4B,KAAK;AAAA,MAC3C;AACA,WAAK,MAAM,MAAM;AAAA,IACnB,CAAC;AAAA,EACH;AACF;AAEA,IAAO,kBAAQ;","names":["typedData"]}