Skip to content

Commit d03c7e3

Browse files
committed
refactor: separated scopes, and deleted enums
1 parent 4247bcd commit d03c7e3

21 files changed

Lines changed: 558 additions & 414 deletions
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { createCaveatBuilder } from '../coreCaveatBuilder';
2+
import type { CoreCaveatBuilder } from '../coreCaveatBuilder';
3+
import type { Erc20PeriodTransferBuilderConfig } from '../erc20PeriodTransferBuilder';
4+
import type { DeleGatorEnvironment } from 'src/types';
5+
6+
export type Erc20PeriodicScopeConfig = {
7+
type: 'erc20-periodic';
8+
} & Erc20PeriodTransferBuilderConfig;
9+
10+
/**
11+
* Creates a caveat builder configured for ERC20 token periodic transfers with recurring limits.
12+
*
13+
* @param environment - The DeleGator environment.
14+
* @param config - Configuration object containing ERC20 periodic transfer parameters.
15+
* @returns A configured caveat builder with ERC20 period transfer and value limit caveats.
16+
* @throws Error if any of the ERC20 periodic transfer parameters are invalid.
17+
* @throws Error if the environment is not properly configured.
18+
*/
19+
export function createErc20PeriodicCaveatBuilder(
20+
environment: DeleGatorEnvironment,
21+
config: Erc20PeriodicScopeConfig,
22+
): CoreCaveatBuilder {
23+
return createCaveatBuilder(environment)
24+
.addCaveat('valueLte', {
25+
maxValue: 0n,
26+
})
27+
.addCaveat('erc20PeriodTransfer', {
28+
tokenAddress: config.tokenAddress,
29+
periodAmount: config.periodAmount,
30+
periodDuration: config.periodDuration,
31+
startDate: config.startDate,
32+
});
33+
}

packages/delegation-toolkit/src/caveatBuilder/scope/erc20Scope.ts

Lines changed: 0 additions & 75 deletions
This file was deleted.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { createCaveatBuilder } from '../coreCaveatBuilder';
2+
import type { CoreCaveatBuilder } from '../coreCaveatBuilder';
3+
import type { Erc20StreamingBuilderConfig } from '../erc20StreamingBuilder';
4+
import type { DeleGatorEnvironment } from 'src/types';
5+
6+
export type Erc20StreamingScopeConfig = {
7+
type: 'erc20-streaming';
8+
} & Erc20StreamingBuilderConfig;
9+
10+
/**
11+
* Creates a caveat builder configured for ERC20 token streaming with time-based limits.
12+
*
13+
* @param environment - The DeleGator environment.
14+
* @param config - Configuration object containing ERC20 streaming parameters.
15+
* @returns A configured caveat builder with ERC20 streaming and value limit caveats.
16+
* @throws Error if any of the ERC20 streaming parameters are invalid.
17+
* @throws Error if the environment is not properly configured.
18+
*/
19+
export function createErc20StreamingCaveatBuilder(
20+
environment: DeleGatorEnvironment,
21+
config: Erc20StreamingScopeConfig,
22+
): CoreCaveatBuilder {
23+
return createCaveatBuilder(environment)
24+
.addCaveat('valueLte', {
25+
maxValue: 0n,
26+
})
27+
.addCaveat('erc20Streaming', {
28+
tokenAddress: config.tokenAddress,
29+
initialAmount: config.initialAmount,
30+
maxAmount: config.maxAmount,
31+
amountPerSecond: config.amountPerSecond,
32+
startTime: config.startTime,
33+
});
34+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { createCaveatBuilder } from '../coreCaveatBuilder';
2+
import type { CoreCaveatBuilder } from '../coreCaveatBuilder';
3+
import type { Erc20TransferAmountBuilderConfig } from '../erc20TransferAmountBuilder';
4+
import type { DeleGatorEnvironment } from 'src/types';
5+
6+
export type Erc20TransferScopeConfig = {
7+
type: 'erc20-transfer';
8+
} & Erc20TransferAmountBuilderConfig;
9+
10+
/**
11+
* Creates a caveat builder configured for ERC20 token transfers with amount limits.
12+
*
13+
* @param environment - The DeleGator environment.
14+
* @param config - Configuration object containing ERC20 transfer parameters.
15+
* @returns A configured caveat builder with ERC20 transfer amount and value limit caveats.
16+
* @throws Error if any of the ERC20 transfer parameters are invalid.
17+
* @throws Error if the environment is not properly configured.
18+
*/
19+
export function createErc20TransferCaveatBuilder(
20+
environment: DeleGatorEnvironment,
21+
config: Erc20TransferScopeConfig,
22+
): CoreCaveatBuilder {
23+
return createCaveatBuilder(environment)
24+
.addCaveat('valueLte', {
25+
maxValue: 0n,
26+
})
27+
.addCaveat('erc20TransferAmount', {
28+
tokenAddress: config.tokenAddress,
29+
maxAmount: config.maxAmount,
30+
});
31+
}

packages/delegation-toolkit/src/caveatBuilder/scope/index.ts

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
1-
import { type Erc20ScopeConfig, createErc20CaveatBuilder } from './erc20Scope';
1+
import {
2+
type Erc20PeriodicScopeConfig,
3+
createErc20PeriodicCaveatBuilder,
4+
} from './erc20PeriodicScope';
5+
import {
6+
type Erc20StreamingScopeConfig,
7+
createErc20StreamingCaveatBuilder,
8+
} from './erc20StreamingScope';
9+
import {
10+
type Erc20TransferScopeConfig,
11+
createErc20TransferCaveatBuilder,
12+
} from './erc20TransferScope';
213
import {
314
type Erc721ScopeConfig,
415
createErc721CaveatBuilder,
@@ -8,19 +19,35 @@ import {
819
type FunctionCallScopeConfig,
920
} from './functionCallScope';
1021
import {
11-
createNativeTokenCaveatBuilder,
12-
type NativeTokenScopeConfig,
13-
} from './nativeTokenScope';
22+
type NativeTokenPeriodicScopeConfig,
23+
createNativeTokenPeriodicCaveatBuilder,
24+
} from './nativeTokenPeriodicScope';
25+
import {
26+
type NativeTokenStreamingScopeConfig,
27+
createNativeTokenStreamingCaveatBuilder,
28+
} from './nativeTokenStreamingScope';
29+
import {
30+
type NativeTokenTransferScopeConfig,
31+
createNativeTokenTransferCaveatBuilder,
32+
} from './nativeTokenTransferScope';
1433
import {
1534
createOwnershipCaveatBuilder,
1635
type OwnershipScopeConfig,
1736
} from './ownershipScope';
37+
import type { ScopeType } from './scopeTypes';
1838
import type { DeleGatorEnvironment } from '../../types';
1939

40+
// Export the type for external use
41+
export type { ScopeType };
42+
2043
export type ScopeConfig =
21-
| Erc20ScopeConfig
44+
| Erc20TransferScopeConfig
45+
| Erc20StreamingScopeConfig
46+
| Erc20PeriodicScopeConfig
47+
| NativeTokenTransferScopeConfig
48+
| NativeTokenStreamingScopeConfig
49+
| NativeTokenPeriodicScopeConfig
2250
| Erc721ScopeConfig
23-
| NativeTokenScopeConfig
2451
| OwnershipScopeConfig
2552
| FunctionCallScopeConfig;
2653

@@ -29,15 +56,20 @@ export const createCaveatBuilderFromScope = (
2956
scopeConfig: ScopeConfig,
3057
) => {
3158
switch (scopeConfig.type) {
32-
case 'erc20':
33-
return createErc20CaveatBuilder(
34-
environment,
35-
scopeConfig as Erc20ScopeConfig,
36-
);
59+
case 'erc20-transfer':
60+
return createErc20TransferCaveatBuilder(environment, scopeConfig);
61+
case 'erc20-streaming':
62+
return createErc20StreamingCaveatBuilder(environment, scopeConfig);
63+
case 'erc20-periodic':
64+
return createErc20PeriodicCaveatBuilder(environment, scopeConfig);
65+
case 'nativeToken-transfer':
66+
return createNativeTokenTransferCaveatBuilder(environment, scopeConfig);
67+
case 'nativeToken-streaming':
68+
return createNativeTokenStreamingCaveatBuilder(environment, scopeConfig);
69+
case 'nativeToken-periodic':
70+
return createNativeTokenPeriodicCaveatBuilder(environment, scopeConfig);
3771
case 'erc721':
3872
return createErc721CaveatBuilder(environment, scopeConfig);
39-
case 'nativeToken':
40-
return createNativeTokenCaveatBuilder(environment, scopeConfig);
4173
case 'ownership':
4274
return createOwnershipCaveatBuilder(environment, scopeConfig);
4375
case 'functionCall':
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { createCaveatBuilder } from '../coreCaveatBuilder';
2+
import type { CoreCaveatBuilder } from '../coreCaveatBuilder';
3+
import type { NativeTokenPeriodTransferBuilderConfig } from '../nativeTokenPeriodTransferBuilder';
4+
import type { DeleGatorEnvironment } from 'src/types';
5+
6+
export type NativeTokenPeriodicScopeConfig = {
7+
type: 'nativeToken-periodic';
8+
} & NativeTokenPeriodTransferBuilderConfig;
9+
10+
/**
11+
* Creates a caveat builder configured for native token periodic transfers with recurring limits.
12+
*
13+
* @param environment - The DeleGator environment.
14+
* @param config - Configuration object containing native token periodic transfer parameters.
15+
* @returns A configured caveat builder with native token period transfer and exact calldata caveats.
16+
* @throws Error if any of the native token periodic transfer parameters are invalid.
17+
* @throws Error if the environment is not properly configured.
18+
*/
19+
export function createNativeTokenPeriodicCaveatBuilder(
20+
environment: DeleGatorEnvironment,
21+
config: NativeTokenPeriodicScopeConfig,
22+
): CoreCaveatBuilder {
23+
return createCaveatBuilder(environment)
24+
.addCaveat('exactCalldata', {
25+
calldata: '0x',
26+
})
27+
.addCaveat('nativeTokenPeriodTransfer', {
28+
periodAmount: config.periodAmount,
29+
periodDuration: config.periodDuration,
30+
startDate: config.startDate,
31+
});
32+
}

packages/delegation-toolkit/src/caveatBuilder/scope/nativeTokenScope.ts

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

0 commit comments

Comments
 (0)