@polymarket/clob-client-v2 1.0.4 → 1.0.6

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 (199) hide show
  1. package/dist/_virtual/rolldown_runtime.cjs +29 -0
  2. package/dist/client.cjs +886 -0
  3. package/dist/client.cjs.map +1 -0
  4. package/dist/client.d.cts +165 -0
  5. package/dist/client.d.ts +167 -0
  6. package/dist/client.js +886 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/config.cjs +35 -0
  9. package/dist/config.cjs.map +1 -0
  10. package/dist/config.d.cts +16 -0
  11. package/dist/config.d.ts +16 -0
  12. package/dist/config.js +32 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/constants.cjs +15 -0
  15. package/dist/constants.cjs.map +1 -0
  16. package/dist/constants.js +10 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/endpoints.cjs +125 -0
  19. package/dist/endpoints.cjs.map +1 -0
  20. package/dist/endpoints.js +65 -0
  21. package/dist/endpoints.js.map +1 -0
  22. package/dist/errors.cjs +20 -0
  23. package/dist/errors.cjs.map +1 -0
  24. package/dist/errors.d.cts +11 -0
  25. package/dist/errors.d.ts +11 -0
  26. package/dist/errors.js +17 -0
  27. package/dist/errors.js.map +1 -0
  28. package/dist/fees/index.cjs +21 -0
  29. package/dist/fees/index.cjs.map +1 -0
  30. package/dist/fees/index.d.cts +5 -0
  31. package/dist/fees/index.d.ts +5 -0
  32. package/dist/fees/index.js +19 -0
  33. package/dist/fees/index.js.map +1 -0
  34. package/dist/headers/index.cjs +34 -0
  35. package/dist/headers/index.cjs.map +1 -0
  36. package/dist/headers/index.d.cts +9 -0
  37. package/dist/headers/index.d.ts +11 -0
  38. package/dist/headers/index.js +33 -0
  39. package/dist/headers/index.js.map +1 -0
  40. package/dist/http-helpers/index.cjs +109 -0
  41. package/dist/http-helpers/index.cjs.map +1 -0
  42. package/dist/http-helpers/index.js +101 -0
  43. package/dist/http-helpers/index.js.map +1 -0
  44. package/dist/index.cjs +35 -2600
  45. package/dist/index.d.cts +14 -1039
  46. package/dist/index.d.ts +16 -1039
  47. package/dist/index.js +15 -2543
  48. package/dist/order-builder/helpers/buildMarketOrderCreationArgs.cjs +43 -0
  49. package/dist/order-builder/helpers/buildMarketOrderCreationArgs.cjs.map +1 -0
  50. package/dist/order-builder/helpers/buildMarketOrderCreationArgs.js +42 -0
  51. package/dist/order-builder/helpers/buildMarketOrderCreationArgs.js.map +1 -0
  52. package/dist/order-builder/helpers/buildOrder.cjs +30 -0
  53. package/dist/order-builder/helpers/buildOrder.cjs.map +1 -0
  54. package/dist/order-builder/helpers/buildOrder.js +30 -0
  55. package/dist/order-builder/helpers/buildOrder.js.map +1 -0
  56. package/dist/order-builder/helpers/buildOrderCreationArgs.cjs +45 -0
  57. package/dist/order-builder/helpers/buildOrderCreationArgs.cjs.map +1 -0
  58. package/dist/order-builder/helpers/buildOrderCreationArgs.js +44 -0
  59. package/dist/order-builder/helpers/buildOrderCreationArgs.js.map +1 -0
  60. package/dist/order-builder/helpers/calculateBuyMarketPrice.cjs +24 -0
  61. package/dist/order-builder/helpers/calculateBuyMarketPrice.cjs.map +1 -0
  62. package/dist/order-builder/helpers/calculateBuyMarketPrice.js +24 -0
  63. package/dist/order-builder/helpers/calculateBuyMarketPrice.js.map +1 -0
  64. package/dist/order-builder/helpers/calculateSellMarketPrice.cjs +24 -0
  65. package/dist/order-builder/helpers/calculateSellMarketPrice.cjs.map +1 -0
  66. package/dist/order-builder/helpers/calculateSellMarketPrice.js +24 -0
  67. package/dist/order-builder/helpers/calculateSellMarketPrice.js.map +1 -0
  68. package/dist/order-builder/helpers/createMarketOrder.cjs +31 -0
  69. package/dist/order-builder/helpers/createMarketOrder.cjs.map +1 -0
  70. package/dist/order-builder/helpers/createMarketOrder.js +31 -0
  71. package/dist/order-builder/helpers/createMarketOrder.js.map +1 -0
  72. package/dist/order-builder/helpers/createOrder.cjs +31 -0
  73. package/dist/order-builder/helpers/createOrder.cjs.map +1 -0
  74. package/dist/order-builder/helpers/createOrder.js +31 -0
  75. package/dist/order-builder/helpers/createOrder.js.map +1 -0
  76. package/dist/order-builder/helpers/getMarketOrderRawAmounts.cjs +36 -0
  77. package/dist/order-builder/helpers/getMarketOrderRawAmounts.cjs.map +1 -0
  78. package/dist/order-builder/helpers/getMarketOrderRawAmounts.js +36 -0
  79. package/dist/order-builder/helpers/getMarketOrderRawAmounts.js.map +1 -0
  80. package/dist/order-builder/helpers/getOrderRawAmounts.cjs +36 -0
  81. package/dist/order-builder/helpers/getOrderRawAmounts.cjs.map +1 -0
  82. package/dist/order-builder/helpers/getOrderRawAmounts.js +36 -0
  83. package/dist/order-builder/helpers/getOrderRawAmounts.js.map +1 -0
  84. package/dist/order-builder/helpers/roundingConfig.cjs +28 -0
  85. package/dist/order-builder/helpers/roundingConfig.cjs.map +1 -0
  86. package/dist/order-builder/helpers/roundingConfig.js +27 -0
  87. package/dist/order-builder/helpers/roundingConfig.js.map +1 -0
  88. package/dist/order-builder/index.d.ts +1 -0
  89. package/dist/order-builder/orderBuilder.cjs +51 -0
  90. package/dist/order-builder/orderBuilder.cjs.map +1 -0
  91. package/dist/order-builder/orderBuilder.d.cts +37 -0
  92. package/dist/order-builder/orderBuilder.d.ts +39 -0
  93. package/dist/order-builder/orderBuilder.js +51 -0
  94. package/dist/order-builder/orderBuilder.js.map +1 -0
  95. package/dist/order-utils/exchangeOrderBuilderV1.cjs +128 -0
  96. package/dist/order-utils/exchangeOrderBuilderV1.cjs.map +1 -0
  97. package/dist/order-utils/exchangeOrderBuilderV1.d.ts +2 -0
  98. package/dist/order-utils/exchangeOrderBuilderV1.js +127 -0
  99. package/dist/order-utils/exchangeOrderBuilderV1.js.map +1 -0
  100. package/dist/order-utils/exchangeOrderBuilderV2.cjs +190 -0
  101. package/dist/order-utils/exchangeOrderBuilderV2.cjs.map +1 -0
  102. package/dist/order-utils/exchangeOrderBuilderV2.d.ts +2 -0
  103. package/dist/order-utils/exchangeOrderBuilderV2.js +189 -0
  104. package/dist/order-utils/exchangeOrderBuilderV2.js.map +1 -0
  105. package/dist/order-utils/index.d.ts +7 -0
  106. package/dist/order-utils/model/ctfExchangeV1TypedData.cjs +60 -0
  107. package/dist/order-utils/model/ctfExchangeV1TypedData.cjs.map +1 -0
  108. package/dist/order-utils/model/ctfExchangeV1TypedData.js +57 -0
  109. package/dist/order-utils/model/ctfExchangeV1TypedData.js.map +1 -0
  110. package/dist/order-utils/model/ctfExchangeV2TypedData.cjs +56 -0
  111. package/dist/order-utils/model/ctfExchangeV2TypedData.cjs.map +1 -0
  112. package/dist/order-utils/model/ctfExchangeV2TypedData.js +53 -0
  113. package/dist/order-utils/model/ctfExchangeV2TypedData.js.map +1 -0
  114. package/dist/order-utils/model/eip712.cjs +24 -0
  115. package/dist/order-utils/model/eip712.cjs.map +1 -0
  116. package/dist/order-utils/model/eip712.d.cts +9 -0
  117. package/dist/order-utils/model/eip712.d.ts +9 -0
  118. package/dist/order-utils/model/eip712.js +23 -0
  119. package/dist/order-utils/model/eip712.js.map +1 -0
  120. package/dist/order-utils/model/order.d.cts +5 -0
  121. package/dist/order-utils/model/order.d.ts +5 -0
  122. package/dist/order-utils/model/orderDataV1.d.cts +68 -0
  123. package/dist/order-utils/model/orderDataV1.d.ts +69 -0
  124. package/dist/order-utils/model/orderDataV2.d.cts +68 -0
  125. package/dist/order-utils/model/orderDataV2.d.ts +69 -0
  126. package/dist/order-utils/model/side.cjs +11 -0
  127. package/dist/order-utils/model/side.cjs.map +1 -0
  128. package/dist/order-utils/model/side.d.cts +8 -0
  129. package/dist/order-utils/model/side.d.ts +8 -0
  130. package/dist/order-utils/model/side.js +10 -0
  131. package/dist/order-utils/model/side.js.map +1 -0
  132. package/dist/order-utils/model/signatureTypeV1.cjs +21 -0
  133. package/dist/order-utils/model/signatureTypeV1.cjs.map +1 -0
  134. package/dist/order-utils/model/signatureTypeV1.d.cts +18 -0
  135. package/dist/order-utils/model/signatureTypeV1.d.ts +18 -0
  136. package/dist/order-utils/model/signatureTypeV1.js +20 -0
  137. package/dist/order-utils/model/signatureTypeV1.js.map +1 -0
  138. package/dist/order-utils/model/signatureTypeV2.cjs +25 -0
  139. package/dist/order-utils/model/signatureTypeV2.cjs.map +1 -0
  140. package/dist/order-utils/model/signatureTypeV2.d.cts +22 -0
  141. package/dist/order-utils/model/signatureTypeV2.d.ts +22 -0
  142. package/dist/order-utils/model/signatureTypeV2.js +24 -0
  143. package/dist/order-utils/model/signatureTypeV2.js.map +1 -0
  144. package/dist/order-utils/utils.cjs +9 -0
  145. package/dist/order-utils/utils.cjs.map +1 -0
  146. package/dist/order-utils/utils.js +8 -0
  147. package/dist/order-utils/utils.js.map +1 -0
  148. package/dist/signing/constants.cjs +7 -0
  149. package/dist/signing/constants.cjs.map +1 -0
  150. package/dist/signing/constants.js +6 -0
  151. package/dist/signing/constants.js.map +1 -0
  152. package/dist/signing/eip712.cjs +51 -0
  153. package/dist/signing/eip712.cjs.map +1 -0
  154. package/dist/signing/eip712.d.ts +2 -0
  155. package/dist/signing/eip712.js +51 -0
  156. package/dist/signing/eip712.js.map +1 -0
  157. package/dist/signing/hmac.cjs +40 -0
  158. package/dist/signing/hmac.cjs.map +1 -0
  159. package/dist/signing/hmac.js +39 -0
  160. package/dist/signing/hmac.js.map +1 -0
  161. package/dist/signing/index.d.ts +2 -0
  162. package/dist/signing/signer.cjs +41 -0
  163. package/dist/signing/signer.cjs.map +1 -0
  164. package/dist/signing/signer.d.cts +17 -0
  165. package/dist/signing/signer.d.ts +17 -0
  166. package/dist/signing/signer.js +39 -0
  167. package/dist/signing/signer.js.map +1 -0
  168. package/dist/types/clob.cjs +35 -0
  169. package/dist/types/clob.cjs.map +1 -0
  170. package/dist/types/clob.d.cts +425 -0
  171. package/dist/types/clob.d.ts +425 -0
  172. package/dist/types/clob.js +32 -0
  173. package/dist/types/clob.js.map +1 -0
  174. package/dist/types/index.d.ts +5 -0
  175. package/dist/types/ordersV1.cjs +29 -0
  176. package/dist/types/ordersV1.cjs.map +1 -0
  177. package/dist/types/ordersV1.d.cts +115 -0
  178. package/dist/types/ordersV1.d.ts +116 -0
  179. package/dist/types/ordersV1.js +28 -0
  180. package/dist/types/ordersV1.js.map +1 -0
  181. package/dist/types/ordersV2.cjs +30 -0
  182. package/dist/types/ordersV2.cjs.map +1 -0
  183. package/dist/types/ordersV2.d.cts +113 -0
  184. package/dist/types/ordersV2.d.ts +114 -0
  185. package/dist/types/ordersV2.js +29 -0
  186. package/dist/types/ordersV2.js.map +1 -0
  187. package/dist/types/unifiedOrder.cjs +10 -0
  188. package/dist/types/unifiedOrder.cjs.map +1 -0
  189. package/dist/types/unifiedOrder.d.cts +44 -0
  190. package/dist/types/unifiedOrder.d.ts +45 -0
  191. package/dist/types/unifiedOrder.js +9 -0
  192. package/dist/types/unifiedOrder.js.map +1 -0
  193. package/dist/utilities.cjs +50 -0
  194. package/dist/utilities.cjs.map +1 -0
  195. package/dist/utilities.js +43 -0
  196. package/dist/utilities.js.map +1 -0
  197. package/package.json +3 -3
  198. package/dist/index.cjs.map +0 -1
  199. package/dist/index.js.map +0 -1
@@ -0,0 +1,127 @@
1
+ import { getSignerAddress, signTypedDataWithSigner } from "../signing/signer.js";
2
+ import { CTF_EXCHANGE_V1_DOMAIN_NAME, CTF_EXCHANGE_V1_DOMAIN_VERSION, CTF_EXCHANGE_V1_ORDER_STRUCT } from "./model/ctfExchangeV1TypedData.js";
3
+ import { EIP712_DOMAIN } from "./model/eip712.js";
4
+ import { SignatureTypeV1 } from "./model/signatureTypeV1.js";
5
+ import { generateOrderSalt } from "./utils.js";
6
+ import { hashTypedData } from "viem";
7
+
8
+ //#region src/order-utils/exchangeOrderBuilderV1.ts
9
+ const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
10
+ var ExchangeOrderBuilderV1 = class {
11
+ constructor(contractAddress, chainId, signer, generateSalt = generateOrderSalt) {
12
+ this.contractAddress = contractAddress;
13
+ this.chainId = chainId;
14
+ this.signer = signer;
15
+ this.generateSalt = generateSalt;
16
+ }
17
+ /**
18
+ * build an order object including the signature.
19
+ * @param orderData
20
+ * @returns a SignedOrder object (order + signature)
21
+ */
22
+ async buildSignedOrder(orderData) {
23
+ const order = await this.buildOrder(orderData);
24
+ const orderTypedData = this.buildOrderTypedData(order);
25
+ const orderSignature = await this.buildOrderSignature(orderTypedData);
26
+ return {
27
+ ...order,
28
+ signature: orderSignature
29
+ };
30
+ }
31
+ /**
32
+ * Creates an Order object from order data.
33
+ * @param OrderData
34
+ * @returns a Order object (not signed)
35
+ */
36
+ async buildOrder({ maker, taker, tokenId, makerAmount, takerAmount, side, feeRateBps, nonce, signer, expiration, signatureType }) {
37
+ if (!signer) signer = maker;
38
+ const signerAddress = await getSignerAddress(this.signer);
39
+ if (signer !== signerAddress) throw new Error("signer does not match");
40
+ if (!expiration) expiration = "0";
41
+ if (!signatureType) signatureType = SignatureTypeV1.EOA;
42
+ let takerAddress;
43
+ if (typeof taker !== "undefined" && taker) takerAddress = taker;
44
+ else takerAddress = ZERO_ADDRESS;
45
+ let feeRateBpsResolved;
46
+ if (typeof feeRateBps !== "undefined" && feeRateBps) feeRateBpsResolved = feeRateBps.toString();
47
+ else feeRateBpsResolved = "0";
48
+ let nonceResolved;
49
+ if (typeof nonce !== "undefined" && nonce) nonceResolved = nonce.toString();
50
+ else nonceResolved = "0";
51
+ return {
52
+ salt: this.generateSalt(),
53
+ maker,
54
+ signer,
55
+ taker: takerAddress,
56
+ tokenId,
57
+ makerAmount,
58
+ takerAmount,
59
+ expiration,
60
+ nonce: nonceResolved,
61
+ feeRateBps: feeRateBpsResolved,
62
+ side,
63
+ signatureType
64
+ };
65
+ }
66
+ /**
67
+ * Parses an Order object to EIP712 typed data
68
+ * @param order
69
+ * @returns a EIP712TypedData object
70
+ */
71
+ buildOrderTypedData(order) {
72
+ return {
73
+ primaryType: "Order",
74
+ types: {
75
+ EIP712Domain: EIP712_DOMAIN,
76
+ Order: CTF_EXCHANGE_V1_ORDER_STRUCT
77
+ },
78
+ domain: {
79
+ name: CTF_EXCHANGE_V1_DOMAIN_NAME,
80
+ version: CTF_EXCHANGE_V1_DOMAIN_VERSION,
81
+ chainId: this.chainId,
82
+ verifyingContract: this.contractAddress
83
+ },
84
+ message: {
85
+ salt: order.salt,
86
+ maker: order.maker,
87
+ signer: order.signer,
88
+ taker: order.taker,
89
+ tokenId: order.tokenId,
90
+ makerAmount: order.makerAmount,
91
+ takerAmount: order.takerAmount,
92
+ expiration: order.expiration,
93
+ nonce: order.nonce,
94
+ feeRateBps: order.feeRateBps,
95
+ side: order.side === "BUY" ? 0 : 1,
96
+ signatureType: order.signatureType
97
+ }
98
+ };
99
+ }
100
+ /**
101
+ * Generates order's signature from a EIP712TypedData object + the signer address
102
+ * @param typedData
103
+ * @returns a OrderSignature that is an string
104
+ */
105
+ buildOrderSignature(typedData) {
106
+ delete typedData.types.EIP712Domain;
107
+ return signTypedDataWithSigner({
108
+ signer: this.signer,
109
+ domain: typedData.domain,
110
+ types: typedData.types,
111
+ value: typedData.message,
112
+ primaryType: typedData.primaryType
113
+ });
114
+ }
115
+ /**
116
+ * Generates the hash of the order from a EIP712TypedData object.
117
+ * @param orderTypedData
118
+ * @returns a OrderHash that is an string
119
+ */
120
+ buildOrderHash(orderTypedData) {
121
+ return hashTypedData(orderTypedData);
122
+ }
123
+ };
124
+
125
+ //#endregion
126
+ export { ExchangeOrderBuilderV1 };
127
+ //# sourceMappingURL=exchangeOrderBuilderV1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchangeOrderBuilderV1.js","names":["contractAddress: string","chainId: number","signer: ClobSigner","takerAddress: string","feeRateBpsResolved: string","nonceResolved: string"],"sources":["../../src/order-utils/exchangeOrderBuilderV1.ts"],"sourcesContent":["import { hashTypedData } from \"viem\";\nimport { type ClobSigner, getSignerAddress, signTypedDataWithSigner } from \"../signing/signer.js\";\nimport {\n\tCTF_EXCHANGE_V1_DOMAIN_NAME,\n\tCTF_EXCHANGE_V1_DOMAIN_VERSION,\n\tCTF_EXCHANGE_V1_ORDER_STRUCT,\n} from \"./model/ctfExchangeV1TypedData.js\";\nimport { EIP712_DOMAIN, type EIP712TypedData } from \"./model/eip712.js\";\nimport type { OrderHash, OrderSignature } from \"./model/order.js\";\nimport type { OrderDataV1, OrderV1, SignedOrderV1 } from \"./model/orderDataV1.js\";\nimport { SignatureTypeV1 } from \"./model/signatureTypeV1.js\";\nimport { generateOrderSalt } from \"./utils.js\";\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\nexport class ExchangeOrderBuilderV1 {\n\tconstructor(\n\t\tprivate readonly contractAddress: string,\n\t\tprivate readonly chainId: number,\n\t\tprivate readonly signer: ClobSigner,\n\t\tprivate readonly generateSalt = generateOrderSalt,\n\t) {}\n\n\t/**\n\t * build an order object including the signature.\n\t * @param orderData\n\t * @returns a SignedOrder object (order + signature)\n\t */\n\tasync buildSignedOrder(orderData: OrderDataV1): Promise<SignedOrderV1> {\n\t\tconst order = await this.buildOrder(orderData);\n\t\tconst orderTypedData = this.buildOrderTypedData(order);\n\t\tconst orderSignature = await this.buildOrderSignature(orderTypedData);\n\t\treturn {\n\t\t\t...order,\n\t\t\tsignature: orderSignature,\n\t\t} as SignedOrderV1;\n\t}\n\n\t/**\n\t * Creates an Order object from order data.\n\t * @param OrderData\n\t * @returns a Order object (not signed)\n\t */\n\tasync buildOrder({\n\t\tmaker,\n\t\ttaker,\n\t\ttokenId,\n\t\tmakerAmount,\n\t\ttakerAmount,\n\t\tside,\n\t\tfeeRateBps,\n\t\tnonce,\n\t\tsigner,\n\t\texpiration,\n\t\tsignatureType,\n\t}: OrderDataV1): Promise<OrderV1> {\n\t\tif (!signer) {\n\t\t\tsigner = maker;\n\t\t}\n\n\t\tconst signerAddress = await getSignerAddress(this.signer);\n\t\tif (signer !== signerAddress) {\n\t\t\tthrow new Error(\"signer does not match\");\n\t\t}\n\n\t\tif (!expiration) {\n\t\t\texpiration = \"0\";\n\t\t}\n\n\t\tif (!signatureType) {\n\t\t\t// Default to EOA 712 sig type\n\t\t\tsignatureType = SignatureTypeV1.EOA;\n\t\t}\n\n\t\tlet takerAddress: string;\n\t\tif (typeof taker !== \"undefined\" && taker) {\n\t\t\ttakerAddress = taker;\n\t\t} else {\n\t\t\ttakerAddress = ZERO_ADDRESS;\n\t\t}\n\n\t\tlet feeRateBpsResolved: string;\n\t\tif (typeof feeRateBps !== \"undefined\" && feeRateBps) {\n\t\t\tfeeRateBpsResolved = feeRateBps.toString();\n\t\t} else {\n\t\t\tfeeRateBpsResolved = \"0\";\n\t\t}\n\n\t\tlet nonceResolved: string;\n\t\tif (typeof nonce !== \"undefined\" && nonce) {\n\t\t\tnonceResolved = nonce.toString();\n\t\t} else {\n\t\t\tnonceResolved = \"0\";\n\t\t}\n\n\t\treturn {\n\t\t\tsalt: this.generateSalt(),\n\t\t\tmaker,\n\t\t\tsigner,\n\t\t\ttaker: takerAddress,\n\t\t\ttokenId,\n\t\t\tmakerAmount,\n\t\t\ttakerAmount,\n\t\t\texpiration,\n\t\t\tnonce: nonceResolved,\n\t\t\tfeeRateBps: feeRateBpsResolved,\n\t\t\tside,\n\t\t\tsignatureType,\n\t\t};\n\t}\n\n\t/**\n\t * Parses an Order object to EIP712 typed data\n\t * @param order\n\t * @returns a EIP712TypedData object\n\t */\n\tbuildOrderTypedData(order: OrderV1): EIP712TypedData {\n\t\treturn {\n\t\t\tprimaryType: \"Order\",\n\t\t\ttypes: {\n\t\t\t\tEIP712Domain: EIP712_DOMAIN,\n\t\t\t\tOrder: CTF_EXCHANGE_V1_ORDER_STRUCT,\n\t\t\t},\n\t\t\tdomain: {\n\t\t\t\tname: CTF_EXCHANGE_V1_DOMAIN_NAME,\n\t\t\t\tversion: CTF_EXCHANGE_V1_DOMAIN_VERSION,\n\t\t\t\tchainId: this.chainId,\n\t\t\t\tverifyingContract: this.contractAddress,\n\t\t\t},\n\t\t\tmessage: {\n\t\t\t\tsalt: order.salt,\n\t\t\t\tmaker: order.maker,\n\t\t\t\tsigner: order.signer,\n\t\t\t\ttaker: order.taker,\n\t\t\t\ttokenId: order.tokenId,\n\t\t\t\tmakerAmount: order.makerAmount,\n\t\t\t\ttakerAmount: order.takerAmount,\n\t\t\t\texpiration: order.expiration,\n\t\t\t\tnonce: order.nonce,\n\t\t\t\tfeeRateBps: order.feeRateBps,\n\t\t\t\tside: order.side === \"BUY\" ? 0 : 1,\n\t\t\t\tsignatureType: order.signatureType,\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Generates order's signature from a EIP712TypedData object + the signer address\n\t * @param typedData\n\t * @returns a OrderSignature that is an string\n\t */\n\tbuildOrderSignature(typedData: EIP712TypedData): Promise<OrderSignature> {\n\t\tdelete typedData.types.EIP712Domain;\n\t\treturn signTypedDataWithSigner({\n\t\t\tsigner: this.signer,\n\t\t\tdomain: typedData.domain,\n\t\t\ttypes: typedData.types,\n\t\t\tvalue: typedData.message,\n\t\t\tprimaryType: typedData.primaryType,\n\t\t});\n\t}\n\n\t/**\n\t * Generates the hash of the order from a EIP712TypedData object.\n\t * @param orderTypedData\n\t * @returns a OrderHash that is an string\n\t */\n\tbuildOrderHash(orderTypedData: EIP712TypedData): OrderHash {\n\t\tconst digest = hashTypedData(orderTypedData);\n\t\treturn digest;\n\t}\n}\n"],"mappings":";;;;;;;;AAaA,MAAM,eAAe;AAErB,IAAa,yBAAb,MAAoC;CACnC,YACC,AAAiBA,iBACjB,AAAiBC,SACjB,AAAiBC,QACjB,AAAiB,eAAe,mBAC/B;EAJgB;EACA;EACA;EACA;;;;;;;CAQlB,MAAM,iBAAiB,WAAgD;EACtE,MAAM,QAAQ,MAAM,KAAK,WAAW,UAAU;EAC9C,MAAM,iBAAiB,KAAK,oBAAoB,MAAM;EACtD,MAAM,iBAAiB,MAAM,KAAK,oBAAoB,eAAe;AACrE,SAAO;GACN,GAAG;GACH,WAAW;GACX;;;;;;;CAQF,MAAM,WAAW,EAChB,OACA,OACA,SACA,aACA,aACA,MACA,YACA,OACA,QACA,YACA,iBACiC;AACjC,MAAI,CAAC,OACJ,UAAS;EAGV,MAAM,gBAAgB,MAAM,iBAAiB,KAAK,OAAO;AACzD,MAAI,WAAW,cACd,OAAM,IAAI,MAAM,wBAAwB;AAGzC,MAAI,CAAC,WACJ,cAAa;AAGd,MAAI,CAAC,cAEJ,iBAAgB,gBAAgB;EAGjC,IAAIC;AACJ,MAAI,OAAO,UAAU,eAAe,MACnC,gBAAe;MAEf,gBAAe;EAGhB,IAAIC;AACJ,MAAI,OAAO,eAAe,eAAe,WACxC,sBAAqB,WAAW,UAAU;MAE1C,sBAAqB;EAGtB,IAAIC;AACJ,MAAI,OAAO,UAAU,eAAe,MACnC,iBAAgB,MAAM,UAAU;MAEhC,iBAAgB;AAGjB,SAAO;GACN,MAAM,KAAK,cAAc;GACzB;GACA;GACA,OAAO;GACP;GACA;GACA;GACA;GACA,OAAO;GACP,YAAY;GACZ;GACA;GACA;;;;;;;CAQF,oBAAoB,OAAiC;AACpD,SAAO;GACN,aAAa;GACb,OAAO;IACN,cAAc;IACd,OAAO;IACP;GACD,QAAQ;IACP,MAAM;IACN,SAAS;IACT,SAAS,KAAK;IACd,mBAAmB,KAAK;IACxB;GACD,SAAS;IACR,MAAM,MAAM;IACZ,OAAO,MAAM;IACb,QAAQ,MAAM;IACd,OAAO,MAAM;IACb,SAAS,MAAM;IACf,aAAa,MAAM;IACnB,aAAa,MAAM;IACnB,YAAY,MAAM;IAClB,OAAO,MAAM;IACb,YAAY,MAAM;IAClB,MAAM,MAAM,SAAS,QAAQ,IAAI;IACjC,eAAe,MAAM;IACrB;GACD;;;;;;;CAQF,oBAAoB,WAAqD;AACxE,SAAO,UAAU,MAAM;AACvB,SAAO,wBAAwB;GAC9B,QAAQ,KAAK;GACb,QAAQ,UAAU;GAClB,OAAO,UAAU;GACjB,OAAO,UAAU;GACjB,aAAa,UAAU;GACvB,CAAC;;;;;;;CAQH,eAAe,gBAA4C;AAE1D,SADe,cAAc,eAAe"}
@@ -0,0 +1,190 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_constants = require('../constants.cjs');
3
+ const require_signer = require('../signing/signer.cjs');
4
+ const require_eip712 = require('./model/eip712.cjs');
5
+ const require_utils = require('./utils.cjs');
6
+ const require_ctfExchangeV2TypedData = require('./model/ctfExchangeV2TypedData.cjs');
7
+ const require_signatureTypeV2 = require('./model/signatureTypeV2.cjs');
8
+ let viem = require("viem");
9
+
10
+ //#region src/order-utils/exchangeOrderBuilderV2.ts
11
+ const ORDER_TYPE_STRING = "Order(uint256 salt,address maker,address signer,uint256 tokenId,uint256 makerAmount,uint256 takerAmount,uint8 side,uint8 signatureType,uint256 timestamp,bytes32 metadata,bytes32 builder)";
12
+ const ORDER_TYPE_HASH = (0, viem.keccak256)((0, viem.toHex)(ORDER_TYPE_STRING));
13
+ const DOMAIN_TYPE_HASH = (0, viem.keccak256)((0, viem.toHex)("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"));
14
+ const TYPED_DATA_SIGN_STRUCT = [
15
+ {
16
+ name: "contents",
17
+ type: "Order"
18
+ },
19
+ {
20
+ name: "name",
21
+ type: "string"
22
+ },
23
+ {
24
+ name: "version",
25
+ type: "string"
26
+ },
27
+ {
28
+ name: "chainId",
29
+ type: "uint256"
30
+ },
31
+ {
32
+ name: "verifyingContract",
33
+ type: "address"
34
+ },
35
+ {
36
+ name: "salt",
37
+ type: "bytes32"
38
+ }
39
+ ];
40
+ const CTF_EXCHANGE_NAME_HASH = (0, viem.keccak256)((0, viem.toHex)(require_ctfExchangeV2TypedData.CTF_EXCHANGE_V2_DOMAIN_NAME));
41
+ const CTF_EXCHANGE_VERSION_HASH = (0, viem.keccak256)((0, viem.toHex)(require_ctfExchangeV2TypedData.CTF_EXCHANGE_V2_DOMAIN_VERSION));
42
+ var ExchangeOrderBuilderV2 = class {
43
+ appDomainSep;
44
+ constructor(contractAddress, chainId, signer, generateSalt = require_utils.generateOrderSalt) {
45
+ this.contractAddress = contractAddress;
46
+ this.chainId = chainId;
47
+ this.signer = signer;
48
+ this.generateSalt = generateSalt;
49
+ this.appDomainSep = (0, viem.keccak256)((0, viem.encodeAbiParameters)([
50
+ { type: "bytes32" },
51
+ { type: "bytes32" },
52
+ { type: "bytes32" },
53
+ { type: "uint256" },
54
+ { type: "address" }
55
+ ], [
56
+ DOMAIN_TYPE_HASH,
57
+ CTF_EXCHANGE_NAME_HASH,
58
+ CTF_EXCHANGE_VERSION_HASH,
59
+ BigInt(chainId),
60
+ contractAddress
61
+ ]));
62
+ }
63
+ async buildSignedOrder(orderData) {
64
+ const order = await this.buildOrder(orderData);
65
+ const orderTypedData = this.buildOrderTypedData(order);
66
+ const orderSignature = await this.buildOrderSignature(orderTypedData);
67
+ return {
68
+ ...order,
69
+ signature: orderSignature
70
+ };
71
+ }
72
+ async buildOrder({ maker, tokenId, makerAmount, takerAmount, side, signer, signatureType, timestamp, metadata, builder, expiration }) {
73
+ if (!signer) signer = maker;
74
+ if (signatureType !== require_signatureTypeV2.SignatureTypeV2.POLY_1271) {
75
+ const signerAddress = await require_signer.getSignerAddress(this.signer);
76
+ if (signer !== signerAddress) throw new Error("signer does not match");
77
+ }
78
+ return {
79
+ salt: this.generateSalt(),
80
+ maker,
81
+ signer,
82
+ tokenId,
83
+ makerAmount,
84
+ takerAmount,
85
+ side,
86
+ signatureType: signatureType ?? require_signatureTypeV2.SignatureTypeV2.EOA,
87
+ metadata: metadata ?? require_constants.bytes32Zero,
88
+ builder: builder ?? require_constants.bytes32Zero,
89
+ timestamp: timestamp ?? Date.now().toString(),
90
+ expiration: expiration ?? "0"
91
+ };
92
+ }
93
+ buildOrderTypedData(order) {
94
+ return {
95
+ primaryType: "Order",
96
+ types: {
97
+ EIP712Domain: require_eip712.EIP712_DOMAIN,
98
+ Order: require_ctfExchangeV2TypedData.CTF_EXCHANGE_V2_ORDER_STRUCT
99
+ },
100
+ domain: {
101
+ name: require_ctfExchangeV2TypedData.CTF_EXCHANGE_V2_DOMAIN_NAME,
102
+ version: require_ctfExchangeV2TypedData.CTF_EXCHANGE_V2_DOMAIN_VERSION,
103
+ chainId: this.chainId,
104
+ verifyingContract: this.contractAddress
105
+ },
106
+ message: {
107
+ salt: order.salt,
108
+ maker: order.maker,
109
+ signer: order.signer,
110
+ tokenId: order.tokenId,
111
+ makerAmount: order.makerAmount,
112
+ takerAmount: order.takerAmount,
113
+ timestamp: order.timestamp,
114
+ side: order.side === "BUY" ? 0 : 1,
115
+ signatureType: order.signatureType,
116
+ metadata: order.metadata,
117
+ builder: order.builder
118
+ }
119
+ };
120
+ }
121
+ async buildOrderSignature(typedData) {
122
+ delete typedData.types.EIP712Domain;
123
+ const msg = typedData.message;
124
+ if (msg.signatureType !== require_signatureTypeV2.SignatureTypeV2.POLY_1271) return require_signer.signTypedDataWithSigner({
125
+ signer: this.signer,
126
+ domain: typedData.domain,
127
+ types: typedData.types,
128
+ value: typedData.message,
129
+ primaryType: typedData.primaryType
130
+ });
131
+ const contentsHash = (0, viem.keccak256)((0, viem.encodeAbiParameters)([
132
+ { type: "bytes32" },
133
+ { type: "uint256" },
134
+ { type: "address" },
135
+ { type: "address" },
136
+ { type: "uint256" },
137
+ { type: "uint256" },
138
+ { type: "uint256" },
139
+ { type: "uint8" },
140
+ { type: "uint8" },
141
+ { type: "uint256" },
142
+ { type: "bytes32" },
143
+ { type: "bytes32" }
144
+ ], [
145
+ ORDER_TYPE_HASH,
146
+ BigInt(msg.salt),
147
+ msg.maker,
148
+ msg.signer,
149
+ BigInt(msg.tokenId),
150
+ BigInt(msg.makerAmount),
151
+ BigInt(msg.takerAmount),
152
+ msg.side,
153
+ msg.signatureType,
154
+ BigInt(msg.timestamp),
155
+ msg.metadata,
156
+ msg.builder
157
+ ]));
158
+ const innerSig = await require_signer.signTypedDataWithSigner({
159
+ signer: this.signer,
160
+ domain: {
161
+ name: require_ctfExchangeV2TypedData.CTF_EXCHANGE_V2_DOMAIN_NAME,
162
+ version: require_ctfExchangeV2TypedData.CTF_EXCHANGE_V2_DOMAIN_VERSION,
163
+ chainId: this.chainId,
164
+ verifyingContract: this.contractAddress
165
+ },
166
+ types: {
167
+ TypedDataSign: TYPED_DATA_SIGN_STRUCT,
168
+ Order: require_ctfExchangeV2TypedData.CTF_EXCHANGE_V2_ORDER_STRUCT
169
+ },
170
+ primaryType: "TypedDataSign",
171
+ value: {
172
+ contents: typedData.message,
173
+ name: "DepositWallet",
174
+ version: "1",
175
+ chainId: this.chainId,
176
+ verifyingContract: msg.signer,
177
+ salt: require_constants.bytes32Zero
178
+ }
179
+ });
180
+ const lenHex = 186 .toString(16).padStart(4, "0");
181
+ return `0x${innerSig.slice(2)}${this.appDomainSep.slice(2)}${contentsHash.slice(2)}${(0, viem.toHex)(ORDER_TYPE_STRING).slice(2)}${lenHex}`;
182
+ }
183
+ buildOrderHash(orderTypedData) {
184
+ return (0, viem.hashTypedData)(orderTypedData);
185
+ }
186
+ };
187
+
188
+ //#endregion
189
+ exports.ExchangeOrderBuilderV2 = ExchangeOrderBuilderV2;
190
+ //# sourceMappingURL=exchangeOrderBuilderV2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchangeOrderBuilderV2.cjs","names":["CTF_EXCHANGE_V2_DOMAIN_NAME","CTF_EXCHANGE_V2_DOMAIN_VERSION","contractAddress: string","chainId: number","signer: ClobSigner","generateOrderSalt","SignatureTypeV2","getSignerAddress","bytes32Zero","EIP712_DOMAIN","CTF_EXCHANGE_V2_ORDER_STRUCT","signTypedDataWithSigner"],"sources":["../../src/order-utils/exchangeOrderBuilderV2.ts"],"sourcesContent":["import { type Address, encodeAbiParameters, hashTypedData, keccak256, toHex } from \"viem\";\n\nimport { bytes32Zero } from \"../constants.js\";\nimport { type ClobSigner, getSignerAddress, signTypedDataWithSigner } from \"../signing/signer.js\";\nimport {\n\tCTF_EXCHANGE_V2_DOMAIN_NAME,\n\tCTF_EXCHANGE_V2_DOMAIN_VERSION,\n\tCTF_EXCHANGE_V2_ORDER_STRUCT,\n} from \"./model/ctfExchangeV2TypedData.js\";\nimport { EIP712_DOMAIN, type EIP712TypedData } from \"./model/eip712.js\";\nimport type { OrderHash, OrderSignature } from \"./model/order.js\";\nimport type { OrderDataV2, OrderV2, SignedOrderV2 } from \"./model/orderDataV2.js\";\nimport { SignatureTypeV2 } from \"./model/signatureTypeV2.js\";\nimport { generateOrderSalt } from \"./utils.js\";\n\nconst ORDER_TYPE_STRING =\n\t\"Order(uint256 salt,address maker,address signer,uint256 tokenId,uint256 makerAmount,uint256 takerAmount,uint8 side,uint8 signatureType,uint256 timestamp,bytes32 metadata,bytes32 builder)\";\n\nconst ORDER_TYPE_HASH = keccak256(toHex(ORDER_TYPE_STRING));\n\nconst DOMAIN_TYPE_HASH = keccak256(\n\ttoHex(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"),\n);\n\nconst TYPED_DATA_SIGN_STRUCT = [\n\t{ name: \"contents\", type: \"Order\" },\n\t{ name: \"name\", type: \"string\" },\n\t{ name: \"version\", type: \"string\" },\n\t{ name: \"chainId\", type: \"uint256\" },\n\t{ name: \"verifyingContract\", type: \"address\" },\n\t{ name: \"salt\", type: \"bytes32\" },\n];\n\nconst CTF_EXCHANGE_NAME_HASH = keccak256(toHex(CTF_EXCHANGE_V2_DOMAIN_NAME));\nconst CTF_EXCHANGE_VERSION_HASH = keccak256(toHex(CTF_EXCHANGE_V2_DOMAIN_VERSION));\n\nexport class ExchangeOrderBuilderV2 {\n\tprivate readonly appDomainSep: `0x${string}`;\n\n\tconstructor(\n\t\tprivate readonly contractAddress: string,\n\t\tprivate readonly chainId: number,\n\t\tprivate readonly signer: ClobSigner,\n\t\tprivate readonly generateSalt = generateOrderSalt,\n\t) {\n\t\tthis.appDomainSep = keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"address\" },\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tDOMAIN_TYPE_HASH,\n\t\t\t\t\tCTF_EXCHANGE_NAME_HASH,\n\t\t\t\t\tCTF_EXCHANGE_VERSION_HASH,\n\t\t\t\t\tBigInt(chainId),\n\t\t\t\t\tcontractAddress as Address,\n\t\t\t\t],\n\t\t\t),\n\t\t);\n\t}\n\n\tasync buildSignedOrder(orderData: OrderDataV2): Promise<SignedOrderV2> {\n\t\tconst order = await this.buildOrder(orderData);\n\t\tconst orderTypedData = this.buildOrderTypedData(order);\n\t\tconst orderSignature = await this.buildOrderSignature(orderTypedData);\n\n\t\treturn {\n\t\t\t...order,\n\t\t\tsignature: orderSignature,\n\t\t} as SignedOrderV2;\n\t}\n\n\tasync buildOrder({\n\t\tmaker,\n\t\ttokenId,\n\t\tmakerAmount,\n\t\ttakerAmount,\n\t\tside,\n\t\tsigner,\n\t\tsignatureType,\n\t\ttimestamp,\n\t\tmetadata,\n\t\tbuilder,\n\t\texpiration,\n\t}: OrderDataV2): Promise<OrderV2> {\n\t\tif (!signer) {\n\t\t\tsigner = maker;\n\t\t}\n\n\t\t// For POLY_1271 (deposit wallets), signer is the wallet contract — skip EOA address check\n\t\tif (signatureType !== SignatureTypeV2.POLY_1271) {\n\t\t\tconst signerAddress = await getSignerAddress(this.signer);\n\t\t\tif (signer !== signerAddress) {\n\t\t\t\tthrow new Error(\"signer does not match\");\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsalt: this.generateSalt(),\n\t\t\tmaker,\n\t\t\tsigner,\n\t\t\ttokenId,\n\t\t\tmakerAmount,\n\t\t\ttakerAmount,\n\t\t\tside,\n\t\t\tsignatureType: signatureType ?? SignatureTypeV2.EOA,\n\t\t\tmetadata: metadata ?? bytes32Zero,\n\t\t\tbuilder: builder ?? bytes32Zero,\n\t\t\ttimestamp: timestamp ?? Date.now().toString(),\n\t\t\texpiration: expiration ?? \"0\",\n\t\t};\n\t}\n\n\tbuildOrderTypedData(order: OrderV2): EIP712TypedData {\n\t\treturn {\n\t\t\tprimaryType: \"Order\",\n\t\t\ttypes: {\n\t\t\t\tEIP712Domain: EIP712_DOMAIN,\n\t\t\t\tOrder: CTF_EXCHANGE_V2_ORDER_STRUCT,\n\t\t\t},\n\t\t\tdomain: {\n\t\t\t\tname: CTF_EXCHANGE_V2_DOMAIN_NAME,\n\t\t\t\tversion: CTF_EXCHANGE_V2_DOMAIN_VERSION,\n\t\t\t\tchainId: this.chainId,\n\t\t\t\tverifyingContract: this.contractAddress,\n\t\t\t},\n\t\t\tmessage: {\n\t\t\t\tsalt: order.salt,\n\t\t\t\tmaker: order.maker,\n\t\t\t\tsigner: order.signer,\n\t\t\t\ttokenId: order.tokenId,\n\t\t\t\tmakerAmount: order.makerAmount,\n\t\t\t\ttakerAmount: order.takerAmount,\n\t\t\t\ttimestamp: order.timestamp,\n\t\t\t\tside: order.side === \"BUY\" ? 0 : 1,\n\t\t\t\tsignatureType: order.signatureType,\n\t\t\t\tmetadata: order.metadata,\n\t\t\t\tbuilder: order.builder,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync buildOrderSignature(typedData: EIP712TypedData): Promise<OrderSignature> {\n\t\tdelete typedData.types.EIP712Domain;\n\n\t\tconst msg = typedData.message;\n\n\t\tif ((msg.signatureType as number) !== SignatureTypeV2.POLY_1271) {\n\t\t\treturn signTypedDataWithSigner({\n\t\t\t\tsigner: this.signer,\n\t\t\t\tdomain: typedData.domain,\n\t\t\t\ttypes: typedData.types,\n\t\t\t\tvalue: typedData.message,\n\t\t\t\tprimaryType: typedData.primaryType,\n\t\t\t});\n\t\t}\n\n\t\tconst contentsHash = keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"address\" },\n\t\t\t\t\t{ type: \"address\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"uint8\" },\n\t\t\t\t\t{ type: \"uint8\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tORDER_TYPE_HASH,\n\t\t\t\t\tBigInt(msg.salt as string),\n\t\t\t\t\tmsg.maker as Address,\n\t\t\t\t\tmsg.signer as Address,\n\t\t\t\t\tBigInt(msg.tokenId as string),\n\t\t\t\t\tBigInt(msg.makerAmount as string),\n\t\t\t\t\tBigInt(msg.takerAmount as string),\n\t\t\t\t\tmsg.side as number,\n\t\t\t\t\tmsg.signatureType as number,\n\t\t\t\t\tBigInt(msg.timestamp as string),\n\t\t\t\t\tmsg.metadata as `0x${string}`,\n\t\t\t\t\tmsg.builder as `0x${string}`,\n\t\t\t\t],\n\t\t\t),\n\t\t);\n\n\t\tconst innerSig = await signTypedDataWithSigner({\n\t\t\tsigner: this.signer,\n\t\t\tdomain: {\n\t\t\t\tname: CTF_EXCHANGE_V2_DOMAIN_NAME,\n\t\t\t\tversion: CTF_EXCHANGE_V2_DOMAIN_VERSION,\n\t\t\t\tchainId: this.chainId,\n\t\t\t\tverifyingContract: this.contractAddress,\n\t\t\t},\n\t\t\ttypes: {\n\t\t\t\tTypedDataSign: TYPED_DATA_SIGN_STRUCT,\n\t\t\t\tOrder: CTF_EXCHANGE_V2_ORDER_STRUCT,\n\t\t\t},\n\t\t\tprimaryType: \"TypedDataSign\",\n\t\t\tvalue: {\n\t\t\t\tcontents: typedData.message,\n\t\t\t\tname: \"DepositWallet\",\n\t\t\t\tversion: \"1\",\n\t\t\t\tchainId: this.chainId,\n\t\t\t\tverifyingContract: msg.signer,\n\t\t\t\tsalt: bytes32Zero,\n\t\t\t},\n\t\t});\n\n\t\t// innerSig (65) || appDomainSep (32) || contentsHash (32) || contentsType || uint16_BE(len)\n\t\tconst ctLen = ORDER_TYPE_STRING.length;\n\t\tconst lenHex = ctLen.toString(16).padStart(4, \"0\");\n\t\treturn `0x${innerSig.slice(2)}${this.appDomainSep.slice(2)}${contentsHash.slice(2)}${toHex(ORDER_TYPE_STRING).slice(2)}${lenHex}`;\n\t}\n\n\tbuildOrderHash(orderTypedData: EIP712TypedData): OrderHash {\n\t\treturn hashTypedData(orderTypedData);\n\t}\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import "../signing/signer.js";
2
+ import "./model/orderDataV2.js";
@@ -0,0 +1,189 @@
1
+ import { bytes32Zero } from "../constants.js";
2
+ import { getSignerAddress, signTypedDataWithSigner } from "../signing/signer.js";
3
+ import { EIP712_DOMAIN } from "./model/eip712.js";
4
+ import { generateOrderSalt } from "./utils.js";
5
+ import { CTF_EXCHANGE_V2_DOMAIN_NAME, CTF_EXCHANGE_V2_DOMAIN_VERSION, CTF_EXCHANGE_V2_ORDER_STRUCT } from "./model/ctfExchangeV2TypedData.js";
6
+ import { SignatureTypeV2 } from "./model/signatureTypeV2.js";
7
+ import { encodeAbiParameters, hashTypedData, keccak256, toHex } from "viem";
8
+
9
+ //#region src/order-utils/exchangeOrderBuilderV2.ts
10
+ const ORDER_TYPE_STRING = "Order(uint256 salt,address maker,address signer,uint256 tokenId,uint256 makerAmount,uint256 takerAmount,uint8 side,uint8 signatureType,uint256 timestamp,bytes32 metadata,bytes32 builder)";
11
+ const ORDER_TYPE_HASH = keccak256(toHex(ORDER_TYPE_STRING));
12
+ const DOMAIN_TYPE_HASH = keccak256(toHex("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"));
13
+ const TYPED_DATA_SIGN_STRUCT = [
14
+ {
15
+ name: "contents",
16
+ type: "Order"
17
+ },
18
+ {
19
+ name: "name",
20
+ type: "string"
21
+ },
22
+ {
23
+ name: "version",
24
+ type: "string"
25
+ },
26
+ {
27
+ name: "chainId",
28
+ type: "uint256"
29
+ },
30
+ {
31
+ name: "verifyingContract",
32
+ type: "address"
33
+ },
34
+ {
35
+ name: "salt",
36
+ type: "bytes32"
37
+ }
38
+ ];
39
+ const CTF_EXCHANGE_NAME_HASH = keccak256(toHex(CTF_EXCHANGE_V2_DOMAIN_NAME));
40
+ const CTF_EXCHANGE_VERSION_HASH = keccak256(toHex(CTF_EXCHANGE_V2_DOMAIN_VERSION));
41
+ var ExchangeOrderBuilderV2 = class {
42
+ appDomainSep;
43
+ constructor(contractAddress, chainId, signer, generateSalt = generateOrderSalt) {
44
+ this.contractAddress = contractAddress;
45
+ this.chainId = chainId;
46
+ this.signer = signer;
47
+ this.generateSalt = generateSalt;
48
+ this.appDomainSep = keccak256(encodeAbiParameters([
49
+ { type: "bytes32" },
50
+ { type: "bytes32" },
51
+ { type: "bytes32" },
52
+ { type: "uint256" },
53
+ { type: "address" }
54
+ ], [
55
+ DOMAIN_TYPE_HASH,
56
+ CTF_EXCHANGE_NAME_HASH,
57
+ CTF_EXCHANGE_VERSION_HASH,
58
+ BigInt(chainId),
59
+ contractAddress
60
+ ]));
61
+ }
62
+ async buildSignedOrder(orderData) {
63
+ const order = await this.buildOrder(orderData);
64
+ const orderTypedData = this.buildOrderTypedData(order);
65
+ const orderSignature = await this.buildOrderSignature(orderTypedData);
66
+ return {
67
+ ...order,
68
+ signature: orderSignature
69
+ };
70
+ }
71
+ async buildOrder({ maker, tokenId, makerAmount, takerAmount, side, signer, signatureType, timestamp, metadata, builder, expiration }) {
72
+ if (!signer) signer = maker;
73
+ if (signatureType !== SignatureTypeV2.POLY_1271) {
74
+ const signerAddress = await getSignerAddress(this.signer);
75
+ if (signer !== signerAddress) throw new Error("signer does not match");
76
+ }
77
+ return {
78
+ salt: this.generateSalt(),
79
+ maker,
80
+ signer,
81
+ tokenId,
82
+ makerAmount,
83
+ takerAmount,
84
+ side,
85
+ signatureType: signatureType ?? SignatureTypeV2.EOA,
86
+ metadata: metadata ?? bytes32Zero,
87
+ builder: builder ?? bytes32Zero,
88
+ timestamp: timestamp ?? Date.now().toString(),
89
+ expiration: expiration ?? "0"
90
+ };
91
+ }
92
+ buildOrderTypedData(order) {
93
+ return {
94
+ primaryType: "Order",
95
+ types: {
96
+ EIP712Domain: EIP712_DOMAIN,
97
+ Order: CTF_EXCHANGE_V2_ORDER_STRUCT
98
+ },
99
+ domain: {
100
+ name: CTF_EXCHANGE_V2_DOMAIN_NAME,
101
+ version: CTF_EXCHANGE_V2_DOMAIN_VERSION,
102
+ chainId: this.chainId,
103
+ verifyingContract: this.contractAddress
104
+ },
105
+ message: {
106
+ salt: order.salt,
107
+ maker: order.maker,
108
+ signer: order.signer,
109
+ tokenId: order.tokenId,
110
+ makerAmount: order.makerAmount,
111
+ takerAmount: order.takerAmount,
112
+ timestamp: order.timestamp,
113
+ side: order.side === "BUY" ? 0 : 1,
114
+ signatureType: order.signatureType,
115
+ metadata: order.metadata,
116
+ builder: order.builder
117
+ }
118
+ };
119
+ }
120
+ async buildOrderSignature(typedData) {
121
+ delete typedData.types.EIP712Domain;
122
+ const msg = typedData.message;
123
+ if (msg.signatureType !== SignatureTypeV2.POLY_1271) return signTypedDataWithSigner({
124
+ signer: this.signer,
125
+ domain: typedData.domain,
126
+ types: typedData.types,
127
+ value: typedData.message,
128
+ primaryType: typedData.primaryType
129
+ });
130
+ const contentsHash = keccak256(encodeAbiParameters([
131
+ { type: "bytes32" },
132
+ { type: "uint256" },
133
+ { type: "address" },
134
+ { type: "address" },
135
+ { type: "uint256" },
136
+ { type: "uint256" },
137
+ { type: "uint256" },
138
+ { type: "uint8" },
139
+ { type: "uint8" },
140
+ { type: "uint256" },
141
+ { type: "bytes32" },
142
+ { type: "bytes32" }
143
+ ], [
144
+ ORDER_TYPE_HASH,
145
+ BigInt(msg.salt),
146
+ msg.maker,
147
+ msg.signer,
148
+ BigInt(msg.tokenId),
149
+ BigInt(msg.makerAmount),
150
+ BigInt(msg.takerAmount),
151
+ msg.side,
152
+ msg.signatureType,
153
+ BigInt(msg.timestamp),
154
+ msg.metadata,
155
+ msg.builder
156
+ ]));
157
+ const innerSig = await signTypedDataWithSigner({
158
+ signer: this.signer,
159
+ domain: {
160
+ name: CTF_EXCHANGE_V2_DOMAIN_NAME,
161
+ version: CTF_EXCHANGE_V2_DOMAIN_VERSION,
162
+ chainId: this.chainId,
163
+ verifyingContract: this.contractAddress
164
+ },
165
+ types: {
166
+ TypedDataSign: TYPED_DATA_SIGN_STRUCT,
167
+ Order: CTF_EXCHANGE_V2_ORDER_STRUCT
168
+ },
169
+ primaryType: "TypedDataSign",
170
+ value: {
171
+ contents: typedData.message,
172
+ name: "DepositWallet",
173
+ version: "1",
174
+ chainId: this.chainId,
175
+ verifyingContract: msg.signer,
176
+ salt: bytes32Zero
177
+ }
178
+ });
179
+ const lenHex = 186 .toString(16).padStart(4, "0");
180
+ return `0x${innerSig.slice(2)}${this.appDomainSep.slice(2)}${contentsHash.slice(2)}${toHex(ORDER_TYPE_STRING).slice(2)}${lenHex}`;
181
+ }
182
+ buildOrderHash(orderTypedData) {
183
+ return hashTypedData(orderTypedData);
184
+ }
185
+ };
186
+
187
+ //#endregion
188
+ export { ExchangeOrderBuilderV2 };
189
+ //# sourceMappingURL=exchangeOrderBuilderV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchangeOrderBuilderV2.js","names":["contractAddress: string","chainId: number","signer: ClobSigner"],"sources":["../../src/order-utils/exchangeOrderBuilderV2.ts"],"sourcesContent":["import { type Address, encodeAbiParameters, hashTypedData, keccak256, toHex } from \"viem\";\n\nimport { bytes32Zero } from \"../constants.js\";\nimport { type ClobSigner, getSignerAddress, signTypedDataWithSigner } from \"../signing/signer.js\";\nimport {\n\tCTF_EXCHANGE_V2_DOMAIN_NAME,\n\tCTF_EXCHANGE_V2_DOMAIN_VERSION,\n\tCTF_EXCHANGE_V2_ORDER_STRUCT,\n} from \"./model/ctfExchangeV2TypedData.js\";\nimport { EIP712_DOMAIN, type EIP712TypedData } from \"./model/eip712.js\";\nimport type { OrderHash, OrderSignature } from \"./model/order.js\";\nimport type { OrderDataV2, OrderV2, SignedOrderV2 } from \"./model/orderDataV2.js\";\nimport { SignatureTypeV2 } from \"./model/signatureTypeV2.js\";\nimport { generateOrderSalt } from \"./utils.js\";\n\nconst ORDER_TYPE_STRING =\n\t\"Order(uint256 salt,address maker,address signer,uint256 tokenId,uint256 makerAmount,uint256 takerAmount,uint8 side,uint8 signatureType,uint256 timestamp,bytes32 metadata,bytes32 builder)\";\n\nconst ORDER_TYPE_HASH = keccak256(toHex(ORDER_TYPE_STRING));\n\nconst DOMAIN_TYPE_HASH = keccak256(\n\ttoHex(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"),\n);\n\nconst TYPED_DATA_SIGN_STRUCT = [\n\t{ name: \"contents\", type: \"Order\" },\n\t{ name: \"name\", type: \"string\" },\n\t{ name: \"version\", type: \"string\" },\n\t{ name: \"chainId\", type: \"uint256\" },\n\t{ name: \"verifyingContract\", type: \"address\" },\n\t{ name: \"salt\", type: \"bytes32\" },\n];\n\nconst CTF_EXCHANGE_NAME_HASH = keccak256(toHex(CTF_EXCHANGE_V2_DOMAIN_NAME));\nconst CTF_EXCHANGE_VERSION_HASH = keccak256(toHex(CTF_EXCHANGE_V2_DOMAIN_VERSION));\n\nexport class ExchangeOrderBuilderV2 {\n\tprivate readonly appDomainSep: `0x${string}`;\n\n\tconstructor(\n\t\tprivate readonly contractAddress: string,\n\t\tprivate readonly chainId: number,\n\t\tprivate readonly signer: ClobSigner,\n\t\tprivate readonly generateSalt = generateOrderSalt,\n\t) {\n\t\tthis.appDomainSep = keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"address\" },\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tDOMAIN_TYPE_HASH,\n\t\t\t\t\tCTF_EXCHANGE_NAME_HASH,\n\t\t\t\t\tCTF_EXCHANGE_VERSION_HASH,\n\t\t\t\t\tBigInt(chainId),\n\t\t\t\t\tcontractAddress as Address,\n\t\t\t\t],\n\t\t\t),\n\t\t);\n\t}\n\n\tasync buildSignedOrder(orderData: OrderDataV2): Promise<SignedOrderV2> {\n\t\tconst order = await this.buildOrder(orderData);\n\t\tconst orderTypedData = this.buildOrderTypedData(order);\n\t\tconst orderSignature = await this.buildOrderSignature(orderTypedData);\n\n\t\treturn {\n\t\t\t...order,\n\t\t\tsignature: orderSignature,\n\t\t} as SignedOrderV2;\n\t}\n\n\tasync buildOrder({\n\t\tmaker,\n\t\ttokenId,\n\t\tmakerAmount,\n\t\ttakerAmount,\n\t\tside,\n\t\tsigner,\n\t\tsignatureType,\n\t\ttimestamp,\n\t\tmetadata,\n\t\tbuilder,\n\t\texpiration,\n\t}: OrderDataV2): Promise<OrderV2> {\n\t\tif (!signer) {\n\t\t\tsigner = maker;\n\t\t}\n\n\t\t// For POLY_1271 (deposit wallets), signer is the wallet contract — skip EOA address check\n\t\tif (signatureType !== SignatureTypeV2.POLY_1271) {\n\t\t\tconst signerAddress = await getSignerAddress(this.signer);\n\t\t\tif (signer !== signerAddress) {\n\t\t\t\tthrow new Error(\"signer does not match\");\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsalt: this.generateSalt(),\n\t\t\tmaker,\n\t\t\tsigner,\n\t\t\ttokenId,\n\t\t\tmakerAmount,\n\t\t\ttakerAmount,\n\t\t\tside,\n\t\t\tsignatureType: signatureType ?? SignatureTypeV2.EOA,\n\t\t\tmetadata: metadata ?? bytes32Zero,\n\t\t\tbuilder: builder ?? bytes32Zero,\n\t\t\ttimestamp: timestamp ?? Date.now().toString(),\n\t\t\texpiration: expiration ?? \"0\",\n\t\t};\n\t}\n\n\tbuildOrderTypedData(order: OrderV2): EIP712TypedData {\n\t\treturn {\n\t\t\tprimaryType: \"Order\",\n\t\t\ttypes: {\n\t\t\t\tEIP712Domain: EIP712_DOMAIN,\n\t\t\t\tOrder: CTF_EXCHANGE_V2_ORDER_STRUCT,\n\t\t\t},\n\t\t\tdomain: {\n\t\t\t\tname: CTF_EXCHANGE_V2_DOMAIN_NAME,\n\t\t\t\tversion: CTF_EXCHANGE_V2_DOMAIN_VERSION,\n\t\t\t\tchainId: this.chainId,\n\t\t\t\tverifyingContract: this.contractAddress,\n\t\t\t},\n\t\t\tmessage: {\n\t\t\t\tsalt: order.salt,\n\t\t\t\tmaker: order.maker,\n\t\t\t\tsigner: order.signer,\n\t\t\t\ttokenId: order.tokenId,\n\t\t\t\tmakerAmount: order.makerAmount,\n\t\t\t\ttakerAmount: order.takerAmount,\n\t\t\t\ttimestamp: order.timestamp,\n\t\t\t\tside: order.side === \"BUY\" ? 0 : 1,\n\t\t\t\tsignatureType: order.signatureType,\n\t\t\t\tmetadata: order.metadata,\n\t\t\t\tbuilder: order.builder,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync buildOrderSignature(typedData: EIP712TypedData): Promise<OrderSignature> {\n\t\tdelete typedData.types.EIP712Domain;\n\n\t\tconst msg = typedData.message;\n\n\t\tif ((msg.signatureType as number) !== SignatureTypeV2.POLY_1271) {\n\t\t\treturn signTypedDataWithSigner({\n\t\t\t\tsigner: this.signer,\n\t\t\t\tdomain: typedData.domain,\n\t\t\t\ttypes: typedData.types,\n\t\t\t\tvalue: typedData.message,\n\t\t\t\tprimaryType: typedData.primaryType,\n\t\t\t});\n\t\t}\n\n\t\tconst contentsHash = keccak256(\n\t\t\tencodeAbiParameters(\n\t\t\t\t[\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"address\" },\n\t\t\t\t\t{ type: \"address\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"uint8\" },\n\t\t\t\t\t{ type: \"uint8\" },\n\t\t\t\t\t{ type: \"uint256\" },\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t\t{ type: \"bytes32\" },\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\tORDER_TYPE_HASH,\n\t\t\t\t\tBigInt(msg.salt as string),\n\t\t\t\t\tmsg.maker as Address,\n\t\t\t\t\tmsg.signer as Address,\n\t\t\t\t\tBigInt(msg.tokenId as string),\n\t\t\t\t\tBigInt(msg.makerAmount as string),\n\t\t\t\t\tBigInt(msg.takerAmount as string),\n\t\t\t\t\tmsg.side as number,\n\t\t\t\t\tmsg.signatureType as number,\n\t\t\t\t\tBigInt(msg.timestamp as string),\n\t\t\t\t\tmsg.metadata as `0x${string}`,\n\t\t\t\t\tmsg.builder as `0x${string}`,\n\t\t\t\t],\n\t\t\t),\n\t\t);\n\n\t\tconst innerSig = await signTypedDataWithSigner({\n\t\t\tsigner: this.signer,\n\t\t\tdomain: {\n\t\t\t\tname: CTF_EXCHANGE_V2_DOMAIN_NAME,\n\t\t\t\tversion: CTF_EXCHANGE_V2_DOMAIN_VERSION,\n\t\t\t\tchainId: this.chainId,\n\t\t\t\tverifyingContract: this.contractAddress,\n\t\t\t},\n\t\t\ttypes: {\n\t\t\t\tTypedDataSign: TYPED_DATA_SIGN_STRUCT,\n\t\t\t\tOrder: CTF_EXCHANGE_V2_ORDER_STRUCT,\n\t\t\t},\n\t\t\tprimaryType: \"TypedDataSign\",\n\t\t\tvalue: {\n\t\t\t\tcontents: typedData.message,\n\t\t\t\tname: \"DepositWallet\",\n\t\t\t\tversion: \"1\",\n\t\t\t\tchainId: this.chainId,\n\t\t\t\tverifyingContract: msg.signer,\n\t\t\t\tsalt: bytes32Zero,\n\t\t\t},\n\t\t});\n\n\t\t// innerSig (65) || appDomainSep (32) || contentsHash (32) || contentsType || uint16_BE(len)\n\t\tconst ctLen = ORDER_TYPE_STRING.length;\n\t\tconst lenHex = ctLen.toString(16).padStart(4, \"0\");\n\t\treturn `0x${innerSig.slice(2)}${this.appDomainSep.slice(2)}${contentsHash.slice(2)}${toHex(ORDER_TYPE_STRING).slice(2)}${lenHex}`;\n\t}\n\n\tbuildOrderHash(orderTypedData: EIP712TypedData): OrderHash {\n\t\treturn hashTypedData(orderTypedData);\n\t}\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { EIP712Object, EIP712ObjectValue } from "./model/eip712.js";
2
+ import { SignatureTypeV1 } from "./model/signatureTypeV1.js";
3
+ import { OrderV1, SignedOrderV1 } from "./model/orderDataV1.js";
4
+ import "./exchangeOrderBuilderV1.js";
5
+ import { SignatureTypeV2 } from "./model/signatureTypeV2.js";
6
+ import { OrderV2, SignedOrderV2 } from "./model/orderDataV2.js";
7
+ import "./exchangeOrderBuilderV2.js";
@@ -0,0 +1,60 @@
1
+
2
+ //#region src/order-utils/model/ctfExchangeV1TypedData.ts
3
+ const CTF_EXCHANGE_V1_DOMAIN_NAME = "Polymarket CTF Exchange";
4
+ const CTF_EXCHANGE_V1_DOMAIN_VERSION = "1";
5
+ const CTF_EXCHANGE_V1_ORDER_STRUCT = [
6
+ {
7
+ name: "salt",
8
+ type: "uint256"
9
+ },
10
+ {
11
+ name: "maker",
12
+ type: "address"
13
+ },
14
+ {
15
+ name: "signer",
16
+ type: "address"
17
+ },
18
+ {
19
+ name: "taker",
20
+ type: "address"
21
+ },
22
+ {
23
+ name: "tokenId",
24
+ type: "uint256"
25
+ },
26
+ {
27
+ name: "makerAmount",
28
+ type: "uint256"
29
+ },
30
+ {
31
+ name: "takerAmount",
32
+ type: "uint256"
33
+ },
34
+ {
35
+ name: "expiration",
36
+ type: "uint256"
37
+ },
38
+ {
39
+ name: "nonce",
40
+ type: "uint256"
41
+ },
42
+ {
43
+ name: "feeRateBps",
44
+ type: "uint256"
45
+ },
46
+ {
47
+ name: "side",
48
+ type: "uint8"
49
+ },
50
+ {
51
+ name: "signatureType",
52
+ type: "uint8"
53
+ }
54
+ ];
55
+
56
+ //#endregion
57
+ exports.CTF_EXCHANGE_V1_DOMAIN_NAME = CTF_EXCHANGE_V1_DOMAIN_NAME;
58
+ exports.CTF_EXCHANGE_V1_DOMAIN_VERSION = CTF_EXCHANGE_V1_DOMAIN_VERSION;
59
+ exports.CTF_EXCHANGE_V1_ORDER_STRUCT = CTF_EXCHANGE_V1_ORDER_STRUCT;
60
+ //# sourceMappingURL=ctfExchangeV1TypedData.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ctfExchangeV1TypedData.cjs","names":[],"sources":["../../../src/order-utils/model/ctfExchangeV1TypedData.ts"],"sourcesContent":["export const CTF_EXCHANGE_V1_DOMAIN_NAME = \"Polymarket CTF Exchange\";\n\nexport const CTF_EXCHANGE_V1_DOMAIN_VERSION = \"1\";\n\nexport const CTF_EXCHANGE_V1_ORDER_STRUCT = [\n\t{ name: \"salt\", type: \"uint256\" },\n\t{ name: \"maker\", type: \"address\" },\n\t{ name: \"signer\", type: \"address\" },\n\t{ name: \"taker\", type: \"address\" },\n\t{ name: \"tokenId\", type: \"uint256\" },\n\t{ name: \"makerAmount\", type: \"uint256\" },\n\t{ name: \"takerAmount\", type: \"uint256\" },\n\t{ name: \"expiration\", type: \"uint256\" },\n\t{ name: \"nonce\", type: \"uint256\" },\n\t{ name: \"feeRateBps\", type: \"uint256\" },\n\t{ name: \"side\", type: \"uint8\" },\n\t{ name: \"signatureType\", type: \"uint8\" },\n];\n"],"mappings":";;AAAA,MAAa,8BAA8B;AAE3C,MAAa,iCAAiC;AAE9C,MAAa,+BAA+B;CAC3C;EAAE,MAAM;EAAQ,MAAM;EAAW;CACjC;EAAE,MAAM;EAAS,MAAM;EAAW;CAClC;EAAE,MAAM;EAAU,MAAM;EAAW;CACnC;EAAE,MAAM;EAAS,MAAM;EAAW;CAClC;EAAE,MAAM;EAAW,MAAM;EAAW;CACpC;EAAE,MAAM;EAAe,MAAM;EAAW;CACxC;EAAE,MAAM;EAAe,MAAM;EAAW;CACxC;EAAE,MAAM;EAAc,MAAM;EAAW;CACvC;EAAE,MAAM;EAAS,MAAM;EAAW;CAClC;EAAE,MAAM;EAAc,MAAM;EAAW;CACvC;EAAE,MAAM;EAAQ,MAAM;EAAS;CAC/B;EAAE,MAAM;EAAiB,MAAM;EAAS;CACxC"}