@metamask-previews/assets-controllers 56.0.0-preview-c7dcfd5a → 56.0.0-preview-9d7b1fa6

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 (42) hide show
  1. package/CHANGELOG.md +0 -5
  2. package/dist/DeFiPositionsController/DeFiPositionsController.cjs +79 -0
  3. package/dist/DeFiPositionsController/DeFiPositionsController.cjs.map +1 -0
  4. package/dist/DeFiPositionsController/DeFiPositionsController.d.cts +55 -0
  5. package/dist/DeFiPositionsController/DeFiPositionsController.d.cts.map +1 -0
  6. package/dist/DeFiPositionsController/DeFiPositionsController.d.mts +55 -0
  7. package/dist/DeFiPositionsController/DeFiPositionsController.d.mts.map +1 -0
  8. package/dist/DeFiPositionsController/DeFiPositionsController.mjs +74 -0
  9. package/dist/DeFiPositionsController/DeFiPositionsController.mjs.map +1 -0
  10. package/dist/DeFiPositionsController/fetch-positions.cjs +22 -0
  11. package/dist/DeFiPositionsController/fetch-positions.cjs.map +1 -0
  12. package/dist/DeFiPositionsController/fetch-positions.d.cts +59 -0
  13. package/dist/DeFiPositionsController/fetch-positions.d.cts.map +1 -0
  14. package/dist/DeFiPositionsController/fetch-positions.d.mts +59 -0
  15. package/dist/DeFiPositionsController/fetch-positions.d.mts.map +1 -0
  16. package/dist/DeFiPositionsController/fetch-positions.mjs +18 -0
  17. package/dist/DeFiPositionsController/fetch-positions.mjs.map +1 -0
  18. package/dist/DeFiPositionsController/group-positions.cjs +97 -0
  19. package/dist/DeFiPositionsController/group-positions.cjs.map +1 -0
  20. package/dist/DeFiPositionsController/group-positions.d.cts +36 -0
  21. package/dist/DeFiPositionsController/group-positions.d.cts.map +1 -0
  22. package/dist/DeFiPositionsController/group-positions.d.mts +36 -0
  23. package/dist/DeFiPositionsController/group-positions.d.mts.map +1 -0
  24. package/dist/DeFiPositionsController/group-positions.mjs +94 -0
  25. package/dist/DeFiPositionsController/group-positions.mjs.map +1 -0
  26. package/dist/DeFiPositionsController/mocks/mock-responses.cjs +600 -0
  27. package/dist/DeFiPositionsController/mocks/mock-responses.cjs.map +1 -0
  28. package/dist/DeFiPositionsController/mocks/mock-responses.d.cts +22 -0
  29. package/dist/DeFiPositionsController/mocks/mock-responses.d.cts.map +1 -0
  30. package/dist/DeFiPositionsController/mocks/mock-responses.d.mts +22 -0
  31. package/dist/DeFiPositionsController/mocks/mock-responses.d.mts.map +1 -0
  32. package/dist/DeFiPositionsController/mocks/mock-responses.mjs +597 -0
  33. package/dist/DeFiPositionsController/mocks/mock-responses.mjs.map +1 -0
  34. package/dist/index.cjs +3 -1
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +3 -0
  37. package/dist/index.d.cts.map +1 -1
  38. package/dist/index.d.mts +3 -0
  39. package/dist/index.d.mts.map +1 -1
  40. package/dist/index.mjs +1 -0
  41. package/dist/index.mjs.map +1 -1
  42. package/package.json +7 -7
@@ -0,0 +1,36 @@
1
+ import type { Hex } from "@metamask/utils";
2
+ import type { DefiPositionResponse, PositionType, ProtocolToken, Underlying } from "./fetch-positions.cjs";
3
+ export type GroupedPositions = {
4
+ aggregatedMarketValue: number;
5
+ protocols: {
6
+ [protocolId: string]: {
7
+ protocolDetails: {
8
+ name: string;
9
+ iconUrl: string;
10
+ };
11
+ aggregatedMarketValue: number;
12
+ positionTypes: {
13
+ [key in PositionType]?: {
14
+ aggregatedMarketValue: number;
15
+ positions: ProtocolTokenWithMarketValue[][];
16
+ };
17
+ };
18
+ };
19
+ };
20
+ };
21
+ export type ProtocolTokenWithMarketValue = Omit<ProtocolToken, 'tokens'> & {
22
+ marketValue?: number;
23
+ tokens: UnderlyingWithMarketValue[];
24
+ };
25
+ export type UnderlyingWithMarketValue = Omit<Underlying, 'tokens'> & {
26
+ marketValue?: number;
27
+ };
28
+ /**
29
+ *
30
+ * @param defiPositionsResponse - The response from the defi positions API
31
+ * @returns The grouped positions that get assigned to the state
32
+ */
33
+ export declare function groupPositions(defiPositionsResponse: DefiPositionResponse[]): {
34
+ [key: Hex]: GroupedPositions;
35
+ };
36
+ //# sourceMappingURL=group-positions.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-positions.d.cts","sourceRoot":"","sources":["../../src/DeFiPositionsController/group-positions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,UAAU,EAEX,8BAA0B;AAE3B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE;QACT,CAAC,UAAU,EAAE,MAAM,GAAG;YACpB,eAAe,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC;YACnD,qBAAqB,EAAE,MAAM,CAAC;YAC9B,aAAa,EAAE;iBACZ,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE;oBACtB,qBAAqB,EAAE,MAAM,CAAC;oBAC9B,SAAS,EAAE,4BAA4B,EAAE,EAAE,CAAC;iBAC7C;aACF,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,GAAG;IAC7E,CAAC,GAAG,EAAE,GAAG,GAAG,gBAAgB,CAAC;CAC9B,CAoEA"}
@@ -0,0 +1,36 @@
1
+ import type { Hex } from "@metamask/utils";
2
+ import type { DefiPositionResponse, PositionType, ProtocolToken, Underlying } from "./fetch-positions.mjs";
3
+ export type GroupedPositions = {
4
+ aggregatedMarketValue: number;
5
+ protocols: {
6
+ [protocolId: string]: {
7
+ protocolDetails: {
8
+ name: string;
9
+ iconUrl: string;
10
+ };
11
+ aggregatedMarketValue: number;
12
+ positionTypes: {
13
+ [key in PositionType]?: {
14
+ aggregatedMarketValue: number;
15
+ positions: ProtocolTokenWithMarketValue[][];
16
+ };
17
+ };
18
+ };
19
+ };
20
+ };
21
+ export type ProtocolTokenWithMarketValue = Omit<ProtocolToken, 'tokens'> & {
22
+ marketValue?: number;
23
+ tokens: UnderlyingWithMarketValue[];
24
+ };
25
+ export type UnderlyingWithMarketValue = Omit<Underlying, 'tokens'> & {
26
+ marketValue?: number;
27
+ };
28
+ /**
29
+ *
30
+ * @param defiPositionsResponse - The response from the defi positions API
31
+ * @returns The grouped positions that get assigned to the state
32
+ */
33
+ export declare function groupPositions(defiPositionsResponse: DefiPositionResponse[]): {
34
+ [key: Hex]: GroupedPositions;
35
+ };
36
+ //# sourceMappingURL=group-positions.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-positions.d.mts","sourceRoot":"","sources":["../../src/DeFiPositionsController/group-positions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAG3C,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,UAAU,EAEX,8BAA0B;AAE3B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE;QACT,CAAC,UAAU,EAAE,MAAM,GAAG;YACpB,eAAe,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC;YACnD,qBAAqB,EAAE,MAAM,CAAC;YAC9B,aAAa,EAAE;iBACZ,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE;oBACtB,qBAAqB,EAAE,MAAM,CAAC;oBAC9B,SAAS,EAAE,4BAA4B,EAAE,EAAE,CAAC;iBAC7C;aACF,CAAC;SACH,CAAC;KACH,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,GAAG;IAC7E,CAAC,GAAG,EAAE,GAAG,GAAG,gBAAgB,CAAC;CAC9B,CAoEA"}
@@ -0,0 +1,94 @@
1
+ import { toHex } from "@metamask/controller-utils";
2
+ import $lodash from "lodash";
3
+ const { upperFirst, camelCase } = $lodash;
4
+ /**
5
+ *
6
+ * @param defiPositionsResponse - The response from the defi positions API
7
+ * @returns The grouped positions that get assigned to the state
8
+ */
9
+ export function groupPositions(defiPositionsResponse) {
10
+ const groupedPositions = {};
11
+ for (const position of defiPositionsResponse) {
12
+ if (!position.success) {
13
+ continue;
14
+ }
15
+ const { chainId, protocolId, iconUrl, positionType } = position;
16
+ const chain = toHex(chainId);
17
+ if (!groupedPositions[chain]) {
18
+ groupedPositions[chain] = {
19
+ aggregatedMarketValue: 0,
20
+ protocols: {},
21
+ };
22
+ }
23
+ const chainData = groupedPositions[chain];
24
+ if (!chainData.protocols[protocolId]) {
25
+ chainData.protocols[protocolId] = {
26
+ protocolDetails: {
27
+ name: upperFirst(camelCase(protocolId)),
28
+ iconUrl,
29
+ },
30
+ aggregatedMarketValue: 0,
31
+ positionTypes: {},
32
+ };
33
+ }
34
+ const protocolData = chainData.protocols[protocolId];
35
+ let positionTypeData = protocolData.positionTypes[positionType];
36
+ if (!positionTypeData) {
37
+ positionTypeData = {
38
+ aggregatedMarketValue: 0,
39
+ positions: [],
40
+ };
41
+ protocolData.positionTypes[positionType] = positionTypeData;
42
+ }
43
+ for (const protocolToken of position.tokens) {
44
+ const token = processToken(protocolToken);
45
+ // If groupPositions is true, we group all positions of the same type
46
+ if (position.metadata?.groupPositions) {
47
+ if (positionTypeData.positions.length === 0) {
48
+ positionTypeData.positions.push([token]);
49
+ }
50
+ else {
51
+ positionTypeData.positions[0].push(token);
52
+ }
53
+ }
54
+ else {
55
+ positionTypeData.positions.push([token]);
56
+ }
57
+ if (token.marketValue) {
58
+ const multiplier = position.positionType === 'borrow' ? -1 : 1;
59
+ positionTypeData.aggregatedMarketValue += token.marketValue;
60
+ protocolData.aggregatedMarketValue += token.marketValue * multiplier;
61
+ chainData.aggregatedMarketValue += token.marketValue * multiplier;
62
+ }
63
+ }
64
+ }
65
+ return groupedPositions;
66
+ }
67
+ /**
68
+ *
69
+ * @param tokenBalance - The token balance that is going to be processed
70
+ * @returns The processed token balance
71
+ */
72
+ function processToken(tokenBalance) {
73
+ if (!tokenBalance.tokens) {
74
+ return {
75
+ ...tokenBalance,
76
+ marketValue: tokenBalance.price
77
+ ? tokenBalance.balance * tokenBalance.price
78
+ : undefined,
79
+ };
80
+ }
81
+ const processedTokens = tokenBalance.tokens.map((t) => {
82
+ const { tokens, ...tokenWithoutUnderlyings } = processToken(t);
83
+ return tokenWithoutUnderlyings;
84
+ });
85
+ const marketValue = processedTokens.reduce((acc, t) => acc === undefined || t.marketValue === undefined
86
+ ? undefined
87
+ : acc + t.marketValue, 0);
88
+ return {
89
+ ...tokenBalance,
90
+ marketValue,
91
+ tokens: processedTokens,
92
+ };
93
+ }
94
+ //# sourceMappingURL=group-positions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-positions.mjs","sourceRoot":"","sources":["../../src/DeFiPositionsController/group-positions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,mCAAmC;;;AAqCnD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,qBAA6C;IAG1E,MAAM,gBAAgB,GAAqC,EAAE,CAAC;IAE9D,KAAK,MAAM,QAAQ,IAAI,qBAAqB,EAAE;QAC5C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACrB,SAAS;SACV;QAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;QAEhE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;YAC5B,gBAAgB,CAAC,KAAK,CAAC,GAAG;gBACxB,qBAAqB,EAAE,CAAC;gBACxB,SAAS,EAAE,EAAE;aACd,CAAC;SACH;QAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;YACpC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG;gBAChC,eAAe,EAAE;oBACf,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBACvC,OAAO;iBACR;gBACD,qBAAqB,EAAE,CAAC;gBACxB,aAAa,EAAE,EAAE;aAClB,CAAC;SACH;QAED,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAErD,IAAI,gBAAgB,GAAG,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAChE,IAAI,CAAC,gBAAgB,EAAE;YACrB,gBAAgB,GAAG;gBACjB,qBAAqB,EAAE,CAAC;gBACxB,SAAS,EAAE,EAAE;aACd,CAAC;YACF,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,gBAAgB,CAAC;SAC7D;QAED,KAAK,MAAM,aAAa,IAAI,QAAQ,CAAC,MAAM,EAAE;YAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,aAAa,CAAiC,CAAC;YAE1E,qEAAqE;YACrE,IAAI,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE;gBACrC,IAAI,gBAAgB,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC3C,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC1C;qBAAM;oBACL,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC3C;aACF;iBAAM;gBACL,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1C;YAED,IAAI,KAAK,CAAC,WAAW,EAAE;gBACrB,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE/D,gBAAgB,CAAC,qBAAqB,IAAI,KAAK,CAAC,WAAW,CAAC;gBAC5D,YAAY,CAAC,qBAAqB,IAAI,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC;gBACrE,SAAS,CAAC,qBAAqB,IAAI,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC;aACnE;SACF;KACF;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CACnB,YAAe;IAKf,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACxB,OAAO;YACL,GAAG,YAAY;YACf,WAAW,EAAE,YAAY,CAAC,KAAK;gBAC7B,CAAC,CAAC,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK;gBAC3C,CAAC,CAAC,SAAS;SACd,CAAC;KACH;IAED,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpD,MAAM,EAAE,MAAM,EAAE,GAAG,uBAAuB,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAE/D,OAAO,uBAAuB,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CACxC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACT,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS;QAC9C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,EACzB,CAAuB,CACxB,CAAC;IAEF,OAAO;QACL,GAAG,YAAY;QACf,WAAW;QACX,MAAM,EAAE,eAAe;KACxB,CAAC;AACJ,CAAC","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type { Hex } from '@metamask/utils';\nimport { upperFirst, camelCase } from 'lodash';\n\nimport type {\n DefiPositionResponse,\n PositionType,\n ProtocolToken,\n Underlying,\n Balance,\n} from './fetch-positions';\n\nexport type GroupedPositions = {\n aggregatedMarketValue: number;\n protocols: {\n [protocolId: string]: {\n protocolDetails: { name: string; iconUrl: string };\n aggregatedMarketValue: number;\n positionTypes: {\n [key in PositionType]?: {\n aggregatedMarketValue: number;\n positions: ProtocolTokenWithMarketValue[][];\n };\n };\n };\n };\n};\n\nexport type ProtocolTokenWithMarketValue = Omit<ProtocolToken, 'tokens'> & {\n marketValue?: number;\n tokens: UnderlyingWithMarketValue[];\n};\n\nexport type UnderlyingWithMarketValue = Omit<Underlying, 'tokens'> & {\n marketValue?: number;\n};\n\n/**\n *\n * @param defiPositionsResponse - The response from the defi positions API\n * @returns The grouped positions that get assigned to the state\n */\nexport function groupPositions(defiPositionsResponse: DefiPositionResponse[]): {\n [key: Hex]: GroupedPositions;\n} {\n const groupedPositions: { [key: Hex]: GroupedPositions } = {};\n\n for (const position of defiPositionsResponse) {\n if (!position.success) {\n continue;\n }\n\n const { chainId, protocolId, iconUrl, positionType } = position;\n\n const chain = toHex(chainId);\n\n if (!groupedPositions[chain]) {\n groupedPositions[chain] = {\n aggregatedMarketValue: 0,\n protocols: {},\n };\n }\n\n const chainData = groupedPositions[chain];\n\n if (!chainData.protocols[protocolId]) {\n chainData.protocols[protocolId] = {\n protocolDetails: {\n name: upperFirst(camelCase(protocolId)),\n iconUrl,\n },\n aggregatedMarketValue: 0,\n positionTypes: {},\n };\n }\n\n const protocolData = chainData.protocols[protocolId];\n\n let positionTypeData = protocolData.positionTypes[positionType];\n if (!positionTypeData) {\n positionTypeData = {\n aggregatedMarketValue: 0,\n positions: [],\n };\n protocolData.positionTypes[positionType] = positionTypeData;\n }\n\n for (const protocolToken of position.tokens) {\n const token = processToken(protocolToken) as ProtocolTokenWithMarketValue;\n\n // If groupPositions is true, we group all positions of the same type\n if (position.metadata?.groupPositions) {\n if (positionTypeData.positions.length === 0) {\n positionTypeData.positions.push([token]);\n } else {\n positionTypeData.positions[0].push(token);\n }\n } else {\n positionTypeData.positions.push([token]);\n }\n\n if (token.marketValue) {\n const multiplier = position.positionType === 'borrow' ? -1 : 1;\n\n positionTypeData.aggregatedMarketValue += token.marketValue;\n protocolData.aggregatedMarketValue += token.marketValue * multiplier;\n chainData.aggregatedMarketValue += token.marketValue * multiplier;\n }\n }\n }\n\n return groupedPositions;\n}\n\n/**\n *\n * @param tokenBalance - The token balance that is going to be processed\n * @returns The processed token balance\n */\nfunction processToken<T extends Balance>(\n tokenBalance: T,\n): T & {\n marketValue?: number;\n tokens?: UnderlyingWithMarketValue[];\n} {\n if (!tokenBalance.tokens) {\n return {\n ...tokenBalance,\n marketValue: tokenBalance.price\n ? tokenBalance.balance * tokenBalance.price\n : undefined,\n };\n }\n\n const processedTokens = tokenBalance.tokens.map((t) => {\n const { tokens, ...tokenWithoutUnderlyings } = processToken(t);\n\n return tokenWithoutUnderlyings;\n });\n\n const marketValue = processedTokens.reduce(\n (acc, t) =>\n acc === undefined || t.marketValue === undefined\n ? undefined\n : acc + t.marketValue,\n 0 as number | undefined,\n );\n\n return {\n ...tokenBalance,\n marketValue,\n tokens: processedTokens,\n };\n}\n"]}