@merkl/api 0.10.352 → 0.10.354
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/database/api/.generated/edge.js +10 -4
- package/dist/database/api/.generated/index-browser.js +7 -1
- package/dist/database/api/.generated/index.d.ts +7 -1
- package/dist/database/api/.generated/index.js +10 -4
- package/dist/database/api/.generated/package.json +1 -1
- package/dist/database/api/.generated/schema.prisma +6 -0
- package/dist/database/api/.generated/wasm.js +7 -1
- package/dist/src/eden/index.d.ts +251 -22
- package/dist/src/index.d.ts +89 -6
- package/dist/src/jobs/breakdowns.d.ts +1 -0
- package/dist/src/jobs/breakdowns.js +55 -0
- package/dist/src/jobs/etl/pendings.d.ts +1 -0
- package/dist/src/jobs/etl/pendings.js +74 -0
- package/dist/src/jobs/etl/reward-breakdowns.d.ts +1 -0
- package/dist/src/jobs/etl/reward-breakdowns.js +82 -0
- package/dist/src/jobs/etl/rewards.d.ts +1 -0
- package/dist/src/jobs/etl/rewards.js +102 -0
- package/dist/src/jobs/rewards.d.ts +1 -0
- package/dist/src/jobs/rewards.js +74 -0
- 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/bucket/bucket.service.d.ts +4 -1
- package/dist/src/modules/v4/bucket/bucket.service.js +83 -2
- package/dist/src/modules/v4/campaign/campaign.controller.d.ts +2 -2
- package/dist/src/modules/v4/campaign/campaign.model.d.ts +3 -0
- 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 +101 -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/opportunity/opportunity.controller.d.ts +3 -3
- package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +6 -0
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +2 -2
- package/dist/src/modules/v4/opportunity/opportunity.service.js +4 -0
- package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.d.ts +3 -0
- package/dist/src/modules/v4/opportunity/subservices/getHyperdriveMetadata.service.js +15 -0
- 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.repository.d.ts +4 -1
- package/dist/src/modules/v4/programPayload/programPayload.repository.js +101 -16
- package/dist/src/modules/v4/programPayload/programPayload.service.d.ts +4 -4
- package/dist/src/modules/v4/programPayload/programPayload.service.js +30 -13
- package/dist/src/modules/v4/protocol/protocol.model.d.ts +1 -1
- package/dist/src/modules/v4/protocol/protocol.model.js +1 -0
- package/dist/src/modules/v4/router.d.ts +89 -6
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +4 -2
@@ -37,6 +37,78 @@ export declare const DynamicDataController: Elysia<"/dynamic-data", false, {
|
|
37
37
|
};
|
38
38
|
};
|
39
39
|
};
|
40
|
+
} & {
|
41
|
+
"dynamic-data": {
|
42
|
+
"from-config": {
|
43
|
+
post: {
|
44
|
+
body: {
|
45
|
+
id?: string | undefined;
|
46
|
+
tags?: string[] | undefined;
|
47
|
+
identifier?: string | undefined;
|
48
|
+
subType?: number | undefined;
|
49
|
+
chain?: {} | undefined;
|
50
|
+
chainId?: number | undefined;
|
51
|
+
startTimestamp?: string | undefined;
|
52
|
+
endTimestamp?: string | undefined;
|
53
|
+
distributionChainId?: number | undefined;
|
54
|
+
campaignId?: string | undefined;
|
55
|
+
rewardTokenId?: string | undefined;
|
56
|
+
amount?: string | undefined;
|
57
|
+
opportunityId?: string | undefined;
|
58
|
+
creatorAddress?: string | undefined;
|
59
|
+
campaignStatus?: {} | undefined;
|
60
|
+
rewardToken?: {} | undefined;
|
61
|
+
rewardTokenAddress?: string | undefined;
|
62
|
+
distributionChain?: {} | undefined;
|
63
|
+
opportunityIdentifier?: string | undefined;
|
64
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
65
|
+
params: {};
|
66
|
+
computeChainId: number;
|
67
|
+
};
|
68
|
+
params: {};
|
69
|
+
query: unknown;
|
70
|
+
headers: {
|
71
|
+
authorization: string;
|
72
|
+
};
|
73
|
+
response: {
|
74
|
+
[x: string]: any;
|
75
|
+
200: any;
|
76
|
+
};
|
77
|
+
};
|
78
|
+
};
|
79
|
+
};
|
80
|
+
} & {
|
81
|
+
"dynamic-data": {
|
82
|
+
"from-existing": {
|
83
|
+
get: {
|
84
|
+
body: unknown;
|
85
|
+
params: {};
|
86
|
+
query: {
|
87
|
+
type?: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR" | undefined;
|
88
|
+
items?: number | undefined;
|
89
|
+
subType?: number | undefined;
|
90
|
+
page?: number | undefined;
|
91
|
+
chainId?: number | undefined;
|
92
|
+
startTimestamp?: string | undefined;
|
93
|
+
endTimestamp?: string | undefined;
|
94
|
+
tokenAddress?: string | undefined;
|
95
|
+
mainParameter?: string | undefined;
|
96
|
+
campaignId?: string | undefined;
|
97
|
+
opportunityId?: string | undefined;
|
98
|
+
test?: boolean | undefined;
|
99
|
+
creatorTag?: string | undefined;
|
100
|
+
tokenSymbol?: string | undefined;
|
101
|
+
};
|
102
|
+
headers: {
|
103
|
+
authorization: string;
|
104
|
+
};
|
105
|
+
response: {
|
106
|
+
[x: string]: any;
|
107
|
+
200: any;
|
108
|
+
};
|
109
|
+
};
|
110
|
+
};
|
111
|
+
};
|
40
112
|
}, {
|
41
113
|
derive: {};
|
42
114
|
resolve: {};
|
@@ -1,7 +1,8 @@
|
|
1
1
|
import { AuthorizationHeadersDto, BackOfficeGuard } from "../../../guards/BackOffice.guard";
|
2
2
|
import Elysia from "elysia";
|
3
3
|
import { throwOnUnsupportedChainId } from "src/utils/throw";
|
4
|
-
import {
|
4
|
+
import { GetCampaignQueryDto } from "../campaign";
|
5
|
+
import { DynamicDataSourceIdentifier, SimplifiedCampaignDto } from "./dynamicData.model";
|
5
6
|
import { DynamicDataService } from "./dynamicData.service";
|
6
7
|
// ─── DynamicDatas Controller ───────────────────────────────────────────────────────
|
7
8
|
export const DynamicDataController = new Elysia({
|
@@ -16,4 +17,18 @@ export const DynamicDataController = new Elysia({
|
|
16
17
|
BackOfficeGuard({ headers });
|
17
18
|
throwOnUnsupportedChainId(query.chainId);
|
18
19
|
},
|
20
|
+
})
|
21
|
+
.post("/from-config", async ({ body }) => await DynamicDataService.queryDynamicData(body), {
|
22
|
+
body: SimplifiedCampaignDto,
|
23
|
+
headers: AuthorizationHeadersDto,
|
24
|
+
beforeHandle: ({ headers }) => {
|
25
|
+
BackOfficeGuard({ headers });
|
26
|
+
},
|
27
|
+
})
|
28
|
+
.get("/from-existing", async ({ query }) => await DynamicDataService.queryDynamicDataFromCampaignId(query), {
|
29
|
+
query: GetCampaignQueryDto,
|
30
|
+
headers: AuthorizationHeadersDto,
|
31
|
+
beforeHandle: ({ headers }) => {
|
32
|
+
BackOfficeGuard({ headers });
|
33
|
+
},
|
19
34
|
});
|
@@ -1,5 +1,106 @@
|
|
1
|
+
import type { SinglePayloadInputDto } from "../programPayload";
|
1
2
|
export declare const DynamicDataSourceIdentifier: import("@sinclair/typebox").TObject<{
|
2
3
|
chainId: import("@sinclair/typebox").TNumber;
|
3
4
|
tokenAddress: import("@sinclair/typebox").TString;
|
4
5
|
}>;
|
6
|
+
export declare const DynamicDataExtendedDto: import("@sinclair/typebox").TObject<{
|
7
|
+
targetTokenSymbol: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
8
|
+
}>;
|
9
|
+
export declare const SimplifiedCampaignDto: import("@sinclair/typebox").TObject<{
|
10
|
+
id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
11
|
+
distributionChainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
12
|
+
rewardTokenId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
13
|
+
opportunityId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
14
|
+
computeChainId: import("@sinclair/typebox").TNumber;
|
15
|
+
chainId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
16
|
+
campaignId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
17
|
+
identifier: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
18
|
+
creatorAddress: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
19
|
+
type: import("@sinclair/typebox").TEnum<{
|
20
|
+
INVALID: "INVALID";
|
21
|
+
ERC20: "ERC20";
|
22
|
+
CLAMM: "CLAMM";
|
23
|
+
ERC20_SNAPSHOT: "ERC20_SNAPSHOT";
|
24
|
+
JSON_AIRDROP: "JSON_AIRDROP";
|
25
|
+
SILO: "SILO";
|
26
|
+
RADIANT: "RADIANT";
|
27
|
+
MORPHO: "MORPHO";
|
28
|
+
DOLOMITE: "DOLOMITE";
|
29
|
+
BADGER: "BADGER";
|
30
|
+
COMPOUND: "COMPOUND";
|
31
|
+
AJNA: "AJNA";
|
32
|
+
EULER: "EULER";
|
33
|
+
UNISWAP_V4: "UNISWAP_V4";
|
34
|
+
ION: "ION";
|
35
|
+
EIGENLAYER: "EIGENLAYER";
|
36
|
+
ERC20TRANSFERS: "ERC20TRANSFERS";
|
37
|
+
ERC20LOGPROCESSOR: "ERC20LOGPROCESSOR";
|
38
|
+
ERC20REBASELOGPROCESSOR: "ERC20REBASELOGPROCESSOR";
|
39
|
+
VEST: "VEST";
|
40
|
+
ERC20_FIX_APR: "ERC20_FIX_APR";
|
41
|
+
HYPERDRIVELOGPROCESSOR: "HYPERDRIVELOGPROCESSOR";
|
42
|
+
HYPERDRIVELOGFIXPROCESSOR: "HYPERDRIVELOGFIXPROCESSOR";
|
43
|
+
}>;
|
44
|
+
subType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
45
|
+
rewardTokenAddress: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
46
|
+
amount: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
47
|
+
opportunityIdentifier: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
48
|
+
startTimestamp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
49
|
+
endTimestamp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
50
|
+
params: import("@sinclair/typebox").TObject<{}>;
|
51
|
+
tags: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
52
|
+
chain: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
|
53
|
+
rewardToken: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
|
54
|
+
distributionChain: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
|
55
|
+
campaignStatus: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
|
56
|
+
}>;
|
57
|
+
export declare const FilledCampaignDto: import("@sinclair/typebox").TObject<{
|
58
|
+
id: import("@sinclair/typebox").TString;
|
59
|
+
distributionChainId: import("@sinclair/typebox").TNumber;
|
60
|
+
rewardTokenId: import("@sinclair/typebox").TString;
|
61
|
+
opportunityId: import("@sinclair/typebox").TString;
|
62
|
+
computeChainId: import("@sinclair/typebox").TNumber;
|
63
|
+
chainId: import("@sinclair/typebox").TNumber;
|
64
|
+
campaignId: import("@sinclair/typebox").TString;
|
65
|
+
identifier: import("@sinclair/typebox").TString;
|
66
|
+
creatorAddress: import("@sinclair/typebox").TString;
|
67
|
+
type: import("@sinclair/typebox").TEnum<{
|
68
|
+
INVALID: "INVALID";
|
69
|
+
ERC20: "ERC20";
|
70
|
+
CLAMM: "CLAMM";
|
71
|
+
ERC20_SNAPSHOT: "ERC20_SNAPSHOT";
|
72
|
+
JSON_AIRDROP: "JSON_AIRDROP";
|
73
|
+
SILO: "SILO";
|
74
|
+
RADIANT: "RADIANT";
|
75
|
+
MORPHO: "MORPHO";
|
76
|
+
DOLOMITE: "DOLOMITE";
|
77
|
+
BADGER: "BADGER";
|
78
|
+
COMPOUND: "COMPOUND";
|
79
|
+
AJNA: "AJNA";
|
80
|
+
EULER: "EULER";
|
81
|
+
UNISWAP_V4: "UNISWAP_V4";
|
82
|
+
ION: "ION";
|
83
|
+
EIGENLAYER: "EIGENLAYER";
|
84
|
+
ERC20TRANSFERS: "ERC20TRANSFERS";
|
85
|
+
ERC20LOGPROCESSOR: "ERC20LOGPROCESSOR";
|
86
|
+
ERC20REBASELOGPROCESSOR: "ERC20REBASELOGPROCESSOR";
|
87
|
+
VEST: "VEST";
|
88
|
+
ERC20_FIX_APR: "ERC20_FIX_APR";
|
89
|
+
HYPERDRIVELOGPROCESSOR: "HYPERDRIVELOGPROCESSOR";
|
90
|
+
HYPERDRIVELOGFIXPROCESSOR: "HYPERDRIVELOGFIXPROCESSOR";
|
91
|
+
}>;
|
92
|
+
subType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
93
|
+
rewardTokenAddress: import("@sinclair/typebox").TString;
|
94
|
+
amount: import("@sinclair/typebox").TString;
|
95
|
+
opportunityIdentifier: import("@sinclair/typebox").TString;
|
96
|
+
startTimestamp: import("@sinclair/typebox").TString;
|
97
|
+
endTimestamp: import("@sinclair/typebox").TString;
|
98
|
+
campaignParameters: import("@sinclair/typebox").TObject<{}>;
|
99
|
+
}>;
|
5
100
|
export type DynamicDataSourceModel = typeof DynamicDataSourceIdentifier.static;
|
101
|
+
export type SimplifiedCampaignDtoModel = typeof SimplifiedCampaignDto.static;
|
102
|
+
export type FilledCampaignDtoModel = typeof FilledCampaignDto.static;
|
103
|
+
export type DynamicDataExtendedDtoModel = typeof DynamicDataExtendedDto.static;
|
104
|
+
export type SinglePayloadInputDtoModelExtended = typeof SinglePayloadInputDto.static & {
|
105
|
+
targetTokenSymbol: string;
|
106
|
+
};
|
@@ -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
|
}
|
@@ -21,7 +21,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
21
21
|
depositUrl?: string | undefined;
|
22
22
|
protocols?: string[] | undefined;
|
23
23
|
mainProtocol?: string | undefined;
|
24
|
-
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST";
|
24
|
+
type: "INVALID" | "ERC20" | "CLAMM" | "ERC20_SNAPSHOT" | "JSON_AIRDROP" | "SILO" | "RADIANT" | "MORPHO" | "DOLOMITE" | "BADGER" | "COMPOUND" | "AJNA" | "EULER" | "UNISWAP_V4" | "ION" | "EIGENLAYER" | "ERC20TRANSFERS" | "ERC20LOGPROCESSOR" | "ERC20REBASELOGPROCESSOR" | "VEST" | "ERC20_FIX_APR" | "HYPERDRIVELOGPROCESSOR" | "HYPERDRIVELOGFIXPROCESSOR";
|
25
25
|
tokens: {
|
26
26
|
chainId: number;
|
27
27
|
address: string;
|
@@ -29,7 +29,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
29
29
|
status: "NONE" | "PAST" | "LIVE" | "SOON";
|
30
30
|
identifier: string;
|
31
31
|
chainId: number;
|
32
|
-
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW";
|
32
|
+
action: "INVALID" | "POOL" | "HOLD" | "DROP" | "LEND" | "BORROW" | "LP" | "LONG" | "SHORT";
|
33
33
|
};
|
34
34
|
params: {};
|
35
35
|
query: unknown;
|
@@ -90,7 +90,7 @@ export declare const OpportunityController: Elysia<"/opportunities", false, {
|
|
90
90
|
} & {
|
91
91
|
price?: number | null | undefined;
|
92
92
|
})[];
|
93
|
-
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
|
93
|
+
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
|
94
94
|
depositUrl: any;
|
95
95
|
tags: string[];
|
96
96
|
};
|
@@ -317,6 +317,9 @@ export declare const CreateOpportunityDto: import("@sinclair/typebox").TObject<{
|
|
317
317
|
ERC20LOGPROCESSOR: "ERC20LOGPROCESSOR";
|
318
318
|
ERC20REBASELOGPROCESSOR: "ERC20REBASELOGPROCESSOR";
|
319
319
|
VEST: "VEST";
|
320
|
+
ERC20_FIX_APR: "ERC20_FIX_APR";
|
321
|
+
HYPERDRIVELOGPROCESSOR: "HYPERDRIVELOGPROCESSOR";
|
322
|
+
HYPERDRIVELOGFIXPROCESSOR: "HYPERDRIVELOGFIXPROCESSOR";
|
320
323
|
}>;
|
321
324
|
identifier: import("@sinclair/typebox").TString;
|
322
325
|
name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
@@ -332,6 +335,9 @@ export declare const CreateOpportunityDto: import("@sinclair/typebox").TObject<{
|
|
332
335
|
DROP: "DROP";
|
333
336
|
LEND: "LEND";
|
334
337
|
BORROW: "BORROW";
|
338
|
+
LP: "LP";
|
339
|
+
LONG: "LONG";
|
340
|
+
SHORT: "SHORT";
|
335
341
|
INVALID: "INVALID";
|
336
342
|
}>;
|
337
343
|
tokens: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
@@ -47,7 +47,7 @@ export declare abstract class OpportunityService {
|
|
47
47
|
} & {
|
48
48
|
price?: number | null | undefined;
|
49
49
|
})[];
|
50
|
-
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
|
50
|
+
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
|
51
51
|
depositUrl: any;
|
52
52
|
tags: string[];
|
53
53
|
}>;
|
@@ -75,7 +75,7 @@ export declare abstract class OpportunityService {
|
|
75
75
|
} & {
|
76
76
|
price?: number | null | undefined;
|
77
77
|
})[];
|
78
|
-
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | undefined;
|
78
|
+
mainProtocol: "morpho" | "arthswap" | "baseswap" | "camelot" | "crust" | "fenix" | "horiza" | "izumi" | "kim" | "pancakeswap-v3" | "quickswap-algebra" | "quickswap-uni" | "ramses" | "retro" | "stryke" | "stryke-pcs" | "stryke-sushi" | "sushiswap-v3" | "swapr" | "thruster" | "uniswap-v3" | "voltage" | "zero" | "koi" | "supswap-v3" | "zkswap" | "thirdtrade" | "uniswap-v2" | "velodrome" | "aerodrome" | "balancer" | "curve" | "cross_curve" | "curveNPool" | "aura" | "akron" | "beefy" | "dragonswap" | "poolside" | "syncswap-v3" | "neptune" | "zkSwapThreePool" | "syncswap" | "rfx" | "radiant" | "aave" | "euler" | "gearbox" | "compound" | "sturdy" | "frax" | "ionic" | "moonwell" | "fluid" | "silo" | "coumpound" | "dolomite" | "badger" | "ajna" | "layerbank" | "ion" | "venus" | "woofi" | "reactor_fusion" | "eigenlayer" | "vest" | "zerolend" | "hyperdrive" | undefined;
|
79
79
|
depositUrl: any;
|
80
80
|
tags: string[];
|
81
81
|
}>;
|
@@ -18,6 +18,7 @@ import { getEigenLayerMetadata } from "./subservices/getEigenLayerMetadata.servi
|
|
18
18
|
import { getErc20Metadata } from "./subservices/getErc20Metadata.service";
|
19
19
|
import { getErc20SnapshotMetadata } from "./subservices/getErc20SnapshotMetadata.service";
|
20
20
|
import { getEulerMetadata } from "./subservices/getEulerMetadata.service";
|
21
|
+
import { getHyperdriveMetadata } from "./subservices/getHyperdriveMetadata.service";
|
21
22
|
import { getJsonAirdropMetadata } from "./subservices/getJsonAirDropMetadata.service";
|
22
23
|
import { getMorphoMetadata } from "./subservices/getMorphoMetadata.service";
|
23
24
|
import { getRadiantMetadata } from "./subservices/getRadiantMetadata.service";
|
@@ -81,6 +82,9 @@ export class OpportunityService {
|
|
81
82
|
return getVestMetaData(chainId, campaignParams);
|
82
83
|
case "EULER":
|
83
84
|
return getEulerMetadata(chainId, campaign.campaignId, campaign.subType, campaign.rewardTokenAddress, campaign.amount, campaignParams);
|
85
|
+
case "HYPERDRIVELOGPROCESSOR":
|
86
|
+
case "HYPERDRIVELOGFIXPROCESSOR":
|
87
|
+
return getHyperdriveMetadata(chainId, campaign.subType, campaignParams);
|
84
88
|
case "INVALID":
|
85
89
|
return {
|
86
90
|
name: "Invalid Campaigns",
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import type { ChainId, HyperDriveLogCampaign } from "@sdk";
|
2
|
+
import type { OpportunityMetadata } from "../opportunity.model";
|
3
|
+
export declare const getHyperdriveMetadata: (chainId: ChainId, campaignSubType: HyperDriveLogCampaign["campaignSubType"], params: HyperDriveLogCampaign["campaignParameters"]) => Promise<OpportunityMetadata>;
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { OpportunityAction } from "../../../../../database/api/.generated";
|
2
|
+
export const getHyperdriveMetadata = async (chainId, campaignSubType, params) => {
|
3
|
+
const subtypes = [
|
4
|
+
{ name: "Add Liquidity on", action: OpportunityAction.LP },
|
5
|
+
{ name: "Open Long on", action: OpportunityAction.LONG },
|
6
|
+
{ name: "Open Short on", action: OpportunityAction.SHORT },
|
7
|
+
];
|
8
|
+
const subtype = subtypes[campaignSubType];
|
9
|
+
return {
|
10
|
+
action: subtype.action,
|
11
|
+
name: [subtype.name, params.symbolTargetToken].join(" "),
|
12
|
+
tokens: [{ chainId, address: params.targetToken }],
|
13
|
+
mainProtocol: "hyperdrive",
|
14
|
+
};
|
15
|
+
};
|
@@ -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
|
});
|
@@ -182,7 +182,10 @@ export declare enum modeCampaigns {
|
|
182
182
|
Kim_Ichi_SSD_WETH_MODE_Mode = "Kim Ichi SSD WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
|
183
183
|
Kim_Steer_CRS_V2_WETH_MODE_Mode = "Kim Steer CRS V2 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
|
184
184
|
Kim_Gamma_WETH_MODE_Mode = "Kim Gamma Narrow WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
|
185
|
-
Kim_V4_WETH_MODE_Mode = "Kim V4 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55"
|
185
|
+
Kim_V4_WETH_MODE_Mode = "Kim V4 WETH/Mode 0x8cfE2A02dfBAbC56aE7e573170E35f88A38BeA55",
|
186
|
+
Ironclad_Borrow_uniBTC_Mode = "Ironclad Borrow uniBTC 0x80215c38DCb6ae91520F8251A077c124e7259688",
|
187
|
+
Bedrock_Ionic_Supply_ionuniBTC_Mode = "Bedrock Ionic Supply uniBTC 0xa48750877a83f7dec11f722178c317b54a44d142",
|
188
|
+
Bedrock_Ironclad_Supply_uniBTC_Mode = "Bedrock Ironclad Supply uniBTC 0x0F041cf2ae959f39215EFfB50d681Df55D4d90B1"
|
186
189
|
}
|
187
190
|
declare const ModeInterfaceCampaigns: {
|
188
191
|
[key in modeCampaigns]: partialConfig;
|