Skip to content

Commit 0ddddd1

Browse files
committed
feat: 🎸 Updated messages schemes and types
1 parent e8d9122 commit 0ddddd1

File tree

6 files changed

+86
-92
lines changed

6 files changed

+86
-92
lines changed

‎examples/client/src/App.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ const defaultExpire = '30s';
1616
/** Default topic to publish requests the same as for the supplier node */
1717
const defaultTopic = 'hello';
1818

19+
type RequestsRegistryRecord = Required<RequestRecord<RequestQuery, OfferOptions>>;
20+
1921
interface FormValues {
2022
topic: string;
2123
message: string;
@@ -27,7 +29,7 @@ interface RequestFormProps {
2729
}
2830

2931
interface RequestsProps {
30-
requests: Required<RequestRecord<RequestQuery, OfferOptions>>[];
32+
requests: RequestsRegistryRecord[];
3133
subscribed?: (id: string) => boolean;
3234
onClear(): void;
3335
onCancel(id: string): void;
@@ -147,7 +149,7 @@ export const Requests = ({ requests, subscribed, onClear, onCancel }: RequestsPr
147149
export const App = () => {
148150
const client = useRef<Client<RequestQuery, OfferOptions> | undefined>();
149151
const [connected, setConnected] = useState<boolean>(false);
150-
const [requests, setRequests] = useState<Required<RequestRecord<RequestQuery, OfferOptions>>[]>(
152+
const [requests, setRequests] = useState<RequestsRegistryRecord[]>(
151153
[],
152154
);
153155
const [error, setError] = useState<string | undefined>();

‎src/client/index.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -329,10 +329,10 @@ export class Client<
329329
}
330330

331331
/** Check is the message is an offer */
332-
const offer = createOfferDataSchema<
333-
z.ZodType<CustomRequestQuery>,
334-
z.ZodType<CustomOfferOptions>
335-
>(this.querySchema, this.offerOptionsSchema).parse(JSON.parse(decodeText(detail.data)));
332+
const offer = createOfferDataSchema<CustomRequestQuery, CustomOfferOptions>(
333+
this.querySchema,
334+
this.offerOptionsSchema,
335+
).parse(JSON.parse(decodeText(detail.data)));
336336
logger.trace('Offer received:', offer);
337337

338338
// Verify the offer

‎src/client/requestsRegistry.ts

+26-27
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,29 @@ const logger = createLogger('RequestsRegistry');
1919
/**
2020
* Creates request record schema
2121
*
22-
* @param {z.ZodType} querySchema Custom request query schema
23-
* @param {z.ZodType} offerOptionsSchema
22+
* @template {CustomRequestQuery}
23+
* @template {CustomOfferOptions}
24+
* @param {z.ZodType<CustomRequestQuery>} querySchema Custom request query schema
25+
* @param {z.ZodType<CustomOfferOptions>} offerOptionsSchema
2426
* @returns {z.ZodType} Request record schema
2527
*/
2628
export const createRequestRecordSchema = <
27-
TQuery extends z.ZodTypeAny,
28-
TOfferOptions extends z.ZodTypeAny,
29+
CustomRequestQuery extends GenericQuery,
30+
CustomOfferOptions extends GenericOfferOptions,
2931
>(
30-
querySchema: TQuery,
31-
offerOptionsSchema: TOfferOptions,
32+
querySchema: z.ZodType<CustomRequestQuery>,
33+
offerOptionsSchema: z.ZodType<CustomOfferOptions>,
3234
) =>
3335
z
3436
.object({
3537
/** Raw request data */
36-
data: createRequestDataSchema<TQuery>(querySchema),
38+
data: createRequestDataSchema<CustomRequestQuery>(querySchema),
3739
/** Offers associated with a request*/
3840
offers: z.array(
39-
createOfferDataSchema<TQuery, TOfferOptions>(querySchema, offerOptionsSchema),
41+
createOfferDataSchema<CustomRequestQuery, CustomOfferOptions>(
42+
querySchema,
43+
offerOptionsSchema,
44+
),
4045
),
4146
/** Request cancelation flag */
4247
cancelled: z.boolean().default(false),
@@ -84,11 +89,7 @@ export type RequestsRegistryOptions<
8489
export type RequestRecord<
8590
CustomRequestQuery extends GenericQuery,
8691
CustomOfferOptions extends GenericOfferOptions,
87-
> = z.infer<
88-
ReturnType<
89-
typeof createRequestRecordSchema<z.ZodType<CustomRequestQuery>, z.ZodType<CustomOfferOptions>>
90-
>
91-
>;
92+
> = z.infer<ReturnType<typeof createRequestRecordSchema<CustomRequestQuery, CustomOfferOptions>>>;
9293

9394
/**
9495
* Request manager events interface
@@ -260,10 +261,10 @@ export class RequestsRegistry<
260261

261262
for (let requestRecord of rawRecords) {
262263
try {
263-
requestRecord = createRequestRecordSchema<
264-
z.ZodType<CustomRequestQuery>,
265-
z.ZodType<CustomOfferOptions>
266-
>(this.client.querySchema, this.client.offerOptionsSchema).parse(requestRecord);
264+
requestRecord = createRequestRecordSchema<CustomRequestQuery, CustomOfferOptions>(
265+
this.client.querySchema,
266+
this.client.offerOptionsSchema,
267+
).parse(requestRecord);
267268

268269
// `record.data` marked as optional because of Zod generics issue
269270
this.requests.set(
@@ -379,13 +380,11 @@ export class RequestsRegistry<
379380
throw new Error('Client not connected to the coordination server yet');
380381
}
381382

382-
request = createRequestDataSchema<z.ZodType<CustomRequestQuery>>(this.client.querySchema).parse(
383-
request,
384-
);
385-
const requestRecord = createRequestRecordSchema<
386-
z.ZodType<CustomRequestQuery>,
387-
z.ZodType<CustomOfferOptions>
388-
>(this.client.querySchema, this.client.offerOptionsSchema).parse({
383+
request = createRequestDataSchema<CustomRequestQuery>(this.client.querySchema).parse(request);
384+
const requestRecord = createRequestRecordSchema<CustomRequestQuery, CustomOfferOptions>(
385+
this.client.querySchema,
386+
this.client.offerOptionsSchema,
387+
).parse({
389388
data: request,
390389
offers: [],
391390
});
@@ -452,7 +451,7 @@ export class RequestsRegistry<
452451

453452
this.requests.set(
454453
id,
455-
createRequestRecordSchema<z.ZodType<CustomRequestQuery>, z.ZodType<CustomOfferOptions>>(
454+
createRequestRecordSchema<CustomRequestQuery, CustomOfferOptions>(
456455
this.client.querySchema,
457456
this.client.offerOptionsSchema,
458457
).parse(record),
@@ -512,7 +511,7 @@ export class RequestsRegistry<
512511
* @memberof RequestsRegistry
513512
*/
514513
addOffer(offer: OfferData<CustomRequestQuery, CustomOfferOptions>) {
515-
offer = createOfferDataSchema<z.ZodType<CustomRequestQuery>, z.ZodType<CustomOfferOptions>>(
514+
offer = createOfferDataSchema<CustomRequestQuery, CustomOfferOptions>(
516515
this.client.querySchema,
517516
this.client.offerOptionsSchema,
518517
).parse(offer);
@@ -529,7 +528,7 @@ export class RequestsRegistry<
529528

530529
this.requests.set(
531530
requestId,
532-
createRequestRecordSchema<z.ZodType<CustomRequestQuery>, z.ZodType<CustomOfferOptions>>(
531+
createRequestRecordSchema<CustomRequestQuery, CustomOfferOptions>(
533532
this.client.querySchema,
534533
this.client.offerOptionsSchema,
535534
).parse({

‎src/node/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ export class Node<
249249
}
250250

251251
const offer = await buildOffer<CustomRequestQuery, CustomOfferOptions>(
252-
createBuildOfferOptions<z.ZodType<CustomRequestQuery>, z.ZodType<CustomOfferOptions>>(
252+
createBuildOfferOptions<CustomRequestQuery, CustomOfferOptions>(
253253
this.querySchema,
254254
this.offerOptionsSchema,
255255
).parse({

‎src/node/requestManager.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export class RequestManager<CustomRequestQuery extends GenericQuery> extends Eve
4545
}
4646

4747
add(topic: string, data: string) {
48-
const requestData = createRequestDataSchema<typeof this.querySchema>(this.querySchema).parse(
48+
const requestData = createRequestDataSchema<CustomRequestQuery>(this.querySchema).parse(
4949
JSON.parse(data),
5050
);
5151

‎src/shared/messages.ts

+50-57
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,13 @@ export type GenericQuery = z.infer<typeof GenericQuerySchema>;
3636
/**
3737
* Creates request data structure schema
3838
*
39-
* @param {z.ZodType} querySchema
39+
* @template {CustomRequestQuery}
40+
* @param {z.ZodType<CustomRequestQuery>} querySchema
4041
* @returns {z.ZodType}
4142
*/
42-
export const createRequestDataSchema = <T extends z.ZodTypeAny>(querySchema: T) =>
43+
export const createRequestDataSchema = <CustomRequestQuery extends GenericQuery>(
44+
querySchema: z.ZodType<CustomRequestQuery>,
45+
) =>
4346
GenericMessageSchema.extend({
4447
/** Request topic */
4548
topic: z.string(),
@@ -51,16 +54,19 @@ export const createRequestDataSchema = <T extends z.ZodTypeAny>(querySchema: T)
5154
* Request data type
5255
*/
5356
export type RequestData<CustomRequestQuery extends GenericQuery> = z.infer<
54-
ReturnType<typeof createRequestDataSchema<z.ZodType<CustomRequestQuery>>>
57+
ReturnType<typeof createRequestDataSchema<CustomRequestQuery>>
5558
>;
5659

5760
/**
5861
* Creates schema for buildRequest method options
5962
*
60-
* @param {z.ZodType} querySchema
63+
* @template {CustomRequestQuery}
64+
* @param {z.ZodType<CustomRequestQuery>} querySchema
6165
* @returns {z.ZodType}
6266
*/
63-
export const createBuildRequestOptions = <T extends z.ZodTypeAny>(querySchema: T) =>
67+
export const createBuildRequestOptions = <CustomRequestQuery extends GenericQuery>(
68+
querySchema: z.ZodType<CustomRequestQuery>,
69+
) =>
6470
z
6571
.object({
6672
/** Expiration time */
@@ -82,23 +88,25 @@ export const createBuildRequestOptions = <T extends z.ZodTypeAny>(querySchema: T
8288
* buildRequest method options type
8389
*/
8490
export type BuildRequestOptions<CustomRequestQuery extends GenericQuery> = z.infer<
85-
ReturnType<typeof createBuildRequestOptions<z.ZodType<CustomRequestQuery>>>
91+
ReturnType<typeof createBuildRequestOptions<CustomRequestQuery>>
8692
>;
8793

8894
/**
8995
* Builds a request
9096
*
91-
* @template CustomRequestQuery
97+
* @template {CustomRequestQuery}
9298
* @param {BuildRequestOptions<CustomRequestQuery>} requestOptions
9399
* @returns
94100
*/
95101
export const buildRequest = async <CustomRequestQuery extends GenericQuery>(
96102
requestOptions: BuildRequestOptions<CustomRequestQuery>,
97103
) => {
98-
const { expire, nonce, topic, query, querySchema, idOverride } = createBuildRequestOptions<
99-
typeof requestOptions.querySchema
100-
>(requestOptions.querySchema).parse(requestOptions);
101-
const request = createRequestDataSchema<typeof querySchema>(querySchema);
104+
const { expire, nonce, topic, query, idOverride } = createBuildRequestOptions<CustomRequestQuery>(
105+
requestOptions.querySchema as z.ZodType<CustomRequestQuery>,
106+
).parse(requestOptions);
107+
const request = createRequestDataSchema<CustomRequestQuery>(
108+
requestOptions.querySchema as z.ZodType<CustomRequestQuery>,
109+
);
102110
return (await request.parseAsync({
103111
id: idOverride ?? uuid4(),
104112
expire: typeof expire === 'number' ? parseSeconds(expire) : nowSec() + parseSeconds(expire),
@@ -178,21 +186,21 @@ export type GenericOfferOptions = z.infer<typeof GenericOfferOptionsSchema>;
178186
/**
179187
* Creates a final offer data schema
180188
*
181-
* @template TQuery
182-
* @template TOfferOptions
183-
* @param {TQuery} querySchema
184-
* @param {TOfferOptions} offerOptionsSchema
189+
* @template {CustomRequestQuery}
190+
* @template {CustomOfferOptions}
191+
* @param {z.ZodType<CustomRequestQuery>} querySchema
192+
* @param {z.ZodType<CustomOfferOptions>} offerOptionsSchema
185193
*/
186194
export const createOfferDataSchema = <
187-
TQuery extends z.ZodTypeAny,
188-
TOfferOptions extends z.ZodTypeAny,
195+
CustomRequestQuery extends GenericQuery,
196+
CustomOfferOptions extends GenericOfferOptions,
189197
>(
190-
querySchema: TQuery,
191-
offerOptionsSchema: TOfferOptions,
198+
querySchema: z.ZodType<CustomRequestQuery>,
199+
offerOptionsSchema: z.ZodType<CustomOfferOptions>,
192200
) =>
193201
GenericMessageSchema.extend({
194202
/** Copy of request */
195-
request: createRequestDataSchema<TQuery>(querySchema),
203+
request: createRequestDataSchema<CustomRequestQuery>(querySchema),
196204
/** Offer options */
197205
options: offerOptionsSchema,
198206
/** Payment options */
@@ -211,11 +219,7 @@ export const createOfferDataSchema = <
211219
export type OfferData<
212220
CustomRequestQuery extends GenericQuery,
213221
CustomOfferOptions extends GenericOfferOptions,
214-
> = z.infer<
215-
ReturnType<
216-
typeof createOfferDataSchema<z.ZodType<CustomRequestQuery>, z.ZodType<CustomOfferOptions>>
217-
>
218-
>;
222+
> = z.infer<ReturnType<typeof createOfferDataSchema<CustomRequestQuery, CustomOfferOptions>>>;
219223

220224
/**
221225
* EIP-712 JSON schema types for offer
@@ -260,17 +264,17 @@ export const offerEip712Types: Record<string, Array<TypedDataField>> = {
260264
/**
261265
* Creates a schema for `buildOffer` method options
262266
*
263-
* @template TQuery
264-
* @template TOfferOptions
265-
* @param {TQuery} querySchema
266-
* @param {TOfferOptions} offerOptionsSchema
267+
* @template {CustomRequestQuery}
268+
* @template {CustomOfferOptions}
269+
* @param {z.ZodType<CustomRequestQuery>} querySchema
270+
* @param {z.ZodType<CustomOfferOptions>} offerOptionsSchema
267271
*/
268272
export const createBuildOfferOptions = <
269-
TQuery extends z.ZodTypeAny,
270-
TOfferOptions extends z.ZodTypeAny,
273+
CustomRequestQuery extends GenericQuery,
274+
CustomOfferOptions extends GenericOfferOptions,
271275
>(
272-
querySchema: TQuery,
273-
offerOptionsSchema: TOfferOptions,
276+
querySchema: z.ZodType<CustomRequestQuery>,
277+
offerOptionsSchema: z.ZodType<CustomOfferOptions>,
274278
) =>
275279
z
276280
.object({
@@ -280,7 +284,7 @@ export const createBuildOfferOptions = <
280284
optionsSchema: z.instanceof(z.ZodType),
281285
supplierId: z.string(),
282286
expire: z.string().or(z.number()),
283-
request: createRequestDataSchema<TQuery>(querySchema),
287+
request: createRequestDataSchema<CustomRequestQuery>(querySchema),
284288
options: offerOptionsSchema,
285289
payment: z.array(PaymentOptionSchema),
286290
cancel: z.array(CancelOptionSchema),
@@ -293,26 +297,17 @@ export const createBuildOfferOptions = <
293297

294298
/**
295299
* Type for `buildOffer` method options
296-
*
297-
* @template TQuery
298-
* @template TOfferOptions
299-
* @param {TQuery} querySchema
300-
* @param {TOfferOptions} offerOptionsSchema
301300
*/
302301
export type BuildOfferOptions<
303302
CustomRequestQuery extends GenericQuery,
304303
CustomOfferOptions extends GenericOfferOptions,
305-
> = z.infer<
306-
ReturnType<
307-
typeof createBuildOfferOptions<z.ZodType<CustomRequestQuery>, z.ZodType<CustomOfferOptions>>
308-
>
309-
>;
304+
> = z.infer<ReturnType<typeof createBuildOfferOptions<CustomRequestQuery, CustomOfferOptions>>>;
310305

311306
/**
312307
* Builds an offer
313308
*
314-
* @template CustomRequestQuery
315-
* @template CustomOfferOptions
309+
* @template {CustomRequestQuery}
310+
* @template {CustomOfferOptions}
316311
* @param {BuildOfferOptions<CustomRequestQuery, CustomOfferOptions>} offerOptions
317312
* @returns
318313
*/
@@ -333,13 +328,11 @@ export const buildOffer = async <
333328
transferable,
334329
signer,
335330
signatureOverride,
336-
querySchema,
337-
optionsSchema,
338331
idOverride,
339332
expire,
340-
} = createBuildOfferOptions<typeof offerOptions.querySchema, typeof offerOptions.optionsSchema>(
341-
offerOptions.querySchema,
342-
offerOptions.optionsSchema,
333+
} = createBuildOfferOptions<CustomRequestQuery, CustomOfferOptions>(
334+
offerOptions.querySchema as z.ZodType<CustomRequestQuery>,
335+
offerOptions.optionsSchema as z.ZodType<CustomOfferOptions>,
343336
).parse(offerOptions);
344337

345338
const unsignedOfferPayload = UnsignedOfferPayloadSchema.parse({
@@ -372,10 +365,10 @@ export const buildOffer = async <
372365
throw new Error('Either signer or signatureOverride must be provided');
373366
}
374367

375-
const offerSchema = createOfferDataSchema<
376-
typeof offerOptions.querySchema,
377-
typeof offerOptions.optionsSchema
378-
>(querySchema, optionsSchema);
368+
const offerSchema = createOfferDataSchema<CustomRequestQuery, CustomOfferOptions>(
369+
offerOptions.querySchema as z.ZodType<CustomRequestQuery>,
370+
offerOptions.optionsSchema as z.ZodType<CustomOfferOptions>,
371+
);
379372

380373
return (await offerSchema.parseAsync({
381374
id: idOverride ?? uuid4(),
@@ -393,8 +386,8 @@ export const buildOffer = async <
393386
/**
394387
* Verifies signed offer
395388
*
396-
* @template CustomRequestQuery
397-
* @template CustomOfferOptions
389+
* @template {CustomRequestQuery}
390+
* @template {CustomOfferOptions}
398391
* @param {ContractConfig} contract
399392
* @param {string} supplierAddress
400393
* @param {OfferData<CustomRequestQuery, CustomOfferOptions>} offer

0 commit comments

Comments
 (0)