@lifi/perps-sdk-provider-hyperliquid 10.0.0 → 10.1.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.
@@ -1 +1 @@
1
- {"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACf,MAAM,mBAAmB,CAAA;AAmF1B,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
1
+ {"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACf,MAAM,mBAAmB,CAAA;AAoF1B,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
@@ -39,6 +39,7 @@ function projectHyperliquidDescriptor(descriptor, config) {
39
39
  case perps_types_1.ActionType.ACCEPT_PROVIDER_TERMS:
40
40
  case perps_types_1.ActionType.DEPOSIT:
41
41
  case perps_types_1.ActionType.META_ACCEPT_TERMS:
42
+ case perps_types_1.ActionType.SYNC_FEE_ATTRIBUTION:
42
43
  throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.SDKError, `Hyperliquid account-config mapper has no projection for ` +
43
44
  `descriptor type '${descriptor.type}' — this ActionType is not ` +
44
45
  `valid on Provider.setup / Provider.options for Hyperliquid.`);
@@ -1 +1 @@
1
- {"version":3,"file":"accountConfig.js","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":";;AAwFA,4EAQC;AAhGD,+CAA4C;AAM5C,mDAA8D;AAE9D,SAAS,WAAW,CAAC,KAAY;IAC/B,MAAM,IAAI,KAAK,CACb,sDAAsD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC9E,CAAA;AACH,CAAC;AAmBD,SAAS,4BAA4B,CACnC,UAA0B,EAC1B,MAAgC;IAEhC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,wBAAU,CAAC,aAAa,CAAC;QAC9B,KAAK,wBAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,wBAAU,CAAC,YAAY;YAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QAE9C,KAAK,wBAAU,CAAC,YAAY;YAC1B,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;aAC1D,CAAA;QAEH,KAAK,wBAAU,CAAC,kBAAkB,CAAC;QACnC,KAAK,wBAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,wBAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,wBAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,wBAAU,CAAC,QAAQ,CAAC;QACzB,KAAK,wBAAU,CAAC,WAAW,CAAC;QAC5B,KAAK,wBAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,wBAAU,CAAC,gBAAgB,CAAC;QACjC,KAAK,wBAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,wBAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,wBAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,wBAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,wBAAU,CAAC,eAAe,CAAC;QAChC,KAAK,wBAAU,CAAC,sBAAsB,CAAC;QACvC,KAAK,wBAAU,CAAC,uBAAuB,CAAC;QACxC,KAAK,wBAAU,CAAC,gBAAgB,CAAC;QACjC,KAAK,wBAAU,CAAC,uBAAuB,CAAC;QACxC,KAAK,wBAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,wBAAU,CAAC,sBAAsB,CAAC;QACvC,KAAK,wBAAU,CAAC,qBAAqB,CAAC;QACtC,KAAK,wBAAU,CAAC,OAAO,CAAC;QACxB,KAAK,wBAAU,CAAC,iBAAiB;YAC/B,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,QAAQ,EACvB,0DAA0D;gBACxD,oBAAoB,UAAU,CAAC,IAAI,6BAA6B;gBAChE,6DAA6D,CAChE,CAAA;QAEH;YACE,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AASD,SAAgB,gCAAgC,CAC9C,MAAgC,EAChC,KAAuB,EACvB,OAAyB;IAEzB,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC/C,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,CACjD,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"accountConfig.js","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":";;AAyFA,4EAQC;AAjGD,+CAA4C;AAM5C,mDAA8D;AAE9D,SAAS,WAAW,CAAC,KAAY;IAC/B,MAAM,IAAI,KAAK,CACb,sDAAsD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC9E,CAAA;AACH,CAAC;AAmBD,SAAS,4BAA4B,CACnC,UAA0B,EAC1B,MAAgC;IAEhC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,wBAAU,CAAC,aAAa,CAAC;QAC9B,KAAK,wBAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,wBAAU,CAAC,YAAY;YAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QAE9C,KAAK,wBAAU,CAAC,YAAY;YAC1B,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;aAC1D,CAAA;QAEH,KAAK,wBAAU,CAAC,kBAAkB,CAAC;QACnC,KAAK,wBAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,wBAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,wBAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,wBAAU,CAAC,QAAQ,CAAC;QACzB,KAAK,wBAAU,CAAC,WAAW,CAAC;QAC5B,KAAK,wBAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,wBAAU,CAAC,gBAAgB,CAAC;QACjC,KAAK,wBAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,wBAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,wBAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,wBAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,wBAAU,CAAC,eAAe,CAAC;QAChC,KAAK,wBAAU,CAAC,sBAAsB,CAAC;QACvC,KAAK,wBAAU,CAAC,uBAAuB,CAAC;QACxC,KAAK,wBAAU,CAAC,gBAAgB,CAAC;QACjC,KAAK,wBAAU,CAAC,uBAAuB,CAAC;QACxC,KAAK,wBAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,wBAAU,CAAC,sBAAsB,CAAC;QACvC,KAAK,wBAAU,CAAC,qBAAqB,CAAC;QACtC,KAAK,wBAAU,CAAC,OAAO,CAAC;QACxB,KAAK,wBAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,wBAAU,CAAC,oBAAoB;YAClC,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,QAAQ,EACvB,0DAA0D;gBACxD,oBAAoB,UAAU,CAAC,IAAI,6BAA6B;gBAChE,6DAA6D,CAChE,CAAA;QAEH;YACE,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AASD,SAAgB,gCAAgC,CAC9C,MAAgC,EAChC,KAAuB,EACvB,OAAyB;IAEzB,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC/C,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,CACjD,CAAA;AACH,CAAC"}
@@ -9,6 +9,8 @@ export type HlUserFill = {
9
9
  dir: string;
10
10
  fee: string;
11
11
  feeToken?: string;
12
+ builderFee?: string;
13
+ cloid?: string;
12
14
  closedPnl: string;
13
15
  crossed: boolean;
14
16
  time: number;
@@ -1 +1 @@
1
- {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/types/fill.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IAKX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAGD,MAAM,MAAM,WAAW,GAAG,UAAU,EAAE,CAAA;AAGtC,MAAM,MAAM,iBAAiB,GAAG,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/types/fill.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IAKX,QAAQ,CAAC,EAAE,MAAM,CAAA;IAMjB,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAGD,MAAM,MAAM,WAAW,GAAG,UAAU,EAAE,CAAA;AAGtC,MAAM,MAAM,iBAAiB,GAAG,UAAU,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAS5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAOnC,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAQ,aAAa,KAAG,IA+BhE,CAAA"}
1
+ {"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAS5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAOnC,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAQ,aAAa,KAAG,IAyCjE,CAAA"}
@@ -5,32 +5,39 @@ const perps_sdk_1 = require("@lifi/perps-sdk");
5
5
  Object.defineProperty(exports, "classifyFillFromPosition", { enumerable: true, get: function () { return perps_sdk_1.classifyFillFromPosition; } });
6
6
  const perps_types_1 = require("@lifi/perps-types");
7
7
  const constants_js_1 = require("../constants.js");
8
- const mapFill = (fill, market) => ({
9
- ...(market.categoryId === constants_js_1.SPOT_MARKET_ID
10
- ? { realizedPnl: fill.closedPnl }
11
- : { realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl }),
12
- id: String(fill.tid),
13
- orderId: String(fill.oid),
14
- market,
15
- side: fill.side === 'B' ? perps_types_1.OrderSide.BUY : perps_types_1.OrderSide.SELL,
16
- type: fill.crossed ? undefined : perps_types_1.OrderType.LIMIT,
17
- size: fill.sz,
18
- price: fill.px,
19
- status: perps_types_1.FillStatus.FILLED,
20
- liquidity: fill.crossed ? perps_types_1.LiquidityRole.TAKER : perps_types_1.LiquidityRole.MAKER,
21
- filledSize: fill.sz,
22
- fee: {
23
- amount: fill.fee,
24
- asset: fill.feeToken ?? market.quoteAsset.displaySymbol,
25
- },
26
- startPosition: fill.startPosition,
27
- explorerLink: (0, perps_sdk_1.explorerTxUrl)(perps_sdk_1.ExplorerChainId.HYPERLIQUID, fill.hash),
28
- classification: market.categoryId === constants_js_1.SPOT_MARKET_ID
29
- ? fill.side === 'B'
30
- ? perps_types_1.FillClassification.SPOT_BUY
31
- : perps_types_1.FillClassification.SPOT_SELL
32
- : (0, perps_sdk_1.classifyFillFromPosition)(fill.startPosition, fill.side, fill.sz),
33
- createdAt: new Date(fill.time).toISOString(),
34
- });
8
+ const mapFill = (fill, market) => {
9
+ const feeAsset = fill.feeToken ?? market.quoteAsset.displaySymbol;
10
+ return {
11
+ ...(market.categoryId === constants_js_1.SPOT_MARKET_ID
12
+ ? { realizedPnl: fill.closedPnl }
13
+ : { realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl }),
14
+ id: String(fill.tid),
15
+ orderId: String(fill.oid),
16
+ clientOrderId: fill.cloid,
17
+ market,
18
+ side: fill.side === 'B' ? perps_types_1.OrderSide.BUY : perps_types_1.OrderSide.SELL,
19
+ type: fill.crossed ? undefined : perps_types_1.OrderType.LIMIT,
20
+ size: fill.sz,
21
+ price: fill.px,
22
+ status: perps_types_1.FillStatus.FILLED,
23
+ liquidity: fill.crossed ? perps_types_1.LiquidityRole.TAKER : perps_types_1.LiquidityRole.MAKER,
24
+ filledSize: fill.sz,
25
+ fee: {
26
+ amount: fill.fee,
27
+ asset: feeAsset,
28
+ },
29
+ builderFee: fill.builderFee === undefined
30
+ ? undefined
31
+ : { amount: fill.builderFee, asset: feeAsset },
32
+ startPosition: fill.startPosition,
33
+ explorerLink: (0, perps_sdk_1.explorerTxUrl)(perps_sdk_1.ExplorerChainId.HYPERLIQUID, fill.hash),
34
+ classification: market.categoryId === constants_js_1.SPOT_MARKET_ID
35
+ ? fill.side === 'B'
36
+ ? perps_types_1.FillClassification.SPOT_BUY
37
+ : perps_types_1.FillClassification.SPOT_SELL
38
+ : (0, perps_sdk_1.classifyFillFromPosition)(fill.startPosition, fill.side, fill.sz),
39
+ createdAt: new Date(fill.time).toISOString(),
40
+ };
41
+ };
35
42
  exports.mapFill = mapFill;
36
43
  //# sourceMappingURL=mapFill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":";;;AAAA,+CAIwB;AAaf,yGAhBP,oCAAwB,OAgBO;AAXjC,mDAM0B;AAC1B,kDAAgD;AAWzC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,MAAqB,EAAQ,EAAE,CAAC,CAAC;IACzE,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,6BAAc;QACtC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;QACjC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACpE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACzB,MAAM;IACN,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,uBAAS,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAS,CAAC,IAAI;IAKxD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAS,CAAC,KAAK;IAChD,IAAI,EAAE,IAAI,CAAC,EAAE;IACb,KAAK,EAAE,IAAI,CAAC,EAAE;IACd,MAAM,EAAE,wBAAU,CAAC,MAAM;IACzB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,2BAAa,CAAC,KAAK,CAAC,CAAC,CAAC,2BAAa,CAAC,KAAK;IACnE,UAAU,EAAE,IAAI,CAAC,EAAE;IACnB,GAAG,EAAE;QACH,MAAM,EAAE,IAAI,CAAC,GAAG;QAChB,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa;KACxD;IACD,aAAa,EAAE,IAAI,CAAC,aAAa;IACjC,YAAY,EAAE,IAAA,yBAAa,EAAC,2BAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;IACnE,cAAc,EACZ,MAAM,CAAC,UAAU,KAAK,6BAAc;QAClC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG;YACjB,CAAC,CAAC,gCAAkB,CAAC,QAAQ;YAC7B,CAAC,CAAC,gCAAkB,CAAC,SAAS;QAChC,CAAC,CAAC,IAAA,oCAAwB,EAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACtE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;CAC7C,CAAC,CAAA;AA/BW,QAAA,OAAO,WA+BlB"}
1
+ {"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":";;;AAAA,+CAIwB;AAaf,yGAhBP,oCAAwB,OAgBO;AAXjC,mDAM0B;AAC1B,kDAAgD;AAWzC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,MAAqB,EAAQ,EAAE;IAEvE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa,CAAA;IAEjE,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,6BAAc;YACtC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;YACjC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACzB,aAAa,EAAE,IAAI,CAAC,KAAK;QACzB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,uBAAS,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAS,CAAC,IAAI;QAKxD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,uBAAS,CAAC,KAAK;QAChD,IAAI,EAAE,IAAI,CAAC,EAAE;QACb,KAAK,EAAE,IAAI,CAAC,EAAE;QACd,MAAM,EAAE,wBAAU,CAAC,MAAM;QACzB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,2BAAa,CAAC,KAAK,CAAC,CAAC,CAAC,2BAAa,CAAC,KAAK;QACnE,UAAU,EAAE,IAAI,CAAC,EAAE;QACnB,GAAG,EAAE;YACH,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,KAAK,EAAE,QAAQ;SAChB;QACD,UAAU,EACR,IAAI,CAAC,UAAU,KAAK,SAAS;YAC3B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;QAClD,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,YAAY,EAAE,IAAA,yBAAa,EAAC,2BAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;QACnE,cAAc,EACZ,MAAM,CAAC,UAAU,KAAK,6BAAc;YAClC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG;gBACjB,CAAC,CAAC,gCAAkB,CAAC,QAAQ;gBAC7B,CAAC,CAAC,gCAAkB,CAAC,SAAS;YAChC,CAAC,CAAC,IAAA,oCAAwB,EAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACtE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;KAC7C,CAAA;AACH,CAAC,CAAA;AAzCY,QAAA,OAAO,WAyCnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACf,MAAM,mBAAmB,CAAA;AA4E1B;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
1
+ {"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACf,MAAM,mBAAmB,CAAA;AA6E1B;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
@@ -53,6 +53,7 @@ function projectHyperliquidDescriptor(descriptor, config) {
53
53
  case ActionType.ACCEPT_PROVIDER_TERMS:
54
54
  case ActionType.DEPOSIT:
55
55
  case ActionType.META_ACCEPT_TERMS:
56
+ case ActionType.SYNC_FEE_ATTRIBUTION:
56
57
  throw new PerpsError(PerpsErrorCode.SDKError, `Hyperliquid account-config mapper has no projection for ` +
57
58
  `descriptor type '${descriptor.type}' — this ActionType is not ` +
58
59
  `valid on Provider.setup / Provider.options for Hyperliquid.`);
@@ -1 +1 @@
1
- {"version":3,"file":"accountConfig.js","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAE9D,SAAS,WAAW,CAAC,KAAY;IAC/B,MAAM,IAAI,KAAK,CACb,sDAAsD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC9E,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,4BAA4B,CACnC,UAA0B,EAC1B,MAAgC;IAEhC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,UAAU,CAAC,aAAa,CAAC;QAC9B,KAAK,UAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,UAAU,CAAC,YAAY;YAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QAE9C,KAAK,UAAU,CAAC,YAAY;YAC1B,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;aAC1D,CAAA;QAEH,KAAK,UAAU,CAAC,kBAAkB,CAAC;QACnC,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,UAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,QAAQ,CAAC;QACzB,KAAK,UAAU,CAAC,WAAW,CAAC;QAC5B,KAAK,UAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,UAAU,CAAC,gBAAgB,CAAC;QACjC,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,UAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,UAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,UAAU,CAAC,eAAe,CAAC;QAChC,KAAK,UAAU,CAAC,sBAAsB,CAAC;QACvC,KAAK,UAAU,CAAC,uBAAuB,CAAC;QACxC,KAAK,UAAU,CAAC,gBAAgB,CAAC;QACjC,KAAK,UAAU,CAAC,uBAAuB,CAAC;QACxC,KAAK,UAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,sBAAsB,CAAC;QACvC,KAAK,UAAU,CAAC,qBAAqB,CAAC;QACtC,KAAK,UAAU,CAAC,OAAO,CAAC;QACxB,KAAK,UAAU,CAAC,iBAAiB;YAC/B,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,0DAA0D;gBACxD,oBAAoB,UAAU,CAAC,IAAI,6BAA6B;gBAChE,6DAA6D,CAChE,CAAA;QAEH;YACE,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAgC,EAChC,KAAuB,EACvB,OAAyB;IAEzB,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC/C,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,CACjD,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"accountConfig.js","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAM5C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAE9D,SAAS,WAAW,CAAC,KAAY;IAC/B,MAAM,IAAI,KAAK,CACb,sDAAsD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAC9E,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,4BAA4B,CACnC,UAA0B,EAC1B,MAAgC;IAEhC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,UAAU,CAAC,aAAa,CAAC;QAC9B,KAAK,UAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,UAAU,CAAC,YAAY;YAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QAE9C,KAAK,UAAU,CAAC,YAAY;YAC1B,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;aAC1D,CAAA;QAEH,KAAK,UAAU,CAAC,kBAAkB,CAAC;QACnC,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,UAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,QAAQ,CAAC;QACzB,KAAK,UAAU,CAAC,WAAW,CAAC;QAC5B,KAAK,UAAU,CAAC,mBAAmB,CAAC;QACpC,KAAK,UAAU,CAAC,gBAAgB,CAAC;QACjC,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,UAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,UAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,UAAU,CAAC,YAAY,CAAC;QAC7B,KAAK,UAAU,CAAC,eAAe,CAAC;QAChC,KAAK,UAAU,CAAC,sBAAsB,CAAC;QACvC,KAAK,UAAU,CAAC,uBAAuB,CAAC;QACxC,KAAK,UAAU,CAAC,gBAAgB,CAAC;QACjC,KAAK,UAAU,CAAC,uBAAuB,CAAC;QACxC,KAAK,UAAU,CAAC,UAAU,CAAC;QAC3B,KAAK,UAAU,CAAC,sBAAsB,CAAC;QACvC,KAAK,UAAU,CAAC,qBAAqB,CAAC;QACtC,KAAK,UAAU,CAAC,OAAO,CAAC;QACxB,KAAK,UAAU,CAAC,iBAAiB,CAAC;QAClC,KAAK,UAAU,CAAC,oBAAoB;YAClC,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,0DAA0D;gBACxD,oBAAoB,UAAU,CAAC,IAAI,6BAA6B;gBAChE,6DAA6D,CAChE,CAAA;QAEH;YACE,OAAO,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAgC,EAChC,KAAuB,EACvB,OAAyB;IAEzB,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC/C,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,CACjD,CAAA;AACH,CAAC"}
@@ -20,6 +20,14 @@ export type HlUserFill = {
20
20
  * predating the field, where the fee is in the market's quote asset.
21
21
  */
22
22
  feeToken?: string;
23
+ /**
24
+ * Builder portion of `fee`, in `feeToken`'s units. Absent when the venue
25
+ * charged no builder portion on the fill. Hyperliquid omits this field when
26
+ * its value is zero.
27
+ */
28
+ builderFee?: string;
29
+ /** Client order ID the order carried. Absent when the order carried none. */
30
+ cloid?: string;
23
31
  closedPnl: string;
24
32
  crossed: boolean;
25
33
  time: number;
@@ -1 +1 @@
1
- {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/types/fill.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,qEAAqE;AACrE,MAAM,MAAM,WAAW,GAAG,UAAU,EAAE,CAAA;AAEtC,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/types/fill.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,qEAAqE;AACrE,MAAM,MAAM,WAAW,GAAG,UAAU,EAAE,CAAA;AAEtC,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,UAAU,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAS5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,0FAA0F;AAC1F,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAQ,aAAa,KAAG,IA+BhE,CAAA"}
1
+ {"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAS5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,0FAA0F;AAC1F,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAQ,aAAa,KAAG,IAyCjE,CAAA"}
@@ -8,35 +8,43 @@ export { classifyFillFromPosition };
8
8
  * HL's canonical spot pair 0 is addressed as `PURR/USDC`, not `@0`.
9
9
  * @public
10
10
  */
11
- export const mapFill = (fill, market) => ({
12
- ...(market.categoryId === SPOT_MARKET_ID
13
- ? { realizedPnl: fill.closedPnl }
14
- : { realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl }),
15
- id: String(fill.tid),
16
- orderId: String(fill.oid),
17
- market,
18
- side: fill.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
19
- // HL fills don't carry the originating order type. A maker fill (crossed:
20
- // false) can only come from a resting order, so it's necessarily a limit;
21
- // a taker fill (crossed: true) may be a market OR an aggressive limit order,
22
- // which the payload can't distinguish, so the type is left undefined.
23
- type: fill.crossed ? undefined : OrderType.LIMIT,
24
- size: fill.sz,
25
- price: fill.px,
26
- status: FillStatus.FILLED,
27
- liquidity: fill.crossed ? LiquidityRole.TAKER : LiquidityRole.MAKER,
28
- filledSize: fill.sz,
29
- fee: {
30
- amount: fill.fee,
31
- asset: fill.feeToken ?? market.quoteAsset.displaySymbol,
32
- },
33
- startPosition: fill.startPosition,
34
- explorerLink: explorerTxUrl(ExplorerChainId.HYPERLIQUID, fill.hash),
35
- classification: market.categoryId === SPOT_MARKET_ID
36
- ? fill.side === 'B'
37
- ? FillClassification.SPOT_BUY
38
- : FillClassification.SPOT_SELL
39
- : classifyFillFromPosition(fill.startPosition, fill.side, fill.sz),
40
- createdAt: new Date(fill.time).toISOString(),
41
- });
11
+ export const mapFill = (fill, market) => {
12
+ // HL charges the builder portion in the same token as the total fee.
13
+ const feeAsset = fill.feeToken ?? market.quoteAsset.displaySymbol;
14
+ return {
15
+ ...(market.categoryId === SPOT_MARKET_ID
16
+ ? { realizedPnl: fill.closedPnl }
17
+ : { realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl }),
18
+ id: String(fill.tid),
19
+ orderId: String(fill.oid),
20
+ clientOrderId: fill.cloid,
21
+ market,
22
+ side: fill.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
23
+ // HL fills don't carry the originating order type. A maker fill (crossed:
24
+ // false) can only come from a resting order, so it's necessarily a limit;
25
+ // a taker fill (crossed: true) may be a market OR an aggressive limit order,
26
+ // which the payload can't distinguish, so the type is left undefined.
27
+ type: fill.crossed ? undefined : OrderType.LIMIT,
28
+ size: fill.sz,
29
+ price: fill.px,
30
+ status: FillStatus.FILLED,
31
+ liquidity: fill.crossed ? LiquidityRole.TAKER : LiquidityRole.MAKER,
32
+ filledSize: fill.sz,
33
+ fee: {
34
+ amount: fill.fee,
35
+ asset: feeAsset,
36
+ },
37
+ builderFee: fill.builderFee === undefined
38
+ ? undefined
39
+ : { amount: fill.builderFee, asset: feeAsset },
40
+ startPosition: fill.startPosition,
41
+ explorerLink: explorerTxUrl(ExplorerChainId.HYPERLIQUID, fill.hash),
42
+ classification: market.categoryId === SPOT_MARKET_ID
43
+ ? fill.side === 'B'
44
+ ? FillClassification.SPOT_BUY
45
+ : FillClassification.SPOT_SELL
46
+ : classifyFillFromPosition(fill.startPosition, fill.side, fill.sz),
47
+ createdAt: new Date(fill.time).toISOString(),
48
+ };
49
+ };
42
50
  //# sourceMappingURL=mapFill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,GACV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGhD,0FAA0F;AAC1F,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,MAAqB,EAAQ,EAAE,CAAC,CAAC;IACzE,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc;QACtC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;QACjC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACpE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACzB,MAAM;IACN,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;IACxD,0EAA0E;IAC1E,0EAA0E;IAC1E,6EAA6E;IAC7E,sEAAsE;IACtE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK;IAChD,IAAI,EAAE,IAAI,CAAC,EAAE;IACb,KAAK,EAAE,IAAI,CAAC,EAAE;IACd,MAAM,EAAE,UAAU,CAAC,MAAM;IACzB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK;IACnE,UAAU,EAAE,IAAI,CAAC,EAAE;IACnB,GAAG,EAAE;QACH,MAAM,EAAE,IAAI,CAAC,GAAG;QAChB,KAAK,EAAE,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa;KACxD;IACD,aAAa,EAAE,IAAI,CAAC,aAAa;IACjC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;IACnE,cAAc,EACZ,MAAM,CAAC,UAAU,KAAK,cAAc;QAClC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG;YACjB,CAAC,CAAC,kBAAkB,CAAC,QAAQ;YAC7B,CAAC,CAAC,kBAAkB,CAAC,SAAS;QAChC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;IACtE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;CAC7C,CAAC,CAAA"}
1
+ {"version":3,"file":"mapFill.js","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,GACV,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGhD,0FAA0F;AAC1F,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAgB,EAAE,MAAqB,EAAQ,EAAE;IACvE,qEAAqE;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,aAAa,CAAA;IAEjE,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,cAAc;YACtC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE;YACjC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpE,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACzB,aAAa,EAAE,IAAI,CAAC,KAAK;QACzB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI;QACxD,0EAA0E;QAC1E,0EAA0E;QAC1E,6EAA6E;QAC7E,sEAAsE;QACtE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK;QAChD,IAAI,EAAE,IAAI,CAAC,EAAE;QACb,KAAK,EAAE,IAAI,CAAC,EAAE;QACd,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK;QACnE,UAAU,EAAE,IAAI,CAAC,EAAE;QACnB,GAAG,EAAE;YACH,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,KAAK,EAAE,QAAQ;SAChB;QACD,UAAU,EACR,IAAI,CAAC,UAAU,KAAK,SAAS;YAC3B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE;QAClD,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;QACnE,cAAc,EACZ,MAAM,CAAC,UAAU,KAAK,cAAc;YAClC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG;gBACjB,CAAC,CAAC,kBAAkB,CAAC,QAAQ;gBAC7B,CAAC,CAAC,kBAAkB,CAAC,SAAS;YAChC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACtE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;KAC7C,CAAA;AACH,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACf,MAAM,mBAAmB,CAAA;AA4E1B;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
1
+ {"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,EACf,MAAM,mBAAmB,CAAA;AA6E1B;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,wBAAwB,EAChC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
@@ -20,6 +20,14 @@ export type HlUserFill = {
20
20
  * predating the field, where the fee is in the market's quote asset.
21
21
  */
22
22
  feeToken?: string;
23
+ /**
24
+ * Builder portion of `fee`, in `feeToken`'s units. Absent when the venue
25
+ * charged no builder portion on the fill. Hyperliquid omits this field when
26
+ * its value is zero.
27
+ */
28
+ builderFee?: string;
29
+ /** Client order ID the order carried. Absent when the order carried none. */
30
+ cloid?: string;
23
31
  closedPnl: string;
24
32
  crossed: boolean;
25
33
  time: number;
@@ -1 +1 @@
1
- {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/types/fill.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,qEAAqE;AACrE,MAAM,MAAM,WAAW,GAAG,UAAU,EAAE,CAAA;AAEtC,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,UAAU,EAAE,CAAA"}
1
+ {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../src/types/fill.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,qEAAqE;AACrE,MAAM,MAAM,WAAW,GAAG,UAAU,EAAE,CAAA;AAEtC,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG,UAAU,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAS5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,0FAA0F;AAC1F,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAQ,aAAa,KAAG,IA+BhE,CAAA"}
1
+ {"version":3,"file":"mapFill.d.ts","sourceRoot":"","sources":["../../../src/utils/mapFill.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAGzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAS5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,0FAA0F;AAC1F,OAAO,EAAE,wBAAwB,EAAE,CAAA;AAEnC;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,UAAU,EAAE,QAAQ,aAAa,KAAG,IAyCjE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/perps-sdk-provider-hyperliquid",
3
- "version": "10.0.0",
3
+ "version": "10.1.0",
4
4
  "description": "Hyperliquid provider plugin for @lifi/perps-sdk",
5
5
  "homepage": "https://github.com/lifinance/perps-sdk",
6
6
  "bugs": {
@@ -49,10 +49,10 @@
49
49
  "dependencies": {
50
50
  "big.js": "^7.0.1",
51
51
  "viem": "^2.55.18",
52
- "@lifi/perps-types": "^11.0.0"
52
+ "@lifi/perps-types": "^11.1.0"
53
53
  },
54
54
  "peerDependencies": {
55
- "@lifi/perps-sdk": "^10.0.0"
55
+ "@lifi/perps-sdk": "^10.0.1"
56
56
  },
57
57
  "publishConfig": {
58
58
  "access": "public"
@@ -67,6 +67,7 @@ function projectHyperliquidDescriptor(
67
67
  case ActionType.ACCEPT_PROVIDER_TERMS:
68
68
  case ActionType.DEPOSIT:
69
69
  case ActionType.META_ACCEPT_TERMS:
70
+ case ActionType.SYNC_FEE_ATTRIBUTION:
70
71
  throw new PerpsError(
71
72
  PerpsErrorCode.SDKError,
72
73
  `Hyperliquid account-config mapper has no projection for ` +
package/src/types/fill.ts CHANGED
@@ -22,6 +22,14 @@ export type HlUserFill = {
22
22
  * predating the field, where the fee is in the market's quote asset.
23
23
  */
24
24
  feeToken?: string
25
+ /**
26
+ * Builder portion of `fee`, in `feeToken`'s units. Absent when the venue
27
+ * charged no builder portion on the fill. Hyperliquid omits this field when
28
+ * its value is zero.
29
+ */
30
+ builderFee?: string
31
+ /** Client order ID the order carried. Absent when the order carried none. */
32
+ cloid?: string
25
33
  closedPnl: string
26
34
  crossed: boolean
27
35
  time: number
@@ -22,35 +22,45 @@ export { classifyFillFromPosition }
22
22
  * HL's canonical spot pair 0 is addressed as `PURR/USDC`, not `@0`.
23
23
  * @public
24
24
  */
25
- export const mapFill = (fill: HlUserFill, market: MarketDisplay): Fill => ({
26
- ...(market.categoryId === SPOT_MARKET_ID
27
- ? { realizedPnl: fill.closedPnl }
28
- : { realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl }),
29
- id: String(fill.tid),
30
- orderId: String(fill.oid),
31
- market,
32
- side: fill.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
33
- // HL fills don't carry the originating order type. A maker fill (crossed:
34
- // false) can only come from a resting order, so it's necessarily a limit;
35
- // a taker fill (crossed: true) may be a market OR an aggressive limit order,
36
- // which the payload can't distinguish, so the type is left undefined.
37
- type: fill.crossed ? undefined : OrderType.LIMIT,
38
- size: fill.sz,
39
- price: fill.px,
40
- status: FillStatus.FILLED,
41
- liquidity: fill.crossed ? LiquidityRole.TAKER : LiquidityRole.MAKER,
42
- filledSize: fill.sz,
43
- fee: {
44
- amount: fill.fee,
45
- asset: fill.feeToken ?? market.quoteAsset.displaySymbol,
46
- },
47
- startPosition: fill.startPosition,
48
- explorerLink: explorerTxUrl(ExplorerChainId.HYPERLIQUID, fill.hash),
49
- classification:
50
- market.categoryId === SPOT_MARKET_ID
51
- ? fill.side === 'B'
52
- ? FillClassification.SPOT_BUY
53
- : FillClassification.SPOT_SELL
54
- : classifyFillFromPosition(fill.startPosition, fill.side, fill.sz),
55
- createdAt: new Date(fill.time).toISOString(),
56
- })
25
+ export const mapFill = (fill: HlUserFill, market: MarketDisplay): Fill => {
26
+ // HL charges the builder portion in the same token as the total fee.
27
+ const feeAsset = fill.feeToken ?? market.quoteAsset.displaySymbol
28
+
29
+ return {
30
+ ...(market.categoryId === SPOT_MARKET_ID
31
+ ? { realizedPnl: fill.closedPnl }
32
+ : { realizedPnl: fill.closedPnl === '0' ? null : fill.closedPnl }),
33
+ id: String(fill.tid),
34
+ orderId: String(fill.oid),
35
+ clientOrderId: fill.cloid,
36
+ market,
37
+ side: fill.side === 'B' ? OrderSide.BUY : OrderSide.SELL,
38
+ // HL fills don't carry the originating order type. A maker fill (crossed:
39
+ // false) can only come from a resting order, so it's necessarily a limit;
40
+ // a taker fill (crossed: true) may be a market OR an aggressive limit order,
41
+ // which the payload can't distinguish, so the type is left undefined.
42
+ type: fill.crossed ? undefined : OrderType.LIMIT,
43
+ size: fill.sz,
44
+ price: fill.px,
45
+ status: FillStatus.FILLED,
46
+ liquidity: fill.crossed ? LiquidityRole.TAKER : LiquidityRole.MAKER,
47
+ filledSize: fill.sz,
48
+ fee: {
49
+ amount: fill.fee,
50
+ asset: feeAsset,
51
+ },
52
+ builderFee:
53
+ fill.builderFee === undefined
54
+ ? undefined
55
+ : { amount: fill.builderFee, asset: feeAsset },
56
+ startPosition: fill.startPosition,
57
+ explorerLink: explorerTxUrl(ExplorerChainId.HYPERLIQUID, fill.hash),
58
+ classification:
59
+ market.categoryId === SPOT_MARKET_ID
60
+ ? fill.side === 'B'
61
+ ? FillClassification.SPOT_BUY
62
+ : FillClassification.SPOT_SELL
63
+ : classifyFillFromPosition(fill.startPosition, fill.side, fill.sz),
64
+ createdAt: new Date(fill.time).toISOString(),
65
+ }
66
+ }