From ba5cb29a97461095b951b68697da9f7ef3a52708 Mon Sep 17 00:00:00 2001 From: KONFeature Date: Wed, 24 Jul 2024 17:12:49 +0200 Subject: [PATCH 1/8] =?UTF-8?q?=E2=9C=A8=20Introduce=20campaign=20stats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 1 + packages/ponder/abis/frak-interaction-abis.ts | 70 ++++++++++++--- packages/ponder/ponder-env.d.ts | 1 + packages/ponder/ponder.config.ts | 2 + packages/ponder/ponder.schema.ts | 54 +++++++++--- packages/ponder/src/campaignReward.ts | 24 ++++- packages/ponder/src/pressInteractions.ts | 37 ++++---- packages/ponder/src/referralInteractions.ts | 55 ++++++++++++ packages/ponder/src/stats.ts | 87 +++++++++++++++++++ packages/ponder/tsconfig.json | 4 - 10 files changed, 288 insertions(+), 47 deletions(-) create mode 100644 packages/ponder/src/referralInteractions.ts create mode 100644 packages/ponder/src/stats.ts diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a1bb818..d87e8c3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,6 +6,7 @@ on: branches: - main - staging + - feat/campaign-stats concurrency: group: ${{ github.ref }}-deploy diff --git a/packages/ponder/abis/frak-interaction-abis.ts b/packages/ponder/abis/frak-interaction-abis.ts index 2102917..63f6745 100644 --- a/packages/ponder/abis/frak-interaction-abis.ts +++ b/packages/ponder/abis/frak-interaction-abis.ts @@ -1251,17 +1251,6 @@ export const dappInteractionFacetAbi = [ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// export const pressInteractionFacetAbi = [ - { - type: "constructor", - inputs: [ - { - name: "_referralRegistry", - internalType: "contract ReferralRegistry", - type: "address", - }, - ], - stateMutability: "nonpayable", - }, { type: "fallback", stateMutability: "nonpayable" }, { type: "function", @@ -1329,3 +1318,62 @@ export const pressInteractionFacetAbi = [ }, { type: "error", inputs: [], name: "UnknownInteraction" }, ] as const; + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ReferralFeatureFacet +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const referralFeatureFacetAbi = [ + { + type: "constructor", + inputs: [ + { + name: "_referralRegistry", + internalType: "contract ReferralRegistry", + type: "address", + }, + ], + stateMutability: "nonpayable", + }, + { type: "fallback", stateMutability: "nonpayable" }, + { + type: "function", + inputs: [], + name: "contentTypeDenominator", + outputs: [{ name: "", internalType: "uint8", type: "uint8" }], + stateMutability: "pure", + }, + { + type: "event", + anonymous: false, + inputs: [ + { + name: "user", + internalType: "address", + type: "address", + indexed: true, + }, + ], + name: "ReferralLinkCreation", + }, + { + type: "event", + anonymous: false, + inputs: [ + { + name: "user", + internalType: "address", + type: "address", + indexed: true, + }, + { + name: "referrer", + internalType: "address", + type: "address", + indexed: true, + }, + ], + name: "UserReferred", + }, + { type: "error", inputs: [], name: "UnknownInteraction" }, +] as const; diff --git a/packages/ponder/ponder-env.d.ts b/packages/ponder/ponder-env.d.ts index f8e7347..03126bf 100644 --- a/packages/ponder/ponder-env.d.ts +++ b/packages/ponder/ponder-env.d.ts @@ -21,6 +21,7 @@ declare module "@/generated" { schema, name >; + export type ApiContext = Virtual.Drizzle; export type IndexingFunctionArgs = Virtual.IndexingFunctionArgs; export type Schema = Virtual.Schema; diff --git a/packages/ponder/ponder.config.ts b/packages/ponder/ponder.config.ts index a840307..54919aa 100644 --- a/packages/ponder/ponder.config.ts +++ b/packages/ponder/ponder.config.ts @@ -9,6 +9,7 @@ import { contentInteractionManagerAbi, dappInteractionFacetAbi, pressInteractionFacetAbi, + referralFeatureFacetAbi, } from "./abis/frak-interaction-abis"; import { contentRegistryAbi } from "./abis/frak-registry-abis"; @@ -67,6 +68,7 @@ export default createConfig({ contentInteractionDiamondAbi, pressInteractionFacetAbi, dappInteractionFacetAbi, + referralFeatureFacetAbi, ]), factory: { address: "0xFE0717cACd6Fff3001EdD3f360Eb2854F54861DD", diff --git a/packages/ponder/ponder.schema.ts b/packages/ponder/ponder.schema.ts index b885b16..e164dd2 100644 --- a/packages/ponder/ponder.schema.ts +++ b/packages/ponder/ponder.schema.ts @@ -44,21 +44,40 @@ export default createSchema((p) => ({ }), // Campaign related - Campaign: p.createTable({ - id: p.hex(), + Campaign: p.createTable( + { + id: p.hex(), - name: p.string(), - version: p.string(), + name: p.string(), + version: p.string(), - contentId: p.bigint().references("Content.id"), - content: p.one("contentId"), + contentId: p.bigint().references("Content.id"), + content: p.one("contentId"), + + attached: p.boolean(), + + attachTimestamp: p.bigint(), + detachTimestamp: p.bigint().optional(), + + capResets: p.many("CampaignCapReset.campaignId"), + }, + { + contentIndex: p.index("contentId"), + } + ), + PressCampaignStats: p.createTable({ + id: p.hex(), - attached: p.boolean(), + campaignId: p.hex().references("Campaign.id"), + campaign: p.one("campaignId"), - attachTimestamp: p.bigint(), - detachTimestamp: p.bigint().optional(), + totalInteractions: p.bigint(), + openInteractions: p.bigint(), + readInteractions: p.bigint(), + referredInteractions: p.bigint(), + createReferredLinkInteractions: p.bigint(), - capResets: p.many("CampaignCapReset.campaignId"), + totalRewards: p.bigint(), }), CampaignCapReset: p.createTable( { @@ -76,8 +95,8 @@ export default createSchema((p) => ({ } ), - // Press events - PressEvent: p.createTable( + // Interaction events + InteractionEvent: p.createTable( { id: p.string(), @@ -85,7 +104,7 @@ export default createSchema((p) => ({ interaction: p.one("interactionId"), user: p.hex(), - type: p.enum("PressEventType"), + type: p.enum("InteractionEventType"), data: p.json(), timestamp: p.bigint(), @@ -98,7 +117,14 @@ export default createSchema((p) => ({ } ), - PressEventType: p.createEnum(["OPEN_ARTICLE", "READ_ARTICLE", "REFERRED"]), + InteractionEventType: p.createEnum([ + // Referral type + "REFERRED", + "CREATE_REFERRAL_LINK", + // Press type + "OPEN_ARTICLE", + "READ_ARTICLE", + ]), // Rewards related stuff RewardingContract: p.createTable( diff --git a/packages/ponder/src/campaignReward.ts b/packages/ponder/src/campaignReward.ts index ed4af8b..dde2ca5 100644 --- a/packages/ponder/src/campaignReward.ts +++ b/packages/ponder/src/campaignReward.ts @@ -3,7 +3,8 @@ import type { Address } from "viem"; import { referralCampaignAbi } from "../abis/frak-campaign-abis"; ponder.on("Campaigns:RewardAdded", async ({ event, context }) => { - const { RewardingContract, Reward, RewardAddedEvent } = context.db; + const { RewardingContract, Reward, RewardAddedEvent, PressCampaignStats } = + context.db; // Try to find a rewarding contract for the given event emitter const rewardingContract = await getRewardingContract({ @@ -47,6 +48,27 @@ ponder.on("Campaigns:RewardAdded", async ({ event, context }) => { timestamp: event.block.timestamp, }, }); + + // Update the current campaigns stats for the distributed amount + await PressCampaignStats.upsert({ + id: event.log.address, + create: { + campaignId: event.log.address, + totalInteractions: 0n, + openInteractions: 0n, + readInteractions: 0n, + referredInteractions: 0n, + createReferredLinkInteractions: 0n, + totalRewards: 0n, + }, + // Update the given field by incrementing them + update: ({ current }) => { + return { + ...current, + totalRewards: current.totalRewards + (event.args.amount ?? 0n), + }; + }, + }); }); ponder.on("Campaigns:RewardClaimed", async ({ event, context }) => { diff --git a/packages/ponder/src/pressInteractions.ts b/packages/ponder/src/pressInteractions.ts index a3e2515..4076368 100644 --- a/packages/ponder/src/pressInteractions.ts +++ b/packages/ponder/src/pressInteractions.ts @@ -1,10 +1,11 @@ import { ponder } from "@/generated"; +import { increaseCampaignsInteractions } from "./stats"; ponder.on("ContentInteraction:ArticleRead", async ({ event, context }) => { - const { PressEvent } = context.db; + const { InteractionEvent } = context.db; // Insert the press event - await PressEvent.create({ + await InteractionEvent.create({ id: event.log.id, data: { interactionId: event.log.address, @@ -14,12 +15,21 @@ ponder.on("ContentInteraction:ArticleRead", async ({ event, context }) => { data: { articleId: event.args.articleId }, }, }); + + // Update the current campaigns stats + await increaseCampaignsInteractions({ + interactionEmitter: event.log.address, + context, + increments: { + readInteractions: 1n, + }, + }); }); ponder.on("ContentInteraction:ArticleOpened", async ({ event, context }) => { - const { PressEvent } = context.db; + const { InteractionEvent } = context.db; // Insert the press event - await PressEvent.create({ + await InteractionEvent.create({ id: event.log.id, data: { interactionId: event.log.address, @@ -29,20 +39,13 @@ ponder.on("ContentInteraction:ArticleOpened", async ({ event, context }) => { data: { articleId: event.args.articleId }, }, }); -}); - -ponder.on("ContentInteraction:UserReferred", async ({ event, context }) => { - const { PressEvent } = context.db; - // Insert the press event - await PressEvent.create({ - id: event.log.id, - data: { - interactionId: event.log.address, - user: event.args.user, - type: "REFERRED", - timestamp: event.block.timestamp, - data: { referrer: event.args.referrer }, + // Update the current campaigns stats + await increaseCampaignsInteractions({ + interactionEmitter: event.log.address, + context, + increments: { + openInteractions: 1n, }, }); }); diff --git a/packages/ponder/src/referralInteractions.ts b/packages/ponder/src/referralInteractions.ts new file mode 100644 index 0000000..c456ae9 --- /dev/null +++ b/packages/ponder/src/referralInteractions.ts @@ -0,0 +1,55 @@ +import { ponder } from "@/generated"; +import { increaseCampaignsInteractions } from "./stats"; + +ponder.on( + "ContentInteraction:ReferralLinkCreation", + async ({ event, context }) => { + const { InteractionEvent } = context.db; + + // Insert the press event + await InteractionEvent.create({ + id: event.log.id, + data: { + interactionId: event.log.address, + user: event.args.user, + type: "CREATE_REFERRAL_LINK", + timestamp: event.block.timestamp, + data: undefined, + }, + }); + + // Update the current campaigns stats + await increaseCampaignsInteractions({ + interactionEmitter: event.log.address, + context, + increments: { + createReferredLinkInteractions: 1n, + }, + }); + } +); + +ponder.on("ContentInteraction:UserReferred", async ({ event, context }) => { + const { InteractionEvent } = context.db; + + // Insert the press event + await InteractionEvent.create({ + id: event.log.id, + data: { + interactionId: event.log.address, + user: event.args.user, + type: "REFERRED", + timestamp: event.block.timestamp, + data: { referrer: event.args.referrer }, + }, + }); + + // Update the current campaigns stats + await increaseCampaignsInteractions({ + interactionEmitter: event.log.address, + context, + increments: { + referredInteractions: 1n, + }, + }); +}); diff --git a/packages/ponder/src/stats.ts b/packages/ponder/src/stats.ts new file mode 100644 index 0000000..8226d96 --- /dev/null +++ b/packages/ponder/src/stats.ts @@ -0,0 +1,87 @@ +import type { Context, Schema } from "@/generated"; +import type { Address } from "viem"; + +/** + * Get the rewarding contract for the given event emitter + * @param interactionContract + * @param context + * @param increments fields to increments + */ +export async function increaseCampaignsInteractions({ + interactionEmitter, + context, + increments, +}: { + interactionEmitter: Address; + context: Context; + increments: Partial< + Pick< + Schema["PressCampaignStats"], + | "openInteractions" + | "readInteractions" + | "referredInteractions" + | "createReferredLinkInteractions" + > + >; +}) { + const { ContentInteractionContract, Campaign, PressCampaignStats } = + context.db; + + // Find the interaction contract + const interactionContract = await ContentInteractionContract.findUnique({ + id: interactionEmitter, + }); + + if (!interactionContract) { + return; + } + + // Find all the associated campaigns, of referral type, that are attached + const campaigns = await Campaign.findMany({ + where: { + contentId: interactionContract.contentId, + name: "frak.campaign.referral", + attached: true, + }, + }); + if (!campaigns.items.length) { + return; + } + + // Perform the increments + // todo: Should use an `updateMany` if we are sure that campaign stats are created + for (const campaign of campaigns.items) { + // Create the stats if not found + await PressCampaignStats.upsert({ + id: campaign, + create: { + campaignId: campaign, + totalInteractions: 0n, + openInteractions: 0n, + readInteractions: 0n, + referredInteractions: 0n, + createReferredLinkInteractions: 0n, + totalRewards: 0n, + }, + // Update the given field by incrementing them + update: ({ current }) => { + return { + ...current, + totalInteractions: current.totalInteractions + 1n, + openInteractions: + current.openInteractions + + (increments.openInteractions ?? 0n), + readInteractions: + current.readInteractions + + (increments.readInteractions ?? 0n), + referredInteractions: + current.referredInteractions + + (increments.referredInteractions ?? 0n), + createReferredLinkInteractions: + current.createReferredLinkInteractions + + (increments.createReferredLinkInteractions ?? 0n), + }; + }, + }); + } +} diff --git a/packages/ponder/tsconfig.json b/packages/ponder/tsconfig.json index 592b9a9..14f5ab3 100644 --- a/packages/ponder/tsconfig.json +++ b/packages/ponder/tsconfig.json @@ -1,24 +1,20 @@ { "compilerOptions": { - // Type checking "strict": true, "noUncheckedIndexedAccess": true, - // Interop constraints "verbatimModuleSyntax": false, "esModuleInterop": true, "isolatedModules": true, "allowSyntheticDefaultImports": true, "resolveJsonModule": true, - // Language and environment "moduleResolution": "bundler", "module": "ESNext", "noEmit": true, "lib": ["ES2022"], "target": "ES2022", - // Skip type checking for node modules "skipLibCheck": true }, "include": ["./**/*.ts"], From f105f45dcc1120909c906839d237ab48b9341166 Mon Sep 17 00:00:00 2001 From: KONFeature Date: Wed, 24 Jul 2024 17:14:16 +0200 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=90=9B=20Fix=20lockfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pnpm-lock.yaml | 125 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 89c4bf3..0621495 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,6 +27,37 @@ importers: specifier: ^5.3.2 version: 5.4.5 + packages/erpc: + dependencies: + '@ponder/core': + specifier: ^0.5.0 + version: 0.5.0(@aws-sdk/client-rds-data@3.583.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(@types/node@20.14.9)(hono@4.5.0)(typescript@5.4.5)(viem@1.21.4(typescript@5.4.5)(zod@3.23.8))(zod@3.23.8) + hono: + specifier: ^4.5.0 + version: 4.5.0 + viem: + specifier: ^1.19.9 + version: 1.21.4(typescript@5.4.5)(zod@3.23.8) + devDependencies: + '@biomejs/biome': + specifier: 1.8.3 + version: 1.8.3 + '@types/aws-lambda': + specifier: 8.10.138 + version: 8.10.138 + '@types/node': + specifier: ^20.14.9 + version: 20.14.9 + aws-cdk-lib: + specifier: 2.142.1 + version: 2.142.1(constructs@10.3.0) + sst: + specifier: 2.43.4 + version: 2.43.4(@aws-sdk/client-sso-oidc@3.616.0(@aws-sdk/client-sts@3.616.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3)(better-sqlite3@11.1.2)(pg@8.12.0) + typescript: + specifier: ^5.3.2 + version: 5.4.5 + packages/ponder: dependencies: '@ponder/core': @@ -4343,9 +4374,9 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.583.0(aws-crt@1.21.3) + '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) '@aws-sdk/core': 3.582.0 - '@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3) '@aws-sdk/middleware-host-header': 3.577.0 '@aws-sdk/middleware-logger': 3.577.0 '@aws-sdk/middleware-recursion-detection': 3.577.0 @@ -4515,6 +4546,52 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.583.0(aws-crt@1.21.3) + '@aws-sdk/core': 3.582.0 + '@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.583.0 + '@aws-sdk/region-config-resolver': 3.577.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.583.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.577.0(aws-crt@1.21.3) + '@smithy/config-resolver': 3.0.5 + '@smithy/core': 2.2.8 + '@smithy/fetch-http-handler': 3.2.2 + '@smithy/hash-node': 3.0.3 + '@smithy/invalid-dependency': 3.0.3 + '@smithy/middleware-content-length': 3.0.4 + '@smithy/middleware-endpoint': 3.0.5 + '@smithy/middleware-retry': 3.0.11 + '@smithy/middleware-serde': 3.0.3 + '@smithy/middleware-stack': 3.0.3 + '@smithy/node-config-provider': 3.1.4 + '@smithy/node-http-handler': 3.1.3 + '@smithy/protocol-http': 4.0.4 + '@smithy/smithy-client': 3.1.9 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.11 + '@smithy/util-defaults-mode-node': 3.0.11 + '@smithy/util-endpoints': 2.0.5 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.3 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 @@ -4678,6 +4755,23 @@ snapshots: '@smithy/util-stream': 3.1.1 tslib: 2.6.3 + '@aws-sdk/credential-provider-ini@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3)': + dependencies: + '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/credential-provider-env': 3.577.0 + '@aws-sdk/credential-provider-process': 3.577.0 + '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.1.4 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/credential-provider-ini@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)': dependencies: '@aws-sdk/client-sts': 3.583.0(aws-crt@1.21.3) @@ -4730,6 +4824,25 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-node@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3)': + dependencies: + '@aws-sdk/credential-provider-env': 3.577.0 + '@aws-sdk/credential-provider-http': 3.582.0 + '@aws-sdk/credential-provider-ini': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/credential-provider-process': 3.577.0 + '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.1.4 + '@smithy/property-provider': 3.1.3 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + '@aws-sdk/credential-provider-node@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)': dependencies: '@aws-sdk/credential-provider-env': 3.577.0 @@ -4842,6 +4955,14 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))': + dependencies: + '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3))': dependencies: '@aws-sdk/client-sts': 3.583.0(aws-crt@1.21.3) From 40080faa0496ed13055484876ddaebefa162d64b Mon Sep 17 00:00:00 2001 From: KONFeature Date: Wed, 24 Jul 2024 17:49:42 +0200 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=90=9B=20Fix=20campaign=20stats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/erpc/erpc.yaml | 28 +++++++++++++--------------- packages/ponder/src/stats.ts | 4 ++-- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/packages/erpc/erpc.yaml b/packages/erpc/erpc.yaml index d16208f..95e6922 100644 --- a/packages/erpc/erpc.yaml +++ b/packages/erpc/erpc.yaml @@ -2,12 +2,10 @@ logLevel: warn database: # todo: Should use the same postgres as the indexer but on a different schema evmJsonRpcCache: - driver: memory - # driver: postgresql - # postgresql: - # connectionUri: >- - # postgres://YOUR_USERNAME_HERE:YOUR_PASSWORD_HERE@your.postgres.hostname.here.com:5432/your_database_name - # table: rpc_cache + driver: postgresql + postgresql: + connectionUri: ${DATABASE_URL} + table: rpc_cache server: httpHost: 0.0.0.0 httpPort: 4000 @@ -24,15 +22,15 @@ projects: chainId: 421614 failsafe: timeout: - duration: 30s + duration: 120s retry: maxCount: 5 delay: 500ms - backoffMaxDelay: 10s - backoffFactor: 0.3 - jitter: 200ms + backoffMaxDelay: 20s + backoffFactor: 2 + jitter: 500ms hedge: - delay: 1000ms + delay: 2000ms maxCount: 2 # Arb - architecture: evm @@ -45,14 +43,14 @@ projects: maxCount: 5 delay: 500ms backoffMaxDelay: 10s - backoffFactor: 0.3 + backoffFactor: 0.5 jitter: 200ms hedge: delay: 1000ms maxCount: 2 upstreams: - id: alchemy-multi-chain - endpoint: alchemy://XXXX_YOUR_ALCHEMY_API_KEY_HERE_XXXX + endpoint: alchemy://${ALCHEMY_API_KEY} rateLimitBudget: global healthCheckGroup: default-hcg allowMethods: @@ -73,12 +71,12 @@ rateLimiters: - id: default-budget rules: - method: "*" - maxCount: 10000 + maxCount: 200 period: 1s healthChecks: groups: - id: default-hcg - checkInterval: 30s + checkInterval: 300s maxErrorRatePercent: 10 maxP90LatencyMs: 5s maxBlocksBehind: 5 \ No newline at end of file diff --git a/packages/ponder/src/stats.ts b/packages/ponder/src/stats.ts index 8226d96..a782e2a 100644 --- a/packages/ponder/src/stats.ts +++ b/packages/ponder/src/stats.ts @@ -53,9 +53,9 @@ export async function increaseCampaignsInteractions({ for (const campaign of campaigns.items) { // Create the stats if not found await PressCampaignStats.upsert({ - id: campaign, + id: campaign.id, create: { - campaignId: campaign, + campaignId: campaign.id, totalInteractions: 0n, openInteractions: 0n, readInteractions: 0n, From fa0ff6185f9ed4cccbce40881cab1298f84ff942 Mon Sep 17 00:00:00 2001 From: KONFeature Date: Wed, 24 Jul 2024 19:06:05 +0200 Subject: [PATCH 4/8] =?UTF-8?q?=E2=9C=A8=20Add=20erpc=20service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 15 +++++- iac/Config.ts | 27 +++++++++++ iac/Erpc.ts | 90 ++++++++++++++++++++++++++++++++++++ iac/Indexer.ts | 58 +++-------------------- iac/utils.ts | 34 ++++++++++++++ packages/erpc/erpc.yaml | 10 ++-- packages/ponder/src/stats.ts | 4 ++ sst.config.ts | 4 ++ 8 files changed, 184 insertions(+), 58 deletions(-) create mode 100644 iac/Config.ts create mode 100644 iac/Erpc.ts create mode 100644 iac/utils.ts diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d87e8c3..a34798a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -68,7 +68,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: "🔨 Prebuild docker dependencies" + - name: "🔨 Build Ponder docker dependencies" uses: docker/build-push-action@v6 with: context: ./packages/ponder @@ -81,6 +81,19 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max + - name: "🔨 Build ERPC docker dependencies" + uses: docker/build-push-action@v6 + with: + context: ./packages/erpc + platforms: linux/arm64 + push: true + tags: | + 262732185023.dkr.ecr.eu-west-1.amazonaws.com/erpc:latest + 262732185023.dkr.ecr.eu-west-1.amazonaws.com/erpc:${{ github.sha }} + # Github actions cache + cache-from: type=gha + cache-to: type=gha,mode=max + - name: "🚀 SST Deploy" run: | echo "Deploying with stage: prod" diff --git a/iac/Config.ts b/iac/Config.ts new file mode 100644 index 0000000..209458a --- /dev/null +++ b/iac/Config.ts @@ -0,0 +1,27 @@ +import { Config, type StackContext } from "sst/constructs"; + +/** + * Simple stack for the config + * @param stack + * @constructor + */ +export function ConfigStack({ stack }: StackContext) { + // RPCs + const rpcSecrets = [ + // BlockPi rpcs + new Config.Secret(stack, "BLOCKPI_API_KEY_ARB_SEPOLIA"), + // Alchemy RPC + new Config.Secret(stack, "ALCHEMY_API_KEY"), + ]; + + // Databases + const ponderDb = new Config.Secret(stack, "DATABASE_URL"); + const erpcDb = new Config.Secret(stack, "ERPC_DATABASE_URL"); + + // Return all of that + return { + rpcSecrets, + ponderDb, + erpcDb, + }; +} diff --git a/iac/Erpc.ts b/iac/Erpc.ts new file mode 100644 index 0000000..082a7c3 --- /dev/null +++ b/iac/Erpc.ts @@ -0,0 +1,90 @@ +import { Repository } from "aws-cdk-lib/aws-ecr"; +import { ContainerImage } from "aws-cdk-lib/aws-ecs"; +import { Service, type StackContext, use } from "sst/constructs"; +import { ConfigStack } from "./Config"; +import { buildSecretsMap } from "./utils"; + +/** + * The CDK stack that will deploy the erpc service + * @param stack + * @constructor + */ +export function ErpcStack({ app, stack }: StackContext) { + // All the secrets env variable we will be using (in local you can just use a .env file) + const { rpcSecrets, erpcDb } = use(ConfigStack); + const secrets = [...rpcSecrets, erpcDb]; + + // Get our CDK secrets map + const cdkSecretsMap = buildSecretsMap(stack, secrets); + + // Get the container props of our prebuilt binaries + const containerRegistry = Repository.fromRepositoryAttributes( + stack, + "ErpcEcr", + { + repositoryArn: `arn:aws:ecr:eu-west-1:${app.account}:repository/erpc`, + repositoryName: "erpc", + } + ); + + const imageTag = process.env.COMMIT_SHA ?? "latest"; + console.log(`Will use the image ${imageTag}`); + const erpcImage = ContainerImage.fromEcrRepository( + containerRegistry, + imageTag + ); + + // The service itself + const erpcService = new Service(stack, "ErpcService", { + path: "packages/erpc", + port: 4000, + // Domain mapping + customDomain: { + domainName: "erpc.frak.id", + hostedZone: "frak.id", + }, + // Setup some capacity options + scaling: { + minContainers: 1, + maxContainers: 1, + cpuUtilization: 90, + memoryUtilization: 90, + }, + // Bind the secret we will be using + bind: secrets, + // Arm architecture (lower cost) + architecture: "arm64", + // Hardware config + cpu: "1 vCPU", + memory: "4 GB", + storage: "30 GB", + // Log retention + logRetention: "one_week", + // Set the right environment variables + environment: { + ERPC_LOG_LEVEL: "warn", + }, + cdk: { + // Customise fargate service to enable circuit breaker (if the new deployment is failing) + fargateService: { + circuitBreaker: { + enable: true, + }, + // Disable rolling update + desiredCount: 1, + minHealthyPercent: 0, + maxHealthyPercent: 100, + }, + // Directly specify the image position in the registry here + container: { + containerName: "erpc", + image: erpcImage, + secrets: cdkSecretsMap, + }, + }, + }); + + stack.addOutputs({ + erpcServiceId: erpcService.id, + }); +} diff --git a/iac/Indexer.ts b/iac/Indexer.ts index 54d01b9..5cf48fc 100644 --- a/iac/Indexer.ts +++ b/iac/Indexer.ts @@ -1,7 +1,8 @@ import { Repository } from "aws-cdk-lib/aws-ecr"; -import { ContainerImage, Secret } from "aws-cdk-lib/aws-ecs"; -import { StringParameter } from "aws-cdk-lib/aws-ssm"; -import { Config, Service, type Stack, type StackContext } from "sst/constructs"; +import { ContainerImage } from "aws-cdk-lib/aws-ecs"; +import { Service, type StackContext, use } from "sst/constructs"; +import { ConfigStack } from "./Config"; +import { buildSecretsMap } from "./utils"; /** * The CDK stack that will deploy the indexer service @@ -10,14 +11,8 @@ import { Config, Service, type Stack, type StackContext } from "sst/constructs"; */ export function IndexerStack({ app, stack }: StackContext) { // All the secrets env variable we will be using (in local you can just use a .env file) - const secrets = [ - // Db url - new Config.Secret(stack, "DATABASE_URL"), - // BlockPi rpcs - new Config.Secret(stack, "BLOCKPI_API_KEY_ARB_SEPOLIA"), - // Alchemy RPC - new Config.Secret(stack, "ALCHEMY_API_KEY"), - ]; + const { rpcSecrets, ponderDb } = use(ConfigStack); + const secrets = [...rpcSecrets, ponderDb]; // Get our CDK secrets map const cdkSecretsMap = buildSecretsMap(stack, secrets); @@ -96,45 +91,4 @@ export function IndexerStack({ app, stack }: StackContext) { stack.addOutputs({ indexerServiceId: indexerService.id, }); - - // Set up connections to database via the security group - /*const cluster = indexerService.cdk?.cluster; - if (cluster) { - // Get the security group for the database and link to it - const databaseSecurityGroup = SecurityGroup.fromLookupById( - stack, - "indexer-db-sg", - "sg-0cbbb98322234113f" - ); - databaseSecurityGroup.connections.allowFrom(cluster, Port.tcp(5432)); - }*/ -} - -/** - * Build a list of secret name to CDK secret, for direct binding - * @param stack - * @param secrets - */ -function buildSecretsMap(stack: Stack, secrets: Config.Secret[]) { - return secrets.reduce( - (acc, secret) => { - const isSpecificSecret = secret.name === "DATABASE_URL"; - const ssmPath = isSpecificSecret - ? `/indexer/sst/Secret/${secret.name}/value` - : `/sst/frak-indexer/.fallback/Secret/${secret.name}/value`; - - // Add the secret - const stringParameter = - StringParameter.fromSecureStringParameterAttributes( - stack, - `Secret${secret.name}`, - { - parameterName: ssmPath, - } - ); - acc[secret.name] = Secret.fromSsmParameter(stringParameter); - return acc; - }, - {} as Record - ); } diff --git a/iac/utils.ts b/iac/utils.ts new file mode 100644 index 0000000..3e98be2 --- /dev/null +++ b/iac/utils.ts @@ -0,0 +1,34 @@ +import { Secret } from "aws-cdk-lib/aws-ecs"; +import { StringParameter } from "aws-cdk-lib/aws-ssm"; +import type { Config, Stack } from "sst/constructs"; + +const specificSecretsList = ["ERPC_DATABASE_URL", "DATABASE_URL"]; + +/** + * Build a list of secret name to CDK secret, for direct binding + * @param stack + * @param secrets + */ +export function buildSecretsMap(stack: Stack, secrets: Config.Secret[]) { + return secrets.reduce( + (acc, secret) => { + const isSpecificSecret = specificSecretsList.includes(secret.name); + const ssmPath = isSpecificSecret + ? `/indexer/sst/Secret/${secret.name}/value` + : `/sst/frak-indexer/.fallback/Secret/${secret.name}/value`; + + // Add the secret + const stringParameter = + StringParameter.fromSecureStringParameterAttributes( + stack, + `Secret${secret.name}`, + { + parameterName: ssmPath, + } + ); + acc[secret.name] = Secret.fromSsmParameter(stringParameter); + return acc; + }, + {} as Record + ); +} diff --git a/packages/erpc/erpc.yaml b/packages/erpc/erpc.yaml index 95e6922..2c01445 100644 --- a/packages/erpc/erpc.yaml +++ b/packages/erpc/erpc.yaml @@ -1,4 +1,4 @@ -logLevel: warn +logLevel: ${ERPC_LOG_LEVEL} database: # todo: Should use the same postgres as the indexer but on a different schema evmJsonRpcCache: @@ -51,7 +51,7 @@ projects: upstreams: - id: alchemy-multi-chain endpoint: alchemy://${ALCHEMY_API_KEY} - rateLimitBudget: global + rateLimitBudget: alchemy healthCheckGroup: default-hcg allowMethods: - "alchemy_*" @@ -68,15 +68,15 @@ projects: jitter: 500ms rateLimiters: budgets: - - id: default-budget + - id: alchemy rules: - method: "*" maxCount: 200 period: 1s healthChecks: groups: - - id: default-hcg - checkInterval: 300s + - id: slow-hcg + checkInterval: 600s maxErrorRatePercent: 10 maxP90LatencyMs: 5s maxBlocksBehind: 5 \ No newline at end of file diff --git a/packages/ponder/src/stats.ts b/packages/ponder/src/stats.ts index a782e2a..23ca018 100644 --- a/packages/ponder/src/stats.ts +++ b/packages/ponder/src/stats.ts @@ -51,6 +51,10 @@ export async function increaseCampaignsInteractions({ // Perform the increments // todo: Should use an `updateMany` if we are sure that campaign stats are created for (const campaign of campaigns.items) { + if (!campaign.id) { + console.error("Campaign id not found", campaign); + continue; + } // Create the stats if not found await PressCampaignStats.upsert({ id: campaign.id, diff --git a/sst.config.ts b/sst.config.ts index db9a1a4..2a4806f 100644 --- a/sst.config.ts +++ b/sst.config.ts @@ -1,4 +1,6 @@ import type { SSTConfig } from "sst"; +import { ConfigStack } from "./iac/Config"; +import { ErpcStack } from "./iac/Erpc"; import { IndexerStack } from "./iac/Indexer"; export default { @@ -26,6 +28,8 @@ export default { tracing: "disabled", }); + app.stack(ConfigStack); + app.stack(ErpcStack); app.stack(IndexerStack); }, } satisfies SSTConfig; From 9a7927a896a366d4b1ff3ef9884b5704aac42642 Mon Sep 17 00:00:00 2001 From: KONFeature Date: Wed, 24 Jul 2024 20:11:37 +0200 Subject: [PATCH 5/8] =?UTF-8?q?=F0=9F=90=9B=20Error=20catching=20during=20?= =?UTF-8?q?stats=20+=20erpc=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iac/Erpc.ts | 11 ++++++ iac/Indexer.ts | 10 +++++ packages/erpc/erpc.yaml | 38 ++++++++++++++++--- packages/ponder/src/stats.ts | 71 ++++++++++++++++++++---------------- 4 files changed, 92 insertions(+), 38 deletions(-) diff --git a/iac/Erpc.ts b/iac/Erpc.ts index 082a7c3..0a89d06 100644 --- a/iac/Erpc.ts +++ b/iac/Erpc.ts @@ -1,3 +1,4 @@ +import { Duration } from "aws-cdk-lib"; import { Repository } from "aws-cdk-lib/aws-ecr"; import { ContainerImage } from "aws-cdk-lib/aws-ecs"; import { Service, type StackContext, use } from "sst/constructs"; @@ -80,6 +81,16 @@ export function ErpcStack({ app, stack }: StackContext) { containerName: "erpc", image: erpcImage, secrets: cdkSecretsMap, + healthCheck: { + command: [ + "CMD-SHELL", + "curl -f http://localhost:4001 || exit 1", + ], + interval: Duration.seconds(30), + timeout: Duration.seconds(15), + retries: 3, + startPeriod: Duration.seconds(30), + }, }, }, }); diff --git a/iac/Indexer.ts b/iac/Indexer.ts index 5cf48fc..21e7b9e 100644 --- a/iac/Indexer.ts +++ b/iac/Indexer.ts @@ -84,6 +84,16 @@ export function IndexerStack({ app, stack }: StackContext) { containerName: "indexer", image: indexerImage, secrets: cdkSecretsMap, + /*healthCheck: { + command: [ + "CMD-SHELL", + "curl -f http://localhost:42069/status || exit 1", + ], + interval: Duration.seconds(30), + timeout: Duration.seconds(5), + retries: 3, + startPeriod: Duration.seconds(30), + },*/ }, }, }); diff --git a/packages/erpc/erpc.yaml b/packages/erpc/erpc.yaml index 2c01445..288f96c 100644 --- a/packages/erpc/erpc.yaml +++ b/packages/erpc/erpc.yaml @@ -49,14 +49,40 @@ projects: delay: 1000ms maxCount: 2 upstreams: - - id: alchemy-multi-chain - endpoint: alchemy://${ALCHEMY_API_KEY} +# todo: Disabled for now since api endpoints seems to be fcked up +# - id: alchemy-multi-chain +# endpoint: alchemy://${ALCHEMY_API_KEY} +# type: evm-alchemy +# rateLimitBudget: alchemy +# healthCheckGroup: default-hcg +# failsafe: +# timeout: +# duration: 15s +# retry: +# maxCount: 2 +# delay: 1000ms +# backoffMaxDelay: 10s +# backoffFactor: 0.3 +# jitter: 500ms + - id: alchemy-arb-sepolia + endpoint: https://arb-sepolia.g.alchemy.com/v2/${ALCHEMY_API_KEY} + type: evm-alchemy + rateLimitBudget: alchemy + healthCheckGroup: default-hcg + failsafe: + timeout: + duration: 15s + retry: + maxCount: 2 + delay: 1000ms + backoffMaxDelay: 10s + backoffFactor: 0.3 + jitter: 500ms + - id: alchemy-arb + endpoint: https://arb-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY} + type: evm-alchemy rateLimitBudget: alchemy healthCheckGroup: default-hcg - allowMethods: - - "alchemy_*" - ignoreMethods: - - "trace_transaction" failsafe: timeout: duration: 15s diff --git a/packages/ponder/src/stats.ts b/packages/ponder/src/stats.ts index 23ca018..c4e2d8d 100644 --- a/packages/ponder/src/stats.ts +++ b/packages/ponder/src/stats.ts @@ -55,37 +55,44 @@ export async function increaseCampaignsInteractions({ console.error("Campaign id not found", campaign); continue; } - // Create the stats if not found - await PressCampaignStats.upsert({ - id: campaign.id, - create: { - campaignId: campaign.id, - totalInteractions: 0n, - openInteractions: 0n, - readInteractions: 0n, - referredInteractions: 0n, - createReferredLinkInteractions: 0n, - totalRewards: 0n, - }, - // Update the given field by incrementing them - update: ({ current }) => { - return { - ...current, - totalInteractions: current.totalInteractions + 1n, - openInteractions: - current.openInteractions + - (increments.openInteractions ?? 0n), - readInteractions: - current.readInteractions + - (increments.readInteractions ?? 0n), - referredInteractions: - current.referredInteractions + - (increments.referredInteractions ?? 0n), - createReferredLinkInteractions: - current.createReferredLinkInteractions + - (increments.createReferredLinkInteractions ?? 0n), - }; - }, - }); + try { + // Create the stats if not found + await PressCampaignStats.upsert({ + id: campaign.id, + create: { + campaignId: campaign.id, + totalInteractions: 0n, + openInteractions: 0n, + readInteractions: 0n, + referredInteractions: 0n, + createReferredLinkInteractions: 0n, + totalRewards: 0n, + }, + // Update the given field by incrementing them + update: ({ current }) => { + return { + ...current, + totalInteractions: current.totalInteractions + 1n, + openInteractions: + current.openInteractions + + (increments.openInteractions ?? 0n), + readInteractions: + current.readInteractions + + (increments.readInteractions ?? 0n), + referredInteractions: + current.referredInteractions + + (increments.referredInteractions ?? 0n), + createReferredLinkInteractions: + current.createReferredLinkInteractions + + (increments.createReferredLinkInteractions ?? 0n), + }; + }, + }); + } catch (error) { + console.error("Error while incrementing campaign stats", error, { + campaign, + increments, + }); + } } } From 2ac2db59e5ccab18db5050534a380f53de20bcf0 Mon Sep 17 00:00:00 2001 From: KONFeature Date: Wed, 24 Jul 2024 20:53:02 +0200 Subject: [PATCH 6/8] =?UTF-8?q?=F0=9F=90=9B=20Test=20without=20health=20ch?= =?UTF-8?q?eck?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iac/Erpc.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/iac/Erpc.ts b/iac/Erpc.ts index 0a89d06..5c7dfd4 100644 --- a/iac/Erpc.ts +++ b/iac/Erpc.ts @@ -81,7 +81,7 @@ export function ErpcStack({ app, stack }: StackContext) { containerName: "erpc", image: erpcImage, secrets: cdkSecretsMap, - healthCheck: { + /*healthCheck: { command: [ "CMD-SHELL", "curl -f http://localhost:4001 || exit 1", @@ -90,7 +90,7 @@ export function ErpcStack({ app, stack }: StackContext) { timeout: Duration.seconds(15), retries: 3, startPeriod: Duration.seconds(30), - }, + },*/ }, }, }); From 2d0a211803a26e3b3c97ebf37e15e67032311127 Mon Sep 17 00:00:00 2001 From: KONFeature Date: Wed, 24 Jul 2024 21:48:38 +0200 Subject: [PATCH 7/8] =?UTF-8?q?=F0=9F=90=9B=20Remove=20erpc=20stack=20for?= =?UTF-8?q?=20now?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sst.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sst.config.ts b/sst.config.ts index 2a4806f..251c54b 100644 --- a/sst.config.ts +++ b/sst.config.ts @@ -29,7 +29,7 @@ export default { }); app.stack(ConfigStack); - app.stack(ErpcStack); + // app.stack(ErpcStack); app.stack(IndexerStack); }, } satisfies SSTConfig; From 3f82f4848097264f6627caa80574d627fa878354 Mon Sep 17 00:00:00 2001 From: KONFeature Date: Thu, 25 Jul 2024 10:25:30 +0200 Subject: [PATCH 8/8] =?UTF-8?q?=F0=9F=9A=9A=20Reorg=20a=20few=20stuff=20wi?= =?UTF-8?q?thin=20ponder=20src?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 1 - iac/Erpc.ts | 1 - packages/erpc/package.json | 7 - packages/ponder/DockerfileBun | 33 -- packages/ponder/package.json | 4 +- .../src/{ => campaign}/campaignReset.ts | 0 .../src/{ => campaign}/campaignReward.ts | 2 +- .../src/{ => campaign}/interactionCampaign.ts | 2 +- .../{ => interactions}/pressInteractions.ts | 0 .../referralInteractions.ts | 0 .../ponder/src/{ => interactions}/stats.ts | 0 pnpm-lock.yaml | 516 +++++++++++------- sst.config.ts | 1 - 13 files changed, 320 insertions(+), 247 deletions(-) delete mode 100644 packages/ponder/DockerfileBun rename packages/ponder/src/{ => campaign}/campaignReset.ts (100%) rename packages/ponder/src/{ => campaign}/campaignReward.ts (98%) rename packages/ponder/src/{ => campaign}/interactionCampaign.ts (95%) rename packages/ponder/src/{ => interactions}/pressInteractions.ts (100%) rename packages/ponder/src/{ => interactions}/referralInteractions.ts (100%) rename packages/ponder/src/{ => interactions}/stats.ts (100%) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a34798a..1d55e2a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,7 +6,6 @@ on: branches: - main - staging - - feat/campaign-stats concurrency: group: ${{ github.ref }}-deploy diff --git a/iac/Erpc.ts b/iac/Erpc.ts index 5c7dfd4..87405fe 100644 --- a/iac/Erpc.ts +++ b/iac/Erpc.ts @@ -1,4 +1,3 @@ -import { Duration } from "aws-cdk-lib"; import { Repository } from "aws-cdk-lib/aws-ecr"; import { ContainerImage } from "aws-cdk-lib/aws-ecs"; import { Service, type StackContext, use } from "sst/constructs"; diff --git a/packages/erpc/package.json b/packages/erpc/package.json index 6c537e0..27350bb 100644 --- a/packages/erpc/package.json +++ b/packages/erpc/package.json @@ -3,19 +3,12 @@ "private": true, "type": "module", "scripts": { - "codegen": "ponder codegen", - "dev": "ponder dev", "format": "biome check --write .", "format:check": "biome check .", "lint": "biome lint .", - "serve": "ponder serve", - "start": "ponder start", "typecheck": "tsc" }, "dependencies": { - "@ponder/core": "^0.5.0", - "hono": "^4.5.0", - "viem": "^1.19.9" }, "devDependencies": { "@biomejs/biome": "1.8.3", diff --git a/packages/ponder/DockerfileBun b/packages/ponder/DockerfileBun deleted file mode 100644 index fe0287d..0000000 --- a/packages/ponder/DockerfileBun +++ /dev/null @@ -1,33 +0,0 @@ -# use the official Bun image -# see all versions at https://hub.docker.com/r/oven/bun/tags -FROM oven/bun:1-debian as base -WORKDIR /usr/src/app -COPY . . - -# install dependencies into temp directory -# this will cache them and speed up future builds -FROM base AS install -# install python and all the stuff required to build sqlite3 -RUN apt-get update -RUN apt-get install -y \ - python3 \ - build-essential -# Install dependencies -RUN mkdir -p /temp/dev -COPY package.json bun.lockb /temp/dev/ -# TODO: This is failing cause of better-sqlite3 dependency RAAAGH -RUN cd /temp/dev && bun install --frozen-lockfile - -# install with --production (exclude devDependencies) -RUN mkdir -p /temp/prod -COPY package.json bun.lockb /temp/prod/ -RUN cd /temp/prod && bun install --frozen-lockfile --production - -# copy production dependencies and source code into final image -FROM base AS release -COPY --from=install /temp/prod/node_modules node_modules - -# run the app -USER bun -EXPOSE 42069/tcp -ENTRYPOINT [ "bun", "run", "start" ] \ No newline at end of file diff --git a/packages/ponder/package.json b/packages/ponder/package.json index 27f2034..1705f21 100644 --- a/packages/ponder/package.json +++ b/packages/ponder/package.json @@ -13,8 +13,8 @@ "typecheck": "tsc" }, "dependencies": { - "@ponder/core": "^0.5.0", - "hono": "^4.5.0", + "@ponder/core": "^0.5.2", + "hono": "^4.5.1", "viem": "^1.19.9" }, "devDependencies": { diff --git a/packages/ponder/src/campaignReset.ts b/packages/ponder/src/campaign/campaignReset.ts similarity index 100% rename from packages/ponder/src/campaignReset.ts rename to packages/ponder/src/campaign/campaignReset.ts diff --git a/packages/ponder/src/campaignReward.ts b/packages/ponder/src/campaign/campaignReward.ts similarity index 98% rename from packages/ponder/src/campaignReward.ts rename to packages/ponder/src/campaign/campaignReward.ts index dde2ca5..c065b0a 100644 --- a/packages/ponder/src/campaignReward.ts +++ b/packages/ponder/src/campaign/campaignReward.ts @@ -1,6 +1,6 @@ import { type Context, ponder } from "@/generated"; import type { Address } from "viem"; -import { referralCampaignAbi } from "../abis/frak-campaign-abis"; +import { referralCampaignAbi } from "../../abis/frak-campaign-abis"; ponder.on("Campaigns:RewardAdded", async ({ event, context }) => { const { RewardingContract, Reward, RewardAddedEvent, PressCampaignStats } = diff --git a/packages/ponder/src/interactionCampaign.ts b/packages/ponder/src/campaign/interactionCampaign.ts similarity index 95% rename from packages/ponder/src/interactionCampaign.ts rename to packages/ponder/src/campaign/interactionCampaign.ts index 4f26e9e..3e09b40 100644 --- a/packages/ponder/src/interactionCampaign.ts +++ b/packages/ponder/src/campaign/interactionCampaign.ts @@ -1,6 +1,6 @@ import * as console from "node:console"; import { ponder } from "@/generated"; -import { interactionCampaignAbi } from "../abis/frak-campaign-abis"; +import { interactionCampaignAbi } from "../../abis/frak-campaign-abis"; ponder.on("ContentInteraction:CampaignAttached", async ({ event, context }) => { const { Campaign, ContentInteractionContract } = context.db; diff --git a/packages/ponder/src/pressInteractions.ts b/packages/ponder/src/interactions/pressInteractions.ts similarity index 100% rename from packages/ponder/src/pressInteractions.ts rename to packages/ponder/src/interactions/pressInteractions.ts diff --git a/packages/ponder/src/referralInteractions.ts b/packages/ponder/src/interactions/referralInteractions.ts similarity index 100% rename from packages/ponder/src/referralInteractions.ts rename to packages/ponder/src/interactions/referralInteractions.ts diff --git a/packages/ponder/src/stats.ts b/packages/ponder/src/interactions/stats.ts similarity index 100% rename from packages/ponder/src/stats.ts rename to packages/ponder/src/interactions/stats.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0621495..9bdd017 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,16 +28,6 @@ importers: version: 5.4.5 packages/erpc: - dependencies: - '@ponder/core': - specifier: ^0.5.0 - version: 0.5.0(@aws-sdk/client-rds-data@3.583.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(@types/node@20.14.9)(hono@4.5.0)(typescript@5.4.5)(viem@1.21.4(typescript@5.4.5)(zod@3.23.8))(zod@3.23.8) - hono: - specifier: ^4.5.0 - version: 4.5.0 - viem: - specifier: ^1.19.9 - version: 1.21.4(typescript@5.4.5)(zod@3.23.8) devDependencies: '@biomejs/biome': specifier: 1.8.3 @@ -61,11 +51,11 @@ importers: packages/ponder: dependencies: '@ponder/core': - specifier: ^0.5.0 - version: 0.5.0(@aws-sdk/client-rds-data@3.583.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(@types/node@20.14.9)(hono@4.5.0)(typescript@5.4.5)(viem@1.21.4(typescript@5.4.5)(zod@3.23.8))(zod@3.23.8) + specifier: ^0.5.2 + version: 0.5.2(@aws-sdk/client-rds-data@3.616.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(@types/node@20.14.9)(hono@4.5.1)(typescript@5.4.5)(viem@1.21.4(typescript@5.4.5)(zod@3.23.8))(zod@3.23.8) hono: - specifier: ^4.5.0 - version: 4.5.0 + specifier: ^4.5.1 + version: 4.5.1 viem: specifier: ^1.19.9 version: 1.21.4(typescript@5.4.5)(zod@3.23.8) @@ -219,6 +209,10 @@ packages: resolution: {integrity: sha512-xBnrVGNmMsTafzlaeZiFUahr3TP4zF2yRnsWzibylbXXIjaGdcLoiskNizo62syCh/8LbgpY6EN34EeYWsfMiw==} engines: {node: '>=16.0.0'} + '@aws-sdk/client-rds-data@3.616.0': + resolution: {integrity: sha512-64p2qyfBGZ5eyDOrBoAuTSnhFE9Qo9cOjFv5Zs2uKsNmC0OaWxJknOiTw0PSR2VuFfR/PdWQbZUqpDusD8/OzQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-s3@3.583.0': resolution: {integrity: sha512-pS7wncugSuIQ8RgtRIE9Dystdmd3mMnjfjiO1iA1UhGXkyAgoJzQ4jH0r+5X+eWmYHYQcfy9fUQXT2gqV3t9GA==} engines: {node: '>=16.0.0'} @@ -963,8 +957,8 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@graphql-tools/executor@1.2.8': - resolution: {integrity: sha512-0qZs/iuRiYRir7bBkA7oN+21wwmSMPQuFK8WcAcxUYJZRhvnlrJ8Nid++PN4OCzTgHPV70GNFyXOajseVCCffA==} + '@graphql-tools/executor@1.3.0': + resolution: {integrity: sha512-e+rmEf/2EO4hDnbkO8mTS2FI+jGUNmYkSDKw5TgPVlO8VOKS+TXmJBK6E9v4Gc/39yVkZsffYfW/R8obJrA0mg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1094,8 +1088,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@ponder/core@0.5.0': - resolution: {integrity: sha512-C8O7MMEs9n1EzGfe6KePFbCwRz1M8SYW+Cw0bHkRB2fzuFT3EwYYS8mlhxeiAYvhNJvM8M95i53JRi3CRsUbZw==} + '@ponder/core@0.5.2': + resolution: {integrity: sha512-tkTfYb0oPUjVdNcLi4kRSFp0dvo+4+f4M/NicJ2bya9aTcpF9S7nKS7fJNpakYyBB0QZnA9YKR62/Oo7G5j8BQ==} engines: {node: '>=18.14'} hasBin: true peerDependencies: @@ -1121,83 +1115,83 @@ packages: '@repeaterjs/repeater@3.0.6': resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==} - '@rollup/rollup-android-arm-eabi@4.18.1': - resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} + '@rollup/rollup-android-arm-eabi@4.19.0': + resolution: {integrity: sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.18.1': - resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} + '@rollup/rollup-android-arm64@4.19.0': + resolution: {integrity: sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.18.1': - resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} + '@rollup/rollup-darwin-arm64@4.19.0': + resolution: {integrity: sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.18.1': - resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} + '@rollup/rollup-darwin-x64@4.19.0': + resolution: {integrity: sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.18.1': - resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} + '@rollup/rollup-linux-arm-gnueabihf@4.19.0': + resolution: {integrity: sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.18.1': - resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} + '@rollup/rollup-linux-arm-musleabihf@4.19.0': + resolution: {integrity: sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.18.1': - resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} + '@rollup/rollup-linux-arm64-gnu@4.19.0': + resolution: {integrity: sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.18.1': - resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} + '@rollup/rollup-linux-arm64-musl@4.19.0': + resolution: {integrity: sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': - resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.19.0': + resolution: {integrity: sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.18.1': - resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} + '@rollup/rollup-linux-riscv64-gnu@4.19.0': + resolution: {integrity: sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.18.1': - resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} + '@rollup/rollup-linux-s390x-gnu@4.19.0': + resolution: {integrity: sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.18.1': - resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} + '@rollup/rollup-linux-x64-gnu@4.19.0': + resolution: {integrity: sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.18.1': - resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} + '@rollup/rollup-linux-x64-musl@4.19.0': + resolution: {integrity: sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.18.1': - resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} + '@rollup/rollup-win32-arm64-msvc@4.19.0': + resolution: {integrity: sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.18.1': - resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} + '@rollup/rollup-win32-ia32-msvc@4.19.0': + resolution: {integrity: sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.18.1': - resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} + '@rollup/rollup-win32-x64-msvc@4.19.0': + resolution: {integrity: sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag==} cpu: [x64] os: [win32] @@ -1236,10 +1230,18 @@ packages: resolution: {integrity: sha512-1Y0XX0Ucyg0LWTfTVLWpmvSRtFRniykUl3dQ0os1sTd03mKDudR6mVyX+2ak1phwPXx2aEWMAAdW52JNi0mc3A==} engines: {node: '>=16.0.0'} + '@smithy/core@2.3.0': + resolution: {integrity: sha512-tvSwf+PF5uurExeJsl+sSNn4bPsYShL86fJ/wcj63cioJ0IF131BxC5QxX8qkIISk7Pr7g2+UJH9ib4cCafvqw==} + engines: {node: '>=16.0.0'} + '@smithy/credential-provider-imds@3.1.4': resolution: {integrity: sha512-NKyH01m97Xa5xf3pB2QOF3lnuE8RIK0hTVNU5zvZAwZU8uspYO4DHQVlK+Y5gwSrujTfHvbfd1D9UFJAc0iYKQ==} engines: {node: '>=16.0.0'} + '@smithy/credential-provider-imds@3.2.0': + resolution: {integrity: sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==} + engines: {node: '>=16.0.0'} + '@smithy/eventstream-codec@3.0.0': resolution: {integrity: sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==} @@ -1265,6 +1267,9 @@ packages: '@smithy/fetch-http-handler@3.2.2': resolution: {integrity: sha512-3LaWlBZObyGrOOd7e5MlacnAKEwFBmAeiW/TOj2eR9475Vnq30uS2510+tnKbxrGjROfNdOhQqGo5j3sqLT6bA==} + '@smithy/fetch-http-handler@3.2.3': + resolution: {integrity: sha512-m4dzQeafWi5KKCCnDwGGHYk9lqcLs9LvlXZRB0J38DMectsEbxdiO/Rx1NaYYMIkath7AnjpR+r0clL+7dwclQ==} + '@smithy/hash-blob-browser@3.0.0': resolution: {integrity: sha512-/Wbpdg+bwJvW7lxR/zpWAc1/x/YkcqguuF2bAzkJrvXriZu1vm8r+PUdE4syiVwQg7PPR2dXpi3CLBb9qRDaVQ==} @@ -1298,10 +1303,18 @@ packages: resolution: {integrity: sha512-wySGje/KfhsnF8YSh9hP16pZcl3C+X6zRsvSfItQGvCyte92LliilU3SD0nR7kTlxnAJwxY8vE/k4Eoezj847Q==} engines: {node: '>=16.0.0'} + '@smithy/middleware-content-length@3.0.5': + resolution: {integrity: sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-endpoint@3.0.5': resolution: {integrity: sha512-V4acqqrh5tDxUEGVTOgf2lYMZqPQsoGntCrjrJZEeBzEzDry2d2vcI1QCXhGltXPPY+BMc6eksZMguA9fIY8vA==} engines: {node: '>=16.0.0'} + '@smithy/middleware-endpoint@3.1.0': + resolution: {integrity: sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-retry@1.1.0': resolution: {integrity: sha512-lINKYxIvT+W20YFOtHBKeGm7npuJg0/YCoShttU7fVpsmU+a2rdb9zrJn1MHqWfUL6DhTAWGa0tH2O7l4XrDcw==} engines: {node: '>=14.0.0'} @@ -1310,6 +1323,10 @@ packages: resolution: {integrity: sha512-/TIRWmhwMpv99JCGuMhJPnH7ggk/Lah7s/uNDyr7faF02BxNsyD/fz9Tw7pgCf9tYOKgjimm2Qml1Aq1pbkt6g==} engines: {node: '>=16.0.0'} + '@smithy/middleware-retry@3.0.12': + resolution: {integrity: sha512-CncrlzNiBzuZZYLJ49H4dC6FEz62hnv0Y0nJyl/oZ73FX/9CDHWkIRD4ZOf5ntB6QyYWx0G3mXAOHOcM5omlLg==} + engines: {node: '>=16.0.0'} + '@smithy/middleware-serde@3.0.3': resolution: {integrity: sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==} engines: {node: '>=16.0.0'} @@ -1334,6 +1351,10 @@ packages: resolution: {integrity: sha512-UiKZm8KHb/JeOPzHZtRUfyaRDO1KPKPpsd7iplhiwVGOeVdkiVJ5bVe7+NhWREMOKomrDIDdSZyglvMothLg0Q==} engines: {node: '>=16.0.0'} + '@smithy/node-http-handler@3.1.4': + resolution: {integrity: sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==} + engines: {node: '>=16.0.0'} + '@smithy/property-provider@3.1.3': resolution: {integrity: sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==} engines: {node: '>=16.0.0'} @@ -1346,6 +1367,10 @@ packages: resolution: {integrity: sha512-fAA2O4EFyNRyYdFLVIv5xMMeRb+3fRKc/Rt2flh5k831vLvUmNFXcydeg7V3UeEhGURJI4c1asmGJBjvmF6j8Q==} engines: {node: '>=16.0.0'} + '@smithy/protocol-http@4.1.0': + resolution: {integrity: sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==} + engines: {node: '>=16.0.0'} + '@smithy/querystring-builder@1.1.0': resolution: {integrity: sha512-gDEi4LxIGLbdfjrjiY45QNbuDmpkwh9DX4xzrR2AzjjXpxwGyfSpbJaYhXARw9p17VH0h9UewnNQXNwaQyYMDA==} engines: {node: '>=14.0.0'} @@ -1386,6 +1411,10 @@ packages: resolution: {integrity: sha512-j32SGgVhv2G9nBTmel9u3OXux8KG20ssxuFakJrEeDug3kqbl1qrGzVLCe+Eib402UDtA0Sp1a4NZ2SEXDBxag==} engines: {node: '>=14.0.0'} + '@smithy/smithy-client@3.1.10': + resolution: {integrity: sha512-OLHJo0DAmhX69YUF3WbNfzzxGIncGdxao+v27o24msdhin2AWTxJMaBQ3iPGfIrWMjy+8YGMXUJ7PrkJlpznTw==} + engines: {node: '>=16.0.0'} + '@smithy/smithy-client@3.1.9': resolution: {integrity: sha512-My2RaInZ4gSwJUPMaiLR/Nk82+c4LlvqpXA+n7lonGYgCZq23Tg+/xFhgmiejJ6XPElYJysTPyV90vKyp17+1g==} engines: {node: '>=16.0.0'} @@ -1444,10 +1473,18 @@ packages: resolution: {integrity: sha512-O3s9DGb3bmRvEKmT8RwvSWK4A9r6svfd+MnJB+UMi9ZcCkAnoRtliulOnGF0qCMkKF9mwk2tkopBBstalPY/vg==} engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-browser@3.0.12': + resolution: {integrity: sha512-5b81UUPKjD61DMg7JBYzkSM1Vny/RfRRhnZYzuWjm25OyrEXsar3RgbbXYR+otdx+wrPR3QmuFtbDZmEgGpwVg==} + engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-node@3.0.11': resolution: {integrity: sha512-qd4a9qtyOa/WY14aHHOkMafhh9z8D2QTwlcBoXMTPnEwtcY+xpe1JyFm9vya7VsB8hHsfn3XodEtwqREiu4ygQ==} engines: {node: '>= 10.0.0'} + '@smithy/util-defaults-mode-node@3.0.12': + resolution: {integrity: sha512-g2NdtGDN67PepBs0t/mkrlQ2nVkhKUDJZCNmEJIarzYq2sK4mKO9t61Nzlv+gHEEC3ESfRaMCC/Ol3ZfCZYg7Q==} + engines: {node: '>= 10.0.0'} + '@smithy/util-endpoints@2.0.5': resolution: {integrity: sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==} engines: {node: '>=16.0.0'} @@ -1492,6 +1529,10 @@ packages: resolution: {integrity: sha512-EhRnVvl3AhoHAT2rGQ5o+oSDRM/BUSMPLZZdRJZLcNVUsFAjOs4vHaPdNQivTSzRcFxf5DA4gtO46WWU2zimaw==} engines: {node: '>=16.0.0'} + '@smithy/util-stream@3.1.2': + resolution: {integrity: sha512-08zDzB7BqvybHfZKnav5lL1UniFDK6o6nZ3OWp60PKsi/na2LpU6OX8MCtDNVaPBpKpc8EH26fvFhNT6wvMlbw==} + engines: {node: '>=16.0.0'} + '@smithy/util-uri-escape@1.1.0': resolution: {integrity: sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==} engines: {node: '>=14.0.0'} @@ -1555,15 +1596,15 @@ packages: '@whatwg-node/node-fetch@0.3.6': resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} - '@whatwg-node/node-fetch@0.5.11': - resolution: {integrity: sha512-LS8tSomZa3YHnntpWt3PP43iFEEl6YeIsvDakczHBKlay5LdkXFr8w7v8H6akpG5nRrzydyB0k1iE2eoL6aKIQ==} + '@whatwg-node/node-fetch@0.5.14': + resolution: {integrity: sha512-J/IQ0Hrb56sMPb3G42Wzrm9fu8+bHnb8lk7DkJ0XX7JCkSxvPEn1MmkLy7zntdbXs1gohYW42mDck0LzcjrMig==} engines: {node: '>=16.0.0'} '@whatwg-node/server@0.7.7': resolution: {integrity: sha512-aHURgNDFm/48WVV3vhTMfnEKCYwYgdaRdRhZsQZx4UVFjGGkGay7Ys0+AYu9QT/jpoImv2oONkstoTMUprDofg==} - '@whatwg-node/server@0.9.36': - resolution: {integrity: sha512-KT9qKLmbuWSuFv0Vg4JyK2vN2+vSuQPeEa25xpndYFROAIZntYe7e2BlWAk9l7IrgnV+M4bCVhjrAwwRsaCeiA==} + '@whatwg-node/server@0.9.38': + resolution: {integrity: sha512-b56uD1p6IjLivYmB1iBzUT/rmTxdSidiEFbozPg+gLeAcBAzwIC8xg33MDeGKvXTXUh/gLG83/TAHuC6hPwZmw==} engines: {node: '>=16.0.0'} abitype@0.10.3: @@ -2459,8 +2500,8 @@ packages: help-me@3.0.0: resolution: {integrity: sha512-hx73jClhyk910sidBB7ERlnhMlFsJJIBqSVMFDwPN8o2v9nmp5KgLq1Xz1Bf1fCMMZ6mPrX159iG0VLy/fPMtQ==} - hono@4.5.0: - resolution: {integrity: sha512-ZbezypZfn4odyApjCCv+Fw5OgweBqRLA/EsMyc4FUknFvBJcBIKhHy4sqmD1rWpBc/3wUlaQ6tqOPjk36R1ckg==} + hono@4.5.1: + resolution: {integrity: sha512-6q8AugoWG5wlrjdGG8OFFiqEsPlPGjODjUik48sEJeko4Tae1UsLS2vUiYHLEJx1gJvOZa4BWkQC+urwDmkEvQ==} engines: {node: '>=16.0.0'} http-errors@2.0.0: @@ -3032,8 +3073,8 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.4.40: + resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} engines: {node: ^10 || ^12 || >=14} postgres-array@2.0.0: @@ -3182,8 +3223,8 @@ packages: resolution: {integrity: sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ==} engines: {node: '>=18.0'} - rollup@4.18.1: - resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} + rollup@4.19.0: + resolution: {integrity: sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4259,6 +4300,53 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-rds-data@3.616.0(aws-crt@1.21.3)': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-sso-oidc': 3.616.0(@aws-sdk/client-sts@3.616.0(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/client-sts': 3.616.0(aws-crt@1.21.3) + '@aws-sdk/core': 3.616.0 + '@aws-sdk/credential-provider-node': 3.616.0(@aws-sdk/client-sso-oidc@3.616.0(@aws-sdk/client-sts@3.616.0(aws-crt@1.21.3))(aws-crt@1.21.3))(@aws-sdk/client-sts@3.616.0(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/middleware-host-header': 3.616.0 + '@aws-sdk/middleware-logger': 3.609.0 + '@aws-sdk/middleware-recursion-detection': 3.616.0 + '@aws-sdk/middleware-user-agent': 3.616.0 + '@aws-sdk/region-config-resolver': 3.614.0 + '@aws-sdk/types': 3.609.0 + '@aws-sdk/util-endpoints': 3.614.0 + '@aws-sdk/util-user-agent-browser': 3.609.0 + '@aws-sdk/util-user-agent-node': 3.614.0(aws-crt@1.21.3) + '@smithy/config-resolver': 3.0.5 + '@smithy/core': 2.3.0 + '@smithy/fetch-http-handler': 3.2.3 + '@smithy/hash-node': 3.0.3 + '@smithy/invalid-dependency': 3.0.3 + '@smithy/middleware-content-length': 3.0.5 + '@smithy/middleware-endpoint': 3.1.0 + '@smithy/middleware-retry': 3.0.12 + '@smithy/middleware-serde': 3.0.3 + '@smithy/middleware-stack': 3.0.3 + '@smithy/node-config-provider': 3.1.4 + '@smithy/node-http-handler': 3.1.4 + '@smithy/protocol-http': 4.1.0 + '@smithy/smithy-client': 3.1.10 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.12 + '@smithy/util-defaults-mode-node': 3.0.12 + '@smithy/util-endpoints': 2.0.5 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.3 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 + transitivePeerDependencies: + - aws-crt + optional: true + '@aws-sdk/client-s3@3.583.0(aws-crt@1.21.3)': dependencies: '@aws-crypto/sha1-browser': 3.0.0 @@ -4374,9 +4462,9 @@ snapshots: dependencies: '@aws-crypto/sha256-browser': 3.0.0 '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/client-sts': 3.583.0(aws-crt@1.21.3) '@aws-sdk/core': 3.582.0 - '@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3) + '@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) '@aws-sdk/middleware-host-header': 3.577.0 '@aws-sdk/middleware-logger': 3.577.0 '@aws-sdk/middleware-recursion-detection': 3.577.0 @@ -4546,52 +4634,6 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)': - dependencies: - '@aws-crypto/sha256-browser': 3.0.0 - '@aws-crypto/sha256-js': 3.0.0 - '@aws-sdk/client-sso-oidc': 3.583.0(aws-crt@1.21.3) - '@aws-sdk/core': 3.582.0 - '@aws-sdk/credential-provider-node': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3) - '@aws-sdk/middleware-host-header': 3.577.0 - '@aws-sdk/middleware-logger': 3.577.0 - '@aws-sdk/middleware-recursion-detection': 3.577.0 - '@aws-sdk/middleware-user-agent': 3.583.0 - '@aws-sdk/region-config-resolver': 3.577.0 - '@aws-sdk/types': 3.577.0 - '@aws-sdk/util-endpoints': 3.583.0 - '@aws-sdk/util-user-agent-browser': 3.577.0 - '@aws-sdk/util-user-agent-node': 3.577.0(aws-crt@1.21.3) - '@smithy/config-resolver': 3.0.5 - '@smithy/core': 2.2.8 - '@smithy/fetch-http-handler': 3.2.2 - '@smithy/hash-node': 3.0.3 - '@smithy/invalid-dependency': 3.0.3 - '@smithy/middleware-content-length': 3.0.4 - '@smithy/middleware-endpoint': 3.0.5 - '@smithy/middleware-retry': 3.0.11 - '@smithy/middleware-serde': 3.0.3 - '@smithy/middleware-stack': 3.0.3 - '@smithy/node-config-provider': 3.1.4 - '@smithy/node-http-handler': 3.1.3 - '@smithy/protocol-http': 4.0.4 - '@smithy/smithy-client': 3.1.9 - '@smithy/types': 3.3.0 - '@smithy/url-parser': 3.0.3 - '@smithy/util-base64': 3.0.0 - '@smithy/util-body-length-browser': 3.0.0 - '@smithy/util-body-length-node': 3.0.0 - '@smithy/util-defaults-mode-browser': 3.0.11 - '@smithy/util-defaults-mode-node': 3.0.11 - '@smithy/util-endpoints': 2.0.5 - '@smithy/util-middleware': 3.0.3 - '@smithy/util-retry': 3.0.3 - '@smithy/util-utf8': 3.0.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3)': dependencies: '@aws-crypto/sha256-browser': 3.0.0 @@ -4755,23 +4797,6 @@ snapshots: '@smithy/util-stream': 3.1.1 tslib: 2.6.3 - '@aws-sdk/credential-provider-ini@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3)': - dependencies: - '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) - '@aws-sdk/credential-provider-env': 3.577.0 - '@aws-sdk/credential-provider-process': 3.577.0 - '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) - '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)) - '@aws-sdk/types': 3.577.0 - '@smithy/credential-provider-imds': 3.1.4 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - aws-crt - '@aws-sdk/credential-provider-ini@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)': dependencies: '@aws-sdk/client-sts': 3.583.0(aws-crt@1.21.3) @@ -4824,25 +4849,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-node@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3)': - dependencies: - '@aws-sdk/credential-provider-env': 3.577.0 - '@aws-sdk/credential-provider-http': 3.582.0 - '@aws-sdk/credential-provider-ini': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))(aws-crt@1.21.3) - '@aws-sdk/credential-provider-process': 3.577.0 - '@aws-sdk/credential-provider-sso': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) - '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)) - '@aws-sdk/types': 3.577.0 - '@smithy/credential-provider-imds': 3.1.4 - '@smithy/property-provider': 3.1.3 - '@smithy/shared-ini-file-loader': 3.1.4 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@aws-sdk/client-sso-oidc' - - '@aws-sdk/client-sts' - - aws-crt - '@aws-sdk/credential-provider-node@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3)': dependencies: '@aws-sdk/credential-provider-env': 3.577.0 @@ -4955,14 +4961,6 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3))': - dependencies: - '@aws-sdk/client-sts': 3.583.0(@aws-sdk/client-sso-oidc@3.583.0(aws-crt@1.21.3))(aws-crt@1.21.3) - '@aws-sdk/types': 3.577.0 - '@smithy/property-provider': 3.1.3 - '@smithy/types': 3.3.0 - tslib: 2.6.3 - '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.583.0(aws-crt@1.21.3))': dependencies: '@aws-sdk/client-sts': 3.583.0(aws-crt@1.21.3) @@ -5643,7 +5641,7 @@ snapshots: tslib: 2.6.3 value-or-promise: 1.0.12 - '@graphql-tools/executor@1.2.8(graphql@16.9.0)': + '@graphql-tools/executor@1.3.0(graphql@16.9.0)': dependencies: '@graphql-tools/utils': 10.3.2(graphql@16.9.0) '@graphql-typed-document-node/core': 3.2.0(graphql@16.9.0) @@ -5807,7 +5805,7 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@ponder/core@0.5.0(@aws-sdk/client-rds-data@3.583.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(@types/node@20.14.9)(hono@4.5.0)(typescript@5.4.5)(viem@1.21.4(typescript@5.4.5)(zod@3.23.8))(zod@3.23.8)': + '@ponder/core@0.5.2(@aws-sdk/client-rds-data@3.616.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(@types/node@20.14.9)(hono@4.5.1)(typescript@5.4.5)(viem@1.21.4(typescript@5.4.5)(zod@3.23.8))(zod@3.23.8)': dependencies: '@babel/code-frame': 7.24.7 '@commander-js/extra-typings': 12.1.0(commander@12.1.0) @@ -5823,13 +5821,13 @@ snapshots: dataloader: 2.2.2 detect-package-manager: 3.0.2 dotenv: 16.4.5 - drizzle-orm: 0.31.4(@aws-sdk/client-rds-data@3.583.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(better-sqlite3@11.1.2)(kysely@0.26.3)(pg@8.12.0)(react@18.3.1) + drizzle-orm: 0.31.4(@aws-sdk/client-rds-data@3.616.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(better-sqlite3@11.1.2)(kysely@0.26.3)(pg@8.12.0)(react@18.3.1) emittery: 1.0.3 ethereum-bloom-filters: 1.1.0 glob: 10.4.5 graphql: 16.9.0 graphql-yoga: 5.6.1(graphql@16.9.0) - hono: 4.5.0 + hono: 4.5.1 http-terminator: 3.2.0 ink: 4.4.1(react@18.3.1) kysely: 0.26.3 @@ -5896,52 +5894,52 @@ snapshots: '@repeaterjs/repeater@3.0.6': {} - '@rollup/rollup-android-arm-eabi@4.18.1': + '@rollup/rollup-android-arm-eabi@4.19.0': optional: true - '@rollup/rollup-android-arm64@4.18.1': + '@rollup/rollup-android-arm64@4.19.0': optional: true - '@rollup/rollup-darwin-arm64@4.18.1': + '@rollup/rollup-darwin-arm64@4.19.0': optional: true - '@rollup/rollup-darwin-x64@4.18.1': + '@rollup/rollup-darwin-x64@4.19.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.18.1': + '@rollup/rollup-linux-arm-gnueabihf@4.19.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.18.1': + '@rollup/rollup-linux-arm-musleabihf@4.19.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.18.1': + '@rollup/rollup-linux-arm64-gnu@4.19.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.18.1': + '@rollup/rollup-linux-arm64-musl@4.19.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.19.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.18.1': + '@rollup/rollup-linux-riscv64-gnu@4.19.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.18.1': + '@rollup/rollup-linux-s390x-gnu@4.19.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.18.1': + '@rollup/rollup-linux-x64-gnu@4.19.0': optional: true - '@rollup/rollup-linux-x64-musl@4.18.1': + '@rollup/rollup-linux-x64-musl@4.19.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.18.1': + '@rollup/rollup-win32-arm64-msvc@4.19.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.18.1': + '@rollup/rollup-win32-ia32-msvc@4.19.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.18.1': + '@rollup/rollup-win32-x64-msvc@4.19.0': optional: true '@scure/base@1.1.6': {} @@ -6002,6 +6000,18 @@ snapshots: '@smithy/util-middleware': 3.0.3 tslib: 2.6.3 + '@smithy/core@2.3.0': + dependencies: + '@smithy/middleware-endpoint': 3.1.0 + '@smithy/middleware-retry': 3.0.12 + '@smithy/middleware-serde': 3.0.3 + '@smithy/protocol-http': 4.1.0 + '@smithy/smithy-client': 3.1.10 + '@smithy/types': 3.3.0 + '@smithy/util-middleware': 3.0.3 + tslib: 2.6.3 + optional: true + '@smithy/credential-provider-imds@3.1.4': dependencies: '@smithy/node-config-provider': 3.1.4 @@ -6010,6 +6020,15 @@ snapshots: '@smithy/url-parser': 3.0.3 tslib: 2.6.3 + '@smithy/credential-provider-imds@3.2.0': + dependencies: + '@smithy/node-config-provider': 3.1.4 + '@smithy/property-provider': 3.1.3 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + tslib: 2.6.3 + optional: true + '@smithy/eventstream-codec@3.0.0': dependencies: '@aws-crypto/crc32': 3.0.0 @@ -6056,6 +6075,15 @@ snapshots: '@smithy/util-base64': 3.0.0 tslib: 2.6.3 + '@smithy/fetch-http-handler@3.2.3': + dependencies: + '@smithy/protocol-http': 4.1.0 + '@smithy/querystring-builder': 3.0.3 + '@smithy/types': 3.3.0 + '@smithy/util-base64': 3.0.0 + tslib: 2.6.3 + optional: true + '@smithy/hash-blob-browser@3.0.0': dependencies: '@smithy/chunked-blob-reader': 3.0.0 @@ -6105,6 +6133,13 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 + '@smithy/middleware-content-length@3.0.5': + dependencies: + '@smithy/protocol-http': 4.1.0 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + optional: true + '@smithy/middleware-endpoint@3.0.5': dependencies: '@smithy/middleware-serde': 3.0.3 @@ -6115,6 +6150,17 @@ snapshots: '@smithy/util-middleware': 3.0.3 tslib: 2.6.3 + '@smithy/middleware-endpoint@3.1.0': + dependencies: + '@smithy/middleware-serde': 3.0.3 + '@smithy/node-config-provider': 3.1.4 + '@smithy/shared-ini-file-loader': 3.1.4 + '@smithy/types': 3.3.0 + '@smithy/url-parser': 3.0.3 + '@smithy/util-middleware': 3.0.3 + tslib: 2.6.3 + optional: true + '@smithy/middleware-retry@1.1.0': dependencies: '@smithy/protocol-http': 1.2.0 @@ -6137,6 +6183,19 @@ snapshots: tslib: 2.6.3 uuid: 9.0.1 + '@smithy/middleware-retry@3.0.12': + dependencies: + '@smithy/node-config-provider': 3.1.4 + '@smithy/protocol-http': 4.1.0 + '@smithy/service-error-classification': 3.0.3 + '@smithy/smithy-client': 3.1.10 + '@smithy/types': 3.3.0 + '@smithy/util-middleware': 3.0.3 + '@smithy/util-retry': 3.0.3 + tslib: 2.6.3 + uuid: 9.0.1 + optional: true + '@smithy/middleware-serde@3.0.3': dependencies: '@smithy/types': 3.3.0 @@ -6174,6 +6233,15 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 + '@smithy/node-http-handler@3.1.4': + dependencies: + '@smithy/abort-controller': 3.1.1 + '@smithy/protocol-http': 4.1.0 + '@smithy/querystring-builder': 3.0.3 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + optional: true + '@smithy/property-provider@3.1.3': dependencies: '@smithy/types': 3.3.0 @@ -6189,6 +6257,12 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 + '@smithy/protocol-http@4.1.0': + dependencies: + '@smithy/types': 3.3.0 + tslib: 2.6.3 + optional: true + '@smithy/querystring-builder@1.1.0': dependencies: '@smithy/types': 1.2.0 @@ -6254,6 +6328,16 @@ snapshots: '@smithy/util-stream': 1.1.0 tslib: 2.6.3 + '@smithy/smithy-client@3.1.10': + dependencies: + '@smithy/middleware-endpoint': 3.1.0 + '@smithy/middleware-stack': 3.0.3 + '@smithy/protocol-http': 4.1.0 + '@smithy/types': 3.3.0 + '@smithy/util-stream': 3.1.2 + tslib: 2.6.3 + optional: true + '@smithy/smithy-client@3.1.9': dependencies: '@smithy/middleware-endpoint': 3.0.5 @@ -6331,6 +6415,15 @@ snapshots: bowser: 2.11.0 tslib: 2.6.3 + '@smithy/util-defaults-mode-browser@3.0.12': + dependencies: + '@smithy/property-provider': 3.1.3 + '@smithy/smithy-client': 3.1.10 + '@smithy/types': 3.3.0 + bowser: 2.11.0 + tslib: 2.6.3 + optional: true + '@smithy/util-defaults-mode-node@3.0.11': dependencies: '@smithy/config-resolver': 3.0.5 @@ -6341,6 +6434,17 @@ snapshots: '@smithy/types': 3.3.0 tslib: 2.6.3 + '@smithy/util-defaults-mode-node@3.0.12': + dependencies: + '@smithy/config-resolver': 3.0.5 + '@smithy/credential-provider-imds': 3.2.0 + '@smithy/node-config-provider': 3.1.4 + '@smithy/property-provider': 3.1.3 + '@smithy/smithy-client': 3.1.10 + '@smithy/types': 3.3.0 + tslib: 2.6.3 + optional: true + '@smithy/util-endpoints@2.0.5': dependencies: '@smithy/node-config-provider': 3.1.4 @@ -6406,6 +6510,18 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.6.3 + '@smithy/util-stream@3.1.2': + dependencies: + '@smithy/fetch-http-handler': 3.2.3 + '@smithy/node-http-handler': 3.1.4 + '@smithy/types': 3.3.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.3 + optional: true + '@smithy/util-uri-escape@1.1.0': dependencies: tslib: 2.6.3 @@ -6471,7 +6587,7 @@ snapshots: '@whatwg-node/fetch@0.9.18': dependencies: - '@whatwg-node/node-fetch': 0.5.11 + '@whatwg-node/node-fetch': 0.5.14 urlpattern-polyfill: 10.0.0 '@whatwg-node/node-fetch@0.3.6': @@ -6482,7 +6598,7 @@ snapshots: fast-url-parser: 1.1.3 tslib: 2.6.3 - '@whatwg-node/node-fetch@0.5.11': + '@whatwg-node/node-fetch@0.5.14': dependencies: '@kamilkisiela/fast-url-parser': 1.1.4 '@whatwg-node/events': 0.1.1 @@ -6495,7 +6611,7 @@ snapshots: '@whatwg-node/fetch': 0.8.8 tslib: 2.6.3 - '@whatwg-node/server@0.9.36': + '@whatwg-node/server@0.9.38': dependencies: '@whatwg-node/fetch': 0.9.18 tslib: 2.6.3 @@ -7032,9 +7148,9 @@ snapshots: dotenv@16.4.5: {} - drizzle-orm@0.31.4(@aws-sdk/client-rds-data@3.583.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(better-sqlite3@11.1.2)(kysely@0.26.3)(pg@8.12.0)(react@18.3.1): + drizzle-orm@0.31.4(@aws-sdk/client-rds-data@3.616.0(aws-crt@1.21.3))(@opentelemetry/api@1.9.0)(better-sqlite3@11.1.2)(kysely@0.26.3)(pg@8.12.0)(react@18.3.1): optionalDependencies: - '@aws-sdk/client-rds-data': 3.583.0(aws-crt@1.21.3) + '@aws-sdk/client-rds-data': 3.616.0(aws-crt@1.21.3) '@opentelemetry/api': 1.9.0 better-sqlite3: 11.1.2 kysely: 0.26.3 @@ -7374,13 +7490,13 @@ snapshots: graphql-yoga@5.6.1(graphql@16.9.0): dependencies: '@envelop/core': 5.0.1 - '@graphql-tools/executor': 1.2.8(graphql@16.9.0) + '@graphql-tools/executor': 1.3.0(graphql@16.9.0) '@graphql-tools/schema': 10.0.4(graphql@16.9.0) '@graphql-tools/utils': 10.3.2(graphql@16.9.0) '@graphql-yoga/logger': 2.0.0 '@graphql-yoga/subscription': 5.0.1 '@whatwg-node/fetch': 0.9.18 - '@whatwg-node/server': 0.9.36 + '@whatwg-node/server': 0.9.38 dset: 3.1.3 graphql: 16.9.0 lru-cache: 10.4.3 @@ -7415,7 +7531,7 @@ snapshots: glob: 7.2.3 readable-stream: 3.6.2 - hono@4.5.0: {} + hono@4.5.1: {} http-errors@2.0.0: dependencies: @@ -7956,7 +8072,7 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss@8.4.39: + postcss@8.4.40: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -8117,26 +8233,26 @@ snapshots: safe-stable-stringify: 2.4.3 semver-compare: 1.0.0 - rollup@4.18.1: + rollup@4.19.0: dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.1 - '@rollup/rollup-android-arm64': 4.18.1 - '@rollup/rollup-darwin-arm64': 4.18.1 - '@rollup/rollup-darwin-x64': 4.18.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 - '@rollup/rollup-linux-arm-musleabihf': 4.18.1 - '@rollup/rollup-linux-arm64-gnu': 4.18.1 - '@rollup/rollup-linux-arm64-musl': 4.18.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 - '@rollup/rollup-linux-riscv64-gnu': 4.18.1 - '@rollup/rollup-linux-s390x-gnu': 4.18.1 - '@rollup/rollup-linux-x64-gnu': 4.18.1 - '@rollup/rollup-linux-x64-musl': 4.18.1 - '@rollup/rollup-win32-arm64-msvc': 4.18.1 - '@rollup/rollup-win32-ia32-msvc': 4.18.1 - '@rollup/rollup-win32-x64-msvc': 4.18.1 + '@rollup/rollup-android-arm-eabi': 4.19.0 + '@rollup/rollup-android-arm64': 4.19.0 + '@rollup/rollup-darwin-arm64': 4.19.0 + '@rollup/rollup-darwin-x64': 4.19.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.19.0 + '@rollup/rollup-linux-arm-musleabihf': 4.19.0 + '@rollup/rollup-linux-arm64-gnu': 4.19.0 + '@rollup/rollup-linux-arm64-musl': 4.19.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.19.0 + '@rollup/rollup-linux-riscv64-gnu': 4.19.0 + '@rollup/rollup-linux-s390x-gnu': 4.19.0 + '@rollup/rollup-linux-x64-gnu': 4.19.0 + '@rollup/rollup-linux-x64-musl': 4.19.0 + '@rollup/rollup-win32-arm64-msvc': 4.19.0 + '@rollup/rollup-win32-ia32-msvc': 4.19.0 + '@rollup/rollup-win32-x64-msvc': 4.19.0 fsevents: 2.3.3 safe-buffer@5.1.2: {} @@ -8573,8 +8689,8 @@ snapshots: vite@5.3.4(@types/node@20.14.9): dependencies: esbuild: 0.21.5 - postcss: 8.4.39 - rollup: 4.18.1 + postcss: 8.4.40 + rollup: 4.19.0 optionalDependencies: '@types/node': 20.14.9 fsevents: 2.3.3 diff --git a/sst.config.ts b/sst.config.ts index 251c54b..4655032 100644 --- a/sst.config.ts +++ b/sst.config.ts @@ -1,6 +1,5 @@ import type { SSTConfig } from "sst"; import { ConfigStack } from "./iac/Config"; -import { ErpcStack } from "./iac/Erpc"; import { IndexerStack } from "./iac/Indexer"; export default {