@orderly.network/hooks 1.5.0 → 1.5.1

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 (171) hide show
  1. package/esm/orderly/orderlyHooks.d.ts +1 -0
  2. package/esm/orderly/orderlyHooks.d.ts.map +1 -1
  3. package/esm/orderly/orderlyHooks.js +1 -0
  4. package/esm/orderly/orderlyHooks.js.map +1 -1
  5. package/esm/orderly/useCollateral.d.ts.map +1 -1
  6. package/esm/orderly/useCollateral.js +8 -9
  7. package/esm/orderly/useCollateral.js.map +1 -1
  8. package/esm/orderly/usePositionStream/usePositionStream.d.ts +4 -0
  9. package/esm/orderly/usePositionStream/usePositionStream.d.ts.map +1 -1
  10. package/esm/orderly/usePositionStream/usePositionStream.js +9 -1
  11. package/esm/orderly/usePositionStream/usePositionStream.js.map +1 -1
  12. package/esm/orderly/usePrivateDataObserver.d.ts.map +1 -1
  13. package/esm/orderly/usePrivateDataObserver.js +8 -2
  14. package/esm/orderly/usePrivateDataObserver.js.map +1 -1
  15. package/esm/orderly/useSymbolLeverage.d.ts +2 -0
  16. package/esm/orderly/useSymbolLeverage.d.ts.map +1 -0
  17. package/esm/orderly/useSymbolLeverage.js +31 -0
  18. package/esm/orderly/useSymbolLeverage.js.map +1 -0
  19. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
  20. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js +2 -1
  21. package/esm/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
  22. package/esm/referral/index.d.ts +3 -0
  23. package/esm/referral/index.d.ts.map +1 -1
  24. package/esm/referral/index.js +3 -0
  25. package/esm/referral/index.js.map +1 -1
  26. package/esm/referral/useCheckReferralCode.d.ts +6 -0
  27. package/esm/referral/useCheckReferralCode.d.ts.map +1 -0
  28. package/esm/referral/useCheckReferralCode.js +18 -0
  29. package/esm/referral/useCheckReferralCode.js.map +1 -0
  30. package/esm/referral/useGetReferralCode.d.ts +6 -0
  31. package/esm/referral/useGetReferralCode.d.ts.map +1 -0
  32. package/esm/referral/useGetReferralCode.js +18 -0
  33. package/esm/referral/useGetReferralCode.js.map +1 -0
  34. package/esm/referral/useReferralInfo.d.ts +10 -0
  35. package/esm/referral/useReferralInfo.d.ts.map +1 -0
  36. package/esm/referral/useReferralInfo.js +56 -0
  37. package/esm/referral/useReferralInfo.js.map +1 -0
  38. package/esm/services/orderMerge/algoOrderMergeHandler.d.ts +1 -0
  39. package/esm/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -1
  40. package/esm/services/orderMerge/algoOrderMergeHandler.js +8 -0
  41. package/esm/services/orderMerge/algoOrderMergeHandler.js.map +1 -1
  42. package/esm/services/orderMerge/baseMergeHandler.d.ts +1 -0
  43. package/esm/services/orderMerge/baseMergeHandler.d.ts.map +1 -1
  44. package/esm/services/orderMerge/baseMergeHandler.js +1 -1
  45. package/esm/services/orderMerge/baseMergeHandler.js.map +1 -1
  46. package/esm/services/orderMerge/regularOrderMergeHandler.d.ts +1 -0
  47. package/esm/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -1
  48. package/esm/services/orderMerge/regularOrderMergeHandler.js +3 -0
  49. package/esm/services/orderMerge/regularOrderMergeHandler.js.map +1 -1
  50. package/esm/services/painter/basePaint.d.ts +5 -0
  51. package/esm/services/painter/basePaint.d.ts.map +1 -1
  52. package/esm/services/painter/basePaint.js.map +1 -1
  53. package/esm/services/painter/dataPaint.d.ts +3 -0
  54. package/esm/services/painter/dataPaint.d.ts.map +1 -1
  55. package/esm/services/painter/dataPaint.js +88 -16
  56. package/esm/services/painter/dataPaint.js.map +1 -1
  57. package/esm/services/painter/layout.config.js +1 -1
  58. package/esm/services/painter/layout.config.js.map +1 -1
  59. package/esm/services/painter/painter.d.ts.map +1 -1
  60. package/esm/services/painter/painter.js +7 -2
  61. package/esm/services/painter/painter.js.map +1 -1
  62. package/esm/services/painter/qrPaint.d.ts +8 -0
  63. package/esm/services/painter/qrPaint.d.ts.map +1 -0
  64. package/esm/services/painter/qrPaint.js +39 -0
  65. package/esm/services/painter/qrPaint.js.map +1 -0
  66. package/esm/useLocalStorage.js +2 -2
  67. package/esm/useLocalStorage.js.map +1 -1
  68. package/esm/useMediaQuery.js +7 -7
  69. package/esm/useMediaQuery.js.map +1 -1
  70. package/esm/usePoster.d.ts.map +1 -1
  71. package/esm/usePoster.js +18 -15
  72. package/esm/usePoster.js.map +1 -1
  73. package/esm/useSessionStorage.js +2 -2
  74. package/esm/useSessionStorage.js.map +1 -1
  75. package/esm/utils/index.d.ts +1 -0
  76. package/esm/utils/index.d.ts.map +1 -1
  77. package/esm/utils/index.js +1 -0
  78. package/esm/utils/index.js.map +1 -1
  79. package/esm/utils/orderEntryHelper.d.ts +1 -0
  80. package/esm/utils/orderEntryHelper.d.ts.map +1 -1
  81. package/esm/utils/orderEntryHelper.js +27 -2
  82. package/esm/utils/orderEntryHelper.js.map +1 -1
  83. package/esm/version.d.ts +1 -1
  84. package/esm/version.js +2 -2
  85. package/esm/version.js.map +1 -1
  86. package/lib/orderly/orderlyHooks.d.ts +1 -0
  87. package/lib/orderly/orderlyHooks.d.ts.map +1 -1
  88. package/lib/orderly/orderlyHooks.js +4 -0
  89. package/lib/orderly/orderlyHooks.js.map +1 -1
  90. package/lib/orderly/useCollateral.d.ts.map +1 -1
  91. package/lib/orderly/useCollateral.js +8 -9
  92. package/lib/orderly/useCollateral.js.map +1 -1
  93. package/lib/orderly/usePositionStream/usePositionStream.d.ts +4 -0
  94. package/lib/orderly/usePositionStream/usePositionStream.d.ts.map +1 -1
  95. package/lib/orderly/usePositionStream/usePositionStream.js +9 -1
  96. package/lib/orderly/usePositionStream/usePositionStream.js.map +1 -1
  97. package/lib/orderly/usePrivateDataObserver.d.ts.map +1 -1
  98. package/lib/orderly/usePrivateDataObserver.js +8 -2
  99. package/lib/orderly/usePrivateDataObserver.js.map +1 -1
  100. package/lib/orderly/useSymbolLeverage.d.ts +2 -0
  101. package/lib/orderly/useSymbolLeverage.d.ts.map +1 -0
  102. package/lib/orderly/useSymbolLeverage.js +41 -0
  103. package/lib/orderly/useSymbolLeverage.js.map +1 -0
  104. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.d.ts.map +1 -1
  105. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js +2 -1
  106. package/lib/orderly/useTakeProfitAndStopLoss/useTPSL.js.map +1 -1
  107. package/lib/referral/index.d.ts +3 -0
  108. package/lib/referral/index.d.ts.map +1 -1
  109. package/lib/referral/index.js +12 -0
  110. package/lib/referral/index.js.map +1 -1
  111. package/lib/referral/useCheckReferralCode.d.ts +6 -0
  112. package/lib/referral/useCheckReferralCode.d.ts.map +1 -0
  113. package/lib/referral/useCheckReferralCode.js +28 -0
  114. package/lib/referral/useCheckReferralCode.js.map +1 -0
  115. package/lib/referral/useGetReferralCode.d.ts +6 -0
  116. package/lib/referral/useGetReferralCode.d.ts.map +1 -0
  117. package/lib/referral/useGetReferralCode.js +28 -0
  118. package/lib/referral/useGetReferralCode.js.map +1 -0
  119. package/lib/referral/useReferralInfo.d.ts +10 -0
  120. package/lib/referral/useReferralInfo.d.ts.map +1 -0
  121. package/lib/referral/useReferralInfo.js +66 -0
  122. package/lib/referral/useReferralInfo.js.map +1 -0
  123. package/lib/services/orderMerge/algoOrderMergeHandler.d.ts +1 -0
  124. package/lib/services/orderMerge/algoOrderMergeHandler.d.ts.map +1 -1
  125. package/lib/services/orderMerge/algoOrderMergeHandler.js +8 -0
  126. package/lib/services/orderMerge/algoOrderMergeHandler.js.map +1 -1
  127. package/lib/services/orderMerge/baseMergeHandler.d.ts +1 -0
  128. package/lib/services/orderMerge/baseMergeHandler.d.ts.map +1 -1
  129. package/lib/services/orderMerge/baseMergeHandler.js +1 -1
  130. package/lib/services/orderMerge/baseMergeHandler.js.map +1 -1
  131. package/lib/services/orderMerge/regularOrderMergeHandler.d.ts +1 -0
  132. package/lib/services/orderMerge/regularOrderMergeHandler.d.ts.map +1 -1
  133. package/lib/services/orderMerge/regularOrderMergeHandler.js +3 -0
  134. package/lib/services/orderMerge/regularOrderMergeHandler.js.map +1 -1
  135. package/lib/services/painter/basePaint.d.ts +5 -0
  136. package/lib/services/painter/basePaint.d.ts.map +1 -1
  137. package/lib/services/painter/basePaint.js.map +1 -1
  138. package/lib/services/painter/dataPaint.d.ts +3 -0
  139. package/lib/services/painter/dataPaint.d.ts.map +1 -1
  140. package/lib/services/painter/dataPaint.js +88 -16
  141. package/lib/services/painter/dataPaint.js.map +1 -1
  142. package/lib/services/painter/layout.config.js +1 -1
  143. package/lib/services/painter/layout.config.js.map +1 -1
  144. package/lib/services/painter/painter.d.ts.map +1 -1
  145. package/lib/services/painter/painter.js +7 -2
  146. package/lib/services/painter/painter.js.map +1 -1
  147. package/lib/services/painter/qrPaint.d.ts +8 -0
  148. package/lib/services/painter/qrPaint.d.ts.map +1 -0
  149. package/lib/services/painter/qrPaint.js +49 -0
  150. package/lib/services/painter/qrPaint.js.map +1 -0
  151. package/lib/useLocalStorage.js +2 -2
  152. package/lib/useLocalStorage.js.map +1 -1
  153. package/lib/useMediaQuery.js +7 -7
  154. package/lib/useMediaQuery.js.map +1 -1
  155. package/lib/usePoster.d.ts.map +1 -1
  156. package/lib/usePoster.js +18 -15
  157. package/lib/usePoster.js.map +1 -1
  158. package/lib/useSessionStorage.js +2 -2
  159. package/lib/useSessionStorage.js.map +1 -1
  160. package/lib/utils/index.d.ts +1 -0
  161. package/lib/utils/index.d.ts.map +1 -1
  162. package/lib/utils/index.js +3 -0
  163. package/lib/utils/index.js.map +1 -1
  164. package/lib/utils/orderEntryHelper.d.ts +1 -0
  165. package/lib/utils/orderEntryHelper.d.ts.map +1 -1
  166. package/lib/utils/orderEntryHelper.js +29 -2
  167. package/lib/utils/orderEntryHelper.js.map +1 -1
  168. package/lib/version.d.ts +1 -1
  169. package/lib/version.js +2 -2
  170. package/lib/version.js.map +1 -1
  171. package/package.json +10 -9
@@ -0,0 +1,6 @@
1
+ export declare const useCheckReferralCode: (code?: string) => {
2
+ isExist?: boolean | undefined;
3
+ error: any;
4
+ isLoading: boolean;
5
+ };
6
+ //# sourceMappingURL=useCheckReferralCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCheckReferralCode.d.ts","sourceRoot":"","sources":["../../src/referral/useCheckReferralCode.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,UACxB,MAAM;;WAGJ,GAAG;eACC,OAAO;CAqBrB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { useQuery } from "../useQuery";
2
+ export const useCheckReferralCode = (code)=>{
3
+ if (typeof code === "undefined") {
4
+ return {
5
+ isExist: false,
6
+ error: "The code is undefined",
7
+ isLoading: false
8
+ };
9
+ }
10
+ const { data, error, isLoading } = useQuery(`/v1/public/referral/verify_ref_code?referral_code=${code}`);
11
+ return {
12
+ isExist: data?.exist,
13
+ error,
14
+ isLoading
15
+ };
16
+ };
17
+
18
+ //# sourceMappingURL=useCheckReferralCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/referral/useCheckReferralCode.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useCheckReferralCode = (\n code?: string\n):{\n isExist?: boolean;\n error: any;\n isLoading: boolean;\n } => {\n \n if (typeof code === \"undefined\") {\n return {\n isExist: false,\n error: \"The code is undefined\",\n isLoading: false,\n };\n }\n\n const { data, error, isLoading } = useQuery<{exist?: boolean}>(\n `/v1/public/referral/verify_ref_code?referral_code=${code}`\n );\n \n\n return {\n isExist: data?.exist,\n error,\n isLoading,\n };\n};\n"],"names":["useQuery","useCheckReferralCode","code","isExist","error","isLoading","data","exist"],"rangeMappings":";;;;;;;;;;;;;;;","mappings":"AACA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,OAAO,MAAMC,uBAAuB,CAClCC;IAOA,IAAI,OAAOA,SAAS,aAAa;QAC/B,OAAO;YACHC,SAAS;YACTC,OAAO;YACPC,WAAW;QACf;IACF;IAEA,MAAM,EAAEC,IAAI,EAAEF,KAAK,EAAEC,SAAS,EAAE,GAAGL,SACjC,CAAC,kDAAkD,EAAEE,KAAK,CAAC;IAI7D,OAAO;QACLC,SAASG,MAAMC;QACfH;QACAC;IACF;AACF,EAAE"}
@@ -0,0 +1,6 @@
1
+ export declare const useGetReferralCode: (accountId?: string) => {
2
+ referral_code?: string | undefined;
3
+ error: any;
4
+ isLoading: boolean;
5
+ };
6
+ //# sourceMappingURL=useGetReferralCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGetReferralCode.d.ts","sourceRoot":"","sources":["../../src/referral/useGetReferralCode.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,kBAAkB,eACf,MAAM;;WAGX,GAAG;eACC,OAAO;CAmBrB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { useQuery } from "../useQuery";
2
+ export const useGetReferralCode = (accountId)=>{
3
+ if (typeof accountId === "undefined") {
4
+ return {
5
+ referral_code: undefined,
6
+ error: "The account id is empty or undefined",
7
+ isLoading: false
8
+ };
9
+ }
10
+ const { data, error, isLoading } = useQuery(`/v1/public/referral/check_ref_code?account_id=${accountId}`);
11
+ return {
12
+ referral_code: data?.referral_code,
13
+ error,
14
+ isLoading
15
+ };
16
+ };
17
+
18
+ //# sourceMappingURL=useGetReferralCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/referral/useGetReferralCode.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\n\nexport const useGetReferralCode = (\n accountId?: string\n):{\n referral_code?: string;\n error: any;\n isLoading: boolean;\n } => {\n if (typeof accountId === \"undefined\" ) {\n return {\n referral_code: undefined,\n error: \"The account id is empty or undefined\",\n isLoading: false,\n };\n }\n const { data, error, isLoading } = useQuery<{referral_code?: string}>(\n `/v1/public/referral/check_ref_code?account_id=${accountId}`\n );\n \n\n return {\n referral_code: data?.referral_code,\n error,\n isLoading,\n };\n};\n"],"names":["useQuery","useGetReferralCode","accountId","referral_code","undefined","error","isLoading","data"],"rangeMappings":";;;;;;;;;;;;;;;","mappings":"AACA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,OAAO,MAAMC,qBAAqB,CAC9BC;IAMF,IAAI,OAAOA,cAAc,aAAc;QACrC,OAAO;YACLC,eAAeC;YACbC,OAAO;YACPC,WAAW;QACf;IACF;IACA,MAAM,EAAEC,IAAI,EAAEF,KAAK,EAAEC,SAAS,EAAE,GAAGN,SACjC,CAAC,8CAA8C,EAAEE,UAAU,CAAC;IAI9D,OAAO;QACLC,eAAeI,MAAMJ;QACrBE;QACAC;IACF;AACF,EAAE"}
@@ -0,0 +1,10 @@
1
+ import { RefferalAPI } from "./api";
2
+ export declare const useReferralInfo: () => {
3
+ data?: RefferalAPI.ReferralInfo | undefined;
4
+ isTrader?: boolean | undefined;
5
+ isAffiliate?: boolean | undefined;
6
+ error: any;
7
+ isLoading: boolean;
8
+ getFirstRefCode: () => RefferalAPI.ReferralCode | undefined;
9
+ };
10
+ //# sourceMappingURL=useReferralInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReferralInfo.d.ts","sourceRoot":"","sources":["../../src/referral/useReferralInfo.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGpC,eAAO,MAAM,eAAe;;;;WAInB,GAAG;eACC,OAAO;qBACD,MAAM,YAAY,YAAY,GAAG,SAAS;CAyD5D,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { useCallback, useMemo } from "react";
2
+ import { usePrivateQuery } from "../usePrivateQuery";
3
+ import { useLocalStorage } from "../useLocalStorage";
4
+ export const useReferralInfo = ()=>{
5
+ const { data, mutate, isLoading, error } = usePrivateQuery("/v1/referral/info", {
6
+ revalidateOnFocus: true
7
+ });
8
+ const isTrader = useMemo(()=>{
9
+ if (typeof data?.referee_info?.referer_code === 'undefined') return undefined;
10
+ return (data?.referee_info?.referer_code?.length || 0) > 0;
11
+ }, [
12
+ data?.referee_info
13
+ ]);
14
+ const isAffiliate = useMemo(()=>{
15
+ if (typeof data?.referrer_info?.referral_codes === 'undefined') return undefined;
16
+ return (data?.referrer_info?.referral_codes?.length || 0) > 0;
17
+ }, [
18
+ data?.referrer_info
19
+ ]);
20
+ const [pinCodes] = useLocalStorage("orderly_referral_codes", []);
21
+ const getFirstRefCode = useCallback(()=>{
22
+ if (!data?.referrer_info.referral_codes) return undefined;
23
+ const referralCodes = [
24
+ ...data?.referrer_info.referral_codes
25
+ ];
26
+ const pinedItems = [];
27
+ for(let i = 0; i < pinCodes.length; i++){
28
+ const code = pinCodes[i];
29
+ const index = referralCodes.findIndex((item)=>item.code === code);
30
+ if (index !== -1) {
31
+ pinedItems.push({
32
+ ...referralCodes[index]
33
+ });
34
+ referralCodes.splice(index, 1);
35
+ }
36
+ }
37
+ const newCodes = [
38
+ ...pinedItems,
39
+ ...referralCodes
40
+ ];
41
+ return newCodes?.[0];
42
+ }, [
43
+ pinCodes,
44
+ data
45
+ ]);
46
+ return {
47
+ data,
48
+ isTrader,
49
+ isAffiliate,
50
+ error,
51
+ isLoading,
52
+ getFirstRefCode
53
+ };
54
+ };
55
+
56
+ //# sourceMappingURL=useReferralInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/referral/useReferralInfo.tsx"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { useQuery } from \"../useQuery\";\nimport { usePrivateQuery } from \"../usePrivateQuery\";\nimport { RefferalAPI } from \"./api\";\nimport { useLocalStorage } from \"../useLocalStorage\";\n\nexport const useReferralInfo = ():{\n data?: RefferalAPI.ReferralInfo;\n isTrader?: boolean;\n isAffiliate?: boolean;\n error: any;\n isLoading: boolean;\n getFirstRefCode: () => RefferalAPI.ReferralCode | undefined;\n} => {\n const {\n data,\n mutate,\n isLoading,\n error,\n } = usePrivateQuery<RefferalAPI.ReferralInfo>(\"/v1/referral/info\", {\n revalidateOnFocus: true,\n });\n\n const isTrader = useMemo(() => {\n if (typeof data?.referee_info?.referer_code === 'undefined') return undefined;\n return (data?.referee_info?.referer_code?.length || 0) > 0;\n }, [data?.referee_info]);\n \n const isAffiliate = useMemo(() => {\n if (typeof data?.referrer_info?.referral_codes === 'undefined') return undefined;\n return (data?.referrer_info?.referral_codes?.length || 0) > 0;\n }, [data?.referrer_info]);\n\n\n const [pinCodes] = useLocalStorage<string[]>(\"orderly_referral_codes\", [] as string[]);\n\n const getFirstRefCode = useCallback(() : RefferalAPI.ReferralCode | undefined => {\n\n if (!data?.referrer_info.referral_codes) return undefined;\n const referralCodes = [...data?.referrer_info.referral_codes];\n\n const pinedItems: RefferalAPI.ReferralCode[] = [];\n\n for (let i = 0; i < pinCodes.length; i++) {\n const code = pinCodes[i];\n\n const index = referralCodes.findIndex((item) => item.code === code);\n if (index !== -1) {\n\n pinedItems.push({ ...referralCodes[index]});\n referralCodes.splice(index, 1);\n }\n\n }\n\n const newCodes = [...pinedItems, ...referralCodes];\n\n return newCodes?.[0];\n }, [pinCodes, data]);\n \n\n return {\n data,\n isTrader,\n isAffiliate,\n error,\n isLoading,\n getFirstRefCode,\n };\n};\n"],"names":["useCallback","useMemo","usePrivateQuery","useLocalStorage","useReferralInfo","data","mutate","isLoading","error","revalidateOnFocus","isTrader","referee_info","referer_code","undefined","length","isAffiliate","referrer_info","referral_codes","pinCodes","getFirstRefCode","referralCodes","pinedItems","i","code","index","findIndex","item","push","splice","newCodes"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,WAAW,EAAEC,OAAO,QAAQ,QAAQ;AAE7C,SAASC,eAAe,QAAQ,qBAAqB;AAErD,SAASC,eAAe,QAAQ,qBAAqB;AAErD,OAAO,MAAMC,kBAAkB;IAQ7B,MAAM,EACJC,IAAI,EACJC,MAAM,EACNC,SAAS,EACTC,KAAK,EACN,GAAGN,gBAA0C,qBAAqB;QACjEO,mBAAmB;IACrB;IAEA,MAAMC,WAAWT,QAAQ;QACvB,IAAI,OAAOI,MAAMM,cAAcC,iBAAiB,aAAa,OAAOC;QACpE,OAAO,AAACR,CAAAA,MAAMM,cAAcC,cAAcE,UAAU,CAAA,IAAK;IAC3D,GAAG;QAACT,MAAMM;KAAa;IAEvB,MAAMI,cAAcd,QAAQ;QAC1B,IAAI,OAAOI,MAAMW,eAAeC,mBAAmB,aAAa,OAAOJ;QACvE,OAAO,AAACR,CAAAA,MAAMW,eAAeC,gBAAgBH,UAAU,CAAA,IAAK;IAC9D,GAAG;QAACT,MAAMW;KAAc;IAGxB,MAAM,CAACE,SAAS,GAAGf,gBAA0B,0BAA0B,EAAE;IAEzE,MAAMgB,kBAAkBnB,YAAY;QAElC,IAAI,CAACK,MAAMW,cAAcC,gBAAgB,OAAOJ;QAChD,MAAMO,gBAAgB;eAAIf,MAAMW,cAAcC;SAAe;QAE7D,MAAMI,aAAyC,EAAE;QAEjD,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,SAASJ,MAAM,EAAEQ,IAAK;YACtC,MAAMC,OAAOL,QAAQ,CAACI,EAAE;YAExB,MAAME,QAAQJ,cAAcK,SAAS,CAAC,CAACC,OAASA,KAAKH,IAAI,KAAKA;YAC9D,IAAIC,UAAU,CAAC,GAAG;gBAEdH,WAAWM,IAAI,CAAC;oBAAE,GAAGP,aAAa,CAACI,MAAM;gBAAA;gBACzCJ,cAAcQ,MAAM,CAACJ,OAAO;YAChC;QAEJ;QAEA,MAAMK,WAAW;eAAIR;eAAeD;SAAc;QAElD,OAAOS,UAAU,CAAC,EAAE;IACtB,GAAG;QAACX;QAAUb;KAAK;IAGnB,OAAO;QACLA;QACAK;QACAK;QACAP;QACAD;QACAY;IACF;AACF,EAAE"}
@@ -4,6 +4,7 @@ export declare class AlgoOrderMergeHandler extends BaseMergeHandler<WSMessage.Al
4
4
  get orderId(): number;
5
5
  get status(): string;
6
6
  pre(message: WSMessage.AlgoOrder[], prevData?: API.OrderResponse[]): API.AlgoOrder;
7
+ isFullFilled(): boolean;
7
8
  static groupOrders(orders: WSMessage.AlgoOrder[]): API.AlgoOrder;
8
9
  }
9
10
  //# sourceMappingURL=algoOrderMergeHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"algoOrderMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/algoOrderMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,qBAAsB,SAAQ,gBAAgB,CACzD,SAAS,CAAC,SAAS,EAAE,EACrB,GAAG,CAAC,SAAS,CACd;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAeD,GAAG,CACD,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,EAC9B,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAC7B,GAAG,CAAC,SAAS;IAIhB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS;CAsBjE"}
1
+ {"version":3,"file":"algoOrderMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/algoOrderMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,qBAAsB,SAAQ,gBAAgB,CACzD,SAAS,CAAC,SAAS,EAAE,EACrB,GAAG,CAAC,SAAS,CACd;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAeD,GAAG,CACD,OAAO,EAAE,SAAS,CAAC,SAAS,EAAE,EAC9B,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAC7B,GAAG,CAAC,SAAS;IAIhB,YAAY,IAAI,OAAO;IAkBvB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,SAAS;CAsBjE"}
@@ -22,6 +22,14 @@ export class AlgoOrderMergeHandler extends BaseMergeHandler {
22
22
  pre(message, prevData) {
23
23
  return AlgoOrderMergeHandler.groupOrders(message);
24
24
  }
25
+ isFullFilled() {
26
+ if ("total_executed_quantity" in this.data && this.data.total_executed_quantity !== 0) {
27
+ return this.data.total_executed_quantity === this.data.quantity;
28
+ } else if ("total_executed_quantity" in this.data.child_orders[0]) {
29
+ return this.data.child_orders[0].total_executed_quantity === this.data.child_orders[0].quantity;
30
+ }
31
+ return false;
32
+ }
25
33
  static groupOrders(orders) {
26
34
  const rootOrderIndex = orders.findIndex((order)=>order.parentAlgoOrderId === 0 && order.algoOrderId === order.rootAlgoOrderId);
27
35
  if (rootOrderIndex === -1) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/orderMerge/algoOrderMergeHandler.ts"],"sourcesContent":["import { API, WSMessage } from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\n\nexport class AlgoOrderMergeHandler extends BaseMergeHandler<\n WSMessage.AlgoOrder[],\n API.AlgoOrder\n> {\n get orderId(): number {\n return this.data.algo_order_id;\n }\n\n get status(): string {\n return this.data.root_algo_status;\n }\n\n // merge(\n // key: string,\n // message: WSMessage.AlgoOrder[],\n // prevData: API.OrderResponse[]\n // ): API.OrderResponse[] | undefined {\n // switch (this.status) {\n // case \"TRIGGER\": {\n // }\n // default:\n // return super.merge(key, message, prevData);\n // }\n // }\n\n pre(\n message: WSMessage.AlgoOrder[],\n prevData?: API.OrderResponse[]\n ): API.AlgoOrder {\n return AlgoOrderMergeHandler.groupOrders(message);\n }\n\n static groupOrders(orders: WSMessage.AlgoOrder[]): API.AlgoOrder {\n const rootOrderIndex = orders.findIndex(\n (order) =>\n order.parentAlgoOrderId === 0 &&\n order.algoOrderId === order.rootAlgoOrderId\n );\n if (rootOrderIndex === -1) {\n throw new Error(\"Root order not found\");\n }\n\n const rootOrder_ = object2underscore(\n orders[rootOrderIndex]\n ) as unknown as API.AlgoOrder;\n\n rootOrder_.child_orders = orders\n .filter((_, index) => index !== rootOrderIndex)\n .map((order) => {\n return object2underscore(order) as unknown as API.AlgoOrder;\n });\n\n return rootOrder_;\n }\n}\n"],"names":["BaseMergeHandler","object2underscore","AlgoOrderMergeHandler","orderId","data","algo_order_id","status","root_algo_status","pre","message","prevData","groupOrders","orders","rootOrderIndex","findIndex","order","parentAlgoOrderId","algoOrderId","rootAlgoOrderId","Error","rootOrder_","child_orders","filter","_","index","map"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,iBAAiB,QAAQ,iBAAiB;AAEnD,OAAO,MAAMC,8BAA8BF;IAIzC,IAAIG,UAAkB;QACpB,OAAO,IAAI,CAACC,IAAI,CAACC,aAAa;IAChC;IAEA,IAAIC,SAAiB;QACnB,OAAO,IAAI,CAACF,IAAI,CAACG,gBAAgB;IACnC;IAEA,WAAW;IACX,mBAAmB;IACnB,sCAAsC;IACtC,oCAAoC;IACpC,yCAAyC;IACzC,6BAA6B;IAC7B,0BAA0B;IAC1B,UAAU;IACV,iBAAiB;IACjB,sDAAsD;IACtD,QAAQ;IACR,MAAM;IAENC,IACEC,OAA8B,EAC9BC,QAA8B,EACf;QACf,OAAOR,sBAAsBS,WAAW,CAACF;IAC3C;IAEA,OAAOE,YAAYC,MAA6B,EAAiB;QAC/D,MAAMC,iBAAiBD,OAAOE,SAAS,CACrC,CAACC,QACCA,MAAMC,iBAAiB,KAAK,KAC5BD,MAAME,WAAW,KAAKF,MAAMG,eAAe;QAE/C,IAAIL,mBAAmB,CAAC,GAAG;YACzB,MAAM,IAAIM,MAAM;QAClB;QAEA,MAAMC,aAAanB,kBACjBW,MAAM,CAACC,eAAe;QAGxBO,WAAWC,YAAY,GAAGT,OACvBU,MAAM,CAAC,CAACC,GAAGC,QAAUA,UAAUX,gBAC/BY,GAAG,CAAC,CAACV;YACJ,OAAOd,kBAAkBc;QAC3B;QAEF,OAAOK;IACT;AACF"}
1
+ {"version":3,"sources":["../../../src/services/orderMerge/algoOrderMergeHandler.ts"],"sourcesContent":["import { API, WSMessage } from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\n\nexport class AlgoOrderMergeHandler extends BaseMergeHandler<\n WSMessage.AlgoOrder[],\n API.AlgoOrder\n> {\n get orderId(): number {\n return this.data.algo_order_id;\n }\n\n get status(): string {\n return this.data.root_algo_status;\n }\n\n // merge(\n // key: string,\n // message: WSMessage.AlgoOrder[],\n // prevData: API.OrderResponse[]\n // ): API.OrderResponse[] | undefined {\n // switch (this.status) {\n // case \"TRIGGER\": {\n // }\n // default:\n // return super.merge(key, message, prevData);\n // }\n // }\n\n pre(\n message: WSMessage.AlgoOrder[],\n prevData?: API.OrderResponse[]\n ): API.AlgoOrder {\n return AlgoOrderMergeHandler.groupOrders(message);\n }\n\n isFullFilled(): boolean {\n if (\n \"total_executed_quantity\" in this.data &&\n this.data.total_executed_quantity !== 0\n ) {\n return this.data.total_executed_quantity === this.data.quantity;\n } else if (\n \"total_executed_quantity\" in (this.data as API.AlgoOrder).child_orders[0]\n ) {\n return (\n (this.data as API.AlgoOrder).child_orders[0].total_executed_quantity ===\n (this.data as API.AlgoOrder).child_orders[0].quantity\n );\n }\n\n return false;\n }\n\n static groupOrders(orders: WSMessage.AlgoOrder[]): API.AlgoOrder {\n const rootOrderIndex = orders.findIndex(\n (order) =>\n order.parentAlgoOrderId === 0 &&\n order.algoOrderId === order.rootAlgoOrderId\n );\n if (rootOrderIndex === -1) {\n throw new Error(\"Root order not found\");\n }\n\n const rootOrder_ = object2underscore(\n orders[rootOrderIndex]\n ) as unknown as API.AlgoOrder;\n\n rootOrder_.child_orders = orders\n .filter((_, index) => index !== rootOrderIndex)\n .map((order) => {\n return object2underscore(order) as unknown as API.AlgoOrder;\n });\n\n return rootOrder_;\n }\n}\n"],"names":["BaseMergeHandler","object2underscore","AlgoOrderMergeHandler","orderId","data","algo_order_id","status","root_algo_status","pre","message","prevData","groupOrders","isFullFilled","total_executed_quantity","quantity","child_orders","orders","rootOrderIndex","findIndex","order","parentAlgoOrderId","algoOrderId","rootAlgoOrderId","Error","rootOrder_","filter","_","index","map"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,iBAAiB,QAAQ,iBAAiB;AAEnD,OAAO,MAAMC,8BAA8BF;IAIzC,IAAIG,UAAkB;QACpB,OAAO,IAAI,CAACC,IAAI,CAACC,aAAa;IAChC;IAEA,IAAIC,SAAiB;QACnB,OAAO,IAAI,CAACF,IAAI,CAACG,gBAAgB;IACnC;IAEA,WAAW;IACX,mBAAmB;IACnB,sCAAsC;IACtC,oCAAoC;IACpC,yCAAyC;IACzC,6BAA6B;IAC7B,0BAA0B;IAC1B,UAAU;IACV,iBAAiB;IACjB,sDAAsD;IACtD,QAAQ;IACR,MAAM;IAENC,IACEC,OAA8B,EAC9BC,QAA8B,EACf;QACf,OAAOR,sBAAsBS,WAAW,CAACF;IAC3C;IAEAG,eAAwB;QACtB,IACE,6BAA6B,IAAI,CAACR,IAAI,IACtC,IAAI,CAACA,IAAI,CAACS,uBAAuB,KAAK,GACtC;YACA,OAAO,IAAI,CAACT,IAAI,CAACS,uBAAuB,KAAK,IAAI,CAACT,IAAI,CAACU,QAAQ;QACjE,OAAO,IACL,6BAA6B,AAAC,IAAI,CAACV,IAAI,CAAmBW,YAAY,CAAC,EAAE,EACzE;YACA,OACE,AAAC,IAAI,CAACX,IAAI,CAAmBW,YAAY,CAAC,EAAE,CAACF,uBAAuB,KACpE,AAAC,IAAI,CAACT,IAAI,CAAmBW,YAAY,CAAC,EAAE,CAACD,QAAQ;QAEzD;QAEA,OAAO;IACT;IAEA,OAAOH,YAAYK,MAA6B,EAAiB;QAC/D,MAAMC,iBAAiBD,OAAOE,SAAS,CACrC,CAACC,QACCA,MAAMC,iBAAiB,KAAK,KAC5BD,MAAME,WAAW,KAAKF,MAAMG,eAAe;QAE/C,IAAIL,mBAAmB,CAAC,GAAG;YACzB,MAAM,IAAIM,MAAM;QAClB;QAEA,MAAMC,aAAavB,kBACjBe,MAAM,CAACC,eAAe;QAGxBO,WAAWT,YAAY,GAAGC,OACvBS,MAAM,CAAC,CAACC,GAAGC,QAAUA,UAAUV,gBAC/BW,GAAG,CAAC,CAACT;YACJ,OAAOlB,kBAAkBkB;QAC3B;QAEF,OAAOK;IACT;AACF"}
@@ -7,6 +7,7 @@ export declare abstract class BaseMergeHandler<T extends WSMessage.AlgoOrder[] |
7
7
  abstract get status(): string;
8
8
  abstract get orderId(): number;
9
9
  abstract pre(message: T, prevData?: API.OrderResponse[]): D;
10
+ abstract isFullFilled(): boolean;
10
11
  /**
11
12
  * format the order data;
12
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"baseMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/baseMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,8BAAsB,gBAAgB,CACpC,CAAC,SAAS,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,KAAK,EACjD,CAAC,SAAS,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CACnC,YAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAGvB,OAAO,CAAC,OAAO;IAD3B,IAAI,EAAE,CAAC,CAAC;gBACY,OAAO,EAAE,CAAC;IAG9B,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC;IAC9B,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;IAE3D;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC;IAc1B,KAAK,CACH,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,GAC5B,GAAG,CAAC,aAAa,EAAE;IA0EtB,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,SAAS,GAAG,GAAG,CAAC,aAAa,EAAE;IAgBrE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE;IAO/D,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE;IAqB1D,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE;IAiB1D,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS;IA+BjE,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,OAAO;CAItD"}
1
+ {"version":3,"file":"baseMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/baseMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,8BAAsB,gBAAgB,CACpC,CAAC,SAAS,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,CAAC,KAAK,EACjD,CAAC,SAAS,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,KAAK,CACnC,YAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC;IAGvB,OAAO,CAAC,OAAO;IAD3B,IAAI,EAAE,CAAC,CAAC;gBACY,OAAO,EAAE,CAAC;IAG9B,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC;IAC9B,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC;IAC3D,QAAQ,CAAC,YAAY,IAAI,OAAO;IAEhC;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC;IAc1B,KAAK,CACH,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,EACV,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,GAC5B,GAAG,CAAC,aAAa,EAAE;IAuEtB,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,SAAS,GAAG,GAAG,CAAC,aAAa,EAAE;IAgBrE,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE;IAO/D,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE;IAqB1D,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE;IAiB1D,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS;IA+BjE,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,OAAO;CAItD"}
@@ -48,7 +48,7 @@ export class BaseMergeHandler {
48
48
  // for new list, remove the order if it exists
49
49
  if (key.startsWith("orders:INCOMPLETE") || key.startsWith("orders:NEW")) {
50
50
  // if fullfilled, remove from the list
51
- if ("total_executed_quantity" in this.data && this.data.total_executed_quantity === this.data.quantity) {
51
+ if (this.isFullFilled()) {
52
52
  return this.remove(prevData);
53
53
  }
54
54
  // update
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/orderMerge/baseMergeHandler.ts"],"sourcesContent":["import { WSMessage, API } from \"@orderly.network/types\";\nimport { IOrderMergeHandler } from \"./interface\";\nimport { lensIndex, over } from \"ramda\";\n\nexport abstract class BaseMergeHandler<\n T extends WSMessage.AlgoOrder[] | WSMessage.Order,\n D extends API.AlgoOrder | API.Order\n> implements IOrderMergeHandler<T, D>\n{\n data: D;\n constructor(private message: T) {\n this.data = this.formatOrder(message);\n }\n abstract get status(): string;\n abstract get orderId(): number;\n abstract pre(message: T, prevData?: API.OrderResponse[]): D;\n\n /**\n * format the order data;\n */\n formatOrder(message: T): D {\n const data = this.pre(message);\n\n if (!data.created_time) {\n data.created_time = (data as any).timestamp;\n }\n\n if (data.type && data.type.endsWith(\"_ORDER\")) {\n data.type = data.type.replace(\"_ORDER\", \"\");\n }\n\n return data;\n }\n\n merge(\n key: string,\n message: T,\n prevData: API.OrderResponse[]\n ): API.OrderResponse[] {\n switch (this.status) {\n case \"NEW\": {\n if (\n key.startsWith(\"orders:CANCELLED\") ||\n key.startsWith(\"orders:FILLED\") ||\n key.startsWith(\"orders:REJECTED\")\n ) {\n return prevData;\n }\n return this.insetOrUpdate(prevData);\n }\n case \"CANCELLED\": {\n if (\n key.startsWith(\"orders:FILLED\") ||\n key.startsWith(\"orders:REJECTED\")\n ) {\n return prevData;\n }\n if (\n key.startsWith(\"orders:NEW\") ||\n key.startsWith(\"orders:INCOMPLETE\")\n ) {\n return this.remove(prevData);\n }\n\n if (key.startsWith(\"orders:CANCELLED\")) {\n return this.insert(prevData);\n }\n\n return this.update(prevData);\n }\n\n case \"REPLACED\":\n return this.update(prevData);\n\n case \"FILLED\": {\n if (this.orderIsExisting(prevData)) {\n // for new list, remove the order if it exists\n if (\n key.startsWith(\"orders:INCOMPLETE\") ||\n key.startsWith(\"orders:NEW\")\n ) {\n // if fullfilled, remove from the list\n if (\n \"total_executed_quantity\" in this.data &&\n this.data.total_executed_quantity === this.data.quantity\n ) {\n return this.remove(prevData);\n }\n\n // update\n return this.update(prevData);\n }\n } else {\n // for filled list, insert the order if it doesn't exist\n\n if (\n key.startsWith(\"orders:CANCELLED\") ||\n key.startsWith(\"orders:INCOMPLETE\") ||\n key.startsWith(\"orders:NEW\")\n ) {\n return prevData;\n }\n // if filled/history list:\n return this.insert(prevData);\n }\n }\n\n default:\n return prevData || [];\n }\n }\n\n insert(orders?: API.OrderResponse[] | undefined): API.OrderResponse[] {\n const index = lensIndex<API.OrderResponse>(0);\n return over(\n //@ts-ignore\n index,\n (item: any) => ({\n meta: {\n ...item.meta,\n total: item.meta.total + 1,\n },\n rows: [this.data, ...item.rows],\n }),\n orders\n ) as API.OrderResponse[];\n }\n\n insetOrUpdate(orders: API.OrderResponse[]): API.OrderResponse[] {\n if (this.orderIsExisting(orders)) {\n return this.update(orders);\n }\n return this.insert(orders);\n }\n\n update(prevData: API.OrderResponse[]): API.OrderResponse[] {\n const idx = this.findOrderIndex(prevData);\n if (!Array.isArray(idx)) {\n return prevData || [];\n }\n\n const [index, index2] = idx;\n\n return prevData.map((item, i) => {\n return {\n meta: { ...item.meta },\n rows: item.rows.map((order, j) => {\n if (index === i && index2 === j) {\n return { ...order, ...this.data };\n }\n return order;\n }),\n };\n });\n }\n\n remove(prevData: API.OrderResponse[]): API.OrderResponse[] {\n const idx = this.findOrderIndex(prevData);\n if (!Array.isArray(idx)) {\n return prevData;\n }\n\n const [index, index2] = idx;\n\n return prevData.map((item, i) => {\n return {\n meta: { ...item.meta, total: item.meta.total - 1 },\n rows:\n index === i ? item.rows.filter((_, i) => i !== index2) : item.rows,\n };\n });\n }\n\n findOrderIndex(orders: API.OrderResponse[]): number[] | undefined {\n let index: number = 0;\n let index2: number | undefined;\n\n for (; index < orders.length; index++) {\n // index = idx;\n const item = orders[index];\n\n for (let idx2 = 0; idx2 < item.rows.length; idx2++) {\n const element = item.rows[idx2];\n if (\n (element as API.AlgoOrder).algo_order_id === this.orderId ||\n (element as API.Order).order_id === this.orderId\n ) {\n index2 = idx2;\n\n break;\n }\n }\n if (typeof index2 !== \"undefined\") {\n break;\n }\n }\n\n if (typeof index2 === \"undefined\") {\n return;\n }\n\n return [index, index2];\n }\n\n orderIsExisting(orders: API.OrderResponse[]): boolean {\n const index = this.findOrderIndex(orders);\n return Array.isArray(index);\n }\n}\n"],"names":["lensIndex","over","BaseMergeHandler","data","constructor","message","formatOrder","pre","created_time","timestamp","type","endsWith","replace","merge","key","prevData","status","startsWith","insetOrUpdate","remove","insert","update","orderIsExisting","total_executed_quantity","quantity","orders","index","item","meta","total","rows","idx","findOrderIndex","Array","isArray","index2","map","i","order","j","filter","_","length","idx2","element","algo_order_id","orderId","order_id"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/services/orderMerge/baseMergeHandler.ts"],"sourcesContent":["import { WSMessage, API } from \"@orderly.network/types\";\nimport { IOrderMergeHandler } from \"./interface\";\nimport { lensIndex, over } from \"ramda\";\n\nexport abstract class BaseMergeHandler<\n T extends WSMessage.AlgoOrder[] | WSMessage.Order,\n D extends API.AlgoOrder | API.Order\n> implements IOrderMergeHandler<T, D>\n{\n data: D;\n constructor(private message: T) {\n this.data = this.formatOrder(message);\n }\n abstract get status(): string;\n abstract get orderId(): number;\n abstract pre(message: T, prevData?: API.OrderResponse[]): D;\n abstract isFullFilled(): boolean;\n\n /**\n * format the order data;\n */\n formatOrder(message: T): D {\n const data = this.pre(message);\n\n if (!data.created_time) {\n data.created_time = (data as any).timestamp;\n }\n\n if (data.type && data.type.endsWith(\"_ORDER\")) {\n data.type = data.type.replace(\"_ORDER\", \"\");\n }\n\n return data;\n }\n\n merge(\n key: string,\n message: T,\n prevData: API.OrderResponse[]\n ): API.OrderResponse[] {\n switch (this.status) {\n case \"NEW\": {\n if (\n key.startsWith(\"orders:CANCELLED\") ||\n key.startsWith(\"orders:FILLED\") ||\n key.startsWith(\"orders:REJECTED\")\n ) {\n return prevData;\n }\n return this.insetOrUpdate(prevData);\n }\n case \"CANCELLED\": {\n if (\n key.startsWith(\"orders:FILLED\") ||\n key.startsWith(\"orders:REJECTED\")\n ) {\n return prevData;\n }\n if (\n key.startsWith(\"orders:NEW\") ||\n key.startsWith(\"orders:INCOMPLETE\")\n ) {\n return this.remove(prevData);\n }\n\n if (key.startsWith(\"orders:CANCELLED\")) {\n return this.insert(prevData);\n }\n\n return this.update(prevData);\n }\n\n case \"REPLACED\":\n return this.update(prevData);\n\n case \"FILLED\": {\n if (this.orderIsExisting(prevData)) {\n // for new list, remove the order if it exists\n if (\n key.startsWith(\"orders:INCOMPLETE\") ||\n key.startsWith(\"orders:NEW\")\n ) {\n // if fullfilled, remove from the list\n if (this.isFullFilled()) {\n return this.remove(prevData);\n }\n\n // update\n return this.update(prevData);\n }\n } else {\n // for filled list, insert the order if it doesn't exist\n\n if (\n key.startsWith(\"orders:CANCELLED\") ||\n key.startsWith(\"orders:INCOMPLETE\") ||\n key.startsWith(\"orders:NEW\")\n ) {\n return prevData;\n }\n // if filled/history list:\n return this.insert(prevData);\n }\n }\n\n default:\n return prevData || [];\n }\n }\n\n insert(orders?: API.OrderResponse[] | undefined): API.OrderResponse[] {\n const index = lensIndex<API.OrderResponse>(0);\n return over(\n //@ts-ignore\n index,\n (item: any) => ({\n meta: {\n ...item.meta,\n total: item.meta.total + 1,\n },\n rows: [this.data, ...item.rows],\n }),\n orders\n ) as API.OrderResponse[];\n }\n\n insetOrUpdate(orders: API.OrderResponse[]): API.OrderResponse[] {\n if (this.orderIsExisting(orders)) {\n return this.update(orders);\n }\n return this.insert(orders);\n }\n\n update(prevData: API.OrderResponse[]): API.OrderResponse[] {\n const idx = this.findOrderIndex(prevData);\n if (!Array.isArray(idx)) {\n return prevData || [];\n }\n\n const [index, index2] = idx;\n\n return prevData.map((item, i) => {\n return {\n meta: { ...item.meta },\n rows: item.rows.map((order, j) => {\n if (index === i && index2 === j) {\n return { ...order, ...this.data };\n }\n return order;\n }),\n };\n });\n }\n\n remove(prevData: API.OrderResponse[]): API.OrderResponse[] {\n const idx = this.findOrderIndex(prevData);\n if (!Array.isArray(idx)) {\n return prevData;\n }\n\n const [index, index2] = idx;\n\n return prevData.map((item, i) => {\n return {\n meta: { ...item.meta, total: item.meta.total - 1 },\n rows:\n index === i ? item.rows.filter((_, i) => i !== index2) : item.rows,\n };\n });\n }\n\n findOrderIndex(orders: API.OrderResponse[]): number[] | undefined {\n let index: number = 0;\n let index2: number | undefined;\n\n for (; index < orders.length; index++) {\n // index = idx;\n const item = orders[index];\n\n for (let idx2 = 0; idx2 < item.rows.length; idx2++) {\n const element = item.rows[idx2];\n if (\n (element as API.AlgoOrder).algo_order_id === this.orderId ||\n (element as API.Order).order_id === this.orderId\n ) {\n index2 = idx2;\n\n break;\n }\n }\n if (typeof index2 !== \"undefined\") {\n break;\n }\n }\n\n if (typeof index2 === \"undefined\") {\n return;\n }\n\n return [index, index2];\n }\n\n orderIsExisting(orders: API.OrderResponse[]): boolean {\n const index = this.findOrderIndex(orders);\n return Array.isArray(index);\n }\n}\n"],"names":["lensIndex","over","BaseMergeHandler","data","constructor","message","formatOrder","pre","created_time","timestamp","type","endsWith","replace","merge","key","prevData","status","startsWith","insetOrUpdate","remove","insert","update","orderIsExisting","isFullFilled","orders","index","item","meta","total","rows","idx","findOrderIndex","Array","isArray","index2","map","i","order","j","filter","_","length","idx2","element","algo_order_id","orderId","order_id"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -4,5 +4,6 @@ export declare class RegularOrderMergeHandler extends BaseMergeHandler<WSMessage
4
4
  get orderId(): number;
5
5
  get status(): string;
6
6
  pre(message: WSMessage.Order, prevData?: API.OrderResponse[] | undefined): API.Order;
7
+ isFullFilled(): boolean;
7
8
  }
8
9
  //# sourceMappingURL=regularOrderMergeHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"regularOrderMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/regularOrderMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,wBAAyB,SAAQ,gBAAgB,CAC5D,SAAS,CAAC,KAAK,EACf,GAAG,CAAC,KAAK,CACV;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,GAAG,CACD,OAAO,EAAE,SAAS,CAAC,KAAK,EACxB,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,SAAS,GACzC,GAAG,CAAC,KAAK;CAGb"}
1
+ {"version":3,"file":"regularOrderMergeHandler.d.ts","sourceRoot":"","sources":["../../../src/services/orderMerge/regularOrderMergeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,wBAAyB,SAAQ,gBAAgB,CAC5D,SAAS,CAAC,KAAK,EACf,GAAG,CAAC,KAAK,CACV;IACC,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,GAAG,CACD,OAAO,EAAE,SAAS,CAAC,KAAK,EACxB,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,SAAS,GACzC,GAAG,CAAC,KAAK;IAGZ,YAAY,IAAI,OAAO;CAMxB"}
@@ -10,6 +10,9 @@ export class RegularOrderMergeHandler extends BaseMergeHandler {
10
10
  pre(message, prevData) {
11
11
  return object2underscore(message);
12
12
  }
13
+ isFullFilled() {
14
+ return "total_executed_quantity" in this.data && this.data.total_executed_quantity === this.data.quantity;
15
+ }
13
16
  }
14
17
 
15
18
  //# sourceMappingURL=regularOrderMergeHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/orderMerge/regularOrderMergeHandler.ts"],"sourcesContent":["import { API, WSMessage } from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\n\nexport class RegularOrderMergeHandler extends BaseMergeHandler<\n WSMessage.Order,\n API.Order\n> {\n get orderId(): number {\n return this.data.order_id;\n }\n get status(): string {\n return this.data.status;\n }\n pre(\n message: WSMessage.Order,\n prevData?: API.OrderResponse[] | undefined\n ): API.Order {\n return object2underscore(message) as unknown as API.Order;\n }\n}\n"],"names":["BaseMergeHandler","object2underscore","RegularOrderMergeHandler","orderId","data","order_id","status","pre","message","prevData"],"rangeMappings":";;;;;;;;;;;;","mappings":"AACA,SAASA,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,iBAAiB,QAAQ,iBAAiB;AAEnD,OAAO,MAAMC,iCAAiCF;IAI5C,IAAIG,UAAkB;QACpB,OAAO,IAAI,CAACC,IAAI,CAACC,QAAQ;IAC3B;IACA,IAAIC,SAAiB;QACnB,OAAO,IAAI,CAACF,IAAI,CAACE,MAAM;IACzB;IACAC,IACEC,OAAwB,EACxBC,QAA0C,EAC/B;QACX,OAAOR,kBAAkBO;IAC3B;AACF"}
1
+ {"version":3,"sources":["../../../src/services/orderMerge/regularOrderMergeHandler.ts"],"sourcesContent":["import { API, WSMessage } from \"@orderly.network/types\";\nimport { BaseMergeHandler } from \"./baseMergeHandler\";\nimport { object2underscore } from \"../../utils/ws\";\n\nexport class RegularOrderMergeHandler extends BaseMergeHandler<\n WSMessage.Order,\n API.Order\n> {\n get orderId(): number {\n return this.data.order_id;\n }\n get status(): string {\n return this.data.status;\n }\n pre(\n message: WSMessage.Order,\n prevData?: API.OrderResponse[] | undefined\n ): API.Order {\n return object2underscore(message) as unknown as API.Order;\n }\n isFullFilled(): boolean {\n return (\n \"total_executed_quantity\" in this.data &&\n this.data.total_executed_quantity === this.data.quantity\n );\n }\n}\n"],"names":["BaseMergeHandler","object2underscore","RegularOrderMergeHandler","orderId","data","order_id","status","pre","message","prevData","isFullFilled","total_executed_quantity","quantity"],"rangeMappings":";;;;;;;;;;;;;;;","mappings":"AACA,SAASA,gBAAgB,QAAQ,qBAAqB;AACtD,SAASC,iBAAiB,QAAQ,iBAAiB;AAEnD,OAAO,MAAMC,iCAAiCF;IAI5C,IAAIG,UAAkB;QACpB,OAAO,IAAI,CAACC,IAAI,CAACC,QAAQ;IAC3B;IACA,IAAIC,SAAiB;QACnB,OAAO,IAAI,CAACF,IAAI,CAACE,MAAM;IACzB;IACAC,IACEC,OAAwB,EACxBC,QAA0C,EAC/B;QACX,OAAOR,kBAAkBO;IAC3B;IACAE,eAAwB;QACtB,OACE,6BAA6B,IAAI,CAACN,IAAI,IACtC,IAAI,CAACA,IAAI,CAACO,uBAAuB,KAAK,IAAI,CAACP,IAAI,CAACQ,QAAQ;IAE5D;AACF"}
@@ -39,6 +39,11 @@ export type posterDataSource = {
39
39
  * The update time of the position
40
40
  */
41
41
  updateTime: string;
42
+ referral?: {
43
+ code: string;
44
+ slogan: string;
45
+ link: string;
46
+ } | null;
42
47
  };
43
48
  export type layoutInfo = {
44
49
  width?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"basePaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/basePaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QAEf,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,YAAY,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACjD;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,aAAa,CAAC,EAAE,UAAU,GAAG;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAEF,YAAY,CAAC,EAAE,UAAU,GAAG;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,8BAAsB,SAAS;IAE3B,SAAS,CAAC,GAAG,EAAE,wBAAwB;IACvC,SAAS,CAAC,OAAO,EAAE,aAAa;gBADtB,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,aAAa;IAElC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CACnD"}
1
+ {"version":3,"file":"basePaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/basePaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QAEf,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,GAAG,EAAE,MAAM,CAAC;QACZ;;WAEG;QACH,YAAY,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACjD;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,aAAa,CAAC,EAAE,UAAU,GAAG;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IAEF,YAAY,CAAC,EAAE,UAAU,GAAG;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,8BAAsB,SAAS;IAE3B,SAAS,CAAC,GAAG,EAAE,wBAAwB;IACvC,SAAS,CAAC,OAAO,EAAE,aAAa;gBADtB,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,aAAa;IAElC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CACnD"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/services/painter/basePaint.ts"],"sourcesContent":["import { OrderSide } from \"@orderly.network/types\";\nimport { PosterPainter } from \"./painter\";\n\nexport type posterDataSource = {\n /**\n * slogan of the poster\n */\n message?: string;\n position: {\n symbol: string;\n // side: OrderSide;\n side: \"LONG\" | \"SHORT\";\n /**\n * The leverage of the position\n */\n leverage: number;\n /**\n * The unrealized PnL of the position\n */\n pnl: number;\n /**\n * The return on investment of the position\n */\n ROI: number;\n /**\n * The informations of the position, such as open price, opened at, mark price, quantity and custom message.\n */\n informations: { title: string; value: string }[];\n /**\n * The quote currency of the position\n */\n currency: string;\n };\n /**\n * The domain of the application\n */\n domain: string;\n\n /**\n * The update time of the position\n */\n updateTime: string;\n};\n\nexport type layoutInfo = {\n width?: number;\n height?: number;\n // padding?: number;\n // margin?: number;\n fontSize?: number;\n\n color?: string;\n textAlign?: CanvasTextAlign;\n textBaseline?: CanvasTextBaseline;\n position: Partial<{\n left: number;\n right: number;\n top: number;\n bottom: number;\n }>;\n};\n\nexport type PosterLayoutConfig = {\n message?: layoutInfo;\n\n domain?: layoutInfo;\n position?: layoutInfo;\n unrealizedPnl?: layoutInfo & {\n secondaryColor: string;\n secondaryFontSize: number;\n };\n\n informations?: layoutInfo & {\n labelColor?: string;\n };\n updateTime?: layoutInfo;\n};\n\nexport type DrawOptions = {\n /**\n * Color of common text\n */\n color?: string;\n fontFamily?: string;\n /**\n * Lose color\n */\n lossColor?: string;\n /**\n * Profit color\n */\n profitColor?: string;\n /**\n * The brand color of the application\n */\n brandColor?: string;\n backgroundColor?: string;\n backgroundImg?: string;\n data?: posterDataSource;\n layout?: PosterLayoutConfig;\n};\n\nexport abstract class BasePaint {\n constructor(\n protected ctx: CanvasRenderingContext2D,\n protected painter: PosterPainter\n ) {}\n abstract draw(options: DrawOptions): Promise<void>;\n}\n"],"names":["BasePaint","constructor","ctx","painter"],"rangeMappings":";;;;;;;","mappings":"AAsGA,OAAO,MAAeA;;;IACpBC,YACE,AAAUC,GAA6B,EACvC,AAAUC,OAAsB,CAChC;aAFUD,MAAAA;aACAC,UAAAA;IACT;AAEL"}
1
+ {"version":3,"sources":["../../../src/services/painter/basePaint.ts"],"sourcesContent":["import { OrderSide } from \"@orderly.network/types\";\nimport { PosterPainter } from \"./painter\";\n\nexport type posterDataSource = {\n /**\n * slogan of the poster\n */\n message?: string;\n position: {\n symbol: string;\n // side: OrderSide;\n side: \"LONG\" | \"SHORT\";\n /**\n * The leverage of the position\n */\n leverage: number;\n /**\n * The unrealized PnL of the position\n */\n pnl: number;\n /**\n * The return on investment of the position\n */\n ROI: number;\n /**\n * The informations of the position, such as open price, opened at, mark price, quantity and custom message.\n */\n informations: { title: string; value: string }[];\n /**\n * The quote currency of the position\n */\n currency: string;\n };\n /**\n * The domain of the application\n */\n domain: string;\n\n /**\n * The update time of the position\n */\n updateTime: string;\n\n referral?: {\n code: string;\n slogan: string;\n link: string;\n } | null;\n};\n\nexport type layoutInfo = {\n width?: number;\n height?: number;\n // padding?: number;\n // margin?: number;\n fontSize?: number;\n\n color?: string;\n textAlign?: CanvasTextAlign;\n textBaseline?: CanvasTextBaseline;\n position: Partial<{\n left: number;\n right: number;\n top: number;\n bottom: number;\n }>;\n};\n\nexport type PosterLayoutConfig = {\n message?: layoutInfo;\n\n domain?: layoutInfo;\n position?: layoutInfo;\n unrealizedPnl?: layoutInfo & {\n secondaryColor: string;\n secondaryFontSize: number;\n };\n\n informations?: layoutInfo & {\n labelColor?: string;\n };\n updateTime?: layoutInfo;\n};\n\nexport type DrawOptions = {\n /**\n * Color of common text\n */\n color?: string;\n fontFamily?: string;\n /**\n * Lose color\n */\n lossColor?: string;\n /**\n * Profit color\n */\n profitColor?: string;\n /**\n * The brand color of the application\n */\n brandColor?: string;\n backgroundColor?: string;\n backgroundImg?: string;\n data?: posterDataSource;\n layout?: PosterLayoutConfig;\n};\n\nexport abstract class BasePaint {\n constructor(\n protected ctx: CanvasRenderingContext2D,\n protected painter: PosterPainter\n ) {}\n abstract draw(options: DrawOptions): Promise<void>;\n}\n"],"names":["BasePaint","constructor","ctx","painter"],"rangeMappings":";;;;;;;","mappings":"AA4GA,OAAO,MAAeA;;;IACpBC,YACE,AAAUC,GAA6B,EACvC,AAAUC,OAAsB,CAChC;aAFUD,MAAAA;aACAC,UAAAA;IACT;AAEL"}
@@ -4,6 +4,7 @@ export declare class DataPaint extends BasePaint {
4
4
  private DEFAULT_PROFIT_COLOR;
5
5
  private DEFAULT_LOSS_COLOR;
6
6
  private transformTop;
7
+ private QRCODE_SIZE;
7
8
  draw(options: DrawOptions): Promise<void>;
8
9
  private drawMessage;
9
10
  private drawPosition;
@@ -11,7 +12,9 @@ export declare class DataPaint extends BasePaint {
11
12
  private drawInformations;
12
13
  private drawDomainUrl;
13
14
  private drawPositionTime;
15
+ private drawReferralCode;
14
16
  private _drawText;
17
+ private hasReferral;
15
18
  private _ratio;
16
19
  }
17
20
  //# sourceMappingURL=dataPaint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataPaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/dataPaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAGjE,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAO,CAAC,qBAAqB,CAAO;IAEpC,OAAO,CAAC,oBAAoB,CAAoB;IAChD,OAAO,CAAC,kBAAkB,CAAsB;IAEhD,OAAO,CAAC,YAAY,CAAK;IAEnB,IAAI,CAAC,OAAO,EAAE,WAAW;IAsC/B,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,YAAY;IA2EpB,OAAO,CAAC,iBAAiB;IAyEzB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,MAAM;CAGf"}
1
+ {"version":3,"file":"dataPaint.d.ts","sourceRoot":"","sources":["../../../src/services/painter/dataPaint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAIjE,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAO,CAAC,qBAAqB,CAAO;IAEpC,OAAO,CAAC,oBAAoB,CAAoB;IAChD,OAAO,CAAC,kBAAkB,CAAsB;IAEhD,OAAO,CAAC,YAAY,CAAK;IAEzB,OAAO,CAAC,WAAW,CAAM;IAEnB,IAAI,CAAC,OAAO,EAAE,WAAW;IAkD/B,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,YAAY;IA2EpB,OAAO,CAAC,iBAAiB;IAyEzB,OAAO,CAAC,gBAAgB;IAuCxB,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,gBAAgB;IAwCxB,OAAO,CAAC,gBAAgB;IA4DxB,OAAO,CAAC,SAAS;IA0CjB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,MAAM;CAGf"}
@@ -1,36 +1,42 @@
1
1
  import { commify } from "@orderly.network/utils";
2
2
  import { BasePaint } from "./basePaint";
3
3
  import { path } from "ramda";
4
+ import { qrPaint } from "./qrPaint";
4
5
  export class DataPaint extends BasePaint {
5
6
  positionInfoCellWidth = 110;
6
7
  DEFAULT_PROFIT_COLOR = "rgb(0,181,159)";
7
8
  DEFAULT_LOSS_COLOR = "rgb(255,103,194)";
8
9
  transformTop = 0;
10
+ QRCODE_SIZE = 56;
9
11
  async draw(options) {
10
12
  const needDrawDetails = Array.isArray(options.data?.position?.informations) && (options.data?.position?.informations?.length ?? 0) > 0;
13
+ const hasReferral = this.hasReferral(options);
11
14
  // const hasMessage = !!options.data?.message;
12
15
  const hasMessage = true;
13
16
  this.transformTop = hasMessage ? 0 : needDrawDetails ? -40 : -150;
14
17
  // If position details are not displayed, the position PNL information will be margin
15
18
  // const offsetTop = hasMessage ? 50 : 100;
16
- const offsetTop = 100;
19
+ const offsetTop = 0; // 100;
17
20
  // const offsetMessage = hasMessage ? 0 : -50;
18
21
  if (!!options.data?.message) {
19
22
  this.drawMessage(options);
20
23
  }
21
24
  if (!!options.data?.position) {
22
- this.drawPosition(options, needDrawDetails ? 0 : offsetTop);
25
+ this.drawPosition(options, needDrawDetails || hasReferral ? 0 : offsetTop);
23
26
  }
24
27
  if (needDrawDetails) {
25
28
  this.drawInformations(options);
26
29
  }
27
- this.drawUnrealizedPnL(options, needDrawDetails ? 0 : offsetTop);
30
+ this.drawUnrealizedPnL(options, needDrawDetails || hasReferral ? 0 : offsetTop);
28
31
  if (!!options.data?.domain) {
29
32
  this.drawDomainUrl(options);
30
33
  }
31
34
  if (typeof options.data?.updateTime !== "undefined") {
32
35
  this.drawPositionTime(options);
33
36
  }
37
+ if (typeof options.data?.referral !== "undefined") {
38
+ this.drawReferralCode(options);
39
+ }
34
40
  }
35
41
  drawMessage(options) {
36
42
  // console.log("draw message", options);
@@ -183,22 +189,24 @@ export class DataPaint extends BasePaint {
183
189
  });
184
190
  });
185
191
  }
186
- drawDomainUrl(options) {
192
+ drawDomainUrl(options, onlyMeasure = false) {
187
193
  const layout = path([
188
194
  "layout",
189
195
  "domain"
190
196
  ], options);
197
+ const hasReferral = this.hasReferral(options);
191
198
  const { position } = layout;
192
199
  const top = this.painter.height - position.bottom;
193
- this._drawText(options.data?.domain, {
194
- left: this._ratio(position.left),
195
- top: this._ratio(top),
200
+ return this._drawText(options.data?.domain, {
201
+ left: !hasReferral ? this._ratio(position.left) : this._ratio(this.painter.width - 20),
202
+ top: !hasReferral ? this._ratio(top) : this._ratio(this.painter.height - 16),
196
203
  fontSize: this._ratio(layout.fontSize),
197
204
  color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,
198
205
  fontFamily: options.fontFamily,
199
206
  textBaseline: layout.textBaseline,
207
+ textAlign: !hasReferral ? layout.textAlign : "end",
200
208
  fontWeight: 600
201
- });
209
+ }, onlyMeasure);
202
210
  }
203
211
  drawPositionTime(options) {
204
212
  const layout = path([
@@ -206,20 +214,79 @@ export class DataPaint extends BasePaint {
206
214
  "updateTime"
207
215
  ], options);
208
216
  const { position } = layout;
209
- const top = this.painter.height - position.bottom;
210
- const left = position.left;
211
- ;
212
- this._drawText(options.data?.updateTime, {
213
- left: this._ratio(left),
217
+ const hasReferral = this.hasReferral(options);
218
+ let top = this.painter.height - position.bottom;
219
+ let left = this._ratio(position.left);
220
+ if (hasReferral) {
221
+ const metrics = this.drawDomainUrl(options, true);
222
+ // console.log("metrics", metrics);
223
+ left = this._ratio(this.painter.width) - metrics.width - this._ratio(8 + position.left);
224
+ top = this.painter.height - position.bottom;
225
+ // console.log("left", left, top, metrics.width, this._ratio(top));
226
+ }
227
+ this._drawText(!hasReferral ? options.data?.updateTime : `Share on ${options.data?.updateTime} |`, {
228
+ left,
214
229
  top: this._ratio(top),
230
+ // top: 536,
215
231
  fontSize: this._ratio(layout.fontSize),
216
232
  color: layout.color,
217
- textAlign: layout.textAlign,
233
+ // color: "red",
234
+ textAlign: !hasReferral ? layout.textAlign : "end",
218
235
  fontFamily: options.fontFamily,
219
236
  textBaseline: layout.textBaseline
220
237
  });
221
238
  }
222
- _drawText(str, options) {
239
+ drawReferralCode(options) {
240
+ if (!options.data?.referral) {
241
+ return;
242
+ }
243
+ const layout = path([
244
+ "layout",
245
+ "updateTime"
246
+ ], options);
247
+ const { position } = layout;
248
+ const top = this.painter.height - (position.bottom ?? 0);
249
+ const messageLayout = path([
250
+ "layout",
251
+ "message"
252
+ ], options);
253
+ const url = new URL(options.data.referral.link);
254
+ const searchParams = url.searchParams;
255
+ searchParams.append("ref", options.data.referral.code);
256
+ url.search = searchParams.toString();
257
+ qrPaint(this.ctx, {
258
+ size: this._ratio(this.QRCODE_SIZE),
259
+ padding: this._ratio(2),
260
+ left: this._ratio(position.left),
261
+ top: this._ratio(top - this.QRCODE_SIZE),
262
+ data: `${url.toString()}`
263
+ });
264
+ this._drawText(options.data.referral.slogan, {
265
+ left: this._ratio(position.left + 66),
266
+ top: this._ratio(top - this.QRCODE_SIZE),
267
+ fontSize: this._ratio(14),
268
+ color: options.brandColor ?? this.DEFAULT_PROFIT_COLOR,
269
+ fontFamily: options.fontFamily,
270
+ textBaseline: "top"
271
+ });
272
+ this._drawText("Referral Code", {
273
+ left: this._ratio(position.left + 66),
274
+ top: this._ratio(top - 29),
275
+ fontSize: this._ratio(12),
276
+ color: layout.color,
277
+ fontFamily: options.fontFamily,
278
+ textBaseline: "middle"
279
+ });
280
+ this._drawText(options.data.referral.code, {
281
+ left: this._ratio(position.left + 66),
282
+ top: this._ratio(top),
283
+ fontSize: this._ratio(16),
284
+ color: messageLayout.color,
285
+ fontFamily: options.fontFamily,
286
+ textBaseline: "bottom"
287
+ });
288
+ }
289
+ _drawText(str, options, onlyMeasure = false) {
223
290
  let boundingBox;
224
291
  const { left = 30, top = 30, fontSize = 13, fontWeight = 500, color = "black", textBaseline = "middle", textAlign = "start" } = options ?? {};
225
292
  this.ctx.save();
@@ -229,10 +296,15 @@ export class DataPaint extends BasePaint {
229
296
  this.ctx.textBaseline = textBaseline;
230
297
  this.ctx.textAlign = textAlign;
231
298
  boundingBox = this.ctx.measureText(str);
232
- this.ctx.fillText(str, left, top);
299
+ if (!onlyMeasure) {
300
+ this.ctx.fillText(str, left, top);
301
+ }
233
302
  this.ctx.restore();
234
303
  return boundingBox;
235
304
  }
305
+ hasReferral(options) {
306
+ return typeof options.data?.referral !== "undefined";
307
+ }
236
308
  _ratio(num) {
237
309
  return num * this.painter.ratio;
238
310
  }