Skip to content

Commit

Permalink
feat: sync latest dev
Browse files Browse the repository at this point in the history
  • Loading branch information
Picodes committed Dec 19, 2024
2 parents fc96fef + 9920a89 commit ec30518
Show file tree
Hide file tree
Showing 57 changed files with 1,265 additions and 417 deletions.
4 changes: 4 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"recommendations": [],
"unwantedRecommendations": []
}
18 changes: 18 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"editor.codeActionsOnSave": {
"source.organizeImports.biome": "explicit"
},
"editor.defaultFormatter": "biomejs.biome",
"[typescript]": {
"editor.defaultFormatter": "biomejs.biome"
},
"[javascript]": {
"editor.defaultFormatter": "biomejs.biome"
},
"editor.formatOnSave": true,
"editor.formatOnType": false,
"editor.foldingImportsByDefault": true,
"editor.foldingHighlight": true,
"editor.foldingStrategy": "auto",
"files.eol": "\n"
}
Binary file modified bun.lockb
Binary file not shown.
24 changes: 14 additions & 10 deletions merkl.config.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { createColoring } from "dappkit";
import { createConfig } from "src/config/type";
import hero from "src/customer/assets/images/hero.jpg?url";
import { v4 as uuidv4 } from "uuid";
import { http, createClient, custom } from "viem";

import {
arbitrum,
astar,
Expand Down Expand Up @@ -44,9 +46,11 @@ import { coinbaseWallet, walletConnect } from "wagmi/connectors";
export default createConfig({
appName: "Puffer",
modes: ["light"],
defaultTheme: "puffer",
deposit: false,
defaultTheme: "ignite",
tags: ["puffer"],
opportunityNavigationMode: "direct",
rewardsNavigationMode: "chain",
deposit: true,
themes: {
ignite: {
base: createColoring(["#2A35BD", "#BFFF37", "#FFFFFF"], ["#2A35BD", "#BFFF37", "#FFFFFF"]),
Expand Down Expand Up @@ -89,43 +93,43 @@ export default createConfig({
home: {
icon: "RiHomeFill",
route: "/",
key: crypto.randomUUID(),
key: uuidv4(),
},
opportunities: {
icon: "RiPlanetFill",
route: "/opportunities",
key: crypto.randomUUID(),
key: uuidv4(),
},
// protocols: {
// icon: "RiVipCrown2Fill",
// route: "/protocols",
// key: crypto.randomUUID(),
// key: uuidv4(),
// },
// bridge: {
// icon: "RiCompassesLine",
// route: "/bridge",
// key: crypto.randomUUID(),
// key: uuidv4(),
// },
docs: {
icon: "RiFile4Fill",
external: true,
route: "https://docs.merkl.xyz/",
key: crypto.randomUUID(),
key: uuidv4(),
},
faq: {
icon: "RiQuestionFill",
route: "/faq",
key: crypto.randomUUID(),
key: uuidv4(),
},
// terms: {
// icon: "RiCompassesLine",
// route: "/terms",
// key: crypto.randomUUID(),
// key: uuidv4(),
// },
// privacy: {
// icon: "RiInformationFill",
// route: "/privacy",
// key: crypto.randomUUID(),
// key: uuidv4(),
// },
},
socials: {
Expand Down
7 changes: 3 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,13 @@
"serve": "remix-serve ./build/server/index.js",
"typecheck": "tsc"
},
"workspaces": [
"packages/*"
],
"workspaces": ["packages/*"],
"dependencies": {
"@acab/ecsstatic": "^0.8.0",
"@ariakit/react": "^0.4.12",
"@elysiajs/eden": "^1.1.3",
"@emotion/css": "^11.13.4",
"@merkl/api": "0.10.156",
"@merkl/api": "0.10.188",
"@radix-ui/react-accordion": "^1.2.1",
"@radix-ui/react-scroll-area": "^1.2.0",
"@remix-run/dev": "^2.11.2",
Expand Down Expand Up @@ -49,6 +47,7 @@
"tailwindcss": "^3.4.12",
"tailwindcss-animate": "^1.0.7",
"typedoc": "^0.26.7",
"uuid": "^11.0.3",
"viem": "2.21.54",
"vite-plugin-dts": "^4.2.1",
"wagmi": "^2.12.29",
Expand Down
43 changes: 0 additions & 43 deletions src/api/opportunity/opportunity.ts

This file was deleted.

4 changes: 2 additions & 2 deletions src/api/services/campaigns/campaign.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ export abstract class CampaignService {
const action = new URL(request.url).searchParams.get("action");
const chainId = new URL(request.url).searchParams.get("chain");
const page = new URL(request.url).searchParams.get("page");

const test = new URL(request.url).searchParams.get("test") ?? undefined;
const items = new URL(request.url).searchParams.get("items");
const search = new URL(request.url).searchParams.get("search");
const [sort, order] = new URL(request.url).searchParams.get("sort")?.split("-") ?? [];

const filters = Object.assign(
{ status, action, chainId, items, sort, order, name: search, page },
{ status, action, chainId, items, sort, order, name: search, page, test },
override ?? {},
page !== null && { page: Number(page) - 1 },
);
Expand Down
20 changes: 20 additions & 0 deletions src/api/services/claims.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { api } from "../index.server";
import { fetchWithLogs } from "../utils";

export abstract class ClaimsService {
static async #fetch<R, T extends { data: R; status: number; response: Response }>(
call: () => Promise<T>,
resource = "Claims",
): Promise<NonNullable<T["data"]>> {
const { data, status } = await fetchWithLogs(call);

if (status === 404) throw new Response(`${resource} not found`, { status });
if (status === 500) throw new Response(`${resource} unavailable`, { status });
if (data == null) throw new Response(`${resource} unavailable`, { status });
return data;
}

static async getForUser(address: string) {
return await ClaimsService.#fetch(async () => api.v4.claims({ address }).get());
}
}
56 changes: 56 additions & 0 deletions src/api/services/interaction.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { api as clientApi } from "src/api/index.client";
import { fetchWithLogs } from "../utils";

export abstract class InteractionService {
static async #fetch<R, T extends { data: R; status: number; response: Response }>(
call: () => Promise<T>,
resource = "Chain",
): Promise<NonNullable<T["data"]>> {
const { data, status } = await fetchWithLogs(call);

if (status === 404) throw new Response(`${resource} not found`, { status });
if (status === 500) throw new Response(`${resource} unavailable`, { status });
if (data == null) throw new Response(`${resource} unavailable`, { status });
return data;
}

/**
* Client side
* @param chainId
* @param protocolId
* @param identifier
*/
static async getTarget(chainId: number, protocolId: string, identifier: string) {
const targets = await InteractionService.#fetch(() =>
clientApi.v4.interaction.targets.get({
query: { chainId, protocolId, identifier },
}),
);

//TODO: opportunity/:id/target instead of taking the first result and expecting unique
return targets?.[0];
}

/**
* Client side
*/
static async getTransaction(payload: Parameters<typeof clientApi.v4.interaction.transaction.get>[0]["query"]) {
const transaction = await InteractionService.#fetch(() =>
clientApi.v4.interaction.transaction.get({
query: payload,
}),
);

return transaction;
}

static async getBalances(chainId: number, address: string) {
const tokens = await InteractionService.#fetch(() =>
clientApi.v4.tokens.balances.get({
query: { chainId: chainId, userAddress: address },
}),
);

return tokens;
}
}
20 changes: 20 additions & 0 deletions src/api/services/liquidity.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { api } from "../index.server";
import { fetchWithLogs } from "../utils";

export abstract class LiquidityService {
static async #fetch<R, T extends { data: R; status: number; response: Response }>(
call: () => Promise<T>,
resource = "Positions",
): Promise<NonNullable<T["data"]>> {
const { data, status } = await fetchWithLogs(call);

if (status === 404) throw new Response(`${resource} not found`, { status });
if (status === 500) throw new Response(`${resource} unavailable`, { status });
if (data == null) throw new Response(`${resource} unavailable`, { status });
return data;
}

static async getForUser(query: Parameters<typeof api.v4.liquidity.index.get>["0"]["query"]) {
return await LiquidityService.#fetch(async () => api.v4.liquidity.index.get({ query }));
}
}
3 changes: 2 additions & 1 deletion src/api/services/opportunity/opportunity.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export abstract class OpportunityService {

//TODO: updates tags to take an array
if (config.tags && !opportunityWithCampaigns.tags.includes(config.tags?.[0]))
throw new Response("Opportunity inacessible", { status: 403 });
throw new Response("Opportunity inaccessible", { status: 403 });

return opportunityWithCampaigns;
}
Expand Down Expand Up @@ -96,6 +96,7 @@ export abstract class OpportunityService {
sort: url.searchParams.get("sort")?.split("-")[0],
order: url.searchParams.get("sort")?.split("-")[1],
name: url.searchParams.get("search") ?? undefined,
test: url.searchParams.get("test") ?? undefined,
page: url.searchParams.get("page") ? Math.max(Number(url.searchParams.get("page")) - 1, 0) : undefined,
...override,
};
Expand Down
22 changes: 18 additions & 4 deletions src/api/services/protocol.service.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,33 @@
import config from "merkl.config";
import { api } from "../index.server";
import { fetchWithLogs } from "../utils";

export abstract class ProtocolService {
// ─── Get Many Protocols ──────────────────────────────────────────────

static async get(query: Parameters<typeof api.v4.protocols.index.get>[0]["query"]) {
return await ProtocolService.#fetch(async () => api.v4.protocols.index.get({ query }));
return await ProtocolService.#fetch(async () =>
api.v4.protocols.index.get({
query: Object.assign({ ...query }, config.tags?.[0] ? { tags: config.tags?.[0] } : {}),
}),
);
}

// ─── Get Many Protocols from request ──────────────────────────────────

static async getManyFromRequest(request: Request) {
const query = ProtocolService.#getQueryFromRequest(request);
const protocols = await ProtocolService.#fetch(async () => api.v4.protocols.index.get({ query }));
const count = await ProtocolService.#fetch(async () => api.v4.protocols.count.get({ query }));
const query: Parameters<typeof api.v4.protocols.index.get>[0]["query"] =
ProtocolService.#getQueryFromRequest(request);
const protocols = await ProtocolService.#fetch(async () =>
api.v4.protocols.index.get({
query: Object.assign({ ...query }, config.tags?.[0] ? { tags: config.tags?.[0] } : {}),
}),
);
const count = await ProtocolService.#fetch(async () =>
api.v4.protocols.count.get({
query: Object.assign({ ...query }, config.tags?.[0] ? { tags: config.tags?.[0] } : {}),
}),
);

return { protocols, count };
}
Expand Down
Loading

0 comments on commit ec30518

Please sign in to comment.