@merkl/api 0.20.98 → 0.20.99
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.
- package/dist/src/eden/index.d.ts +337 -12
- package/dist/src/engine/campaignTVL/factory.js +2 -0
- package/dist/src/engine/campaignTVL/implementations/UniswapV4.d.ts +7 -0
- package/dist/src/engine/campaignTVL/implementations/UniswapV4.js +87 -0
- package/dist/src/index.d.ts +121 -4
- package/dist/src/modules/v4/campaign/campaign.test.controller.d.ts +36 -2
- package/dist/src/modules/v4/dynamicData/dynamicData.service.js +1 -11
- package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +36 -2
- package/dist/src/modules/v4/opportunity/opportunity.repository.js +2 -0
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +54 -3
- package/dist/src/modules/v4/opportunity/opportunity.service.js +1 -1
- package/dist/src/modules/v4/programPayload/programPayload.controller.d.ts +1 -0
- package/dist/src/modules/v4/programPayload/programPayload.model.d.ts +1 -0
- package/dist/src/modules/v4/programPayload/programPayload.model.js +1 -0
- package/dist/src/modules/v4/router.d.ts +121 -4
- package/dist/src/modules/v4/router.js +3 -1
- package/dist/src/modules/v4/turtle/turtle.controller.d.ts +68 -0
- package/dist/src/modules/v4/turtle/turtle.controller.js +20 -0
- package/dist/src/modules/v4/turtle/turtle.repository.d.ts +14 -0
- package/dist/src/modules/v4/turtle/turtle.repository.js +40 -0
- package/dist/src/modules/v4/turtle/turtle.service.d.ts +17 -0
- package/dist/src/modules/v4/turtle/turtle.service.js +28 -0
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
@@ -132,6 +132,23 @@ export declare const v4: Elysia<"/v4", false, {
|
|
132
132
|
};
|
133
133
|
response: {
|
134
134
|
200: {
|
135
|
+
id: string;
|
136
|
+
name: string;
|
137
|
+
type: string;
|
138
|
+
status: import("@db/api").$Enums.Status;
|
139
|
+
tags: string[];
|
140
|
+
identifier: string;
|
141
|
+
action: import("@db/api").$Enums.OpportunityAction;
|
142
|
+
manualOverrides: import("@db/api").$Enums.OpportunityManualOverride[];
|
143
|
+
chainId: number;
|
144
|
+
depositUrl: string | null;
|
145
|
+
explorerAddress: string | null;
|
146
|
+
mainProtocolId: string | null;
|
147
|
+
tvl: number;
|
148
|
+
apr: number;
|
149
|
+
dailyRewards: number;
|
150
|
+
lastCampaignCreatedAt: Date;
|
151
|
+
} | {
|
135
152
|
id: string;
|
136
153
|
chainId: number;
|
137
154
|
type: string;
|
@@ -158,7 +175,7 @@ export declare const v4: Elysia<"/v4", false, {
|
|
158
175
|
depositUrl: any;
|
159
176
|
explorerAddress: string | undefined;
|
160
177
|
tags: string[];
|
161
|
-
};
|
178
|
+
} | null;
|
162
179
|
};
|
163
180
|
};
|
164
181
|
};
|
@@ -179,6 +196,23 @@ export declare const v4: Elysia<"/v4", false, {
|
|
179
196
|
};
|
180
197
|
response: {
|
181
198
|
200: {
|
199
|
+
id: string;
|
200
|
+
name: string;
|
201
|
+
type: string;
|
202
|
+
status: import("@db/api").$Enums.Status;
|
203
|
+
tags: string[];
|
204
|
+
identifier: string;
|
205
|
+
action: import("@db/api").$Enums.OpportunityAction;
|
206
|
+
manualOverrides: import("@db/api").$Enums.OpportunityManualOverride[];
|
207
|
+
chainId: number;
|
208
|
+
depositUrl: string | null;
|
209
|
+
explorerAddress: string | null;
|
210
|
+
mainProtocolId: string | null;
|
211
|
+
tvl: number;
|
212
|
+
apr: number;
|
213
|
+
dailyRewards: number;
|
214
|
+
lastCampaignCreatedAt: Date;
|
215
|
+
} | {
|
182
216
|
id: string;
|
183
217
|
chainId: number;
|
184
218
|
type: string;
|
@@ -205,7 +239,7 @@ export declare const v4: Elysia<"/v4", false, {
|
|
205
239
|
depositUrl: any;
|
206
240
|
explorerAddress: string | undefined;
|
207
241
|
tags: string[];
|
208
|
-
};
|
242
|
+
} | null;
|
209
243
|
};
|
210
244
|
};
|
211
245
|
};
|
@@ -1842,6 +1876,23 @@ export declare const v4: Elysia<"/v4", false, {
|
|
1842
1876
|
};
|
1843
1877
|
response: {
|
1844
1878
|
200: {
|
1879
|
+
id: string;
|
1880
|
+
name: string;
|
1881
|
+
type: string;
|
1882
|
+
status: import("@db/api").$Enums.Status;
|
1883
|
+
tags: string[];
|
1884
|
+
identifier: string;
|
1885
|
+
action: import("@db/api").$Enums.OpportunityAction;
|
1886
|
+
manualOverrides: import("@db/api").$Enums.OpportunityManualOverride[];
|
1887
|
+
chainId: number;
|
1888
|
+
depositUrl: string | null;
|
1889
|
+
explorerAddress: string | null;
|
1890
|
+
mainProtocolId: string | null;
|
1891
|
+
tvl: number;
|
1892
|
+
apr: number;
|
1893
|
+
dailyRewards: number;
|
1894
|
+
lastCampaignCreatedAt: Date;
|
1895
|
+
} | {
|
1845
1896
|
id: string;
|
1846
1897
|
chainId: number;
|
1847
1898
|
type: string;
|
@@ -1868,7 +1919,7 @@ export declare const v4: Elysia<"/v4", false, {
|
|
1868
1919
|
depositUrl: any;
|
1869
1920
|
explorerAddress: string | undefined;
|
1870
1921
|
tags: string[];
|
1871
|
-
};
|
1922
|
+
} | null;
|
1872
1923
|
};
|
1873
1924
|
};
|
1874
1925
|
};
|
@@ -1888,6 +1939,23 @@ export declare const v4: Elysia<"/v4", false, {
|
|
1888
1939
|
};
|
1889
1940
|
response: {
|
1890
1941
|
200: {
|
1942
|
+
id: string;
|
1943
|
+
name: string;
|
1944
|
+
type: string;
|
1945
|
+
status: import("@db/api").$Enums.Status;
|
1946
|
+
tags: string[];
|
1947
|
+
identifier: string;
|
1948
|
+
action: import("@db/api").$Enums.OpportunityAction;
|
1949
|
+
manualOverrides: import("@db/api").$Enums.OpportunityManualOverride[];
|
1950
|
+
chainId: number;
|
1951
|
+
depositUrl: string | null;
|
1952
|
+
explorerAddress: string | null;
|
1953
|
+
mainProtocolId: string | null;
|
1954
|
+
tvl: number;
|
1955
|
+
apr: number;
|
1956
|
+
dailyRewards: number;
|
1957
|
+
lastCampaignCreatedAt: Date;
|
1958
|
+
} | {
|
1891
1959
|
id: string;
|
1892
1960
|
chainId: number;
|
1893
1961
|
type: string;
|
@@ -1914,7 +1982,7 @@ export declare const v4: Elysia<"/v4", false, {
|
|
1914
1982
|
depositUrl: any;
|
1915
1983
|
explorerAddress: string | undefined;
|
1916
1984
|
tags: string[];
|
1917
|
-
};
|
1985
|
+
} | null;
|
1918
1986
|
};
|
1919
1987
|
};
|
1920
1988
|
};
|
@@ -4442,6 +4510,7 @@ export declare const v4: Elysia<"/v4", false, {
|
|
4442
4510
|
blacklist?: string[] | undefined;
|
4443
4511
|
poolAddress?: string | undefined;
|
4444
4512
|
contract?: string | undefined;
|
4513
|
+
tokenId?: string | undefined;
|
4445
4514
|
marketId?: string | undefined;
|
4446
4515
|
strategy?: string | undefined;
|
4447
4516
|
poolId?: string | undefined;
|
@@ -5000,6 +5069,54 @@ export declare const v4: Elysia<"/v4", false, {
|
|
5000
5069
|
};
|
5001
5070
|
};
|
5002
5071
|
};
|
5072
|
+
} & {
|
5073
|
+
v4: {
|
5074
|
+
turtle: {
|
5075
|
+
tac: {
|
5076
|
+
total: {
|
5077
|
+
get: {
|
5078
|
+
body: unknown;
|
5079
|
+
params: {};
|
5080
|
+
query: unknown;
|
5081
|
+
headers: unknown;
|
5082
|
+
response: {
|
5083
|
+
200: {
|
5084
|
+
total: number;
|
5085
|
+
breakdown: {
|
5086
|
+
[key: string]: number;
|
5087
|
+
};
|
5088
|
+
};
|
5089
|
+
};
|
5090
|
+
};
|
5091
|
+
};
|
5092
|
+
};
|
5093
|
+
};
|
5094
|
+
} & {
|
5095
|
+
turtle: {
|
5096
|
+
tac: {
|
5097
|
+
":address": {
|
5098
|
+
get: {
|
5099
|
+
body: unknown;
|
5100
|
+
params: {
|
5101
|
+
address: string;
|
5102
|
+
};
|
5103
|
+
query: unknown;
|
5104
|
+
headers: unknown;
|
5105
|
+
response: {
|
5106
|
+
200: {
|
5107
|
+
[x: string]: {
|
5108
|
+
vaultSymbol: string;
|
5109
|
+
balance: number;
|
5110
|
+
maxBalance: number;
|
5111
|
+
turtle: number;
|
5112
|
+
};
|
5113
|
+
};
|
5114
|
+
};
|
5115
|
+
};
|
5116
|
+
};
|
5117
|
+
};
|
5118
|
+
};
|
5119
|
+
};
|
5003
5120
|
}, {
|
5004
5121
|
derive: {};
|
5005
5122
|
resolve: {};
|
@@ -32,6 +32,7 @@ import { AlwaysOffSampler, BatchSpanProcessor } from "@opentelemetry/sdk-trace-n
|
|
32
32
|
import { PrismaInstrumentation } from "@prisma/instrumentation";
|
33
33
|
import Elysia from "elysia";
|
34
34
|
import { ReferralController } from "./referral/referral.controller";
|
35
|
+
import { TurtleController } from "./turtle/turtle.controller";
|
35
36
|
// ─── V4 Router ───────────────────────────────────────────────────────────────
|
36
37
|
export const v4 = new Elysia({ tags: ["v4"], prefix: "/v4" })
|
37
38
|
// ─── OpenTelemetry ───────────────────────────────────────────────────
|
@@ -88,4 +89,5 @@ export const v4 = new Elysia({ tags: ["v4"], prefix: "/v4" })
|
|
88
89
|
.use(ComputedValueController)
|
89
90
|
.use(CreatorController)
|
90
91
|
.use(ReferralController)
|
91
|
-
.use(UniswapController)
|
92
|
+
.use(UniswapController)
|
93
|
+
.use(TurtleController);
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import Elysia from "elysia";
|
2
|
+
export declare const TurtleController: Elysia<"/turtle", false, {
|
3
|
+
decorator: {};
|
4
|
+
store: {};
|
5
|
+
derive: {};
|
6
|
+
resolve: {};
|
7
|
+
}, {
|
8
|
+
type: {};
|
9
|
+
error: {};
|
10
|
+
}, {
|
11
|
+
schema: {};
|
12
|
+
macro: {};
|
13
|
+
macroFn: {};
|
14
|
+
}, {
|
15
|
+
turtle: {
|
16
|
+
tac: {
|
17
|
+
total: {
|
18
|
+
get: {
|
19
|
+
body: unknown;
|
20
|
+
params: {};
|
21
|
+
query: unknown;
|
22
|
+
headers: unknown;
|
23
|
+
response: {
|
24
|
+
200: {
|
25
|
+
total: number;
|
26
|
+
breakdown: {
|
27
|
+
[key: string]: number;
|
28
|
+
};
|
29
|
+
};
|
30
|
+
};
|
31
|
+
};
|
32
|
+
};
|
33
|
+
};
|
34
|
+
};
|
35
|
+
} & {
|
36
|
+
turtle: {
|
37
|
+
tac: {
|
38
|
+
":address": {
|
39
|
+
get: {
|
40
|
+
body: unknown;
|
41
|
+
params: {
|
42
|
+
address: string;
|
43
|
+
};
|
44
|
+
query: unknown;
|
45
|
+
headers: unknown;
|
46
|
+
response: {
|
47
|
+
200: {
|
48
|
+
[x: string]: {
|
49
|
+
vaultSymbol: string;
|
50
|
+
balance: number;
|
51
|
+
maxBalance: number;
|
52
|
+
turtle: number;
|
53
|
+
};
|
54
|
+
};
|
55
|
+
};
|
56
|
+
};
|
57
|
+
};
|
58
|
+
};
|
59
|
+
};
|
60
|
+
}, {
|
61
|
+
derive: {};
|
62
|
+
resolve: {};
|
63
|
+
schema: {};
|
64
|
+
}, {
|
65
|
+
derive: {};
|
66
|
+
resolve: {};
|
67
|
+
schema: {};
|
68
|
+
}>;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { throwOnInvalidRequiredAddress } from "@/utils/throw";
|
2
|
+
import Elysia from "elysia";
|
3
|
+
import { UserUniqueDto } from "../user/user.model";
|
4
|
+
import { TurtleService } from "./turtle.service";
|
5
|
+
// ─── Claim Controller ───────────────────────────────────────────────────────
|
6
|
+
export const TurtleController = new Elysia({ prefix: "/turtle", detail: { tags: ["Turtle"] } })
|
7
|
+
.get("/tac/total", async () => await TurtleService.getTotalDistributed(), {
|
8
|
+
detail: {
|
9
|
+
description: "Get total TAC distributed and the associated breakdown",
|
10
|
+
},
|
11
|
+
})
|
12
|
+
.get("/tac/:address", async ({ params }) => await TurtleService.getUserData(params), {
|
13
|
+
params: UserUniqueDto,
|
14
|
+
beforeHandle: ({ params }) => {
|
15
|
+
params.address = throwOnInvalidRequiredAddress(params.address);
|
16
|
+
},
|
17
|
+
detail: {
|
18
|
+
description: "Get the max balance and balance of the user for its turtle vaults",
|
19
|
+
},
|
20
|
+
});
|
@@ -0,0 +1,14 @@
|
|
1
|
+
export declare class TurtleRepository {
|
2
|
+
static fetchUserBalances(address: string): Promise<{
|
3
|
+
balance: string;
|
4
|
+
maxBalance: string;
|
5
|
+
tokenSymbol: string;
|
6
|
+
token: string;
|
7
|
+
turtleDepositBonus: string;
|
8
|
+
user: string;
|
9
|
+
}[]>;
|
10
|
+
static fetchTotals(): Promise<{
|
11
|
+
amount: number;
|
12
|
+
id: string;
|
13
|
+
}[]>;
|
14
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import request, { gql } from "graphql-request";
|
2
|
+
const TURTLE_SUBGRAPH_URL = "https://api.goldsky.com/api/public/project_cltpyx1eh5g5v01xi0a5h5xea/subgraphs/merkl-tacTurtle-mainnet/prod/gn";
|
3
|
+
export class TurtleRepository {
|
4
|
+
static async fetchUserBalances(address) {
|
5
|
+
try {
|
6
|
+
return (await request(TURTLE_SUBGRAPH_URL, gql `query UserBalances($where: UserBalance_filter) {
|
7
|
+
userBalances(where: $where) {
|
8
|
+
balance
|
9
|
+
maxBalance
|
10
|
+
tokenSymbol
|
11
|
+
token
|
12
|
+
turtleDepositBonus
|
13
|
+
user
|
14
|
+
}
|
15
|
+
}
|
16
|
+
`, {
|
17
|
+
where: {
|
18
|
+
user: address.toLowerCase(),
|
19
|
+
},
|
20
|
+
})).userBalances;
|
21
|
+
}
|
22
|
+
catch {
|
23
|
+
return [];
|
24
|
+
}
|
25
|
+
}
|
26
|
+
static async fetchTotals() {
|
27
|
+
try {
|
28
|
+
return (await request(TURTLE_SUBGRAPH_URL, gql `query TurtleDistributeds {
|
29
|
+
turtleDistributeds {
|
30
|
+
amount
|
31
|
+
id
|
32
|
+
}
|
33
|
+
}
|
34
|
+
`, {})).turtleDistributeds;
|
35
|
+
}
|
36
|
+
catch {
|
37
|
+
return [];
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import type { UserUniqueModel } from "../user/user.model";
|
2
|
+
export declare abstract class TurtleService {
|
3
|
+
static getUserData(params: UserUniqueModel): Promise<{
|
4
|
+
[key: string]: {
|
5
|
+
vaultSymbol: string;
|
6
|
+
balance: number;
|
7
|
+
maxBalance: number;
|
8
|
+
turtle: number;
|
9
|
+
};
|
10
|
+
}>;
|
11
|
+
static getTotalDistributed(): Promise<{
|
12
|
+
total: number;
|
13
|
+
breakdown: {
|
14
|
+
[key: string]: number;
|
15
|
+
};
|
16
|
+
}>;
|
17
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { TurtleRepository } from "./turtle.repository";
|
2
|
+
export class TurtleService {
|
3
|
+
// ─── Get Turtle User data ─────────────────────────────────────────────────
|
4
|
+
static async getUserData(params) {
|
5
|
+
const userBalances = await TurtleRepository.fetchUserBalances(params.address);
|
6
|
+
return userBalances.reduce((acc, userBalance) => {
|
7
|
+
acc[userBalance.token] = {
|
8
|
+
vaultSymbol: userBalance.tokenSymbol,
|
9
|
+
balance: Number(userBalance.balance),
|
10
|
+
maxBalance: Number(userBalance.maxBalance),
|
11
|
+
turtle: Number(userBalance.turtleDepositBonus),
|
12
|
+
};
|
13
|
+
return acc;
|
14
|
+
}, {});
|
15
|
+
}
|
16
|
+
// ─── Get Total Turtle Distributed ─────────────────────────────────────────
|
17
|
+
static async getTotalDistributed() {
|
18
|
+
const totals = await TurtleRepository.fetchTotals();
|
19
|
+
return totals.reduce((acc, item) => {
|
20
|
+
if (item.id === "total") {
|
21
|
+
acc.total = Number(item.amount);
|
22
|
+
return acc;
|
23
|
+
}
|
24
|
+
acc.breakdown[item.id] = Number(item.amount);
|
25
|
+
return acc;
|
26
|
+
}, { total: 0, breakdown: {} });
|
27
|
+
}
|
28
|
+
}
|