Skip to content

Commit

Permalink
feat(quote): add smartSlippage property to quote (#64)
Browse files Browse the repository at this point in the history
* feat: add quote v1.1.0 with the `smartQuote` property

* feat: new parent schema v1.2.0 with updated quote schema

* chore: add generated types from new schema

* feat: add unittests for new schemas

* chore: update version to current one

* refactor: rename smartQuote to smartSlippage
  • Loading branch information
alfetopito authored Sep 5, 2024
1 parent 57d0cd2 commit 6cd7e05
Show file tree
Hide file tree
Showing 5 changed files with 398 additions and 56 deletions.
11 changes: 7 additions & 4 deletions src/generatedTypes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ import * as v0_8_0 from './v0.8.0'
import * as v0_9_0 from './v0.9.0'
import * as v1_0_0 from './v1.0.0'
import * as v1_1_0 from './v1.1.0'
import * as v1_2_0 from './v1.2.0'

export * as latest from './v1.1.0'
export * as latest from './v1.2.0'

export const LATEST_APP_DATA_VERSION = '1.1.0'
export const LATEST_QUOTE_METADATA_VERSION = '1.0.0'
export const LATEST_APP_DATA_VERSION = '1.2.0'
export const LATEST_QUOTE_METADATA_VERSION = '1.1.0'
export const LATEST_REFERRER_METADATA_VERSION = '0.2.0'
export const LATEST_ORDER_CLASS_METADATA_VERSION = '0.3.0'
export const LATEST_UTM_METADATA_VERSION = '0.2.0'
Expand All @@ -27,8 +28,9 @@ export const LATEST_WIDGET_METADATA_VERSION = '0.1.0'
export const LATEST_PARTNER_FEE_METADATA_VERSION = '0.1.0'
export const LATEST_REPLACED_ORDER_METADATA_VERSION = '0.1.0'

export type LatestAppDataDocVersion = v1_1_0.AppDataRootSchema
export type LatestAppDataDocVersion = v1_2_0.AppDataRootSchema
export type AnyAppDataDocVersion =
| v1_2_0.AppDataRootSchema
| v1_1_0.AppDataRootSchema
| v1_0_0.AppDataRootSchema
| v0_11_0.AppDataRootSchema
Expand All @@ -44,6 +46,7 @@ export type AnyAppDataDocVersion =
| v0_1_0.AppDataRootSchema

export {
v1_2_0,
v1_1_0,
v1_0_0,
v0_11_0,
Expand Down
165 changes: 165 additions & 0 deletions src/generatedTypes/v1.2.0.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
/* tslint:disable */
/**
* This file was automatically generated by json-schema-to-typescript.
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
* and run json-schema-to-typescript to regenerate this file.
*/

/**
* Semantic versioning of document.
*/
export type Version = string;
/**
* The code identifying the CLI, UI, service generating the order.
*/
export type AppCode = string;
/**
* Environment from which the order came from.
*/
export type Environment = string;
/**
* The address of the trader who signs the CoW Swap order. This field should normally be omitted; it is recommended to use it if the signer is a smart-contract wallet using EIP-1271 signatures.
*/
export type Signer = string;
export type ReferrerAddress = string;
/**
* Tracks in which medium the traffic originated from (twitter, facebook, etc.)
*/
export type UTMSource = string;
/**
* Tracks in which medium the traffic originated from (mail, CPC, social, etc.)
*/
export type UTMMedium = string;
/**
* Track the performance of a specific campaign
*/
export type UTMCampaign = string;
/**
* Track which link was clicked
*/
export type UTMContent = string;
/**
* Track which keyword term a website visitor came from
*/
export type UTMKeywordTerm = string;
/**
* Slippage tolerance that was applied to the order to get the limit price. Expressed in Basis Points (BPS). One basis point is equivalent to 0.01% (1/100th of a percent)
*/
export type SlippageBips = number;
/**
* Whether the given slippageBips used is originated from a Smart slippage suggestion
*/
export type SmartSlippage = boolean;
/**
* Indicator of the order class.
*/
export type OrderClass1 = "market" | "limit" | "liquidity" | "twap";
/**
* Semantic versioning of document.
*/
export type Version1 = string;
/**
* The contract to call for the hook
*/
export type HookTarget = string;
/**
* The calldata to use when calling the hook
*/
export type HookCallData = string;
/**
* The gas limit (in gas units) for the hook
*/
export type HookGasLimit = string;
/**
* CoW Hooks to call before an order executes
*/
export type PreHooks = CoWHook[];
/**
* CoW Hooks to call after an order executes
*/
export type PostHooks = CoWHook[];
/**
* The code identifying the UI powering the widget
*/
export type AppCode1 = string;
/**
* Environment from which the order came from.
*/
export type Environment1 = string;
/**
* The fee in basis points (BPS) to be paid to the partner. One basis point is equivalent to 0.01% (1/100th of a percent)
*/
export type BasisPointBPS = number;
/**
* The Ethereum address of the partner to receive the fee.
*/
export type PartnerAccount = string;
/**
* The replaced order UID.
*/
export type ReplacedOrderUID = string;

/**
* Metadata JSON document for adding information to orders.
*/
export interface AppDataRootSchema {
version: Version;
appCode?: AppCode;
environment?: Environment;
metadata: Metadata;
}
/**
* Each metadata will specify one aspect of the order.
*/
export interface Metadata {
signer?: Signer;
referrer?: Referrer;
utm?: UTMCodes;
quote?: Quote;
orderClass?: OrderClass;
hooks?: OrderInteractionHooks;
widget?: Widget;
partnerFee?: PartnerFee;
replacedOrder?: ReplacedOrder;
}
export interface Referrer {
address: ReferrerAddress;
}
export interface UTMCodes {
utmSource?: UTMSource;
utmMedium?: UTMMedium;
utmCampaign?: UTMCampaign;
utmContent?: UTMContent;
utmTerm?: UTMKeywordTerm;
}
export interface Quote {
slippageBips: SlippageBips;
smartSlippage?: SmartSlippage;
}
export interface OrderClass {
orderClass: OrderClass1;
}
/**
* Optional Pre and Post order interaction hooks attached to a single order
*/
export interface OrderInteractionHooks {
version?: Version1;
pre?: PreHooks;
post?: PostHooks;
}
export interface CoWHook {
target: HookTarget;
callData: HookCallData;
gasLimit: HookGasLimit;
}
export interface Widget {
appCode: AppCode1;
environment?: Environment1;
}
export interface PartnerFee {
bps: BasisPointBPS;
recipient: PartnerAccount;
}
export interface ReplacedOrder {
uid: ReplacedOrderUID;
}
23 changes: 23 additions & 0 deletions src/schemas/quote/v1.1.0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"$id": "#quote/v0.2.0.json",
"$schema": "http://json-schema.org/draft-07/schema",
"required": [
"slippageBips"
],
"title": "Quote",
"type": "object",
"additionalProperties": false,
"properties": {
"slippageBips": {
"title": "Slippage Bips",
"description": "Slippage tolerance that was applied to the order to get the limit price. Expressed in Basis Points (BPS). One basis point is equivalent to 0.01% (1/100th of a percent)",
"$ref": "../definitions.json#/definitions/bps"
},
"smartSlippage": {
"title": "Smart Slippage",
"description": "Whether the given slippageBips used is originated from a Smart slippage suggestion",
"type": "boolean",
"default": false
}
}
}
78 changes: 78 additions & 0 deletions src/schemas/v1.2.0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{
"$id": "https://cowswap.exchange/schemas/app-data/v1.2.0.json",
"$schema": "http://json-schema.org/draft-07/schema",
"description": "Metadata JSON document for adding information to orders.",
"required": [
"version",
"metadata"
],
"title": "AppData Root Schema",
"type": "object",
"additionalProperties": false,
"properties": {
"version": {
"$ref": "definitions.json#/definitions/version",
"readOnly": true,
"default": "1.2.0"
},
"appCode": {
"$id": "#/properties/appCode",
"description": "The code identifying the CLI, UI, service generating the order.",
"examples": [
"CoW Swap"
],
"title": "App Code",
"type": "string"
},
"environment": {
"$id": "#/properties/environment",
"description": "Environment from which the order came from.",
"title": "Environment",
"type": "string",
"examples": [
"production",
"development",
"staging",
"ens"
]
},
"metadata": {
"$id": "#/properties/metadata",
"default": {},
"description": "Each metadata will specify one aspect of the order.",
"required": [],
"title": "Metadata",
"type": "object",
"additionalProperties": false,
"properties": {
"signer": {
"$ref": "signer/v0.1.0.json#"
},
"referrer": {
"$ref": "referrer/v0.2.0.json#"
},
"utm": {
"$ref": "utm/v0.2.0.json#"
},
"quote": {
"$ref": "quote/v1.1.0.json#"
},
"orderClass": {
"$ref": "orderClass/v0.3.0.json#"
},
"hooks": {
"$ref": "hooks/v0.1.0.json#"
},
"widget": {
"$ref": "widget/v0.1.0.json#"
},
"partnerFee": {
"$ref": "partnerFee/v0.1.0.json#"
},
"replacedOrder": {
"$ref": "replacedOrder/v0.1.0.json#"
}
}
}
}
}
Loading

0 comments on commit 6cd7e05

Please sign in to comment.