Skip to content

Commit e0587d1

Browse files
committed
refactor: centralize client workflow request types
1 parent e662b66 commit e0587d1

8 files changed

Lines changed: 106 additions & 110 deletions

File tree

packages/client/src/actions/approvals.ts

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,18 @@ import {
1010
import type { BaseSecureClient } from '../clients';
1111
import type { UserInputError } from '../errors';
1212
import { parseUserInput } from '../input';
13-
import {
14-
expectTransactionHandle,
15-
type SignerTransactionRequest,
16-
type TransactionHandle,
17-
} from '../types';
13+
import { expectTransactionHandle, type TransactionHandle } from '../types';
14+
import type {
15+
SendErc20ApprovalTransactionRequest,
16+
SendErc1155ApprovalForAllTransactionRequest,
17+
SignerTransactionRequest,
18+
} from '../workflow';
1819
import {
1920
GaslessTransactionMetadataSchema,
2021
type GaslessWorkflowRequest,
2122
prepareGaslessTransaction,
2223
} from './gasless';
2324

24-
export type SendErc20ApprovalTransactionRequest = {
25-
kind: 'sendErc20ApprovalTransaction';
26-
request: SignerTransactionRequest;
27-
};
28-
2925
export type Erc20ApprovalWorkflowRequest =
3026
| GaslessWorkflowRequest
3127
| SendErc20ApprovalTransactionRequest;
@@ -95,11 +91,6 @@ export async function prepareErc20Approval(
9591
}.call(null);
9692
}
9793

98-
export type SendErc1155ApprovalForAllTransactionRequest = {
99-
kind: 'sendErc1155ApprovalForAllTransaction';
100-
request: SignerTransactionRequest;
101-
};
102-
10394
export type Erc1155ApprovalForAllWorkflowRequest =
10495
| GaslessWorkflowRequest
10596
| SendErc1155ApprovalForAllTransactionRequest;

packages/client/src/actions/gasless.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@ import type {
5151
TypedDataField,
5252
TypedDataPayload,
5353
} from '../types';
54-
import { type RequestAddressRequest, requestAddress } from '../workflow';
54+
import {
55+
type RequestAddressRequest,
56+
requestAddress,
57+
type SignGaslessMessageRequest,
58+
type SignGaslessTypedDataRequest,
59+
} from '../workflow';
5560

5661
const EIP712_DOMAIN: readonly TypedDataField[] = [
5762
{ name: 'chainId', type: 'uint256' },
@@ -174,11 +179,6 @@ export async function isGaslessReady(
174179
);
175180
}
176181

177-
export type SignGaslessTypedDataRequest = {
178-
kind: 'signGaslessTypedData';
179-
payload: TypedDataPayload;
180-
};
181-
182182
export type GaslessWalletWorkflowRequest =
183183
| RequestAddressRequest
184184
| SignGaslessTypedDataRequest;
@@ -307,11 +307,6 @@ export type PrepareGaslessTransactionRequest = z.input<
307307
typeof PrepareGaslessTransactionRequestSchema
308308
>;
309309

310-
export type SignGaslessMessageRequest = {
311-
kind: 'signGaslessMessage';
312-
payload: TypedDataPayload;
313-
};
314-
315310
export type GaslessWorkflowRequest =
316311
| RequestAddressRequest
317312
| SignGaslessMessageRequest;

packages/client/src/actions/orders/types.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type {
77
} from '@polymarket/bindings/clob';
88
import type { EvmAddress, EvmSignature } from '@polymarket/types';
99
import type { TransactionHandle, TypedDataPayload } from '../../types';
10+
import type { SignOrderRequest } from '../../workflow';
1011
import type {
1112
Erc20ApprovalWorkflowRequest,
1213
Erc1155ApprovalForAllWorkflowRequest,
@@ -120,11 +121,6 @@ export type SignedOrder = {
120121
signature: EvmSignature;
121122
};
122123

123-
export type SignOrderRequest = {
124-
kind: 'signOrder';
125-
payload: TypedDataPayload;
126-
};
127-
128124
export type OrderWorkflowRequest =
129125
| Erc20ApprovalWorkflowRequest
130126
| Erc1155ApprovalForAllWorkflowRequest

packages/client/src/actions/positions.ts

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ import {
2525
UserInputError,
2626
} from '../errors';
2727
import { parseUserInput } from '../input';
28-
import {
29-
expectTransactionHandle,
30-
type SignerTransactionRequest,
31-
type TransactionHandle,
32-
} from '../types';
28+
import { expectTransactionHandle, type TransactionHandle } from '../types';
29+
import type {
30+
SendMergePositionsTransactionRequest,
31+
SendRedeemPositionsTransactionRequest,
32+
SendSplitPositionTransactionRequest,
33+
SignerTransactionRequest,
34+
} from '../workflow';
3335
import {
3436
GaslessTransactionMetadataSchema,
3537
type GaslessWorkflowRequest,
@@ -62,21 +64,6 @@ const PrepareRedeemPositionsRequestSchema = z.object({
6264
metadata: GaslessTransactionMetadataSchema.optional(),
6365
});
6466

65-
export type SendSplitPositionTransactionRequest = {
66-
kind: 'sendSplitPositionTransaction';
67-
request: SignerTransactionRequest;
68-
};
69-
70-
export type SendMergePositionsTransactionRequest = {
71-
kind: 'sendMergePositionsTransaction';
72-
request: SignerTransactionRequest;
73-
};
74-
75-
export type SendRedeemPositionsTransactionRequest = {
76-
kind: 'sendRedeemPositionsTransaction';
77-
request: SignerTransactionRequest;
78-
};
79-
8067
export type SplitPositionWorkflowRequest =
8168
| GaslessWorkflowRequest
8269
| SendSplitPositionTransactionRequest;

packages/client/src/actions/transfers.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,17 @@ import { erc20TransferCall } from '../abis';
66
import type { BaseSecureClient } from '../clients';
77
import type { UserInputError } from '../errors';
88
import { parseUserInput } from '../input';
9-
import {
10-
expectTransactionHandle,
11-
type SignerTransactionRequest,
12-
type TransactionHandle,
13-
} from '../types';
9+
import { expectTransactionHandle, type TransactionHandle } from '../types';
10+
import type {
11+
SendErc20TransferTransactionRequest,
12+
SignerTransactionRequest,
13+
} from '../workflow';
1414
import {
1515
GaslessTransactionMetadataSchema,
1616
type GaslessWorkflowRequest,
1717
prepareGaslessTransaction,
1818
} from './gasless';
1919

20-
export type SendErc20TransferTransactionRequest = {
21-
kind: 'sendErc20TransferTransaction';
22-
request: SignerTransactionRequest;
23-
};
24-
2520
export type Erc20TransferWorkflowRequest =
2621
| GaslessWorkflowRequest
2722
| SendErc20TransferTransactionRequest;

packages/client/src/types.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,6 @@ export type TransactionCall = {
3535
value?: bigint;
3636
};
3737

38-
export type SignerTransactionRequest = {
39-
data?: HexString;
40-
to: EvmAddress;
41-
value?: bigint;
42-
};
43-
4438
/** @internal */
4539
export type ApiKeyAuthorizationRequest = {
4640
method: 'DELETE' | 'GET' | 'POST';

packages/client/src/viem/index.ts

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,7 @@ import {
2727
TransportError,
2828
} from '../errors';
2929
import type { TransactionHandle } from '../types';
30-
import type {
31-
AuthenticationWorkflow,
32-
CompleteWorkflowNext,
33-
CompleteWorkflowRequest,
34-
} from '../workflow';
30+
import type { AuthenticateWith, CompleteWith } from '../workflow';
3531

3632
function isWalletClientWithAccount(
3733
walletClient: WalletClient,
@@ -45,7 +41,7 @@ function isWalletClientWithAccount(
4541
* @throws {@link AuthenticateWithError}
4642
* Thrown when the required wallet signature is rejected or cannot be produced.
4743
*/
48-
export function authenticateWith(walletClient: WalletClient) {
44+
export function authenticateWith(walletClient: WalletClient): AuthenticateWith {
4945
invariant(
5046
isWalletClientWithAccount(walletClient),
5147
'Wallet client with account is required',
@@ -58,9 +54,7 @@ export function authenticateWith(walletClient: WalletClient) {
5854
: walletClient.account.address,
5955
);
6056

61-
return async function authenticate<TReturn>(
62-
workflow: AuthenticationWorkflow<TReturn>,
63-
): Promise<TReturn> {
57+
return async function authenticate(workflow) {
6458
let result = await workflow.next();
6559

6660
while (!result.done) {
@@ -98,7 +92,7 @@ export function authenticateWith(walletClient: WalletClient) {
9892
* @throws {@link CompleteWithError}
9993
* Thrown when the required wallet signature or submission is rejected or cannot be produced.
10094
*/
101-
export function completeWith(walletClient: WalletClient) {
95+
export function completeWith(walletClient: WalletClient): CompleteWith {
10296
invariant(
10397
isWalletClientWithAccount(walletClient),
10498
'Wallet client with account is required',
@@ -111,12 +105,7 @@ export function completeWith(walletClient: WalletClient) {
111105
: walletClient.account.address,
112106
);
113107

114-
return async function complete<
115-
TRequest extends CompleteWorkflowRequest,
116-
TReturn,
117-
>(
118-
workflow: AsyncGenerator<TRequest, TReturn, CompleteWorkflowNext>,
119-
): Promise<TReturn> {
108+
return async function complete(workflow) {
120109
let result = await workflow.next();
121110

122111
while (!result.done) {

packages/client/src/workflow.ts

Lines changed: 76 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,105 @@
1-
import type { EvmAddress, EvmSignature } from '@polymarket/types';
2-
import type {
3-
Erc20ApprovalWorkflowRequest,
4-
Erc1155ApprovalForAllWorkflowRequest,
5-
TradingApprovalsWorkflowRequest,
6-
} from './actions/approvals';
7-
import type { GaslessWalletWorkflowRequest } from './actions/gasless';
8-
import type { OrderWorkflowRequest } from './actions/orders';
9-
import type {
10-
MergePositionsWorkflowRequest,
11-
RedeemPositionsWorkflowRequest,
12-
SplitPositionWorkflowRequest,
13-
} from './actions/positions';
14-
import type { Erc20TransferWorkflowRequest } from './actions/transfers';
1+
import type { EvmAddress, EvmSignature, HexString } from '@polymarket/types';
152
import type { CancelledSigningError, SigningError } from './errors';
163
import type { TransactionHandle, TypedDataPayload } from './types';
174

5+
export type SignerTransactionRequest = {
6+
data?: HexString;
7+
to: EvmAddress;
8+
value?: bigint;
9+
};
10+
1811
export type RequestAddressRequest = {
1912
kind: 'requestAddress';
2013
};
2114

15+
export type SignAuthMessageRequest = {
16+
kind: 'signAuthMessage';
17+
payload: TypedDataPayload;
18+
};
19+
20+
export type SendErc20ApprovalTransactionRequest = {
21+
kind: 'sendErc20ApprovalTransaction';
22+
request: SignerTransactionRequest;
23+
};
24+
25+
export type SendErc1155ApprovalForAllTransactionRequest = {
26+
kind: 'sendErc1155ApprovalForAllTransaction';
27+
request: SignerTransactionRequest;
28+
};
29+
30+
export type SendErc20TransferTransactionRequest = {
31+
kind: 'sendErc20TransferTransaction';
32+
request: SignerTransactionRequest;
33+
};
34+
35+
export type SignGaslessTypedDataRequest = {
36+
kind: 'signGaslessTypedData';
37+
payload: TypedDataPayload;
38+
};
39+
40+
export type SignGaslessMessageRequest = {
41+
kind: 'signGaslessMessage';
42+
payload: TypedDataPayload;
43+
};
44+
45+
export type SendSplitPositionTransactionRequest = {
46+
kind: 'sendSplitPositionTransaction';
47+
request: SignerTransactionRequest;
48+
};
49+
50+
export type SendMergePositionsTransactionRequest = {
51+
kind: 'sendMergePositionsTransaction';
52+
request: SignerTransactionRequest;
53+
};
54+
55+
export type SendRedeemPositionsTransactionRequest = {
56+
kind: 'sendRedeemPositionsTransaction';
57+
request: SignerTransactionRequest;
58+
};
59+
60+
export type SignOrderRequest = {
61+
kind: 'signOrder';
62+
payload: TypedDataPayload;
63+
};
64+
2265
export type AuthenticationWorkflowRequest =
2366
| RequestAddressRequest
24-
| {
25-
kind: 'signAuthMessage';
26-
payload: TypedDataPayload;
27-
};
67+
| SignAuthMessageRequest;
2868

2969
export type AuthenticationWorkflow<TReturn> = AsyncGenerator<
3070
AuthenticationWorkflowRequest,
3171
TReturn,
3272
EvmAddress | EvmSignature
3373
>;
3474

75+
export type AuthenticateWith = <TReturn>(
76+
workflow: AuthenticationWorkflow<TReturn>,
77+
) => Promise<TReturn>;
78+
3579
export type AuthenticateWithError = CancelledSigningError | SigningError;
3680
export type CompleteWithError = CancelledSigningError | SigningError;
3781

3882
export type CompleteWorkflowRequest =
39-
| Erc20ApprovalWorkflowRequest
40-
| Erc1155ApprovalForAllWorkflowRequest
41-
| Erc20TransferWorkflowRequest
42-
| GaslessWalletWorkflowRequest
43-
| MergePositionsWorkflowRequest
44-
| TradingApprovalsWorkflowRequest
45-
| RedeemPositionsWorkflowRequest
46-
| SplitPositionWorkflowRequest
47-
| OrderWorkflowRequest;
83+
| RequestAddressRequest
84+
| SendErc20ApprovalTransactionRequest
85+
| SendErc1155ApprovalForAllTransactionRequest
86+
| SendErc20TransferTransactionRequest
87+
| SignGaslessTypedDataRequest
88+
| SignGaslessMessageRequest
89+
| SendSplitPositionTransactionRequest
90+
| SendMergePositionsTransactionRequest
91+
| SendRedeemPositionsTransactionRequest
92+
| SignOrderRequest;
4893

4994
export type CompleteWorkflowNext =
5095
| EvmAddress
5196
| EvmSignature
5297
| TransactionHandle;
5398

99+
export type CompleteWith = <TRequest extends CompleteWorkflowRequest, TReturn>(
100+
workflow: AsyncGenerator<TRequest, TReturn, CompleteWorkflowNext>,
101+
) => Promise<TReturn>;
102+
54103
export function requestAddress(): RequestAddressRequest {
55104
return {
56105
kind: 'requestAddress',

0 commit comments

Comments
 (0)