@merkl/api 0.10.348 → 0.10.349
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 +86 -0
- package/dist/src/index.d.ts +36 -0
- package/dist/src/libs/tokens/allowances.d.ts +1 -0
- package/dist/src/libs/tokens/allowances.js +18 -0
- package/dist/src/modules/v4/campaign/campaign.service.js +1 -2
- package/dist/src/modules/v4/programPayload/programPayload.repository.js +4 -0
- package/dist/src/modules/v4/router.d.ts +36 -0
- package/dist/src/modules/v4/token/token.controller.d.ts +36 -0
- package/dist/src/modules/v4/token/token.controller.js +14 -1
- package/dist/src/modules/v4/token/token.model.d.ts +5 -0
- package/dist/src/modules/v4/token/token.model.js +5 -0
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/src/eden/index.d.ts
CHANGED
@@ -1025,6 +1025,31 @@ declare const eden: {
|
|
1025
1025
|
price?: number | null | undefined;
|
1026
1026
|
} | undefined;
|
1027
1027
|
}>>;
|
1028
|
+
allowance: ((params: {
|
1029
|
+
owner: string | number;
|
1030
|
+
}) => {} & ((params: {
|
1031
|
+
spender: string | number;
|
1032
|
+
}) => {
|
1033
|
+
get: (options?: {
|
1034
|
+
headers?: Record<string, unknown> | undefined;
|
1035
|
+
query?: Record<string, unknown> | undefined;
|
1036
|
+
fetch?: RequestInit | undefined;
|
1037
|
+
} | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
1038
|
+
200: {
|
1039
|
+
allowance: bigint;
|
1040
|
+
symbol: string;
|
1041
|
+
name: string | null;
|
1042
|
+
id: string;
|
1043
|
+
icon: string;
|
1044
|
+
chainId: number;
|
1045
|
+
address: string;
|
1046
|
+
decimals: number;
|
1047
|
+
verified: boolean;
|
1048
|
+
isTest: boolean;
|
1049
|
+
price?: number | null | undefined;
|
1050
|
+
} | undefined;
|
1051
|
+
}>>;
|
1052
|
+
})) & {};
|
1028
1053
|
patch: (body: {
|
1029
1054
|
icon?: string | undefined;
|
1030
1055
|
displaySymbol?: string | undefined;
|
@@ -4403,6 +4428,42 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
4403
4428
|
};
|
4404
4429
|
};
|
4405
4430
|
};
|
4431
|
+
} & {
|
4432
|
+
tokens: {
|
4433
|
+
":id": {
|
4434
|
+
allowance: {
|
4435
|
+
":owner": {
|
4436
|
+
":spender": {
|
4437
|
+
get: {
|
4438
|
+
body: unknown;
|
4439
|
+
params: {
|
4440
|
+
id: string;
|
4441
|
+
owner: string;
|
4442
|
+
spender: string;
|
4443
|
+
};
|
4444
|
+
query: unknown;
|
4445
|
+
headers: unknown;
|
4446
|
+
response: {
|
4447
|
+
200: {
|
4448
|
+
allowance: bigint;
|
4449
|
+
symbol: string;
|
4450
|
+
name: string | null;
|
4451
|
+
id: string;
|
4452
|
+
icon: string;
|
4453
|
+
chainId: number;
|
4454
|
+
address: string;
|
4455
|
+
decimals: number;
|
4456
|
+
verified: boolean;
|
4457
|
+
isTest: boolean;
|
4458
|
+
price?: number | null | undefined;
|
4459
|
+
} | undefined;
|
4460
|
+
};
|
4461
|
+
};
|
4462
|
+
};
|
4463
|
+
};
|
4464
|
+
};
|
4465
|
+
};
|
4466
|
+
};
|
4406
4467
|
} & {
|
4407
4468
|
tokens: {
|
4408
4469
|
reward: {
|
@@ -8193,6 +8254,31 @@ export declare const MerklApi: (domain: string | import("elysia").default<"", fa
|
|
8193
8254
|
price?: number | null | undefined;
|
8194
8255
|
} | undefined;
|
8195
8256
|
}>>;
|
8257
|
+
allowance: ((params: {
|
8258
|
+
owner: string | number;
|
8259
|
+
}) => {} & ((params: {
|
8260
|
+
spender: string | number;
|
8261
|
+
}) => {
|
8262
|
+
get: (options?: {
|
8263
|
+
headers?: Record<string, unknown> | undefined;
|
8264
|
+
query?: Record<string, unknown> | undefined;
|
8265
|
+
fetch?: RequestInit | undefined;
|
8266
|
+
} | undefined) => Promise<import("@elysiajs/eden").Treaty.TreatyResponse<{
|
8267
|
+
200: {
|
8268
|
+
allowance: bigint;
|
8269
|
+
symbol: string;
|
8270
|
+
name: string | null;
|
8271
|
+
id: string;
|
8272
|
+
icon: string;
|
8273
|
+
chainId: number;
|
8274
|
+
address: string;
|
8275
|
+
decimals: number;
|
8276
|
+
verified: boolean;
|
8277
|
+
isTest: boolean;
|
8278
|
+
price?: number | null | undefined;
|
8279
|
+
} | undefined;
|
8280
|
+
}>>;
|
8281
|
+
})) & {};
|
8196
8282
|
patch: (body: {
|
8197
8283
|
icon?: string | undefined;
|
8198
8284
|
displaySymbol?: string | undefined;
|
package/dist/src/index.d.ts
CHANGED
@@ -1220,6 +1220,42 @@ declare const app: Elysia<"", false, {
|
|
1220
1220
|
};
|
1221
1221
|
};
|
1222
1222
|
};
|
1223
|
+
} & {
|
1224
|
+
tokens: {
|
1225
|
+
":id": {
|
1226
|
+
allowance: {
|
1227
|
+
":owner": {
|
1228
|
+
":spender": {
|
1229
|
+
get: {
|
1230
|
+
body: unknown;
|
1231
|
+
params: {
|
1232
|
+
id: string;
|
1233
|
+
owner: string;
|
1234
|
+
spender: string;
|
1235
|
+
};
|
1236
|
+
query: unknown;
|
1237
|
+
headers: unknown;
|
1238
|
+
response: {
|
1239
|
+
200: {
|
1240
|
+
allowance: bigint;
|
1241
|
+
symbol: string;
|
1242
|
+
name: string | null;
|
1243
|
+
id: string;
|
1244
|
+
icon: string;
|
1245
|
+
chainId: number;
|
1246
|
+
address: string;
|
1247
|
+
decimals: number;
|
1248
|
+
verified: boolean;
|
1249
|
+
isTest: boolean;
|
1250
|
+
price?: number | null | undefined;
|
1251
|
+
} | undefined;
|
1252
|
+
};
|
1253
|
+
};
|
1254
|
+
};
|
1255
|
+
};
|
1256
|
+
};
|
1257
|
+
};
|
1258
|
+
};
|
1223
1259
|
} & {
|
1224
1260
|
tokens: {
|
1225
1261
|
reward: {
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare function getUserAllowance(chainId: number, tokenAddress: string, userAddress: string, spenderAddresses: string): Promise<bigint>;
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { ChainId, ChainInteractionService, ETH_ZKSYNC_ADDRESS, Erc20__factory, EthOnZKSync_INTERFACE } from "@sdk";
|
2
|
+
export async function getUserAllowance(chainId, tokenAddress, userAddress, spenderAddresses) {
|
3
|
+
const ERC20_Interface = Erc20__factory.createInterface();
|
4
|
+
const allowanceCall = chainId === ChainId.ZKSYNC && tokenAddress === ETH_ZKSYNC_ADDRESS
|
5
|
+
? {
|
6
|
+
allowFailure: true,
|
7
|
+
callData: EthOnZKSync_INTERFACE.encodeFunctionData("allowance", [userAddress, spenderAddresses]),
|
8
|
+
target: tokenAddress,
|
9
|
+
}
|
10
|
+
: {
|
11
|
+
allowFailure: true,
|
12
|
+
callData: ERC20_Interface.encodeFunctionData("allowance", [userAddress, spenderAddresses]),
|
13
|
+
target: tokenAddress,
|
14
|
+
};
|
15
|
+
const [result] = await ChainInteractionService(chainId).fetchState([allowanceCall]);
|
16
|
+
const allowance = ERC20_Interface.decodeFunctionResult("allowance", result.returnData)[0].toString();
|
17
|
+
return BigInt(allowance);
|
18
|
+
}
|
@@ -43,8 +43,7 @@ export class CampaignService {
|
|
43
43
|
if (existingCampaign.type === "ERC20" && campaign.opportunityIdentifier === undefined) {
|
44
44
|
const campaignParams = existingCampaign.params;
|
45
45
|
campaign.opportunityIdentifier = utils
|
46
|
-
.keccak256(campaignParams.targetToken
|
47
|
-
utils.keccak256(utils.defaultAbiCoder.encode(["address[]"], [campaignParams.whitelist.sort()])))
|
46
|
+
.keccak256(utils.defaultAbiCoder.encode(["string", "address[]"], [campaignParams.targetToken, campaignParams.whitelist.sort()]))
|
48
47
|
.slice(0, 42);
|
49
48
|
}
|
50
49
|
if (campaign.opportunityIdentifier === undefined) {
|
@@ -961,6 +961,8 @@ const ModeInterfaceCampaigns = {
|
|
961
961
|
"0xF5DDF269948C53D86B87Fa3393a5B2579348C07f",
|
962
962
|
"0xAC8C89516bC4b60621c5326446e33680357bB3D2",
|
963
963
|
"0x1392698B2F2cA87E6329c1ca502C5d4BA938d1b8",
|
964
|
+
"0x7c207cb731ebc0BA5dF699d7B36348302FD8480c",
|
965
|
+
"0x3da7476152f7EFF205cBf56f67aBaB17CF9d37eE",
|
964
966
|
],
|
965
967
|
url: "https://app.kim.exchange/positions",
|
966
968
|
forwarders: [],
|
@@ -1022,6 +1024,8 @@ const ModeInterfaceCampaigns = {
|
|
1022
1024
|
"0x91f6fF8cDBD9B516c0DfB901063B3b00612962EB",
|
1023
1025
|
"0x23c17a512d486D6F46DB63A8Dd5144B352497762",
|
1024
1026
|
"0x91f6fF8cDBD9B516c0DfB901063B3b00612962EB",
|
1027
|
+
"0xdd97504448cC51b4De4944157838c4800C773C5A",
|
1028
|
+
"0xBBD68F14F61bfcbB833618d83779e4Aa1Af5670e",
|
1025
1029
|
],
|
1026
1030
|
url: "https://app.kim.exchange/pools/vaults/gamma/0xd6cc4a33da7557a629e819c68fb805ddb225f517",
|
1027
1031
|
forwarders: [],
|
@@ -1098,6 +1098,42 @@ export declare const v4: Elysia<"/v4", false, {
|
|
1098
1098
|
};
|
1099
1099
|
};
|
1100
1100
|
};
|
1101
|
+
} & {
|
1102
|
+
tokens: {
|
1103
|
+
":id": {
|
1104
|
+
allowance: {
|
1105
|
+
":owner": {
|
1106
|
+
":spender": {
|
1107
|
+
get: {
|
1108
|
+
body: unknown;
|
1109
|
+
params: {
|
1110
|
+
id: string;
|
1111
|
+
owner: string;
|
1112
|
+
spender: string;
|
1113
|
+
};
|
1114
|
+
query: unknown;
|
1115
|
+
headers: unknown;
|
1116
|
+
response: {
|
1117
|
+
200: {
|
1118
|
+
allowance: bigint;
|
1119
|
+
symbol: string;
|
1120
|
+
name: string | null;
|
1121
|
+
id: string;
|
1122
|
+
icon: string;
|
1123
|
+
chainId: number;
|
1124
|
+
address: string;
|
1125
|
+
decimals: number;
|
1126
|
+
verified: boolean;
|
1127
|
+
isTest: boolean;
|
1128
|
+
price?: number | null | undefined;
|
1129
|
+
} | undefined;
|
1130
|
+
};
|
1131
|
+
};
|
1132
|
+
};
|
1133
|
+
};
|
1134
|
+
};
|
1135
|
+
};
|
1136
|
+
};
|
1101
1137
|
} & {
|
1102
1138
|
tokens: {
|
1103
1139
|
reward: {
|
@@ -38,6 +38,42 @@ export declare const TokenController: Elysia<"/tokens", false, {
|
|
38
38
|
};
|
39
39
|
};
|
40
40
|
};
|
41
|
+
} & {
|
42
|
+
tokens: {
|
43
|
+
":id": {
|
44
|
+
allowance: {
|
45
|
+
":owner": {
|
46
|
+
":spender": {
|
47
|
+
get: {
|
48
|
+
body: unknown;
|
49
|
+
params: {
|
50
|
+
id: string;
|
51
|
+
owner: string;
|
52
|
+
spender: string;
|
53
|
+
};
|
54
|
+
query: unknown;
|
55
|
+
headers: unknown;
|
56
|
+
response: {
|
57
|
+
200: {
|
58
|
+
allowance: bigint;
|
59
|
+
symbol: string;
|
60
|
+
name: string | null;
|
61
|
+
id: string;
|
62
|
+
icon: string;
|
63
|
+
chainId: number;
|
64
|
+
address: string;
|
65
|
+
decimals: number;
|
66
|
+
verified: boolean;
|
67
|
+
isTest: boolean;
|
68
|
+
price?: number | null | undefined;
|
69
|
+
} | undefined;
|
70
|
+
};
|
71
|
+
};
|
72
|
+
};
|
73
|
+
};
|
74
|
+
};
|
75
|
+
};
|
76
|
+
};
|
41
77
|
} & {
|
42
78
|
tokens: {
|
43
79
|
reward: {
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import { NotFoundError } from "../../../errors/NotFound.error";
|
2
2
|
import { AuthorizationHeadersDto, BackOfficeGuard } from "../../../guards/BackOffice.guard";
|
3
|
+
import { getUserAllowance } from "../../../libs/tokens/allowances";
|
3
4
|
import { throwOnInvalidRequiredAddress, throwOnUnsupportedChainId } from "../../../utils/throw";
|
4
5
|
import Elysia from "elysia";
|
5
6
|
import { ChainDto } from "../accounting";
|
6
|
-
import { CreateTokenDto, FindUniqueTokenDto, GetTokenBalanceDto, GetTokenQueryDto, TokenIdDto, UpdateTokenDto, } from "./token.model";
|
7
|
+
import { CreateTokenDto, FindUniqueTokenAllowanceDto, FindUniqueTokenDto, GetTokenBalanceDto, GetTokenQueryDto, TokenIdDto, UpdateTokenDto, } from "./token.model";
|
7
8
|
import { TokenService } from "./token.service";
|
8
9
|
// ─── Tokens Controller ───────────────────────────────────────────────────────
|
9
10
|
export const TokenController = new Elysia({ prefix: "/tokens", detail: { tags: ["Tokens"], hide: true } })
|
@@ -18,6 +19,18 @@ export const TokenController = new Elysia({ prefix: "/tokens", detail: { tags: [
|
|
18
19
|
throw new NotFoundError();
|
19
20
|
}
|
20
21
|
}, { params: FindUniqueTokenDto })
|
22
|
+
.get("/:id/allowance/:owner/:spender", async ({ params: { id, owner, spender } }) => {
|
23
|
+
try {
|
24
|
+
const [chainId, address] = id.split("-");
|
25
|
+
const token = await TokenService.findUniqueOrThrow({ chainId: +chainId, address });
|
26
|
+
const allowance = await getUserAllowance(token.chainId, token.address, owner, spender);
|
27
|
+
return { ...token, allowance };
|
28
|
+
}
|
29
|
+
catch (err) {
|
30
|
+
if (err.code && err.code === "P2025")
|
31
|
+
throw new NotFoundError();
|
32
|
+
}
|
33
|
+
}, { params: FindUniqueTokenAllowanceDto })
|
21
34
|
// ─── Get Valid Reward Token ───────────────────────────────────────────
|
22
35
|
.get("/reward/:chainId", async ({ params }) => TokenService.getValidRewardTokens(params.chainId), {
|
23
36
|
params: ChainDto,
|
@@ -26,6 +26,11 @@ export declare const TokenResourceDto: import("@sinclair/typebox").TObject<{
|
|
26
26
|
export declare const FindUniqueTokenDto: import("@sinclair/typebox").TObject<{
|
27
27
|
id: import("@sinclair/typebox").TString;
|
28
28
|
}>;
|
29
|
+
export declare const FindUniqueTokenAllowanceDto: import("@sinclair/typebox").TObject<{
|
30
|
+
id: import("@sinclair/typebox").TString;
|
31
|
+
owner: import("@sinclair/typebox").TString;
|
32
|
+
spender: import("@sinclair/typebox").TString;
|
33
|
+
}>;
|
29
34
|
export declare const GetTokenQueryDto: import("@sinclair/typebox").TObject<{
|
30
35
|
symbol: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
31
36
|
displaySymbol: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
@@ -15,6 +15,11 @@ export const TokenResourceDto = t.Object({
|
|
15
15
|
export const FindUniqueTokenDto = t.Object({
|
16
16
|
id: t.String(),
|
17
17
|
});
|
18
|
+
export const FindUniqueTokenAllowanceDto = t.Object({
|
19
|
+
id: t.String(),
|
20
|
+
owner: t.String(),
|
21
|
+
spender: t.String(),
|
22
|
+
});
|
18
23
|
export const GetTokenQueryDto = t.Object({
|
19
24
|
symbol: t.Optional(t.String()),
|
20
25
|
displaySymbol: t.Optional(t.String()), // To filter by displaySymbol or if null symbol
|