Skip to content

Commit 0b1a78e

Browse files
committed
Move caveatEnforcerClient into it's own file. Add test for the factory function.
1 parent 23ba21c commit 0b1a78e

5 files changed

Lines changed: 96 additions & 27 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import type { PublicClient } from 'viem';
2+
3+
import type { DeleGatorEnvironment } from '../types';
4+
import { caveatEnforcerActions } from './getCaveatAvailableAmount';
5+
6+
/**
7+
* Type for client extended with caveat enforcer actions.
8+
*/
9+
export type CaveatEnforcerClient = PublicClient &
10+
ReturnType<ReturnType<typeof caveatEnforcerActions>>;
11+
12+
/**
13+
* Create a viem client extended with caveat enforcer actions.
14+
*
15+
* @param params - The parameters object.
16+
* @param params.client - The viem public client.
17+
* @param params.environment - The delegator environment.
18+
* @returns The extended client with caveat enforcer actions.
19+
*/
20+
export function createCaveatEnforcerClient({
21+
client,
22+
environment,
23+
}: {
24+
client: PublicClient;
25+
environment: DeleGatorEnvironment;
26+
}): CaveatEnforcerClient {
27+
return client.extend(caveatEnforcerActions({ environment }));
28+
}

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

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -380,27 +380,3 @@ export const caveatEnforcerActions =
380380
);
381381
},
382382
});
383-
384-
/**
385-
* Type for client extended with caveat enforcer actions.
386-
*/
387-
export type CaveatEnforcerClient = PublicClient &
388-
ReturnType<ReturnType<typeof caveatEnforcerActions>>;
389-
390-
/**
391-
* Create a viem client extended with caveat enforcer actions.
392-
*
393-
* @param params - The parameters object.
394-
* @param params.client - The viem public client.
395-
* @param params.environment - The delegator environment.
396-
* @returns The extended client with caveat enforcer actions.
397-
*/
398-
export function createCaveatEnforcerClient({
399-
client,
400-
environment,
401-
}: {
402-
client: PublicClient;
403-
environment: DeleGatorEnvironment;
404-
}): CaveatEnforcerClient {
405-
return client.extend(caveatEnforcerActions({ environment }));
406-
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ export {
1717
// Result types
1818
type PeriodTransferResult,
1919
type StreamingResult,
20-
2120
} from './getCaveatAvailableAmount';
2221

2322
export { isValid7702Implementation } from './isValid7702Implementation';

packages/delegation-toolkit/src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ export * as contracts from './contracts';
6262

6363
export * as actions from './actions';
6464

65-
// Export the caveat enforcer client
6665
export {
6766
createCaveatEnforcerClient,
6867
type CaveatEnforcerClient,
69-
} from './actions/getCaveatAvailableAmount';
68+
} from './actions/caveatEnforcerClient';
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { PublicClient } from 'viem';
2+
import { createCaveatEnforcerClient } from '../../src/actions/caveatEnforcerClient';
3+
import { describe, expect, it, Mocked, vi } from 'vitest';
4+
import { Delegation, DeleGatorEnvironment } from '../../src/types';
5+
import { getDelegationHashOffchain } from '../../src/utils';
6+
import { randomAddress } from '../utils';
7+
8+
vi.mock(
9+
'../../src/actions/getCaveatAvailableAmount',
10+
async (importOriginal) => {
11+
const actual = await importOriginal();
12+
return {
13+
...(actual as any),
14+
caveatEnforcerActions: vi.fn().mockReturnValue(() => ({})),
15+
};
16+
},
17+
);
18+
19+
describe('caveatEnforcerClient', () => {
20+
const setup = () => {
21+
const client: Mocked<PublicClient> = {
22+
extend: vi.fn().mockImplementation(() => ({})),
23+
} as unknown as Mocked<PublicClient>;
24+
25+
const environment: DeleGatorEnvironment = {
26+
DelegationManager: randomAddress(),
27+
EntryPoint: randomAddress(),
28+
SimpleFactory: randomAddress(),
29+
implementations: {},
30+
caveatEnforcers: {},
31+
};
32+
33+
const delegation: Delegation = {
34+
delegate: randomAddress(),
35+
delegator: randomAddress(),
36+
caveats: [],
37+
authority: '0x0000000000000000000000000000000000000000',
38+
salt: '0x0000000000000000000000000000000000000000',
39+
signature: '0x0000000000000000000000000000000000000000',
40+
};
41+
42+
const delegationHash = getDelegationHashOffchain(delegation);
43+
44+
return { client, environment, delegation, delegationHash };
45+
};
46+
47+
describe('createCaveatEnforcerClient', () => {
48+
it('creates a caveat enforcer client', async () => {
49+
const { client, environment } = setup();
50+
51+
const caveatEnforcerClient = createCaveatEnforcerClient({
52+
client,
53+
environment,
54+
});
55+
56+
expect(caveatEnforcerClient).toBeDefined();
57+
// this is an anonymous function
58+
expect(client.extend).toHaveBeenCalledWith(expect.any(Function));
59+
60+
const { caveatEnforcerActions: mockCaveatEnforcerActions } = await import(
61+
'../../src/actions/getCaveatAvailableAmount'
62+
);
63+
64+
expect(mockCaveatEnforcerActions).toHaveBeenCalledWith({ environment });
65+
});
66+
});
67+
});

0 commit comments

Comments
 (0)