@aztec/foundation 0.62.0 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dest/abi/abi.d.ts +708 -228
  2. package/dest/abi/abi.d.ts.map +1 -1
  3. package/dest/abi/abi.js +92 -8
  4. package/dest/abi/encoder.d.ts.map +1 -1
  5. package/dest/abi/encoder.js +4 -1
  6. package/dest/abi/event_selector.d.ts +4 -0
  7. package/dest/abi/event_selector.d.ts.map +1 -1
  8. package/dest/abi/event_selector.js +7 -1
  9. package/dest/aztec-address/index.d.ts +19 -3
  10. package/dest/aztec-address/index.d.ts.map +1 -1
  11. package/dest/aztec-address/index.js +43 -14
  12. package/dest/buffer/buffer32.d.ts +1 -0
  13. package/dest/buffer/buffer32.d.ts.map +1 -1
  14. package/dest/buffer/buffer32.js +4 -1
  15. package/dest/config/env_var.d.ts +1 -1
  16. package/dest/config/env_var.d.ts.map +1 -1
  17. package/dest/crypto/index.d.ts +1 -0
  18. package/dest/crypto/index.d.ts.map +1 -1
  19. package/dest/crypto/index.js +2 -1
  20. package/dest/crypto/keys/index.d.ts +5 -0
  21. package/dest/crypto/keys/index.d.ts.map +1 -0
  22. package/dest/crypto/keys/index.js +8 -0
  23. package/dest/eth-address/index.d.ts +2 -6
  24. package/dest/eth-address/index.d.ts.map +1 -1
  25. package/dest/eth-address/index.js +3 -7
  26. package/dest/eth-signature/eth_signature.d.ts +2 -0
  27. package/dest/eth-signature/eth_signature.d.ts.map +1 -1
  28. package/dest/eth-signature/eth_signature.js +7 -1
  29. package/dest/fields/fields.d.ts +1 -3
  30. package/dest/fields/fields.d.ts.map +1 -1
  31. package/dest/fields/fields.js +2 -1
  32. package/dest/json-rpc/client/fetch.d.ts +21 -0
  33. package/dest/json-rpc/client/fetch.d.ts.map +1 -0
  34. package/dest/json-rpc/client/fetch.js +66 -0
  35. package/dest/json-rpc/client/index.d.ts +2 -1
  36. package/dest/json-rpc/client/index.d.ts.map +1 -1
  37. package/dest/json-rpc/client/index.js +3 -2
  38. package/dest/json-rpc/client/safe_json_rpc_client.d.ts +13 -0
  39. package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -0
  40. package/dest/json-rpc/client/safe_json_rpc_client.js +45 -0
  41. package/dest/json-rpc/convert.d.ts +11 -19
  42. package/dest/json-rpc/convert.d.ts.map +1 -1
  43. package/dest/json-rpc/convert.js +30 -123
  44. package/dest/json-rpc/fixtures/test_state.d.ts +45 -3
  45. package/dest/json-rpc/fixtures/test_state.d.ts.map +1 -1
  46. package/dest/json-rpc/fixtures/test_state.js +58 -2
  47. package/dest/json-rpc/index.d.ts +1 -2
  48. package/dest/json-rpc/index.d.ts.map +1 -1
  49. package/dest/json-rpc/index.js +2 -3
  50. package/dest/json-rpc/js_utils.d.ts.map +1 -1
  51. package/dest/json-rpc/js_utils.js +2 -1
  52. package/dest/json-rpc/server/index.d.ts +1 -2
  53. package/dest/json-rpc/server/index.d.ts.map +1 -1
  54. package/dest/json-rpc/server/index.js +2 -3
  55. package/dest/json-rpc/server/safe_json_rpc_server.d.ts +112 -0
  56. package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -0
  57. package/dest/json-rpc/server/safe_json_rpc_server.js +275 -0
  58. package/dest/json-rpc/test/index.d.ts +2 -0
  59. package/dest/json-rpc/test/index.d.ts.map +1 -0
  60. package/dest/json-rpc/test/index.js +2 -0
  61. package/dest/json-rpc/test/integration.d.ts +13 -0
  62. package/dest/json-rpc/test/integration.d.ts.map +1 -0
  63. package/dest/json-rpc/test/integration.js +12 -0
  64. package/dest/log/logger.d.ts.map +1 -1
  65. package/dest/log/logger.js +2 -2
  66. package/dest/schemas/api.d.ts +21 -0
  67. package/dest/schemas/api.d.ts.map +1 -0
  68. package/dest/schemas/api.js +8 -0
  69. package/dest/schemas/index.d.ts +6 -0
  70. package/dest/schemas/index.d.ts.map +1 -0
  71. package/dest/schemas/index.js +6 -0
  72. package/dest/schemas/parse.d.ts +9 -0
  73. package/dest/schemas/parse.d.ts.map +1 -0
  74. package/dest/schemas/parse.js +26 -0
  75. package/dest/schemas/schemas.d.ts +79 -0
  76. package/dest/schemas/schemas.d.ts.map +1 -0
  77. package/dest/schemas/schemas.js +87 -0
  78. package/dest/schemas/types.d.ts +3 -0
  79. package/dest/schemas/types.d.ts.map +1 -0
  80. package/dest/schemas/types.js +2 -0
  81. package/dest/schemas/utils.d.ts +40 -0
  82. package/dest/schemas/utils.d.ts.map +1 -0
  83. package/dest/schemas/utils.js +56 -0
  84. package/dest/string/index.d.ts +7 -0
  85. package/dest/string/index.d.ts.map +1 -0
  86. package/dest/string/index.js +13 -0
  87. package/dest/types/index.d.ts +2 -0
  88. package/dest/types/index.d.ts.map +1 -1
  89. package/dest/validation/index.d.ts +6 -0
  90. package/dest/validation/index.d.ts.map +1 -1
  91. package/dest/validation/index.js +11 -1
  92. package/package.json +7 -4
  93. package/src/abi/abi.ts +203 -233
  94. package/src/abi/encoder.ts +2 -0
  95. package/src/abi/event_selector.ts +7 -0
  96. package/src/aztec-address/index.ts +64 -18
  97. package/src/buffer/buffer32.ts +5 -0
  98. package/src/config/env_var.ts +18 -8
  99. package/src/crypto/index.ts +1 -0
  100. package/src/crypto/keys/index.ts +9 -0
  101. package/src/eth-address/index.ts +2 -6
  102. package/src/eth-signature/eth_signature.ts +8 -0
  103. package/src/fields/fields.ts +2 -3
  104. package/src/json-rpc/client/fetch.ts +81 -0
  105. package/src/json-rpc/client/index.ts +2 -1
  106. package/src/json-rpc/client/safe_json_rpc_client.ts +61 -0
  107. package/src/json-rpc/convert.ts +29 -142
  108. package/src/json-rpc/fixtures/test_state.ts +87 -3
  109. package/src/json-rpc/index.ts +1 -8
  110. package/src/json-rpc/js_utils.ts +1 -0
  111. package/src/json-rpc/server/index.ts +1 -2
  112. package/src/json-rpc/server/safe_json_rpc_server.ts +336 -0
  113. package/src/json-rpc/test/index.ts +1 -0
  114. package/src/json-rpc/test/integration.ts +24 -0
  115. package/src/log/logger.ts +2 -1
  116. package/src/schemas/api.ts +47 -0
  117. package/src/schemas/index.ts +5 -0
  118. package/src/schemas/parse.ts +29 -0
  119. package/src/schemas/schemas.ts +111 -0
  120. package/src/schemas/types.ts +3 -0
  121. package/src/schemas/utils.ts +85 -0
  122. package/src/string/index.ts +15 -0
  123. package/src/types/index.ts +3 -0
  124. package/src/validation/index.ts +11 -0
  125. package/dest/json-rpc/class_converter.d.ts +0 -144
  126. package/dest/json-rpc/class_converter.d.ts.map +0 -1
  127. package/dest/json-rpc/class_converter.js +0 -102
  128. package/dest/json-rpc/client/json_rpc_client.d.ts +0 -35
  129. package/dest/json-rpc/client/json_rpc_client.d.ts.map +0 -1
  130. package/dest/json-rpc/client/json_rpc_client.js +0 -117
  131. package/dest/json-rpc/server/json_proxy.d.ts +0 -30
  132. package/dest/json-rpc/server/json_proxy.d.ts.map +0 -1
  133. package/dest/json-rpc/server/json_proxy.js +0 -46
  134. package/dest/json-rpc/server/json_rpc_server.d.ts +0 -102
  135. package/dest/json-rpc/server/json_rpc_server.d.ts.map +0 -1
  136. package/dest/json-rpc/server/json_rpc_server.js +0 -265
  137. package/src/json-rpc/class_converter.ts +0 -213
  138. package/src/json-rpc/client/json_rpc_client.ts +0 -148
  139. package/src/json-rpc/server/json_proxy.ts +0 -60
  140. package/src/json-rpc/server/json_rpc_server.ts +0 -332
@@ -0,0 +1,111 @@
1
+ import { z } from 'zod';
2
+
3
+ import { type AbiDecoded } from '../abi/decoder.js';
4
+ import { EventSelector } from '../abi/event_selector.js';
5
+ import { FunctionSelector } from '../abi/function_selector.js';
6
+ import { NoteSelector } from '../abi/note_selector.js';
7
+ import { AztecAddress } from '../aztec-address/index.js';
8
+ import { Buffer32 } from '../buffer/buffer32.js';
9
+ import { EthAddress } from '../eth-address/index.js';
10
+ import { Signature } from '../eth-signature/eth_signature.js';
11
+ import { Fq, Fr } from '../fields/fields.js';
12
+ import { Point } from '../fields/point.js';
13
+ import { hasHexPrefix, isHex, withoutHexPrefix } from '../string/index.js';
14
+ import { type ZodFor } from './types.js';
15
+ import { hexSchema, maybeStructuredStringSchemaFor } from './utils.js';
16
+
17
+ const FrSchema = maybeStructuredStringSchemaFor('Fr', Fr, isHex);
18
+ const FqSchema = maybeStructuredStringSchemaFor('Fq', Fq, isHex);
19
+
20
+ /** Validation schemas for common types. Every schema must match its toJSON. */
21
+ export const schemas = {
22
+ /** Accepts both a 0x string and a structured `{ type: EthAddress, value: '0x...' }` */
23
+ EthAddress: maybeStructuredStringSchemaFor('EthAddress', EthAddress, EthAddress.isAddress),
24
+
25
+ /** Accepts both a 0x string and a structured `{ type: AztecAddress, value: '0x...' }` */
26
+ AztecAddress: maybeStructuredStringSchemaFor('AztecAddress', AztecAddress, AztecAddress.isAddress),
27
+
28
+ /** Accepts both a 0x string and a structured type. */
29
+ FunctionSelector: maybeStructuredStringSchemaFor('FunctionSelector', FunctionSelector),
30
+
31
+ /** Accepts both a 0x string and a structured type. */
32
+ NoteSelector: maybeStructuredStringSchemaFor('NoteSelector', NoteSelector),
33
+
34
+ /** Accepts both a 0x string and a structured type. */
35
+ EventSelector: maybeStructuredStringSchemaFor('EventSelector', EventSelector),
36
+
37
+ /** Field element. Accepts a 0x prefixed hex string or a structured type. */
38
+ Fr: FrSchema,
39
+
40
+ /** Field element. Accepts a 0x prefixed hex string or a structured type. */
41
+ Fq: FqSchema,
42
+
43
+ /** Point. Serialized as 0x prefixed string or a type. */
44
+ Point: z
45
+ .object({
46
+ x: FrSchema,
47
+ y: FrSchema,
48
+ isInfinite: z.boolean().optional(),
49
+ })
50
+ .or(hexSchema)
51
+ .transform(value =>
52
+ typeof value === 'string' ? Point.fromString(value) : new Point(value.x, value.y, value.isInfinite ?? false),
53
+ ),
54
+
55
+ /** Accepts a 0x string */
56
+ Signature: z
57
+ .string()
58
+ .refine(hasHexPrefix, 'No hex prefix')
59
+ .refine(Signature.isValid0xString, 'Not a valid Ethereum signature')
60
+ .transform(Signature.from0xString),
61
+
62
+ /** Coerces any input to bigint */
63
+ BigInt: z.union([z.bigint(), z.number(), z.string()]).pipe(z.coerce.bigint()),
64
+
65
+ /** Coerces any input to integer number */
66
+ Integer: z.union([z.bigint(), z.number(), z.string()]).pipe(z.coerce.number().int()),
67
+
68
+ /** Coerces input to UInt32 */
69
+ UInt32: z.union([z.bigint(), z.number(), z.string()]).pipe(
70
+ z.coerce
71
+ .number()
72
+ .int()
73
+ .min(0)
74
+ .max(2 ** 32 - 1),
75
+ ),
76
+
77
+ /** Accepts a hex string as a Buffer32 type */
78
+ Buffer32: z.string().refine(isHex, 'Not a valid hex string').transform(Buffer32.fromString),
79
+
80
+ /** Accepts a base64 string or a structured `{ type: 'Buffer', data: [byte, byte...] }` as a buffer */
81
+ BufferB64: z.union([
82
+ z
83
+ .string()
84
+ .base64()
85
+ .transform(data => Buffer.from(data, 'base64')),
86
+ z
87
+ .object({
88
+ type: z.literal('Buffer'),
89
+ data: z.array(z.number().int().max(255)),
90
+ })
91
+ .transform(({ data }) => Buffer.from(data)),
92
+ ]),
93
+
94
+ /** Accepts a hex string with optional 0x prefix as a buffer */
95
+ BufferHex: z
96
+ .string()
97
+ .refine(isHex, 'Not a valid hex string')
98
+ .transform(withoutHexPrefix)
99
+ .transform(data => Buffer.from(data, 'hex')),
100
+
101
+ /** Hex string with an optional 0x prefix, which gets removed as part of the parsing */
102
+ HexString: hexSchema,
103
+ };
104
+
105
+ export const AbiDecodedSchema: ZodFor<AbiDecoded> = z.union([
106
+ schemas.BigInt,
107
+ z.boolean(),
108
+ schemas.AztecAddress,
109
+ z.array(z.lazy(() => AbiDecodedSchema)),
110
+ z.record(z.lazy(() => AbiDecodedSchema)),
111
+ ]);
@@ -0,0 +1,3 @@
1
+ import { type ZodType } from 'zod';
2
+
3
+ export type ZodFor<T> = ZodType<T, any, any>;
@@ -0,0 +1,85 @@
1
+ import {
2
+ OK,
3
+ type ParseInput,
4
+ type ParseReturnType,
5
+ ZodFirstPartyTypeKind,
6
+ ZodOptional,
7
+ ZodParsedType,
8
+ type ZodType,
9
+ type ZodTypeAny,
10
+ z,
11
+ } from 'zod';
12
+
13
+ import { isHex, withoutHexPrefix } from '../string/index.js';
14
+ import { type ZodFor } from './types.js';
15
+
16
+ export const hexSchema = z.string().refine(isHex, 'Not a valid hex string').transform(withoutHexPrefix);
17
+
18
+ export class ZodNullableOptional<T extends ZodTypeAny> extends ZodOptional<T> {
19
+ _isNullableOptional = true;
20
+
21
+ override _parse(input: ParseInput): ParseReturnType<this['_output']> {
22
+ const parsedType = this._getType(input);
23
+ if (parsedType === ZodParsedType.undefined || parsedType === ZodParsedType.null) {
24
+ return OK(undefined);
25
+ }
26
+ return this._def.innerType._parse(input);
27
+ }
28
+
29
+ static override create<T extends ZodTypeAny>(type: T): ZodNullableOptional<T> {
30
+ return new ZodNullableOptional({
31
+ innerType: type,
32
+ typeName: ZodFirstPartyTypeKind.ZodOptional,
33
+ }) as any;
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Declares a parameter as optional. Use this over z.optional in order to accept nulls as undefineds.
39
+ * This is required as JSON does not have an undefined type, and null is used to represent it, so we
40
+ * need to convert nulls to undefineds as we parse.
41
+ */
42
+ export function optional<T extends ZodTypeAny>(schema: T) {
43
+ return ZodNullableOptional.create(schema);
44
+ }
45
+
46
+ /**
47
+ * Creates a schema that accepts a hex string and uses it to hydrate an instance.
48
+ * @param klazz - Class that implements either fromString or fromBuffer.
49
+ * @returns A schema for the class.
50
+ */
51
+ export function hexSchemaFor<TClass extends { fromString(str: string): any } | { fromBuffer(buf: Buffer): any }>(
52
+ klazz: TClass,
53
+ ): ZodType<
54
+ TClass extends { fromString(str: string): infer TInstance } | { fromBuffer(buf: Buffer): infer TInstance }
55
+ ? TInstance
56
+ : never,
57
+ any,
58
+ string
59
+ > {
60
+ return 'fromString' in klazz
61
+ ? hexSchema.transform(klazz.fromString.bind(klazz))
62
+ : hexSchema.transform(str => Buffer.from(str, 'hex')).transform(klazz.fromBuffer.bind(klazz));
63
+ }
64
+
65
+ // TODO(palla/schemas): Delete this class once all serialization of the type { type: string, value: string } are removed.
66
+ export function maybeStructuredStringSchemaFor<TClass extends { fromString(str: string): any }>(
67
+ name: string,
68
+ klazz: TClass,
69
+ refinement?: (input: string) => boolean,
70
+ ): ZodFor<TClass extends { fromString(str: string): infer TInstance } ? TInstance : never> {
71
+ const stringSchema = refinement ? z.string().refine(refinement, `Not a valid ${name}`) : z.string();
72
+ return z
73
+ .union([stringSchema, z.object({ type: z.literal(name), value: stringSchema })])
74
+ .transform(input => klazz.fromString(typeof input === 'string' ? input : input.value));
75
+ }
76
+
77
+ /** Creates a schema for a js Map type that matches the serialization used in jsonStringify. */
78
+ export function mapSchema<TKey, TValue>(key: ZodFor<TKey>, value: ZodFor<TValue>): ZodFor<Map<TKey, TValue>> {
79
+ return z.array(z.tuple([key, value])).transform(entries => new Map(entries));
80
+ }
81
+
82
+ /** Creates a schema for a js Set type that matches the serialization used in jsonStringify. */
83
+ export function setSchema<T>(value: ZodFor<T>): ZodFor<Set<T>> {
84
+ return z.array(value).transform(entries => new Set(entries));
85
+ }
@@ -0,0 +1,15 @@
1
+ export function hasHexPrefix(str: string): str is `0x${string}` {
2
+ return str.startsWith('0x');
3
+ }
4
+
5
+ export function withoutHexPrefix(str: string): string {
6
+ return hasHexPrefix(str) ? str.slice(2) : str;
7
+ }
8
+
9
+ export function isHex(str: string): boolean {
10
+ return /^(0x)?[0-9a-fA-F]*$/.test(str);
11
+ }
12
+
13
+ export function hexToBuffer(str: string): Buffer {
14
+ return Buffer.from(withoutHexPrefix(str), 'hex');
15
+ }
@@ -20,3 +20,6 @@ export type Writeable<T> = { -readonly [P in keyof T]: T[P] };
20
20
  export function unfreeze<T>(obj: T): Writeable<T> {
21
21
  return obj as Writeable<T>;
22
22
  }
23
+
24
+ /** Maybe exists, maybe not. */
25
+ export type Maybe<T extends object> = T | unknown;
@@ -5,3 +5,14 @@ export function required<T>(value: T | undefined, errMsg?: string): T {
5
5
  }
6
6
  return value;
7
7
  }
8
+
9
+ /**
10
+ * Helper function to assert a condition is truthy
11
+ * @param x - A boolean condition to assert.
12
+ * @param err - Error message to throw if x isn't met.
13
+ */
14
+ export function assert(x: any, err: string): asserts x {
15
+ if (!x) {
16
+ throw new Error(err);
17
+ }
18
+ }
@@ -1,144 +0,0 @@
1
- /**
2
- * Represents a class compatible with our class conversion system.
3
- * E.g. PublicKey here satisfies 'StringIOClass'.
4
- * ```
5
- * class PublicKey {
6
- * toString() {
7
- * return '...';
8
- * }
9
- * static fromString(str) {
10
- * return new PublicKey(...);
11
- * }
12
- * }
13
- * ```
14
- */
15
- interface StringIOClass {
16
- new (...args: any): any;
17
- /**
18
- * Creates an IOClass from a given string.
19
- */
20
- fromString: (str: string) => any;
21
- }
22
- /**
23
- * Represents a class compatible with our class conversion system.
24
- * E.g. PublicKey here satisfies 'ObjIOClass'.
25
- * ```
26
- * class PublicKey {
27
- * toJSON() {
28
- * return {...};
29
- * }
30
- * static fromJSON(obj) {
31
- * return new PublicKey({...});
32
- * }
33
- * }
34
- * ```
35
- */
36
- interface ObjIOClass {
37
- new (...args: any): any;
38
- /**
39
- * Creates an IOClass from a given JSON object.
40
- */
41
- fromJSON: (str: object) => any;
42
- }
43
- /**
44
- * Either a StringIOClass or ObjIOClass
45
- */
46
- type IOClass = ObjIOClass | StringIOClass;
47
- /**
48
- * Registered classes available for conversion.
49
- */
50
- export interface StringClassConverterInput {
51
- [className: string]: StringIOClass;
52
- }
53
- /**
54
- * Registered classes available for conversion.
55
- */
56
- export interface JsonClassConverterInput {
57
- [className: string]: ObjIOClass;
58
- }
59
- /**
60
- * Represents a class in a JSON-friendly encoding.
61
- */
62
- export interface StringEncodedClass {
63
- /**
64
- * The class type.
65
- */
66
- type: string;
67
- /**
68
- * The class data string.
69
- */
70
- data: string;
71
- }
72
- /**
73
- * Represents a class in a JSON-friendly encoding.
74
- */
75
- export interface JsonEncodedClass {
76
- /**
77
- * The class type.
78
- */
79
- type: string;
80
- /**
81
- * The class data string.
82
- */
83
- data: object;
84
- }
85
- /**
86
- * Whether a class is a complex object or simply represented by a string.
87
- */
88
- export type ClassEncoding = 'string' | 'object';
89
- /**
90
- * Handles mapping of classes to names, and calling toString and fromString to convert to and from JSON-friendly formats.
91
- * Takes a class map as input.
92
- */
93
- export declare class ClassConverter {
94
- private toClass;
95
- private toName;
96
- /**
97
- * Create a class converter from a table of classes.
98
- * @param stringClassMap - The class table of string encoded classes.
99
- * @param objectClassMap - The class table of complex object classes
100
- */
101
- constructor(stringClassMap?: StringClassConverterInput, objectClassMap?: JsonClassConverterInput);
102
- /**
103
- * Register a class with a certain name.
104
- * This name is used for conversion from and to this class.
105
- * @param type - The class name to use for serialization.
106
- * @param class_ - The class object.
107
- * @param encoding - Whether the class is a complex object or simply represented by a string.
108
- */
109
- register(type: string, class_: IOClass, encoding: ClassEncoding): void;
110
- /**
111
- * Does this type name have a registered class?
112
- * @param type - The type name.
113
- * @returns If there's a registered class.
114
- */
115
- isRegisteredClassName(type: string): boolean;
116
- /**
117
- * Is this class object registered?
118
- * @param obj - The class object.
119
- * @returns If it is a registered class.
120
- */
121
- isRegisteredClass(obj: any): boolean;
122
- /**
123
- * Convert a JSON-like object to a class object.
124
- * @param jsonObj - An object encoding a class.
125
- * @returns The class object.
126
- */
127
- toClassObj(jsonObj: JsonEncodedClass | StringEncodedClass): any;
128
- /**
129
- * Convert a class object to a JSON object.
130
- * @param classObj - A JSON encoding a class.
131
- * @returns The class object.
132
- */
133
- toJsonObj(classObj: any): JsonEncodedClass | StringEncodedClass;
134
- /**
135
- * Loads the corresponding type for this class based on constructor first and constructor name if not found.
136
- * Constructor match works in the event of a minifier changing function names, and constructor name match
137
- * works in the event of duplicated instances of node modules being loaded (see #1826).
138
- * @param classObj - Object to lookup in the registered types.
139
- * @returns Registered type name and encoding.
140
- */
141
- private lookupObject;
142
- }
143
- export {};
144
- //# sourceMappingURL=class_converter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"class_converter.d.ts","sourceRoot":"","sources":["../../src/json-rpc/class_converter.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,UAAU,aAAa;IACrB,KAAK,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAIxB;;OAEG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;CAClC;AAED;;;;;;;;;;;;;GAaG;AACH,UAAU,UAAU;IAClB,KAAK,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IAIxB;;OAEG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,CAAC;CAChC;AAED;;GAEG;AACH,KAAK,OAAO,GAAG,UAAU,GAAG,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AACD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,MAAM,CAA+C;IAE7D;;;;OAIG;gBACS,cAAc,CAAC,EAAE,yBAAyB,EAAE,cAAc,CAAC,EAAE,uBAAuB;IAahG;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IAc/D;;;;OAIG;IACH,qBAAqB,CAAC,IAAI,EAAE,MAAM;IAGlC;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,GAAG;IAI1B;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,kBAAkB,GAAG,GAAG;IAW/D;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,gBAAgB,GAAG,kBAAkB;IAM/D;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;CAWrB"}
@@ -1,102 +0,0 @@
1
- import { assert } from './js_utils.js';
2
- /**
3
- * Handles mapping of classes to names, and calling toString and fromString to convert to and from JSON-friendly formats.
4
- * Takes a class map as input.
5
- */
6
- export class ClassConverter {
7
- /**
8
- * Create a class converter from a table of classes.
9
- * @param stringClassMap - The class table of string encoded classes.
10
- * @param objectClassMap - The class table of complex object classes
11
- */
12
- constructor(stringClassMap, objectClassMap) {
13
- this.toClass = new Map();
14
- this.toName = new Map();
15
- if (stringClassMap) {
16
- for (const key of Object.keys(stringClassMap)) {
17
- this.register(key, stringClassMap[key], 'string');
18
- }
19
- }
20
- if (objectClassMap) {
21
- for (const key of Object.keys(objectClassMap)) {
22
- this.register(key, objectClassMap[key], 'object');
23
- }
24
- }
25
- }
26
- /**
27
- * Register a class with a certain name.
28
- * This name is used for conversion from and to this class.
29
- * @param type - The class name to use for serialization.
30
- * @param class_ - The class object.
31
- * @param encoding - Whether the class is a complex object or simply represented by a string.
32
- */
33
- register(type, class_, encoding) {
34
- assert(type !== 'Buffer', "'Buffer' handling is hardcoded. Cannot use as name.");
35
- assert(class_.prototype['toString'] || class_.prototype['toJSON'], `Class ${type} must define a toString() OR toJSON() method.`);
36
- assert(class_['fromString'] || class_['fromJSON'], `Class ${type} must define a fromString() OR fromJSON() static method.`);
37
- this.toName.set(class_, [type, encoding]);
38
- this.toClass.set(type, [class_, encoding]);
39
- }
40
- /**
41
- * Does this type name have a registered class?
42
- * @param type - The type name.
43
- * @returns If there's a registered class.
44
- */
45
- isRegisteredClassName(type) {
46
- return this.toClass.has(type);
47
- }
48
- /**
49
- * Is this class object registered?
50
- * @param obj - The class object.
51
- * @returns If it is a registered class.
52
- */
53
- isRegisteredClass(obj) {
54
- const name = obj.prototype.constructor.name;
55
- return this.toName.has(obj) || this.isRegisteredClassName(name);
56
- }
57
- /**
58
- * Convert a JSON-like object to a class object.
59
- * @param jsonObj - An object encoding a class.
60
- * @returns The class object.
61
- */
62
- toClassObj(jsonObj) {
63
- const result = this.toClass.get(jsonObj.type);
64
- assert(result, `Could not find type in lookup.`);
65
- const [class_, encoding] = result;
66
- if (encoding === 'string' && typeof jsonObj.data === 'string') {
67
- return class_.fromString(jsonObj.data);
68
- }
69
- else {
70
- return class_.fromJSON(jsonObj.data);
71
- }
72
- }
73
- /**
74
- * Convert a class object to a JSON object.
75
- * @param classObj - A JSON encoding a class.
76
- * @returns The class object.
77
- */
78
- toJsonObj(classObj) {
79
- const { type, encoding } = this.lookupObject(classObj);
80
- const data = encoding === 'string' ? classObj.toString() : classObj.toJSON();
81
- return { type: type, data };
82
- }
83
- /**
84
- * Loads the corresponding type for this class based on constructor first and constructor name if not found.
85
- * Constructor match works in the event of a minifier changing function names, and constructor name match
86
- * works in the event of duplicated instances of node modules being loaded (see #1826).
87
- * @param classObj - Object to lookup in the registered types.
88
- * @returns Registered type name and encoding.
89
- */
90
- lookupObject(classObj) {
91
- const nameResult = this.toName.get(classObj.constructor);
92
- if (nameResult) {
93
- return { type: nameResult[0], encoding: nameResult[1] };
94
- }
95
- const classResult = this.toClass.get(classObj.constructor.name);
96
- if (classResult) {
97
- return { type: classObj.constructor.name, encoding: classResult[1] };
98
- }
99
- throw new Error(`Could not find class ${classObj.constructor.name} in lookup.`);
100
- }
101
- }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NfY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2pzb24tcnBjL2NsYXNzX2NvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBdUd2Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUl6Qjs7OztPQUlHO0lBQ0gsWUFBWSxjQUEwQyxFQUFFLGNBQXdDO1FBUnhGLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztRQUN0RCxXQUFNLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7UUFRM0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsQ0FBQyxJQUFZLEVBQUUsTUFBZSxFQUFFLFFBQXVCO1FBQzdELE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLHFEQUFxRCxDQUFDLENBQUM7UUFDakYsTUFBTSxDQUNKLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMs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
@@ -1,35 +0,0 @@
1
- import { type RemoteObject } from 'comlink';
2
- import { type DebugLogger } from '../../log/index.js';
3
- import { type JsonClassConverterInput, type StringClassConverterInput } from '../class_converter.js';
4
- export { JsonStringify } from '../convert.js';
5
- /**
6
- * A normal fetch function that does not retry.
7
- * Alternatives are a fetch function with retries, or a mocked fetch.
8
- * @param host - The host URL.
9
- * @param method - The RPC method name.
10
- * @param body - The RPC payload.
11
- * @param noRetry - Whether to throw a `NoRetryError` in case the response is a 5xx error and the body contains an error
12
- * message (see `retry` function for more details).
13
- * @returns The parsed JSON response, or throws an error.
14
- */
15
- export declare function defaultFetch(host: string, rpcMethod: string, body: any, useApiEndpoints: boolean, noRetry?: boolean): Promise<any>;
16
- /**
17
- * Makes a fetch function that retries based on the given attempts.
18
- * @param retries - Sequence of intervals (in seconds) to retry.
19
- * @param noRetry - Whether to stop retries on server errors.
20
- * @param log - Optional logger for logging attempts.
21
- * @returns A fetch function.
22
- */
23
- export declare function makeFetch(retries: number[], noRetry: boolean, log?: DebugLogger): (host: string, rpcMethod: string, body: any, useApiEndpoints: boolean) => Promise<any>;
24
- /**
25
- * Creates a Proxy object that delegates over RPC and satisfies RemoteObject<T>.
26
- * The server should have ran new JsonRpcServer().
27
- * @param host - The host URL.
28
- * @param stringClassMap - A map of class names to string representations.
29
- * @param objectClassMap - A map of class names to class constructors.
30
- * @param useApiEndpoints - Whether to use the API endpoints or the default RPC endpoint.
31
- * @param namespaceMethods - String value (or false/empty) to namespace all methods sent to the server. e.g. 'getInfo' -\> 'pxe_getInfo'
32
- * @param fetch - The fetch implementation to use.
33
- */
34
- export declare function createJsonRpcClient<T extends object>(host: string, stringClassMap: StringClassConverterInput, objectClassMap: JsonClassConverterInput, useApiEndpoints: boolean, namespaceMethods?: string | false, fetch?: typeof defaultFetch): RemoteObject<T>;
35
- //# sourceMappingURL=json_rpc_client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json_rpc_client.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/client/json_rpc_client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAAkB,KAAK,uBAAuB,EAAE,KAAK,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAGrH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,GAAG,EACT,eAAe,EAAE,OAAO,EACxB,OAAO,UAAQ,gBAqChB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,WAAW,UAC1D,MAAM,aAAa,MAAM,QAAQ,GAAG,mBAAmB,OAAO,kBASnF;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAClD,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,yBAAyB,EACzC,cAAc,EAAE,uBAAuB,EACvC,eAAe,EAAE,OAAO,EACxB,gBAAgB,CAAC,EAAE,MAAM,GAAG,KAAK,EACjC,KAAK,sBAAe,mBA2CrB"}
@@ -1,117 +0,0 @@
1
- import { format } from 'util';
2
- import { createDebugLogger } from '../../log/index.js';
3
- import { NoRetryError, makeBackoff, retry } from '../../retry/index.js';
4
- import { ClassConverter } from '../class_converter.js';
5
- import { JsonStringify, convertFromJsonObj, convertToJsonObj } from '../convert.js';
6
- export { JsonStringify } from '../convert.js';
7
- const log = createDebugLogger('json-rpc:json_rpc_client');
8
- /**
9
- * A normal fetch function that does not retry.
10
- * Alternatives are a fetch function with retries, or a mocked fetch.
11
- * @param host - The host URL.
12
- * @param method - The RPC method name.
13
- * @param body - The RPC payload.
14
- * @param noRetry - Whether to throw a `NoRetryError` in case the response is a 5xx error and the body contains an error
15
- * message (see `retry` function for more details).
16
- * @returns The parsed JSON response, or throws an error.
17
- */
18
- export async function defaultFetch(host, rpcMethod, body, useApiEndpoints, noRetry = false) {
19
- log.debug(format(`JsonRpcClient.fetch`, host, rpcMethod, '->', body));
20
- let resp;
21
- if (useApiEndpoints) {
22
- resp = await fetch(`${host}/${rpcMethod}`, {
23
- method: 'POST',
24
- body: JsonStringify(body),
25
- headers: { 'content-type': 'application/json' },
26
- });
27
- }
28
- else {
29
- resp = await fetch(host, {
30
- method: 'POST',
31
- body: JsonStringify({ ...body, method: rpcMethod }),
32
- headers: { 'content-type': 'application/json' },
33
- });
34
- }
35
- let responseJson;
36
- try {
37
- responseJson = await resp.json();
38
- }
39
- catch (err) {
40
- if (!resp.ok) {
41
- throw new Error(resp.statusText);
42
- }
43
- throw new Error(`Failed to parse body as JSON: ${resp.text()}`);
44
- }
45
- if (!resp.ok) {
46
- const errorMessage = `(JSON-RPC PROPAGATED) (host ${host}) (method ${rpcMethod}) (code ${resp.status}) ${responseJson.error.message}`;
47
- if (noRetry || (resp.status >= 400 && resp.status < 500)) {
48
- throw new NoRetryError(errorMessage);
49
- }
50
- else {
51
- throw new Error(errorMessage);
52
- }
53
- }
54
- return responseJson;
55
- }
56
- /**
57
- * Makes a fetch function that retries based on the given attempts.
58
- * @param retries - Sequence of intervals (in seconds) to retry.
59
- * @param noRetry - Whether to stop retries on server errors.
60
- * @param log - Optional logger for logging attempts.
61
- * @returns A fetch function.
62
- */
63
- export function makeFetch(retries, noRetry, log) {
64
- return async (host, rpcMethod, body, useApiEndpoints) => {
65
- return await retry(() => defaultFetch(host, rpcMethod, body, useApiEndpoints, noRetry), `JsonRpcClient request ${rpcMethod} to ${host}`, makeBackoff(retries), log, false);
66
- };
67
- }
68
- /**
69
- * Creates a Proxy object that delegates over RPC and satisfies RemoteObject<T>.
70
- * The server should have ran new JsonRpcServer().
71
- * @param host - The host URL.
72
- * @param stringClassMap - A map of class names to string representations.
73
- * @param objectClassMap - A map of class names to class constructors.
74
- * @param useApiEndpoints - Whether to use the API endpoints or the default RPC endpoint.
75
- * @param namespaceMethods - String value (or false/empty) to namespace all methods sent to the server. e.g. 'getInfo' -\> 'pxe_getInfo'
76
- * @param fetch - The fetch implementation to use.
77
- */
78
- export function createJsonRpcClient(host, stringClassMap, objectClassMap, useApiEndpoints, namespaceMethods, fetch = defaultFetch) {
79
- const classConverter = new ClassConverter(stringClassMap, objectClassMap);
80
- let id = 0;
81
- const request = async (method, params) => {
82
- const body = {
83
- jsonrpc: '2.0',
84
- id: id++,
85
- method,
86
- params: params.map(param => convertToJsonObj(classConverter, param)),
87
- };
88
- log.debug(format(`JsonRpcClient.request`, method, '<-', params));
89
- const res = await fetch(host, method, body, useApiEndpoints);
90
- log.debug(format(`JsonRpcClient.result`, method, '->', res));
91
- if (res.error) {
92
- throw res.error;
93
- }
94
- if ([null, undefined, 'null', 'undefined'].includes(res.result)) {
95
- return;
96
- }
97
- return convertFromJsonObj(classConverter, res.result);
98
- };
99
- // Intercept any RPC methods with a proxy
100
- // This wraps 'request' with a method-call syntax wrapper
101
- return new Proxy({}, {
102
- get: (target, method) => {
103
- let rpcMethod = method;
104
- if (namespaceMethods) {
105
- rpcMethod = `${namespaceMethods}_${method}`;
106
- }
107
- if (['then', 'catch'].includes(method)) {
108
- return Reflect.get(target, method);
109
- }
110
- return (...params) => {
111
- log.debug(format(`JsonRpcClient.constructor`, 'proxy', rpcMethod, '<-', params));
112
- return request(rpcMethod, params);
113
- };
114
- },
115
- });
116
- }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbl9ycGNfY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2pzb24tcnBjL2NsaWVudC9qc29uX3JwY19jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5QixPQUFPLEVBQW9CLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBZ0UsTUFBTSx1QkFBdUIsQ0FBQztBQUNySCxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUMsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUMxRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FDaEMsSUFBWSxFQUNaLFNBQWlCLEVBQ2pCLElBQVMsRUFDVCxlQUF3QixFQUN4QixPQUFPLEdBQUcsS0FBSztJQUVmLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEUsSUFBSSxJQUFjLENBQUM7SUFDbkIsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQixJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksU0FBUyxFQUFFLEVBQUU7WUFDekMsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQztZQUN6QixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsa0JB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