@merkl/api 0.10.352 → 0.10.353
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 +236 -7
- package/dist/src/index.d.ts +84 -1
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.d.ts +4 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.js +2 -1
- package/dist/src/modules/v4/dynamicData/dynamicData.controller.d.ts +72 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +16 -1
- package/dist/src/modules/v4/dynamicData/dynamicData.model.d.ts +95 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.model.js +47 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.service.d.ts +13 -1
- package/dist/src/modules/v4/dynamicData/dynamicData.service.js +52 -1
- package/dist/src/modules/v4/programPayload/programPayload.controller.d.ts +12 -1
- package/dist/src/modules/v4/programPayload/programPayload.controller.js +3 -2
- package/dist/src/modules/v4/programPayload/programPayload.service.d.ts +1 -1
- package/dist/src/modules/v4/programPayload/programPayload.service.js +5 -2
- package/dist/src/modules/v4/router.d.ts +84 -1
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +1 -1
@@ -1,6 +1,53 @@
|
|
1
|
+
import { CampaignType } from "../../../../database/api/.generated";
|
1
2
|
import { t } from "elysia";
|
2
3
|
// ─── DTOs ────────────────────────────────────────────────────────────────────
|
3
4
|
export const DynamicDataSourceIdentifier = t.Object({
|
4
5
|
chainId: t.Numeric(),
|
5
6
|
tokenAddress: t.String(),
|
6
7
|
});
|
8
|
+
export const DynamicDataExtendedDto = t.Object({
|
9
|
+
targetTokenSymbol: t.Optional(t.String()),
|
10
|
+
});
|
11
|
+
export const SimplifiedCampaignDto = t.Object({
|
12
|
+
id: t.Optional(t.String()),
|
13
|
+
distributionChainId: t.Optional(t.Number()),
|
14
|
+
rewardTokenId: t.Optional(t.String()),
|
15
|
+
opportunityId: t.Optional(t.String()),
|
16
|
+
computeChainId: t.Number(),
|
17
|
+
chainId: t.Optional(t.Number()),
|
18
|
+
campaignId: t.Optional(t.String()),
|
19
|
+
identifier: t.Optional(t.String()),
|
20
|
+
creatorAddress: t.Optional(t.String()),
|
21
|
+
type: t.Enum(CampaignType),
|
22
|
+
subType: t.Optional(t.Number()),
|
23
|
+
rewardTokenAddress: t.Optional(t.String()),
|
24
|
+
amount: t.Optional(t.String()),
|
25
|
+
opportunityIdentifier: t.Optional(t.String()),
|
26
|
+
startTimestamp: t.Optional(t.String()),
|
27
|
+
endTimestamp: t.Optional(t.String()),
|
28
|
+
params: t.Object({}),
|
29
|
+
tags: t.Optional(t.Array(t.String())),
|
30
|
+
chain: t.Optional(t.Object({})),
|
31
|
+
rewardToken: t.Optional(t.Object({})),
|
32
|
+
distributionChain: t.Optional(t.Object({})),
|
33
|
+
campaignStatus: t.Optional(t.Object({})),
|
34
|
+
});
|
35
|
+
export const FilledCampaignDto = t.Object({
|
36
|
+
id: t.String(),
|
37
|
+
distributionChainId: t.Number(),
|
38
|
+
rewardTokenId: t.String(),
|
39
|
+
opportunityId: t.String(),
|
40
|
+
computeChainId: t.Number(),
|
41
|
+
chainId: t.Number(),
|
42
|
+
campaignId: t.String(),
|
43
|
+
identifier: t.String(),
|
44
|
+
creatorAddress: t.String(),
|
45
|
+
type: t.Enum(CampaignType),
|
46
|
+
subType: t.Optional(t.Number()),
|
47
|
+
rewardTokenAddress: t.String(),
|
48
|
+
amount: t.String(),
|
49
|
+
opportunityIdentifier: t.String(),
|
50
|
+
startTimestamp: t.String(),
|
51
|
+
endTimestamp: t.String(),
|
52
|
+
campaignParameters: t.Object({}),
|
53
|
+
});
|
@@ -1,4 +1,7 @@
|
|
1
|
-
import {
|
1
|
+
import { CampaignType } from "../../../../database/api/.generated";
|
2
|
+
import { Campaign, type ChainId } from "@sdk";
|
3
|
+
import { type GetCampaignQueryModel } from "../campaign";
|
4
|
+
import type { SimplifiedCampaignDtoModel } from "./dynamicData.model";
|
2
5
|
type output = {
|
3
6
|
tvl: number;
|
4
7
|
totalSupply: number;
|
@@ -8,7 +11,16 @@ type output = {
|
|
8
11
|
type: string;
|
9
12
|
};
|
10
13
|
export declare class DynamicDataService {
|
14
|
+
#private;
|
11
15
|
/** Fetches a single price */
|
12
16
|
static queryERC20DynamicData(chainId: ChainId, tokenAddress: string): Promise<output>;
|
17
|
+
static queryDynamicData(campaign: SimplifiedCampaignDtoModel): Promise<any>;
|
18
|
+
static queryDynamicDataFromCampaignId(query: GetCampaignQueryModel): Promise<any>;
|
19
|
+
/**
|
20
|
+
* Returns the campaign type index from the CampaignType enum
|
21
|
+
* @param type CampaignType as db-related enum for v4
|
22
|
+
* @returns index of Campaign enum from sdk
|
23
|
+
*/
|
24
|
+
static getV3FromType(type: CampaignType): Campaign;
|
13
25
|
}
|
14
26
|
export {};
|
@@ -1,7 +1,10 @@
|
|
1
1
|
import { campaignsDynamicData } from "../../../libs/campaigns/campaignsDynamicData";
|
2
2
|
import { executeSimple } from "../../../utils/execute";
|
3
3
|
import { log } from "../../../utils/logger";
|
4
|
+
import { CampaignType } from "../../../../database/api/.generated";
|
4
5
|
import { Campaign, NETWORK_LABELS } from "@sdk";
|
6
|
+
import { CampaignService, campaignTypeToEnumMap } from "../campaign";
|
7
|
+
import { CampaignRepository } from "../campaign/campaign.repository";
|
5
8
|
export class DynamicDataService {
|
6
9
|
// ─── DynamicDatas ──────────────────────────────────────────────────────────
|
7
10
|
/** Fetches a single price */
|
@@ -25,13 +28,13 @@ export class DynamicDataService {
|
|
25
28
|
decimalsRewardToken: 18,
|
26
29
|
decimalsTargetToken: 18,
|
27
30
|
duration: 30,
|
31
|
+
whitelist: [],
|
28
32
|
forwarders: [],
|
29
33
|
hooks: [],
|
30
34
|
shouldIgnore: false,
|
31
35
|
symbolRewardToken: "EXR",
|
32
36
|
symbolTargetToken: "EXT",
|
33
37
|
targetToken: tokenAddress,
|
34
|
-
whitelist: [],
|
35
38
|
},
|
36
39
|
campaignType: Campaign.ERC20,
|
37
40
|
},
|
@@ -47,4 +50,52 @@ export class DynamicDataService {
|
|
47
50
|
type: result[0]?.type ?? "defaultType",
|
48
51
|
};
|
49
52
|
}
|
53
|
+
static async queryDynamicData(campaign) {
|
54
|
+
const campaignParameters = {
|
55
|
+
type: campaign.type,
|
56
|
+
computeChainId: campaign.computeChainId,
|
57
|
+
chainId: campaign.chainId ? campaign.chainId : campaign.computeChainId,
|
58
|
+
subType: campaign.subType,
|
59
|
+
rewardTokenAddress: campaign.rewardTokenAddress ? campaign.rewardTokenAddress : "0xdefault",
|
60
|
+
amount: campaign.amount ? campaign.amount : "1000000000000000000", // 1 EXR in wei
|
61
|
+
startTimestamp: campaign.startTimestamp ? campaign.startTimestamp : Math.floor(Date.now() / 1000).toString(), // current timestamp
|
62
|
+
endTimestamp: campaign.endTimestamp
|
63
|
+
? campaign.endTimestamp
|
64
|
+
: (Math.floor(Date.now() / 1000) + 30 * 24 * 60 * 60).toString(), // 30 days from now
|
65
|
+
creatorAddress: campaign.creatorAddress ? campaign.creatorAddress : "0xdefaultcreatoraddress",
|
66
|
+
campaignParameters: campaign.params,
|
67
|
+
campaignId: "0xdefaultid",
|
68
|
+
opportunityIdentifier: "0xdefaultopportunityid",
|
69
|
+
id: "0xdefaultid",
|
70
|
+
distributionChainId: campaign.distributionChainId ? campaign.distributionChainId : 1,
|
71
|
+
rewardTokenId: campaign.rewardTokenId ? campaign.rewardTokenId : "0xdefaultrewardtokenid",
|
72
|
+
opportunityId: campaign.opportunityId ? campaign.opportunityId : "0xdefaultopportunityid",
|
73
|
+
identifier: campaign.identifier ? campaign.identifier : "defaultidentifier",
|
74
|
+
};
|
75
|
+
return await DynamicDataService.#getDynamicData(campaignParameters);
|
76
|
+
}
|
77
|
+
static async queryDynamicDataFromCampaignId(query) {
|
78
|
+
const campaigns = await CampaignRepository.findMany(query);
|
79
|
+
const campaign = campaigns[0];
|
80
|
+
return DynamicDataService.queryDynamicData(CampaignService.format(campaign));
|
81
|
+
}
|
82
|
+
/**
|
83
|
+
* Returns the campaign type index from the CampaignType enum
|
84
|
+
* @param type CampaignType as db-related enum for v4
|
85
|
+
* @returns index of Campaign enum from sdk
|
86
|
+
*/
|
87
|
+
static getV3FromType(type) {
|
88
|
+
return Object.entries(campaignTypeToEnumMap).find(([v4]) => v4 === type)?.[1];
|
89
|
+
}
|
90
|
+
/**
|
91
|
+
* build/fetch metadata of a campaign's opportunity
|
92
|
+
* @param campaign
|
93
|
+
* @returns {OpportunityMetadata}
|
94
|
+
*/
|
95
|
+
static async #getDynamicData(campaign) {
|
96
|
+
// const campaignType = DynamicDataService.getV3FromType(campaign.type);
|
97
|
+
if (campaign.type !== CampaignType.INVALID) {
|
98
|
+
return await CampaignService.fetchDynamicData(campaign.computeChainId, campaign.type, [campaign]);
|
99
|
+
}
|
100
|
+
}
|
50
101
|
}
|
@@ -219,10 +219,21 @@ export declare const ProgramPayloadController: Elysia<"/program-payload", false,
|
|
219
219
|
campaignType: number;
|
220
220
|
};
|
221
221
|
params: {};
|
222
|
-
query:
|
222
|
+
query: {
|
223
|
+
debug?: boolean | undefined;
|
224
|
+
};
|
223
225
|
headers: unknown;
|
224
226
|
response: {
|
225
227
|
200: {
|
228
|
+
version: string;
|
229
|
+
chainId: string;
|
230
|
+
createdAt: number;
|
231
|
+
meta: {
|
232
|
+
name: string;
|
233
|
+
txBuilderVersion: string;
|
234
|
+
};
|
235
|
+
transactions: import("./programPayload.model").transaction[];
|
236
|
+
} | {
|
226
237
|
safePayload: import("./programPayload.model").safePayload;
|
227
238
|
nonEncodedConfig: any;
|
228
239
|
};
|
@@ -65,9 +65,10 @@ export const ProgramPayloadController = new Elysia({ prefix: "/program-payload",
|
|
65
65
|
},
|
66
66
|
detail: { description: "Generate the payload with the campaigns and amounts provided" },
|
67
67
|
})
|
68
|
-
.post("/payload/from-config", async ({ body }) => {
|
69
|
-
return ProgramPayloadService.buildPayloadFromConfig(body);
|
68
|
+
.post("/payload/from-config", async ({ query, body }) => {
|
69
|
+
return ProgramPayloadService.buildPayloadFromConfig(body, query.debug);
|
70
70
|
}, {
|
71
|
+
query: t.Object({ debug: t.Optional(t.Boolean({ description: "Debug mode" })) }),
|
71
72
|
body: SinglePayloadInputDto,
|
72
73
|
detail: { description: "BETA FEATURE : Generate the payload from a config file." },
|
73
74
|
});
|
@@ -12,7 +12,7 @@ export declare class ProgramPayloadService {
|
|
12
12
|
static buildCampaignData(query: CampaignPayloadInputModel): {
|
13
13
|
args: any;
|
14
14
|
};
|
15
|
-
static buildPayloadFromConfig(config: SinglePayloadInputDtoModel): Promise<{
|
15
|
+
static buildPayloadFromConfig(config: SinglePayloadInputDtoModel, debug?: boolean): Promise<safePayload | {
|
16
16
|
safePayload: safePayload;
|
17
17
|
nonEncodedConfig: any;
|
18
18
|
}>;
|
@@ -46,7 +46,7 @@ export class ProgramPayloadService {
|
|
46
46
|
const args = buildCampaignPayload(ProgramPayloadService.buildConfig(query), distributionChainId).args;
|
47
47
|
return { args };
|
48
48
|
}
|
49
|
-
static async buildPayloadFromConfig(config) {
|
49
|
+
static async buildPayloadFromConfig(config, debug = false) {
|
50
50
|
const campaignType = config.campaignType;
|
51
51
|
const rewardToken = config.rewardToken;
|
52
52
|
class CampaignConfig extends CampaignTypeConfigResourceMapping[campaignType] {
|
@@ -70,7 +70,10 @@ export class ProgramPayloadService {
|
|
70
70
|
const safePayload = ProgramPayloadService.initiateSafePayload(distributionChainId, distributionCreator);
|
71
71
|
const transactions = ProgramPayloadService.createSafePayloadForCampaign(args, distributionChainId, rewardToken, distributionCreator ?? NULL_ADDRESS);
|
72
72
|
safePayload.transactions.push(...transactions);
|
73
|
-
|
73
|
+
if (debug) {
|
74
|
+
return { safePayload, nonEncodedConfig };
|
75
|
+
}
|
76
|
+
return safePayload;
|
74
77
|
}
|
75
78
|
static createSafePayloadForCampaign(args, distributionChainId, rewardToken, distributionCreator) {
|
76
79
|
const safePayload = _.cloneDeep(safeTemplate);
|
@@ -2675,6 +2675,78 @@ export declare const v4: Elysia<"/v4", false, {
|
|
2675
2675
|
};
|
2676
2676
|
};
|
2677
2677
|
};
|
2678
|
+
} & {
|
2679
|
+
"dynamic-data": {
|
2680
|
+
"from-config": {
|
2681
|
+
post: {
|
2682
|
+
body: {
|
2683
|
+
id?: string | undefined;
|
2684
|
+
tags?: string[] | undefined;
|
2685
|
+
identifier?: string | undefined;
|
2686
|
+
subType?: number | undefined;
|
2687
|
+
chain?: {} | undefined;
|
2688
|
+
chainId?: number | undefined;
|
2689
|
+
startTimestamp?: string | undefined;
|
2690
|
+
endTimestamp?: string | undefined;
|
2691
|
+
distributionChainId?: number | undefined;
|
2692
|
+
campaignId?: string | undefined;
|
2693
|
+
rewardTokenId?: string | undefined;
|
2694
|
+
amount?: string | undefined;
|
2695
|
+
opportunityId?: string | undefined;
|
2696
|
+
creatorAddress?: string | undefined;
|
2697
|
+
campaignStatus?: {} | undefined;
|
2698
|
+
rewardToken?: {} | undefined;
|
2699
|
+
rewardTokenAddress?: string | undefined;
|
2700
|
+
distributionChain?: {} | undefined;
|
2701
|
+
opportunityIdentifier?: string | undefined;
|
2702
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
2703
|
+
params: {};
|
2704
|
+
computeChainId: number;
|
2705
|
+
};
|
2706
|
+
params: {};
|
2707
|
+
query: unknown;
|
2708
|
+
headers: {
|
2709
|
+
authorization: string;
|
2710
|
+
};
|
2711
|
+
response: {
|
2712
|
+
[x: string]: any;
|
2713
|
+
200: any;
|
2714
|
+
};
|
2715
|
+
};
|
2716
|
+
};
|
2717
|
+
};
|
2718
|
+
} & {
|
2719
|
+
"dynamic-data": {
|
2720
|
+
"from-existing": {
|
2721
|
+
get: {
|
2722
|
+
body: unknown;
|
2723
|
+
params: {};
|
2724
|
+
query: {
|
2725
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | undefined;
|
2726
|
+
items?: number | undefined;
|
2727
|
+
subType?: number | undefined;
|
2728
|
+
page?: number | undefined;
|
2729
|
+
chainId?: number | undefined;
|
2730
|
+
startTimestamp?: string | undefined;
|
2731
|
+
endTimestamp?: string | undefined;
|
2732
|
+
tokenAddress?: string | undefined;
|
2733
|
+
mainParameter?: string | undefined;
|
2734
|
+
campaignId?: string | undefined;
|
2735
|
+
opportunityId?: string | undefined;
|
2736
|
+
test?: boolean | undefined;
|
2737
|
+
creatorTag?: string | undefined;
|
2738
|
+
tokenSymbol?: string | undefined;
|
2739
|
+
};
|
2740
|
+
headers: {
|
2741
|
+
authorization: string;
|
2742
|
+
};
|
2743
|
+
response: {
|
2744
|
+
[x: string]: any;
|
2745
|
+
200: any;
|
2746
|
+
};
|
2747
|
+
};
|
2748
|
+
};
|
2749
|
+
};
|
2678
2750
|
};
|
2679
2751
|
} & {
|
2680
2752
|
v4: {
|
@@ -3067,10 +3139,21 @@ export declare const v4: Elysia<"/v4", false, {
|
|
3067
3139
|
campaignType: number;
|
3068
3140
|
};
|
3069
3141
|
params: {};
|
3070
|
-
query:
|
3142
|
+
query: {
|
3143
|
+
debug?: boolean | undefined;
|
3144
|
+
};
|
3071
3145
|
headers: unknown;
|
3072
3146
|
response: {
|
3073
3147
|
200: {
|
3148
|
+
version: string;
|
3149
|
+
chainId: string;
|
3150
|
+
createdAt: number;
|
3151
|
+
meta: {
|
3152
|
+
name: string;
|
3153
|
+
txBuilderVersion: string;
|
3154
|
+
};
|
3155
|
+
transactions: import("./programPayload").transaction[];
|
3156
|
+
} | {
|
3074
3157
|
safePayload: import("./programPayload").safePayload;
|
3075
3158
|
nonEncodedConfig: any;
|
3076
3159
|
};
|