Skip to content

Commit b61ee8c

Browse files
committed
Improve internals of getCaveatAvailableAmount actions. Improve validation messages when caveats are not found, or duplicates are found.
1 parent 89628de commit b61ee8c

2 files changed

Lines changed: 65 additions & 36 deletions

File tree

packages/delegation-toolkit/src/actions/getCaveatAvailableAmount.ts

Lines changed: 63 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -39,23 +39,26 @@ export type StreamingResult = {
3939
* @throws Error if no matching caveat is found.
4040
* @throws Error if multiple matching caveats are found.
4141
*/
42-
function findMatchingCaveat(
43-
delegation: Delegation,
44-
enforcerAddress: Address,
45-
): { terms: Hex; args: Hex } {
42+
function findMatchingCaveat({
43+
delegation,
44+
enforcerAddress,
45+
enforcerName,
46+
}: {
47+
delegation: Delegation;
48+
enforcerAddress: Address;
49+
enforcerName: keyof DeleGatorEnvironment['caveatEnforcers'];
50+
}): { terms: Hex; args: Hex } {
4651
const matchingCaveats = delegation.caveats.filter(
4752
(caveat) => caveat.enforcer.toLowerCase() === enforcerAddress.toLowerCase(),
4853
);
4954

5055
if (matchingCaveats.length === 0) {
51-
throw new Error(
52-
`No caveat found with enforcer matching ${enforcerAddress}`,
53-
);
56+
throw new Error(`No caveat found with enforcer matching ${enforcerName}`);
5457
}
5558

5659
if (matchingCaveats.length > 1) {
5760
throw new Error(
58-
`Multiple caveats found with enforcer matching ${enforcerAddress}`,
61+
`Multiple caveats found with enforcer matching ${enforcerName}`,
5962
);
6063
}
6164

@@ -90,10 +93,13 @@ function getDelegationManager(environment: DeleGatorEnvironment): Address {
9093
* @param environment - The delegator environment.
9194
* @returns The enforcer address.
9295
*/
93-
function getEnforcerAddress(
94-
enforcerName: keyof DeleGatorEnvironment['caveatEnforcers'],
95-
environment: DeleGatorEnvironment,
96-
): Address {
96+
function getEnforcerAddress({
97+
enforcerName,
98+
environment,
99+
}: {
100+
enforcerName: keyof DeleGatorEnvironment['caveatEnforcers'];
101+
environment: DeleGatorEnvironment;
102+
}): Address {
97103
const enforcerAddress = environment.caveatEnforcers[enforcerName];
98104
if (!enforcerAddress) {
99105
throw new Error(`${enforcerName} not found in environment`);
@@ -115,14 +121,20 @@ export async function getErc20PeriodTransferEnforcerAvailableAmount(
115121
environment: DeleGatorEnvironment,
116122
params: CaveatEnforcerParams,
117123
): Promise<PeriodTransferResult> {
124+
const enforcerName = 'ERC20PeriodTransferEnforcer';
125+
118126
const delegationManager = getDelegationManager(environment);
119-
const enforcerAddress = getEnforcerAddress(
120-
'ERC20PeriodTransferEnforcer',
127+
const enforcerAddress = getEnforcerAddress({
128+
enforcerName,
121129
environment,
122-
);
130+
});
123131

124132
const delegationHash = getDelegationHashOffchain(params.delegation);
125-
const { terms } = findMatchingCaveat(params.delegation, enforcerAddress);
133+
const { terms } = findMatchingCaveat({
134+
delegation: params.delegation,
135+
enforcerAddress,
136+
enforcerName,
137+
});
126138

127139
return ERC20PeriodTransferEnforcer.read.getAvailableAmount({
128140
client,
@@ -146,14 +158,19 @@ export async function getErc20StreamingEnforcerAvailableAmount(
146158
environment: DeleGatorEnvironment,
147159
params: CaveatEnforcerParams,
148160
): Promise<StreamingResult> {
161+
const enforcerName = 'ERC20StreamingEnforcer';
149162
const delegationManager = getDelegationManager(environment);
150-
const enforcerAddress = getEnforcerAddress(
151-
'ERC20StreamingEnforcer',
163+
const enforcerAddress = getEnforcerAddress({
164+
enforcerName,
152165
environment,
153-
);
166+
});
154167

155168
const delegationHash = getDelegationHashOffchain(params.delegation);
156-
const { terms } = findMatchingCaveat(params.delegation, enforcerAddress);
169+
const { terms } = findMatchingCaveat({
170+
delegation: params.delegation,
171+
enforcerAddress,
172+
enforcerName,
173+
});
157174

158175
return ERC20StreamingEnforcer.read.getAvailableAmount({
159176
client,
@@ -177,17 +194,19 @@ export async function getMultiTokenPeriodEnforcerAvailableAmount(
177194
environment: DeleGatorEnvironment,
178195
params: CaveatEnforcerParams,
179196
): Promise<PeriodTransferResult> {
197+
const enforcerName = 'MultiTokenPeriodEnforcer';
180198
const delegationManager = getDelegationManager(environment);
181-
const enforcerAddress = getEnforcerAddress(
182-
'MultiTokenPeriodEnforcer',
199+
const enforcerAddress = getEnforcerAddress({
200+
enforcerName,
183201
environment,
184-
);
202+
});
185203

186204
const delegationHash = getDelegationHashOffchain(params.delegation);
187-
const { terms, args } = findMatchingCaveat(
188-
params.delegation,
205+
const { terms, args } = findMatchingCaveat({
206+
delegation: params.delegation,
189207
enforcerAddress,
190-
);
208+
enforcerName,
209+
});
191210

192211
return MultiTokenPeriodEnforcer.read.getAvailableAmount({
193212
client,
@@ -212,14 +231,19 @@ export async function getNativeTokenPeriodTransferEnforcerAvailableAmount(
212231
environment: DeleGatorEnvironment,
213232
params: CaveatEnforcerParams,
214233
): Promise<PeriodTransferResult> {
234+
const enforcerName = 'NativeTokenPeriodTransferEnforcer';
215235
const delegationManager = getDelegationManager(environment);
216-
const enforcerAddress = getEnforcerAddress(
217-
'NativeTokenPeriodTransferEnforcer',
236+
const enforcerAddress = getEnforcerAddress({
237+
enforcerName,
218238
environment,
219-
);
239+
});
220240

221241
const delegationHash = getDelegationHashOffchain(params.delegation);
222-
const { terms } = findMatchingCaveat(params.delegation, enforcerAddress);
242+
const { terms } = findMatchingCaveat({
243+
delegation: params.delegation,
244+
enforcerAddress,
245+
enforcerName,
246+
});
223247

224248
return NativeTokenPeriodTransferEnforcer.read.getAvailableAmount({
225249
client,
@@ -243,14 +267,19 @@ export async function getNativeTokenStreamingEnforcerAvailableAmount(
243267
environment: DeleGatorEnvironment,
244268
params: CaveatEnforcerParams,
245269
): Promise<StreamingResult> {
270+
const enforcerName = 'NativeTokenStreamingEnforcer';
246271
const delegationManager = getDelegationManager(environment);
247-
const enforcerAddress = getEnforcerAddress(
248-
'NativeTokenStreamingEnforcer',
272+
const enforcerAddress = getEnforcerAddress({
273+
enforcerName,
249274
environment,
250-
);
275+
});
251276

252277
const delegationHash = getDelegationHashOffchain(params.delegation);
253-
const { terms } = findMatchingCaveat(params.delegation, enforcerAddress);
278+
const { terms } = findMatchingCaveat({
279+
delegation: params.delegation,
280+
enforcerAddress,
281+
enforcerName,
282+
});
254283

255284
return NativeTokenStreamingEnforcer.read.getAvailableAmount({
256285
client,

packages/delegation-toolkit/test/actions/getCaveatAvailableAmount.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ describe('Delegation-based Caveat Enforcer Actions', () => {
143143
delegation: delegationWithoutMatchingCaveat,
144144
}),
145145
).rejects.toThrow(
146-
'No caveat found with enforcer matching 0x4567890123456789012345678901234567890123',
146+
'No caveat found with enforcer matching MultiTokenPeriodEnforcer',
147147
);
148148
});
149149

@@ -169,7 +169,7 @@ describe('Delegation-based Caveat Enforcer Actions', () => {
169169
delegation: delegationWithMultipleMatchingCaveats,
170170
}),
171171
).rejects.toThrow(
172-
'Multiple caveats found with enforcer matching 0x4567890123456789012345678901234567890123',
172+
'Multiple caveats found with enforcer matching MultiTokenPeriodEnforcer',
173173
);
174174
});
175175
});

0 commit comments

Comments
 (0)