Skip to content

Commit 81bece7

Browse files
saturn-dbealdbeal-ethshubham50800xusecannonAkihisaY
authored
Release v2.26.0 (#1861)
Co-authored-by: dbeal <git@dbeal.dev> Co-authored-by: shubham shinde <shubhamshinde5080@gmail.com> Co-authored-by: 0xusecannon <noreply@usecannon.com> Co-authored-by: AkihisaY <76488710+AkihisaY@users.noreply.github.com>
1 parent ad0e115 commit 81bece7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+2251
-2001
lines changed

.eslintignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
.next
2+
artifacts
23
coverage
34
dist
45
next.lock
@@ -9,3 +10,4 @@ packages/hardhat-cannon/dist
910
packages/website/out
1011
typechain-types
1112
typechain
13+
artifacts

.github/workflows/claude-code-review.yml

Lines changed: 0 additions & 54 deletions
This file was deleted.

.github/workflows/claude.yml

Lines changed: 0 additions & 50 deletions
This file was deleted.

lerna.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
{
22
"npmClient": "pnpm",
3-
"packages": ["packages/*"],
3+
"packages": [
4+
"packages/*"
5+
],
46
"exact": true,
5-
"version": "2.25.1"
7+
"version": "2.26.0"
68
}

packages/builder/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@usecannon/builder",
3-
"version": "2.25.1",
3+
"version": "2.26.0",
44
"description": "Assembles cannonfile.toml manifests into cannon packages.",
55
"main": "dist/src/index.js",
66
"types": "dist/src/index.d.ts",
@@ -38,6 +38,7 @@
3838
"@types/jest": "^29.5.14",
3939
"@types/lodash": "^4.17.16",
4040
"@types/pako": "^2.0.3",
41+
"@types/promise-retry": "^1.1.6",
4142
"jest": "^29.7.0",
4243
"rollup": "^4.39.0",
4344
"ts-jest": "^29.3.1",
@@ -60,6 +61,7 @@
6061
"lodash": "^4.17.21",
6162
"pako": "^2.1.0",
6263
"promise-events": "^0.2.4",
64+
"promise-retry": "^2.0.1",
6365
"rfdc": "^1.4.1",
6466
"ses": "^1.12.0",
6567
"typestub-ipfs-only-hash": "^4.0.0",

packages/builder/src/access-recorder.test.ts

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,83 @@
1-
import { computeTemplateAccesses } from './access-recorder';
1+
import { AccessRecorderEngine } from './access-recorder';
22

33
describe('access-recorder.ts', () => {
4+
const engine = new AccessRecorderEngine([]);
45
describe('computeTemplateAccesses()', () => {
56
it('computes dependency with addition operation', () => {
6-
expect(computeTemplateAccesses('<%= settings.value1 + settings.value2 %>')).toEqual({
7+
expect(engine.computeTemplateAccesses('<%= settings.value1 + settings.value2 %>')).toEqual({
78
accesses: ['settings.value1', 'settings.value2'],
89
unableToCompute: false,
910
});
1011
});
1112

1213
it('computes dependency with addition operation using extras', () => {
13-
expect(computeTemplateAccesses('<%= extras.value1 + extras.value2 %>')).toEqual({
14+
expect(engine.computeTemplateAccesses('<%= extras.value1 + extras.value2 %>')).toEqual({
1415
accesses: ['extras.value1', 'extras.value2'],
1516
unableToCompute: false,
1617
});
1718
});
1819

1920
it('computes dependency with usage of allowed global variables', () => {
20-
expect(computeTemplateAccesses('<%= parseEther(String(0.3)) %>')).toEqual({
21+
expect(engine.computeTemplateAccesses('<%= parseEther(String(0.3)) %>')).toEqual({
2122
accesses: [],
2223
unableToCompute: false,
2324
});
2425
});
2526

2627
it('computes simple addition', () => {
27-
expect(computeTemplateAccesses('<%= 1 + 1 %>')).toEqual({
28+
expect(engine.computeTemplateAccesses('<%= 1 + 1 %>')).toEqual({
2829
accesses: [],
2930
unableToCompute: false,
3031
});
3132
});
3233

3334
it('computes dependency with subtraction operation', () => {
34-
expect(computeTemplateAccesses('<%= settings.value1 - settings.value2 %>')).toEqual({
35+
expect(engine.computeTemplateAccesses('<%= settings.value1 - settings.value2 %>')).toEqual({
3536
accesses: ['settings.value1', 'settings.value2'],
3637
unableToCompute: false,
3738
});
3839
});
3940

4041
it('computes dependency with multiplication operation', () => {
41-
expect(computeTemplateAccesses('<%= settings.value1 * settings.value2 %>')).toEqual({
42+
expect(engine.computeTemplateAccesses('<%= settings.value1 * settings.value2 %>')).toEqual({
4243
accesses: ['settings.value1', 'settings.value2'],
4344
unableToCompute: false,
4445
});
4546
});
4647

4748
it('computes dependency with division operation', () => {
48-
expect(computeTemplateAccesses('<%= settings.value1 / settings.value2 %>')).toEqual({
49+
expect(engine.computeTemplateAccesses('<%= settings.value1 / settings.value2 %>')).toEqual({
4950
accesses: ['settings.value1', 'settings.value2'],
5051
unableToCompute: false,
5152
});
5253
});
5354

5455
it('computes dependency with complex math operation', () => {
5556
expect(
56-
computeTemplateAccesses('<%= (settings.value1 + settings.value2) * settings.value3 / settings.value4 %>')
57+
engine.computeTemplateAccesses('<%= (settings.value1 + settings.value2) * settings.value3 / settings.value4 %>')
5758
).toEqual({
5859
accesses: ['settings.value1', 'settings.value2', 'settings.value3', 'settings.value4'],
5960
unableToCompute: false,
6061
});
6162
});
6263

6364
it('computes multiple dependencies on different template tags', () => {
64-
expect(computeTemplateAccesses('<%= settings.woot %>-<%= settings.woot2 %>')).toEqual({
65+
expect(engine.computeTemplateAccesses('<%= settings.woot %>-<%= settings.woot2 %>')).toEqual({
6566
accesses: ['settings.woot', 'settings.woot2'],
6667
unableToCompute: false,
6768
});
6869
});
6970

7071
it('computes simple dependency', () => {
71-
expect(computeTemplateAccesses('<%= settings.woot %>')).toEqual({
72+
expect(engine.computeTemplateAccesses('<%= settings.woot %>')).toEqual({
7273
accesses: ['settings.woot'],
7374
unableToCompute: false,
7475
});
7576
});
7677

7778
it('computes array dependency', () => {
7879
expect(
79-
computeTemplateAccesses(
80+
engine.computeTemplateAccesses(
8081
'["<%= settings.camelotSwapPublisherAdmin1 %>","<%= settings.camelotSwapPublisherAdmin2 %>"]'
8182
)
8283
).toEqual({
@@ -86,15 +87,15 @@ describe('access-recorder.ts', () => {
8687
});
8788

8889
it('computes dependency using simple CannonHelperContext', () => {
89-
expect(computeTemplateAccesses('<%= parseEther(settings.woot) %>')).toEqual({
90+
expect(engine.computeTemplateAccesses('<%= parseEther(settings.woot) %>')).toEqual({
9091
accesses: ['settings.woot'],
9192
unableToCompute: false,
9293
});
9394
});
9495

9596
it('computes dependency using complex CannonHelperContext', () => {
9697
expect(
97-
computeTemplateAccesses(
98+
engine.computeTemplateAccesses(
9899
'<%= defaultAbiCoder.encode(parseEther(settings.woot)) %> + <%= defaultAbiCoder.decode(contracts.compound) %>'
99100
)
100101
).toEqual({
@@ -106,28 +107,28 @@ describe('access-recorder.ts', () => {
106107

107108
describe('computeTemplateAccesses() syntax validation', () => {
108109
it('handles invalid template syntax - unmatched brackets', () => {
109-
expect(computeTemplateAccesses('<%= settings.value) %>')).toEqual({
110+
expect(engine.computeTemplateAccesses('<%= settings.value) %>')).toEqual({
110111
accesses: [],
111112
unableToCompute: true,
112113
});
113114
});
114115

115116
it('handles empty template tags', () => {
116-
expect(computeTemplateAccesses('<%=%>')).toEqual({
117+
expect(engine.computeTemplateAccesses('<%=%>')).toEqual({
117118
accesses: [],
118119
unableToCompute: true,
119120
});
120121
});
121122

122123
it('handles multiple template tags with mixed validity', () => {
123-
expect(computeTemplateAccesses('<%= settings.valid %> and <% invalid.syntax')).toEqual({
124+
expect(engine.computeTemplateAccesses('<%= settings.valid %> and <% invalid.syntax')).toEqual({
124125
accesses: ['settings.valid'],
125126
unableToCompute: false,
126127
});
127128
});
128129

129130
it('handles template with only whitespace', () => {
130-
expect(computeTemplateAccesses('<%= %>')).toEqual({
131+
expect(engine.computeTemplateAccesses('<%= %>')).toEqual({
131132
accesses: [],
132133
unableToCompute: true,
133134
});
@@ -136,58 +137,58 @@ describe('access-recorder.ts', () => {
136137

137138
describe('computeTemplateAccesses() security', () => {
138139
it('prevents direct code execution', () => {
139-
expect(computeTemplateAccesses('<%= process.exit(1) %>')).toEqual({
140+
expect(engine.computeTemplateAccesses('<%= process.exit(1) %>')).toEqual({
140141
accesses: [],
141142
unableToCompute: true,
142143
});
143144
});
144145

145146
it('prevents access to global objects', () => {
146-
expect(computeTemplateAccesses('<%= global.process %>')).toEqual({
147+
expect(engine.computeTemplateAccesses('<%= global.process %>')).toEqual({
147148
accesses: [],
148149
unableToCompute: true,
149150
});
150151
});
151152

152153
it('prevents require/import statements', () => {
153-
expect(computeTemplateAccesses('<%= require("fs") %>')).toEqual({
154+
expect(engine.computeTemplateAccesses('<%= require("fs") %>')).toEqual({
154155
accesses: [],
155156
unableToCompute: true,
156157
});
157158
});
158159

159160
it('prevents eval usage', () => {
160-
expect(computeTemplateAccesses('<%= eval("console.log(\'REKT\')") %>')).toEqual({
161+
expect(engine.computeTemplateAccesses('<%= eval("console.log(\'REKT\')") %>')).toEqual({
161162
accesses: [],
162163
unableToCompute: true,
163164
});
164165
});
165166

166167
it('prevents Function constructor usage', () => {
167-
expect(computeTemplateAccesses('<%= new Function("return process")() %>')).toEqual({
168+
expect(engine.computeTemplateAccesses('<%= new Function("return process")() %>')).toEqual({
168169
accesses: [],
169170
unableToCompute: true,
170171
});
171172
});
172173

173174
it('prevents setTimeout/setInterval usage', () => {
174-
expect(computeTemplateAccesses('<%= setTimeout(() => {}, 1000) %>')).toEqual({
175+
expect(engine.computeTemplateAccesses('<%= setTimeout(() => {}, 1000) %>')).toEqual({
175176
accesses: [],
176177
unableToCompute: true,
177178
});
178179
});
179180

180181
it('prevents overriding console.log', () => {
181182
expect(
182-
computeTemplateAccesses('<%= console.log=function(n){require("fs").writeFileSync("./exploit.log",n)} %>')
183+
engine.computeTemplateAccesses('<%= console.log=function(n){require("fs").writeFileSync("./exploit.log",n)} %>')
183184
).toEqual({
184185
accesses: [],
185186
unableToCompute: true,
186187
});
187188
});
188189

189190
it('prevents assignment of values', () => {
190-
expect(computeTemplateAccesses('<%= const value = 1 + 2 %>')).toEqual({
191+
expect(engine.computeTemplateAccesses('<%= const value = 1 + 2 %>')).toEqual({
191192
accesses: [],
192193
unableToCompute: true,
193194
});

0 commit comments

Comments
 (0)